{"version":3,"sources":["./node_modules/exceljs/dist/exceljs.min.js","./src/$_lazy_route_resource lazy namespace object","./src/app-ribspan/containers/home/home.component.ts","./src/app-ribspan/containers/home/home.component.html","./src/app-ribspan/containers/home/index.ts","./src/app-ribspan/core/UI/cutBeam.manager.ts","./src/app-ribspan/core/UI/cutOut.manager.ts","./src/app-ribspan/core/UI/editLength2.manager.ts","./src/app-ribspan/core/UI/editWall.manager.ts","./src/app-ribspan/core/UI/editWidth2.manager.ts","./src/app-ribspan/core/UI/rakecut.ts","./src/app-ribspan/core/back_flyover/column-and-purlin.manager.ts","./src/app-ribspan/core/back_flyover/dimension.manager.ts","./src/app-ribspan/core/back_flyover/index.ts","./src/app-ribspan/core/back_flyover/roof.manager.ts","./src/app-ribspan/core/base.manager.ts","./src/app-ribspan/core/dimension.manager.ts","./src/app-ribspan/core/eave.manager.ts","./src/app-ribspan/core/existing-roof.manager.ts","./src/app-ribspan/core/existing-wall.manager.ts","./src/app-ribspan/core/existing_building/dimension.manager.ts","./src/app-ribspan/core/existing_building/index.ts","./src/app-ribspan/core/existing_building/post-and-beam.manager.ts","./src/app-ribspan/core/existing_building/roof.manager.ts","./src/app-ribspan/core/fascia.manager.ts","./src/app-ribspan/core/fascia/dimension.manager.ts","./src/app-ribspan/core/fascia/index.ts","./src/app-ribspan/core/fascia/post-and-beam.manager.ts","./src/app-ribspan/core/fascia/roof.manager.ts","./src/app-ribspan/core/flyover/column-and-beam.manager.ts","./src/app-ribspan/core/flyover/dimension.manager.ts","./src/app-ribspan/core/flyover/index.ts","./src/app-ribspan/core/flyover/roof.manager.ts","./src/app-ribspan/core/free_standing/column-and-purlin.manager.ts","./src/app-ribspan/core/free_standing/dimension.manager.ts","./src/app-ribspan/core/free_standing/index.ts","./src/app-ribspan/core/free_standing/roof.manager.ts","./src/app-ribspan/core/gable_fb_existing_building/dimension.manager.ts","./src/app-ribspan/core/gable_fb_existing_building/index.ts","./src/app-ribspan/core/gable_fb_existing_building/post-and-beam.manager.ts","./src/app-ribspan/core/gable_fb_existing_building/roof.manager.ts","./src/app-ribspan/core/gable_fb_fascia/dimension.manager.ts","./src/app-ribspan/core/gable_fb_fascia/index.ts","./src/app-ribspan/core/gable_fb_fascia/post-and-beam.manager.ts","./src/app-ribspan/core/gable_fb_fascia/roof.manager.ts","./src/app-ribspan/core/gable_fb_flyover/column-and-beam.manager.ts","./src/app-ribspan/core/gable_fb_flyover/dimension.manager.ts","./src/app-ribspan/core/gable_fb_flyover/index.ts","./src/app-ribspan/core/gable_fb_flyover/roof.manager.ts","./src/app-ribspan/core/gable_free_standing/column-and-purlin.manager.ts","./src/app-ribspan/core/gable_free_standing/dimension.manager.ts","./src/app-ribspan/core/gable_free_standing/index.ts","./src/app-ribspan/core/gable_free_standing/roof.manager.ts","./src/app-ribspan/core/gable_lr_fascia/dimension.manager.ts","./src/app-ribspan/core/gable_lr_fascia/index.ts","./src/app-ribspan/core/gable_lr_fascia/post-and-beam.manager.ts","./src/app-ribspan/core/gable_lr_fascia/roof.manager.ts","./src/app-ribspan/core/gable_lr_flyover/column-and-beam.manager.ts","./src/app-ribspan/core/gable_lr_flyover/dimension.manager.ts","./src/app-ribspan/core/gable_lr_flyover/index.ts","./src/app-ribspan/core/gable_lr_flyover/roof.manager.ts","./src/app-ribspan/core/geometry.manager.ts","./src/app-ribspan/core/ground.manager.ts","./src/app-ribspan/core/material.manager.ts","./src/app-ribspan/core/objects.ts","./src/app-ribspan/core/polygonUtils.ts","./src/app-ribspan/core/printing2d.manager.ts","./src/app-ribspan/core/selection.manager.ts","./src/app-ribspan/core/ui.manager.ts","./src/app-ribspan/core/ui.ts","./src/app-ribspan/core/utils.ts","./src/app-ribspan/models/ArrowControl.model.ts","./src/app-ribspan/models/ClickControl.model.ts","./src/app-ribspan/models/DeleteControl.model.ts","./src/app-ribspan/models/Dimension.ts","./src/app-ribspan/models/HighlightBox.ts","./src/app-ribspan/models/UpstandBraket.model.ts","./src/app-ribspan/models/base.model.ts","./src/app-ribspan/models/uicontrol.model.ts","./src/app/app.component.ts","./src/app/app.component.html","./src/app/app.config.ts","./src/app/app.constants.ts","./src/app/app.module.ts","./src/app/app.routing.ts","./src/app/component/checkbox-input/checkbox-input.component.ts","./src/app/component/dialog-add-bom/dialog-add-bom.component.ts","./src/app/component/dialog-add-bom/dialog-add-bom.component.html","./src/app/component/dialog-add-cost/dialog-add-cost.component.ts","./src/app/component/dialog-add-cost/dialog-add-cost.component.html","./src/app/component/dialog-bom/dialog-bom.component.ts","./src/app/component/dialog-bom/dialog-bom.component.html","./src/app/component/dialog-confirm/dialog-confirm.component.ts","./src/app/component/dialog-confirm/dialog-confirm.component.html","./src/app/component/dialog-dimension/dialog-dimension.component.ts","./src/app/component/dialog-dimension/dialog-dimension.component.html","./src/app/component/dialog-edit-bay/dialog-edit-bay.component.ts","./src/app/component/dialog-edit-bay/dialog-edit-bay.component.html","./src/app/component/dialog-rakecut/dialog-rakecut.component.ts","./src/app/component/dialog-rakecut/dialog-rakecut.component.html","./src/app/component/dropdown-color-input/dropdown-color-input.component.ts","./src/app/component/dropdown-color-input/dropdown-color-input.component.html","./src/app/component/dropdown-input-custom/dropdown-input-custom.component.ts","./src/app/component/dropdown-input-custom/dropdown-input-custom.component.html","./src/app/component/dropdown-input/dropdown-input.component.ts","./src/app/component/dropdown-input/dropdown-input.component.html","./src/app/component/panel-bom/panel-bom.component.ts","./src/app/component/panel-bom/panel-bom.component.html","./src/app/component/select-input/select-input.component.ts","./src/app/component/select-input/select-input.component.html","./src/app/component/slider-input/slider-input.component.ts","./src/app/component/slider-input/slider-input.component.html","./src/app/component/switch-input/switch-input.component.ts","./src/app/component/toggle-button/toggle-button.component.ts","./src/app/component/toggle-button/toggle-button.component.html","./src/app/containers/home/home.component.ts","./src/app/containers/home/home.component.html","./src/app/containers/home/index.ts","./src/app/containers/login/index.ts","./src/app/containers/login/login.component.ts","./src/app/containers/login/login.component.html","./src/app/core/UI/cutBeam.manager.ts","./src/app/core/UI/cutOut.manager.ts","./src/app/core/UI/editLength2.manager.ts","./src/app/core/UI/editWall.manager.ts","./src/app/core/UI/editWidth2.manager.ts","./src/app/core/UI/rakecut.ts","./src/app/core/back_flyover/column-and-purlin.manager.ts","./src/app/core/back_flyover/dimension.manager.ts","./src/app/core/back_flyover/index.ts","./src/app/core/back_flyover/roof.manager.ts","./src/app/core/base.manager.ts","./src/app/core/dimension.manager.ts","./src/app/core/eave.manager.ts","./src/app/core/existing-roof.manager.ts","./src/app/core/existing-wall.manager.ts","./src/app/core/existing_building/dimension.manager.ts","./src/app/core/existing_building/index.ts","./src/app/core/existing_building/post-and-beam.manager.ts","./src/app/core/existing_building/roof.manager.ts","./src/app/core/fascia.manager.ts","./src/app/core/fascia/dimension.manager.ts","./src/app/core/fascia/index.ts","./src/app/core/fascia/post-and-beam.manager.ts","./src/app/core/fascia/roof.manager.ts","./src/app/core/flyover/column-and-beam.manager.ts","./src/app/core/flyover/dimension.manager.ts","./src/app/core/flyover/index.ts","./src/app/core/flyover/roof.manager.ts","./src/app/core/free_standing/column-and-purlin.manager.ts","./src/app/core/free_standing/dimension.manager.ts","./src/app/core/free_standing/index.ts","./src/app/core/free_standing/roof.manager.ts","./src/app/core/gable_fb_existing_building/dimension.manager.ts","./src/app/core/gable_fb_existing_building/index.ts","./src/app/core/gable_fb_existing_building/post-and-beam.manager.ts","./src/app/core/gable_fb_existing_building/roof.manager.ts","./src/app/core/gable_fb_fascia/dimension.manager.ts","./src/app/core/gable_fb_fascia/index.ts","./src/app/core/gable_fb_fascia/post-and-beam.manager.ts","./src/app/core/gable_fb_fascia/roof.manager.ts","./src/app/core/gable_fb_flyover/column-and-beam.manager.ts","./src/app/core/gable_fb_flyover/dimension.manager.ts","./src/app/core/gable_fb_flyover/index.ts","./src/app/core/gable_fb_flyover/roof.manager.ts","./src/app/core/gable_free_standing/column-and-purlin.manager.ts","./src/app/core/gable_free_standing/dimension.manager.ts","./src/app/core/gable_free_standing/index.ts","./src/app/core/gable_free_standing/roof.manager.ts","./src/app/core/gable_lr_fascia/dimension.manager.ts","./src/app/core/gable_lr_fascia/index.ts","./src/app/core/gable_lr_fascia/post-and-beam.manager.ts","./src/app/core/gable_lr_fascia/roof.manager.ts","./src/app/core/gable_lr_flyover/column-and-beam.manager.ts","./src/app/core/gable_lr_flyover/dimension.manager.ts","./src/app/core/gable_lr_flyover/index.ts","./src/app/core/gable_lr_flyover/roof.manager.ts","./src/app/core/geometry.manager.ts","./src/app/core/ground.manager.ts","./src/app/core/material.manager.ts","./src/app/core/models.ts","./src/app/core/objects.ts","./src/app/core/polygonUtils.ts","./src/app/core/printing2d.manager.ts","./src/app/core/selection.manager.ts","./src/app/core/ui.manager.ts","./src/app/core/ui.ts","./src/app/core/utils.ts","./src/app/helpers/auth.guard.ts","./src/app/helpers/error.interceptor.ts","./src/app/helpers/index.ts","./src/app/helpers/jwt.interceptor.ts","./src/app/libs/DragControls.js","./src/app/models/ArrowControl.model.ts","./src/app/models/ClickControl.model.ts","./src/app/models/DeleteControl.model.ts","./src/app/models/Dimension.ts","./src/app/models/HighlightBox.ts","./src/app/models/UpstandBraket.model.ts","./src/app/models/base.model.ts","./src/app/models/uicontrol.model.ts","./src/app/services/authentication.service.ts","./src/app/services/excel.service.ts","./src/app/services/index.ts","./src/app/services/job.service.ts","./src/app/services/material.service.ts","./src/app/services/price.service.ts","./src/app/services/printing.service.ts","./src/app/services/user.service.ts","./src/environments/environment.ts","./src/main.ts","crypto (ignored)"],"names":[],"mappings":"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","file":"main-es2015.js","sourcesContent":["/*! ExcelJS 02-06-2020 */\n\n\"use strict\";function _createForOfIteratorHelper2(e){if(\"undefined\"==typeof Symbol||null==e[Symbol.iterator]){if(Array.isArray(e)||(e=_unsupportedIterableToArray2(e))){var t=0,r=function(){};return{s:r,n:function(){return t>=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var n,o,i=!0,a=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return i=e.done,e},e:function(e){a=!0,o=e},f:function(){try{i||null==n.return||n.return()}finally{if(a)throw o}}}}function _classCallCheck2(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function _defineProperties(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]?arguments[2]:0;if(n(this,e),r)if(\"string\"==typeof r){var a=i.decodeAddress(r);this.nativeCol=a.col+o,this.nativeColOff=0,this.nativeRow=a.row+o,this.nativeRowOff=0}else void 0!==r.nativeCol?(this.nativeCol=r.nativeCol||0,this.nativeColOff=r.nativeColOff||0,this.nativeRow=r.nativeRow||0,this.nativeRowOff=r.nativeRowOff||0):void 0!==r.col?(this.col=r.col+o,this.row=r.row+o):(this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0);else this.nativeCol=0,this.nativeColOff=0,this.nativeRow=0,this.nativeRowOff=0;this.worksheet=t}var t,r,a;return t=e,a=[{key:\"asInstance\",value:function(t){return t instanceof e||null==t?t:new e(t)}}],(r=[{key:\"col\",get:function(){return this.nativeCol+Math.min(this.colWidth-1,this.nativeColOff)/this.colWidth},set:function(e){this.nativeCol=Math.floor(e),this.nativeColOff=Math.floor((e-this.nativeCol)*this.colWidth)}},{key:\"row\",get:function(){return this.nativeRow+Math.min(this.rowHeight-1,this.nativeRowOff)/this.rowHeight},set:function(e){this.nativeRow=Math.floor(e),this.nativeRowOff=Math.floor((e-this.nativeRow)*this.rowHeight)}},{key:\"colWidth\",get:function(){return this.worksheet&&this.worksheet.getColumn(this.nativeCol+1)&&this.worksheet.getColumn(this.nativeCol+1).isCustomWidth?Math.floor(1e4*this.worksheet.getColumn(this.nativeCol+1).width):64e4}},{key:\"rowHeight\",get:function(){return this.worksheet&&this.worksheet.getRow(this.nativeRow+1)&&this.worksheet.getRow(this.nativeRow+1).height?Math.floor(1e4*this.worksheet.getRow(this.nativeRow+1).height):18e4}},{key:\"model\",get:function(){return{nativeCol:this.nativeCol,nativeColOff:this.nativeColOff,nativeRow:this.nativeRow,nativeRowOff:this.nativeRowOff}},set:function(e){this.nativeCol=e.nativeCol,this.nativeColOff=e.nativeColOff,this.nativeRow=e.nativeRow,this.nativeRowOff=e.nativeRowOff}}])&&o(t.prototype,r),a&&o(t,a),e}();t.exports=a},{\"../utils/col-cache\":17}],3:[function(e,t,r){function n(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function o(e,t){for(var r=0;r0||this.type===e.Types.Merge}},{key:\"master\",get:function(){return this.type===e.Types.Merge?this._value.master:this}},{key:\"isHyperlink\",get:function(){return this._value.type===e.Types.Hyperlink}},{key:\"hyperlink\",get:function(){return this._value.hyperlink}},{key:\"value\",get:function(){return this._value.value},set:function(t){this.type!==e.Types.Merge?(this._value.release(),this._value=S.create(S.getType(t),this,t)):this._value.master.value=t}},{key:\"note\",get:function(){return this._comment&&this._comment.note},set:function(e){this._comment=new f(e)}},{key:\"text\",get:function(){return this._value.toString()}},{key:\"html\",get:function(){return s.escapeHtml(this.text)}},{key:\"formula\",get:function(){return this._value.formula}},{key:\"result\",get:function(){return this._value.result}},{key:\"formulaType\",get:function(){return this._value.formulaType}},{key:\"fullAddress\",get:function(){return{sheetName:this._row.worksheet.name,address:this.address,row:this.row,col:this.col}}},{key:\"name\",get:function(){return this.names[0]},set:function(e){this.names=[e]}},{key:\"names\",get:function(){return this.workbook.definedNames.getNamesEx(this.fullAddress)},set:function(e){var t=this,r=this.workbook.definedNames;r.removeAllNames(this.fullAddress),e.forEach((function(e){r.addEx(t.fullAddress,e)}))}},{key:\"_dataValidations\",get:function(){return this.worksheet.dataValidations}},{key:\"dataValidation\",get:function(){return this._dataValidations.find(this.address)},set:function(e){this._dataValidations.add(this.address,e)}},{key:\"model\",get:function(){var e=this._value.model;return e.style=this.style,this._comment&&(e.comment=this._comment.model),e},set:function(e){if(this._value.release(),this._value=S.create(e.type,this),this._value.model=e,e.comment)switch(e.comment.type){case\"note\":this._comment=f.fromModel(e.comment)}e.style?this.style=e.style:this.style={}}}]),e}();l.Types=u.ValueType;var h=function(){function e(t){n(this,e),this.model={address:t.address,type:l.Types.Null}}return i(e,[{key:\"toCsvString\",value:function(){return\"\"}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return\"\"}},{key:\"value\",get:function(){return null},set:function(e){}},{key:\"type\",get:function(){return l.Types.Null}},{key:\"effectiveType\",get:function(){return l.Types.Null}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),d=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Number,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value.toString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Number}},{key:\"effectiveType\",get:function(){return l.Types.Number}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),p=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.String,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return'\"'.concat(this.model.value.replace(/\"/g,'\"\"'),'\"')}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.String}},{key:\"effectiveType\",get:function(){return l.Types.String}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),y=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.String,value:r}}return i(e,[{key:\"toString\",value:function(){return this.model.value.richText.map((function(e){return e.text})).join(\"\")}},{key:\"toCsvString\",value:function(){return'\"'.concat(this.text.replace(/\"/g,'\"\"'),'\"')}},{key:\"release\",value:function(){}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.RichText}},{key:\"effectiveType\",get:function(){return l.Types.RichText}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),m=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Date,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value.toISOString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Date}},{key:\"effectiveType\",get:function(){return l.Types.Date}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),b=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Hyperlink,text:r?r.text:void 0,hyperlink:r?r.hyperlink:void 0},r&&r.tooltip&&(this.model.tooltip=r.tooltip)}return i(e,[{key:\"toCsvString\",value:function(){return this.model.hyperlink}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.text}},{key:\"value\",get:function(){var e={text:this.model.text,hyperlink:this.model.hyperlink};return this.model.tooltip&&(e.tooltip=this.model.tooltip),e},set:function(e){this.model={text:e.text,hyperlink:e.hyperlink},e.tooltip&&(this.model.tooltip=e.tooltip)}},{key:\"text\",get:function(){return this.model.text},set:function(e){this.model.text=e}},{key:\"hyperlink\",get:function(){return this.model.hyperlink},set:function(e){this.model.hyperlink=e}},{key:\"type\",get:function(){return l.Types.Hyperlink}},{key:\"effectiveType\",get:function(){return l.Types.Hyperlink}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),v=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Merge,master:r?r.address:void 0},this._master=r,r&&r.addMergeRef()}return i(e,[{key:\"isMergedTo\",value:function(e){return e===this._master}},{key:\"toCsvString\",value:function(){return\"\"}},{key:\"release\",value:function(){this._master.releaseMergeRef()}},{key:\"toString\",value:function(){return this.value.toString()}},{key:\"value\",get:function(){return this._master.value},set:function(e){e instanceof l?(this._master&&this._master.releaseMergeRef(),e.addMergeRef(),this._master=e):this._master.value=e}},{key:\"master\",get:function(){return this._master}},{key:\"type\",get:function(){return l.Types.Merge}},{key:\"effectiveType\",get:function(){return this._master.effectiveType}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),g=function(){function e(t,r){n(this,e),this.cell=t,this.model={address:t.address,type:l.Types.Formula,shareType:r?r.shareType:void 0,ref:r?r.ref:void 0,formula:r?r.formula:void 0,sharedFormula:r?r.sharedFormula:void 0,result:r?r.result:void 0}}return i(e,[{key:\"_copyModel\",value:function(e){var t={},r=function(r){var n=e[r];n&&(t[r]=n)};return r(\"formula\"),r(\"result\"),r(\"ref\"),r(\"shareType\"),r(\"sharedFormula\"),t}},{key:\"validate\",value:function(e){switch(S.getType(e)){case l.Types.Null:case l.Types.String:case l.Types.Number:case l.Types.Date:break;case l.Types.Hyperlink:case l.Types.Formula:default:throw new Error(\"Cannot process that type of result value\")}}},{key:\"_getTranslatedFormula\",value:function(){if(!this._translatedFormula&&this.model.sharedFormula){var e=this.cell.worksheet.findCell(this.model.sharedFormula);this._translatedFormula=e&&c(e.formula,e.address,this.model.address)}return this._translatedFormula}},{key:\"toCsvString\",value:function(){return\"\".concat(this.model.result||\"\")}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.result?this.model.result.toString():\"\"}},{key:\"value\",get:function(){return this._copyModel(this.model)},set:function(e){this.model=this._copyModel(e)}},{key:\"dependencies\",get:function(){return{ranges:this.formula.match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g),cells:this.formula.replace(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}:[A-Z]{1,3}\\d{1,4}/g,\"\").match(/([a-zA-Z0-9]+!)?[A-Z]{1,3}\\d{1,4}/g)}}},{key:\"formula\",get:function(){return this.model.formula||this._getTranslatedFormula()},set:function(e){this.model.formula=e}},{key:\"formulaType\",get:function(){return this.model.formula?u.FormulaType.Master:this.model.sharedFormula?u.FormulaType.Shared:u.FormulaType.None}},{key:\"result\",get:function(){return this.model.result},set:function(e){this.model.result=e}},{key:\"type\",get:function(){return l.Types.Formula}},{key:\"effectiveType\",get:function(){var e=this.model.result;return null==e?u.ValueType.Null:e instanceof String||\"string\"==typeof e?u.ValueType.String:\"number\"==typeof e?u.ValueType.Number:e instanceof Date?u.ValueType.Date:e.text&&e.hyperlink?u.ValueType.Hyperlink:e.formula?u.ValueType.Formula:u.ValueType.Null}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),w=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.SharedString,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value.toString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.SharedString}},{key:\"effectiveType\",get:function(){return l.Types.SharedString}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),_=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Boolean,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value?1:0}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Boolean}},{key:\"effectiveType\",get:function(){return l.Types.Boolean}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),k=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.Error,value:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.toString()}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value.error.toString()}},{key:\"value\",get:function(){return this.model.value},set:function(e){this.model.value=e}},{key:\"type\",get:function(){return l.Types.Error}},{key:\"effectiveType\",get:function(){return l.Types.Error}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),x=function(){function e(t,r){n(this,e),this.model={address:t.address,type:l.Types.String,value:JSON.stringify(r),rawValue:r}}return i(e,[{key:\"toCsvString\",value:function(){return this.model.value}},{key:\"release\",value:function(){}},{key:\"toString\",value:function(){return this.model.value}},{key:\"value\",get:function(){return this.model.rawValue},set:function(e){this.model.rawValue=e,this.model.value=JSON.stringify(e)}},{key:\"type\",get:function(){return l.Types.String}},{key:\"effectiveType\",get:function(){return l.Types.String}},{key:\"address\",get:function(){return this.model.address},set:function(e){this.model.address=e}}]),e}(),S={getType:function(e){return null==e?l.Types.Null:e instanceof String||\"string\"==typeof e?l.Types.String:\"number\"==typeof e?l.Types.Number:\"boolean\"==typeof e?l.Types.Boolean:e instanceof Date?l.Types.Date:e.text&&e.hyperlink?l.Types.Hyperlink:e.formula||e.sharedFormula?l.Types.Formula:e.richText?l.Types.RichText:e.sharedString?l.Types.SharedString:e.error?l.Types.Error:l.Types.JSON},types:[{t:l.Types.Null,f:h},{t:l.Types.Number,f:d},{t:l.Types.String,f:p},{t:l.Types.Date,f:m},{t:l.Types.Hyperlink,f:b},{t:l.Types.Formula,f:g},{t:l.Types.Merge,f:v},{t:l.Types.JSON,f:x},{t:l.Types.SharedString,f:w},{t:l.Types.RichText,f:y},{t:l.Types.Boolean,f:_},{t:l.Types.Error,f:k}].reduce((function(e,t){return e[t.t]=t.f,e}),[]),create:function(e,t,r){var n=this.types[e];if(!n)throw new Error(\"Could not create Value of type \".concat(e));return new n(t,r)}};t.exports=l},{\"../utils/col-cache\":17,\"../utils/shared-formula\":20,\"../utils/under-dash\":23,\"./enums\":7,\"./note\":9}],4:[function(e,t,r){function n(e,t){for(var r=0;r=this._worksheet.properties.outlineLevelCol)}},{key:\"isDefault\",get:function(){if(this.isCustomWidth)return!1;if(this.hidden)return!1;if(this.outlineLevel)return!1;var e=this.style;return!e||!(e.font||e.numFmt||e.alignment||e.border||e.fill||e.protection)}},{key:\"headerCount\",get:function(){return this.headers.length}},{key:\"values\",get:function(){var e=[];return this.eachCell((function(t,r){t&&t.type!==i.ValueType.Null&&(e[r]=t.value)})),e},set:function(e){var t=this;if(e){var r=this.number,n=0;e.hasOwnProperty(\"0\")&&(n=1),e.forEach((function(e,o){t._worksheet.getCell(o+n,r).value=e}))}}},{key:\"numFmt\",get:function(){return this.style.numFmt},set:function(e){this._applyStyle(\"numFmt\",e)}},{key:\"font\",get:function(){return this.style.font},set:function(e){this._applyStyle(\"font\",e)}},{key:\"alignment\",get:function(){return this.style.alignment},set:function(e){this._applyStyle(\"alignment\",e)}},{key:\"protection\",get:function(){return this.style.protection},set:function(e){this._applyStyle(\"protection\",e)}},{key:\"border\",get:function(){return this.style.border},set:function(e){this._applyStyle(\"border\",e)}},{key:\"fill\",get:function(){return this.style.fill},set:function(e){this._applyStyle(\"fill\",e)}}])&&n(t.prototype,r),s&&n(t,s),e}();t.exports=s},{\"../utils/col-cache\":17,\"../utils/under-dash\":23,\"./enums\":7}],5:[function(e,t,r){function n(e,t){for(var r=0;rthis.bottom)&&(this.bottom=r),(!this.model.right||n>this.right)&&(this.right=n)}},{key:\"expandRow\",value:function(e){if(e){var t=e.dimensions,r=e.number;t&&this.expand(r,t.min,r,t.max)}}},{key:\"expandToAddress\",value:function(e){var t=i.decodeEx(e);this.expand(t.row,t.col,t.row,t.col)}},{key:\"toString\",value:function(){return this.range}},{key:\"intersects\",value:function(e){return!(e.sheetName&&this.sheetName&&e.sheetName!==this.sheetName||e.bottomthis.bottom||e.rightthis.right)}},{key:\"contains\",value:function(e){var t=i.decodeEx(e);return this.containsEx(t)}},{key:\"containsEx\",value:function(e){return(!e.sheetName||!this.sheetName||e.sheetName===this.sheetName)&&e.row>=this.top&&e.row<=this.bottom&&e.col>=this.left&&e.col<=this.right}},{key:\"forEachAddress\",value:function(e){for(var t=this.left;t<=this.right;t++)for(var r=this.top;r<=this.bottom;r++)e(i.encodeAddress(r,t),r,t)}},{key:\"top\",get:function(){return this.model.top||1},set:function(e){this.model.top=e}},{key:\"left\",get:function(){return this.model.left||1},set:function(e){this.model.left=e}},{key:\"bottom\",get:function(){return this.model.bottom||1},set:function(e){this.model.bottom=e}},{key:\"right\",get:function(){return this.model.right||1},set:function(e){this.model.right=e}},{key:\"sheetName\",get:function(){return this.model.sheetName},set:function(e){this.model.sheetName=e}},{key:\"_serialisedSheetName\",get:function(){var e=this.model.sheetName;return e?/^[a-zA-Z0-9]*$/.test(e)?\"\".concat(e,\"!\"):\"'\".concat(e,\"'!\"):\"\"}},{key:\"tl\",get:function(){return i.n2l(this.left)+this.top}},{key:\"$t$l\",get:function(){return\"$\".concat(i.n2l(this.left),\"$\").concat(this.top)}},{key:\"br\",get:function(){return i.n2l(this.right)+this.bottom}},{key:\"$b$r\",get:function(){return\"$\".concat(i.n2l(this.right),\"$\").concat(this.bottom)}},{key:\"range\",get:function(){return\"\".concat(this._serialisedSheetName+this.tl,\":\").concat(this.br)}},{key:\"$range\",get:function(){return\"\".concat(this._serialisedSheetName+this.$t$l,\":\").concat(this.$b$r)}},{key:\"shortRange\",get:function(){return this.count>1?this.range:this._serialisedSheetName+this.tl}},{key:\"$shortRange\",get:function(){return this.count>1?this.$range:this._serialisedSheetName+this.$t$l}},{key:\"count\",get:function(){return(1+this.bottom-this.top)*(1+this.right-this.left)}}])&&o(t.prototype,r),a&&o(t,a),e}();t.exports=a},{\"./../utils/col-cache\":17}],11:[function(e,t,r){function n(e,t){for(var r=0;r2?n-2:0),i=2;i0)for(a=f;a>=r;a--)(s=this._cells[a-1])?((u=this.getCell(a+c)).value=s.value,u.style=s.style):this._cells[a+c-1]=void 0;for(a=0;ar.col)&&(e=r.col),t0?{min:e,max:t}:null}},{key:\"numFmt\",get:function(){return this.style.numFmt},set:function(e){this._applyStyle(\"numFmt\",e)}},{key:\"font\",get:function(){return this.style.font},set:function(e){this._applyStyle(\"font\",e)}},{key:\"alignment\",get:function(){return this.style.alignment},set:function(e){this._applyStyle(\"alignment\",e)}},{key:\"protection\",get:function(){return this.style.protection},set:function(e){this._applyStyle(\"protection\",e)}},{key:\"border\",get:function(){return this.style.border},set:function(e){this._applyStyle(\"border\",e)}},{key:\"fill\",get:function(){return this.style.fill},set:function(e){this._applyStyle(\"fill\",e)}},{key:\"hidden\",get:function(){return!!this._hidden},set:function(e){this._hidden=e}},{key:\"outlineLevel\",get:function(){return this._outlineLevel||0},set:function(e){this._outlineLevel=e}},{key:\"collapsed\",get:function(){return!!(this._outlineLevel&&this._outlineLevel>=this._worksheet.properties.outlineLevelRow)}},{key:\"model\",get:function(){var e=[],t=0,r=0;return this._cells.forEach((function(n){if(n){var o=n.model;o&&((!t||t>n.col)&&(t=n.col),r0,\"Table must be on valid row\"),n(s>0,\"Table must be on valid col\");var u=this.width,c=this.filterHeight,f=this.tableHeight;t.autoFilterRef=a.encode(i,s,i+c-1,s+u-1),t.tableRef=a.encode(i,s,i+f-1,s+u-1),t.columns.forEach((function(t,o){n(t.name,\"Column \".concat(o,\" must have a name\")),0===o?r(t,\"totalsRowLabel\",\"Total\"):(r(t,\"totalsRowFunction\",\"none\"),t.totalsRowFormula=e.getFormula(t))}))}},{key:\"store\",value:function(){var e=this,t=function(e,t){t&&Object.keys(t).forEach((function(r){e[r]=t[r]}))},r=this.worksheet,n=this.table,o=n.tl,i=o.row,a=o.col,s=0;if(n.headerRow){var u=r.getRow(i+s++);n.columns.forEach((function(e,r){var n=e.style,o=e.name,i=u.getCell(a+r);i.value=o,t(i,n)}))}if(n.rows.forEach((function(e){var o=r.getRow(i+s++);e.forEach((function(e,r){var i=o.getCell(a+r);i.value=e,t(i,n.columns[r].style)}))})),n.totalsRow){var c=r.getRow(i+s++);n.columns.forEach((function(r,n){var o=c.getCell(a+n);if(0===n)o.value=r.totalsRowLabel;else{var i=e.getFormula(r);o.value=i?{formula:r.totalsRowFormula,result:r.totalsRowResult}:null}t(o,r.style)}))}}},{key:\"load\",value:function(e){var t=this,r=this.table,n=r.tl,o=n.row,i=n.col,a=0;if(r.headerRow){var s=e.getRow(o+a++);r.columns.forEach((function(e,t){s.getCell(i+t).value=e.name}))}if(r.rows.forEach((function(t){var r=e.getRow(o+a++);t.forEach((function(e,t){r.getCell(i+t).value=e}))})),r.totalsRow){var u=e.getRow(o+a++);r.columns.forEach((function(e,r){var n=u.getCell(i+r);0===r?n.value=e.totalsRowLabel:t.getFormula(e)&&(n.value={formula:e.totalsRowFormula,result:e.totalsRowResult})}))}}},{key:\"cacheState\",value:function(){this._cache||(this._cache={ref:this.ref,width:this.width,tableHeight:this.tableHeight})}},{key:\"commit\",value:function(){if(this._cache){this.validate();var e=a.decodeAddress(this._cache.ref);if(this.ref!==this._cache.ref)for(var t=0;t1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.rows.splice(e,t)}},{key:\"getColumn\",value:function(e){var t=this.table.columns[e];return new s(this,t,e)}},{key:\"addColumn\",value:function(e,t,r){this.cacheState(),void 0===r?(this.table.columns.push(e),this.table.rows.forEach((function(e,r){e.push(t[r])}))):(this.table.columns.splice(r,0,e),this.table.rows.forEach((function(e,n){e.splice(r,0,t[n])})))}},{key:\"removeColumns\",value:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;this.cacheState(),this.table.columns.splice(e,t),this.table.rows.forEach((function(r){r.splice(e,t)}))}},{key:\"_assign\",value:function(e,t,r){this.cacheState(),e[t]=r}},{key:\"width\",get:function(){return this.table.columns.length}},{key:\"height\",get:function(){return this.table.rows.length}},{key:\"filterHeight\",get:function(){return this.height+(this.table.headerRow?1:0)}},{key:\"tableHeight\",get:function(){return this.filterHeight+(this.table.totalsRow?1:0)}},{key:\"model\",get:function(){return this.table},set:function(e){this.table=e}},{key:\"ref\",get:function(){return this.table.ref},set:function(e){this._assign(this.table,\"ref\",e)}},{key:\"name\",get:function(){return this.table.name},set:function(e){this.table.name=e}},{key:\"displayName\",get:function(){return this.table.displyName||this.table.name}},{key:\"displayNamename\",set:function(e){this.table.displayName=e}},{key:\"headerRow\",get:function(){return this.table.headerRow},set:function(e){this._assign(this.table,\"headerRow\",e)}},{key:\"totalsRow\",get:function(){return this.table.totalsRow},set:function(e){this._assign(this.table,\"totalsRow\",e)}},{key:\"theme\",get:function(){return this.table.style.name},set:function(e){this.table.style.name=e}},{key:\"showFirstColumn\",get:function(){return this.table.style.showFirstColumn},set:function(e){this.table.style.showFirstColumn=e}},{key:\"showLastColumn\",get:function(){return this.table.style.showLastColumn},set:function(e){this.table.style.showLastColumn=e}},{key:\"showRowStripes\",get:function(){return this.table.style.showRowStripes},set:function(e){this.table.style.showRowStripes=e}},{key:\"showColumnStripes\",get:function(){return this.table.style.showColumnStripes},set:function(e){this.table.style.showColumnStripes=e}}]),e}();t.exports=u},{\"./../utils/col-cache\":17}],13:[function(e,t,r){function n(e,t){for(var r=0;r31&&console.warn(\"Worksheet name \".concat(e,\" exceeds 31 chars. This will be truncated\")),e=(e||\"sheet\".concat(r)).substring(0,31),this._worksheets.find((function(t){return t&&t.name.toLowerCase()===e.toLowerCase()})))throw new Error(\"Worksheet name already exists: \".concat(e));t&&(\"string\"==typeof t?(console.trace('tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { argb: \"rbg value\" } }'),t={properties:{tabColor:{argb:t}}}):(t.argb||t.theme||t.indexed)&&(console.trace(\"tabColor argument is now deprecated. Please use workbook.addWorksheet(name, {properties: { tabColor: { ... } }\"),t={properties:{tabColor:t}}));var n=this._worksheets.reduce((function(e,t){return(t&&t.orderNo)>e?t.orderNo:e}),0),i=Object.assign({},t,{id:r,name:e,orderNo:n+1,workbook:this}),a=new o(i);return this._worksheets[r]=a,a}},{key:\"removeWorksheetEx\",value:function(e){delete this._worksheets[e.id]}},{key:\"removeWorksheet\",value:function(e){var t=this.getWorksheet(e);t&&t.destroy()}},{key:\"getWorksheet\",value:function(e){return void 0===e?this._worksheets.find(Boolean):\"number\"==typeof e?this._worksheets[e]:\"string\"==typeof e?this._worksheets.find((function(t){return t&&t.name===e})):void 0}},{key:\"eachSheet\",value:function(e){this.worksheets.forEach((function(t){e(t,t.id)}))}},{key:\"clearThemes\",value:function(){this._themes=void 0}},{key:\"addImage\",value:function(e){var t=this.media.length;return this.media.push(Object.assign({},e,{type:\"image\"})),t}},{key:\"getImage\",value:function(e){return this.media[e]}},{key:\"xlsx\",get:function(){return this._xlsx||(this._xlsx=new a(this)),this._xlsx}},{key:\"csv\",get:function(){return this._csv||(this._csv=new s(this)),this._csv}},{key:\"nextId\",get:function(){for(var e=1;ee.length)&&(t=e.length);for(var r=0,n=new Array(t);rthis._columns.length)for(var r=this._columns.length+1;r<=e;)this._columns.push(new f(this,r++));return this._columns[e-1]}},{key:\"spliceColumns\",value:function(e,t){for(var r=this,n=this._rows,o=n.length,i=arguments.length,a=new Array(i>2?i-2:0),s=2;s0)for(var u=function(n){var o=[e,t];a.forEach((function(e){o.push(e[n]||null)}));var i=r.getRow(n+1);i.splice.apply(i,o)},c=0;c0)for(var p=h;p>=l;p--)this.getColumn(p+f).defn=this.getColumn(p).defn;for(var y=e;y2&&void 0!==arguments[2]&&arguments[2],i=this._rows[e-1],a=new Array(t).fill(i.values);this.spliceRows.apply(this,[e+1,o?0:t].concat(n(a)));for(var s=function(t){var n=r._rows[e+t];n.style=i.style,n.height=i.height,i.eachCell({includeEmpty:!0},(function(e,t){n.getCell(t).style=e.style}))},u=0;u2?o-2:0),a=2;a0)for(s=f;s>=n;s--)(u=this._rows[s-1])?function(){var e=r.getRow(s+c);e.values=u.values,e.style=u.style,e.height=u.height,u.eachCell({includeEmpty:!0},(function(t,r){e.getCell(r).style=t.style}))}():this._rows[s+c-1]=void 0;for(s=0;se.top||o>e.left)&&this.getCell(n,o).merge(r,t);this._merges[r.address]=e}},{key:\"_unMergeMaster\",value:function(e){var t=this._merges[e.address];if(t){for(var r=t.top;r<=t.bottom;r++)for(var n=t.left;n<=t.right;n++)this.getCell(r,n).unmerge();delete this._merges[e.address]}}},{key:\"unMergeCells\",value:function(){for(var e=arguments.length,t=new Array(e),r=0;r3&&void 0!==arguments[3]?arguments[3]:\"shared\",i=s.decode(e),a=i.top,u=i.left,c=i.bottom,f=i.right,l=f-u+1,h=s.encodeAddress(a,u),d=\"shared\"===o;n=\"function\"==typeof r?r:Array.isArray(r)?Array.isArray(r[0])?function(e,t){return r[e-a][t-u]}:function(e,t){return r[(e-a)*l+(t-u)]}:function(){};for(var p=!0,y=a;y<=c;y++)for(var m=u;m<=f;m++)p?(this.getCell(y,m).value={shareType:o,formula:t,ref:e,result:n(y,m)},p=!1):this.getCell(y,m).value=d?{sharedFormula:h,result:n(y,m)}:n(y,m)}},{key:\"addImage\",value:function(e,t){var r={type:\"image\",imageId:e,range:t};this._media.push(new h(this,r))}},{key:\"getImages\",value:function(){return this._media.filter((function(e){return\"image\"===e.type}))}},{key:\"addBackgroundImage\",value:function(e){var t={type:\"background\",imageId:e};this._media.push(new h(this,t))}},{key:\"getBackgroundImageId\",value:function(){var e=this._media.find((function(e){return\"background\"===e.type}));return e&&e.imageId}},{key:\"protect\",value:function(e,t){var r=this;return new Promise((function(n){r.sheetProtection={sheet:!0},t&&\"spinCount\"in t&&(t.spinCount=Number.isFinite(t.spinCount)?Math.round(Math.max(0,t.spinCount)):1e5),e&&(r.sheetProtection.algorithmName=\"SHA-512\",r.sheetProtection.saltValue=y.randomBytes(16).toString(\"base64\"),r.sheetProtection.spinCount=t&&\"spinCount\"in t?t.spinCount:1e5,r.sheetProtection.hashValue=y.convertPasswordToHash(e,\"SHA512\",r.sheetProtection.saltValue,r.sheetProtection.spinCount)),t&&(r.sheetProtection=Object.assign(r.sheetProtection,t),!e&&\"spinCount\"in t&&delete r.sheetProtection.spinCount),n()}))}},{key:\"unprotect\",value:function(){this.sheetProtection=null}},{key:\"addTable\",value:function(e){var t=new d(this,e);return this.tables[e.name]=t,t}},{key:\"getTable\",value:function(e){return this.tables[e]}},{key:\"removeTable\",value:function(e){delete this.tables[e]}},{key:\"getTables\",value:function(){return Object.values(this.tables)}},{key:\"addConditionalFormatting\",value:function(e){this.conditionalFormattings.push(e)}},{key:\"removeConditionalFormatting\",value:function(e){\"number\"==typeof e?this.conditionalFormattings.splice(e,1):this.conditionalFormattings=e instanceof Function?this.conditionalFormattings.filter(e):[]}},{key:\"_parseRows\",value:function(e){var t=this;this._rows=[],e.rows.forEach((function(e){var r=new c(t,e.number);t._rows[r.number-1]=r,r.model=e}))}},{key:\"_parseMergeCells\",value:function(e){var t=this;a.each(e.mergeCells,(function(e){t.mergeCellsWithoutStyle(e)}))}},{key:\"workbook\",get:function(){return this._workbook}},{key:\"dimensions\",get:function(){var e=new u;return this._rows.forEach((function(t){if(t){var r=t.dimensions;r&&e.expand(t.number,r.min,t.number,r.max)}})),e}},{key:\"columns\",get:function(){return this._columns},set:function(e){var t=this;this._headerRowCount=e.reduce((function(e,t){var r=(t.header?1:t.headers&&t.headers.length)||0;return Math.max(e,r)}),0);var r=1,n=this._columns=[];e.forEach((function(e){var o=new f(t,r++,!1);n.push(o),o.defn=e}))}},{key:\"columnCount\",get:function(){var e=0;return this.eachRow((function(t){e=Math.max(e,t.cellCount)})),e}},{key:\"actualColumnCount\",get:function(){var e=[],t=0;return this.eachRow((function(r){r.eachCell((function(r){var n=r.col;e[n]||(e[n]=!0,t++)}))})),t}},{key:\"_lastRowNumber\",get:function(){for(var e=this._rows,t=e.length;t>0&&void 0===e[t-1];)t--;return t}},{key:\"_nextRow\",get:function(){return this._lastRowNumber+1}},{key:\"lastRow\",get:function(){if(this._rows.length)return this._rows[this._rows.length-1]}},{key:\"rowCount\",get:function(){return this._lastRowNumber}},{key:\"actualRowCount\",get:function(){var e=0;return this.eachRow((function(){e++})),e}},{key:\"hasMerges\",get:function(){return a.some(this._merges,Boolean)}},{key:\"tabColor\",get:function(){return console.trace(\"worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor\"),this.properties.tabColor},set:function(e){console.trace(\"worksheet.tabColor property is now deprecated. Please use worksheet.properties.tabColor\"),this.properties.tabColor=e}},{key:\"model\",get:function(){var e={id:this.id,name:this.name,dataValidations:this.dataValidations.model,properties:this.properties,state:this.state,pageSetup:this.pageSetup,headerFooter:this.headerFooter,rowBreaks:this.rowBreaks,views:this.views,autoFilter:this.autoFilter,media:this._media.map((function(e){return e.model})),sheetProtection:this.sheetProtection,tables:Object.values(this.tables).map((function(e){return e.model})),conditionalFormattings:this.conditionalFormattings};e.cols=f.toModel(this.columns);var t=e.rows=[],r=e.dimensions=new u;return this._rows.forEach((function(e){var n=e&&e.model;n&&(r.expand(n.number,n.min,n.number,n.max),t.push(n))})),e.merges=[],a.each(this._merges,(function(t){e.merges.push(t.range)})),e},set:function(e){var t=this;this.name=e.name,this._columns=f.fromModel(this,e.cols),this._parseRows(e),this._parseMergeCells(e),this.dataValidations=new p(e.dataValidations),this.properties=e.properties,this.pageSetup=e.pageSetup,this.headerFooter=e.headerFooter,this.views=e.views,this.autoFilter=e.autoFilter,this._media=e.media.map((function(e){return new h(t,e)})),this.sheetProtection=e.sheetProtection,this.tables=e.tables.reduce((function(e,t){var r=new d;return r.model=t,e[t.name]=r,e}),{}),this.conditionalFormattings=e.conditionalFormattings}}])&&i(t.prototype,r),o&&i(t,o),e}();t.exports=m},{\"../utils/col-cache\":17,\"../utils/encryptor\":18,\"../utils/under-dash\":23,\"./column\":4,\"./data-validations\":5,\"./enums\":7,\"./image\":8,\"./range\":10,\"./row\":11,\"./table\":12}],15:[function(e,t,r){e(\"core-js/modules/es.promise\"),e(\"core-js/modules/es.object.assign\"),e(\"core-js/modules/es.object.keys\"),e(\"regenerator-runtime/runtime\");var n={Workbook:e(\"./doc/workbook\")},o=e(\"./doc/enums\");Object.keys(o).forEach((function(e){n[e]=o[e]})),t.exports=n},{\"./doc/enums\":7,\"./doc/workbook\":13,\"core-js/modules/es.object.assign\":260,\"core-js/modules/es.object.keys\":261,\"core-js/modules/es.promise\":262,\"regenerator-runtime/runtime\":443}],16:[function(e,t,r){function n(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);r=1)for(;a<=26;)t=this._dictionary[a-1],this._n2l[a]=t,this._l2n[t]=a,a++;if(e>=2)for(;a<=702;)n=(r=a-27)%26,o=Math.floor(r/26),t=this._dictionary[o]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++;if(e>=3)for(;a<=16384;)n=(r=a-703)%26,o=Math.floor(r/26)%26,i=Math.floor(r/676),t=this._dictionary[i]+this._dictionary[o]+this._dictionary[n],this._n2l[a]=t,this._l2n[t]=a,a++},l2n:function(e){if(this._l2n[e]||this._fill(e.length),!this._l2n[e])throw new Error(\"Out of bounds. Invalid column letter: \".concat(e));return this._l2n[e]},n2l:function(e){if(e<1||e>16384)throw new Error(\"\".concat(e,\" is out of bounds. Excel supports columns from 1 to 16384\"));return this._n2l[e]||this._fill(this._level(e)),this._n2l[e]},_hash:{},validateAddress:function(e){if(!e.match(/^[A-Z]+\\d+$/))throw new Error(\"Invalid Address: \".concat(e));return!0},decodeAddress:function(e){var t=this._hash[e];if(t)return t;var r,n,o=e.match(/[A-Z]+/);o&&(r=o[0],n=this.l2n(r));var i,a,s=e.match(/\\d+/);s&&(i=s[0],a=parseInt(i,10));var u={address:e=(r||\"\")+(i||\"\"),col:n,row:a,$col$row:\"$\".concat(r||\"\",\"$\").concat(i||\"\")};return n<=100&&a<=100&&(this._hash[e]=u,this._hash[u.$col$row]=u),u},getAddress:function(e,t){if(t){var r=this.n2l(t)+e;return this.decodeAddress(r)}return this.decodeAddress(e)},decode:function(e){var t=e.split(\":\");if(2===t.length){var r=this.decodeAddress(t[0]),n=this.decodeAddress(t[1]),o={top:Math.min(r.row,n.row),left:Math.min(r.col,n.col),bottom:Math.max(r.row,n.row),right:Math.max(r.col,n.col)};return o.tl=this.n2l(o.left)+o.top,o.br=this.n2l(o.right)+o.bottom,o.dimensions=\"\".concat(o.tl,\":\").concat(o.br),o}return this.decodeAddress(e)},decodeEx:function(e){var t=e.match(/(?:(?:(?:'((?:[^']|'')*)')|([^'^ !]*))!)?(.*)/),r=t[1]||t[2],n=t[3],o=n.split(\":\");if(o.length>1){var s=this.decodeAddress(o[0]),u=this.decodeAddress(o[1]),c=Math.min(s.row,u.row),f=Math.min(s.col,u.col),l=Math.max(s.row,u.row),h=Math.max(s.col,u.col);return s=this.n2l(f)+c,u=this.n2l(h)+l,{top:c,left:f,bottom:l,right:h,sheetName:r,tl:{address:s,col:f,row:c,$col$row:\"$\".concat(this.n2l(f),\"$\").concat(c),sheetName:r},br:{address:u,col:h,row:l,$col$row:\"$\".concat(this.n2l(h),\"$\").concat(l),sheetName:r},dimensions:\"\".concat(s,\":\").concat(u)}}if(n.startsWith(\"#\"))return r?{sheetName:r,error:n}:{error:n};var d=this.decodeAddress(n);return r?function(e){for(var t=1;t=o&&c<=a&&f>=i&&f<=s}};t.exports=s},{}],18:[function(e,t,r){(function(r){var n=e(\"crypto\"),o={hash:function(e){for(var t=n.createHash(e),o=arguments.length,i=new Array(o>1?o-1:0),a=1;a=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var n,o,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,o=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw o}}}}function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r3||3===l.length&&l>\"XFD\")return e;var p=n.l2n(l),y=parseInt(d,10);return f||(p+=s.col-a.col),h||(y+=s.row-a.row),(t||\"\")+(f||\"\")+n.n2l(p)+(h||\"\")+y}return e}))}}},{\"./col-cache\":17}],21:[function(e,t,r){(function(r,n){function o(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function i(e){return function(){var t=this,r=arguments;return new Promise((function(n,i){var a=e.apply(t,r);function s(e){o(a,n,i,s,u,\"next\",e)}function u(e){o(a,n,i,s,u,\"throw\",e)}s(void 0)}))}}function a(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function s(e,t){for(var r=0;r=this.length?(t=this.toBuffer(),this.iRead=this.iWrite,t):(t=n.alloc(e),this.buffer.copy(t,0,this.iRead,e),this.iRead+=e,t)}},{key:\"write\",value:function(e,t,r){var n=Math.min(r,this.size-this.iWrite);return e.copy(this.buffer,this.iWrite,t,t+n),this.iWrite+=n,n}},{key:\"length\",get:function(){return this.iWrite-this.iRead}},{key:\"eod\",get:function(){return this.iRead===this.iWrite}},{key:\"full\",get:function(){return this.iWrite===this.size}}]),e}(),m=function(e){e=e||{},this.bufSize=e.bufSize||1048576,this.buffers=[],this.batch=e.batch||!1,this.corked=!1,this.inPos=0,this.outPos=0,this.pipes=[],this.paused=!1,this.encoding=null};f.inherits(m,c.Duplex,{toBuffer:function(){switch(this.buffers.length){case 0:return null;case 1:return this.buffers[0].toBuffer();default:return n.concat(this.buffers.map((function(e){return e.toBuffer()})))}},_getWritableBuffer:function(){if(this.buffers.length){var e=this.buffers[this.buffers.length-1];if(!e.full)return e}var t=new y(this.bufSize);return this.buffers.push(t),t},_pipe:function(e){var t=this;return i(regeneratorRuntime.mark((function r(){var n;return regeneratorRuntime.wrap((function(r){for(;;)switch(r.prev=r.next){case 0:return n=function(t){return new Promise((function(r){t.write(e.toBuffer(),(function(){r()}))}))},r.next=3,Promise.all(t.pipes.map(n));case 3:case\"end\":return r.stop()}}),r)})))()},_writeToBuffers:function(e){for(var t=0,r=e.length;t1;)a._pipe(a.buffers.shift());i.next=29;break;case 21:if(a.corked){i.next=27;break}return i.next=24,a._pipe(s);case 24:o(),i.next=29;break;case 27:a._writeToBuffers(s),r.nextTick(o);case 29:i.next=34;break;case 31:a.paused||a.emit(\"data\",s.toBuffer()),a._writeToBuffers(s),a.emit(\"readable\");case 34:return i.abrupt(\"return\",!0);case 35:case\"end\":return i.stop()}}),i)})))()},cork:function(){this.corked=!0},_flush:function(){if(this.pipes.length)for(;this.buffers.length;)this._pipe(this.buffers.shift())},uncork:function(){this.corked=!1,this._flush()},end:function(e,t,r){var n=this,o=function(e){e?r(e):(n._flush(),n.pipes.forEach((function(e){e.end()})),n.emit(\"finish\"))};e?this.write(e,t,o):o()},read:function(e){var t;if(e){for(t=[];e&&this.buffers.length&&!this.buffers[0].eod;){var r=this.buffers[0],o=r.read(e);e-=o.length,t.push(o),r.eod&&r.full&&this.buffers.shift()}return n.concat(t)}return t=this.buffers.map((function(e){return e.toBuffer()})).filter(Boolean),this.buffers=[],n.concat(t)},setEncoding:function(e){this.encoding=e},pause:function(){this.paused=!0},resume:function(){this.paused=!1},isPaused:function(){return!!this.paused},pipe:function(e){this.pipes.push(e),!this.paused&&this.buffers.length&&this.end()},unpipe:function(e){this.pipes=this.pipes.filter((function(t){return t!==e}))},unshift:function(){throw new Error(\"Not Implemented\")},wrap:function(){throw new Error(\"Not Implemented\")}}),t.exports=m}).call(this,e(\"_process\"),e(\"buffer\").Buffer)},{\"./string-buf\":22,\"./utils\":24,_process:419,buffer:188,\"readable-stream\":442}],22:[function(e,t,r){(function(e){function r(e,t){for(var r=0;r=this._buf.length-4;)this._grow(this._inPos+e.length),t=this._inPos+this._buf.write(e,this._inPos,this._encoding);this._inPos=t}},{key:\"addStringBuf\",value:function(e){e.length&&(this._buffer=void 0,this.length+e.length>this.capacity&&this._grow(this.length+e.length),e._buf.copy(this._buf,this._inPos,0,e.length),this._inPos+=e.length)}},{key:\"length\",get:function(){return this._inPos}},{key:\"capacity\",get:function(){return this._buf.length}},{key:\"buffer\",get:function(){return this._buf}}])&&r(n.prototype,o),i&&r(n,i),t}();t.exports=n}).call(this,e(\"buffer\").Buffer)},{buffer:188}],23:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}var o=Object.prototype.toString,i={each:function(e,t){e&&(Array.isArray(e)?e.forEach(t):Object.keys(e).forEach((function(r){t(e[r],r)})))},some:function(e,t){return!!e&&(Array.isArray(e)?e.some(t):Object.keys(e).some((function(r){return t(e[r],r)})))},every:function(e,t){return!e||(Array.isArray(e)?e.every(t):Object.keys(e).every((function(r){return t(e[r],r)})))},map:function(e,t){return e?Array.isArray(e)?e.map(t):Object.keys(e).map((function(r){return t(e[r],r)})):[]},keyBy:function(e,t){return e.reduce((function(e,r){return e[r[t]]=r,e}),{})},isEqual:function(e,t){var r=n(e),o=n(t),a=Array.isArray(e),s=Array.isArray(t);if(r!==o)return!1;switch(n(e)){case\"object\":return a||s?!(!a||!s)&&(e.length===t.length&&e.every((function(e,r){var n=t[r];return i.isEqual(e,n)}))):i.every(e,(function(e,r){var n=t[r];return i.isEqual(e,n)}));default:return e===t}},escapeHtml:function(e){return e.replace(/&/g,\"&\").replace(//g,\">\").replace(/\"/g,\""\").replace(/'/g,\"'\")},strcmp:function(e,t){return et?1:0},isUndefined:function(e){return\"[object Undefined]\"===o.call(e)},isObject:function(e){return\"[object Object]\"===o.call(e)},deepMerge:function(){var e,t,r,n=arguments[0]||{},o=arguments.length;function a(o,a){e=n[a],r=Array.isArray(o),i.isObject(o)||r?(r?(r=!1,t=e&&Array.isArray(e)?e:[]):t=e&&i.isObject(e)?e:{},n[a]=i.deepMerge(t,o)):i.isUndefined(o)||(n[a]=o)}for(var s=0;s&'\"\\x7F\\x00-\\x08\\x0B-\\x0C\\x0E-\\x1F]/g,(function(e){switch(e){case\"<\":return\"<\";case\">\":return\">\";case\"&\":return\"&\";case\"'\":return\"'\";case'\"':return\""\";default:return\"\"}}))},xmlDecode:function(e){return e.replace(/&([a-z]*);/,(function(e){switch(e){case\"<\":return\"<\";case\">\":return\">\";case\"&\":return\"&\";case\"'\":return\"'\";case\""\":return'\"';default:return e}}))},validInt:function(e){var t=parseInt(e,10);return Number.isNaN(t)?0:t},isDateFmt:function(e){return!!e&&null!==(e=(e=e.replace(/\\[[^\\]]*]/g,\"\")).replace(/\"[^\"]*\"/g,\"\")).match(/[ymdhMsb]+/)},fs:{exists:function(e){return new Promise((function(t){o.access(e,o.constants.F_OK,(function(e){t(!e)}))}))}},toIsoDateString:function(e){return e.toIsoString().subsstr(0,10)}};t.exports=i}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"timers\").setImmediate)},{fs:186,timers:471}],25:[function(e,t,r){function n(e,t){for(var r=0;r\\n\")}},{key:\"openNode\",value:function(e,t){var r=this.tos,n=this._xml;r&&this.open&&n.push(\">\"),this._stack.push(e),n.push(\"<\"),n.push(e),s(n,t),this.leaf=!0,this.open=!0}},{key:\"addAttribute\",value:function(e,t){if(!this.open)throw new Error(\"Cannot write attributes to node if it is not open\");void 0!==t&&a(this._xml,e,t)}},{key:\"addAttributes\",value:function(e){if(!this.open)throw new Error(\"Cannot write attributes to node if it is not open\");s(this._xml,e)}},{key:\"writeText\",value:function(e){var t=this._xml;this.open&&(t.push(\">\"),this.open=!1),this.leaf=!1,t.push(i.xmlEncode(e.toString()))}},{key:\"writeXml\",value:function(e){this.open&&(this._xml.push(\">\"),this.open=!1),this.leaf=!1,this._xml.push(e)}},{key:\"closeNode\",value:function(){var e=this._stack.pop(),t=this._xml;this.leaf?t.push(\"/>\"):(t.push(\"\")),this.open=!1,this.leaf=!1}},{key:\"leafNode\",value:function(e,t,r){this.openNode(e,t),void 0!==r&&this.writeText(r),this.closeNode()}},{key:\"closeAll\",value:function(){for(;this._stack.length;)this.closeNode()}},{key:\"addRollback\",value:function(){return this._rollbacks.push({xml:this._xml.length,stack:this._stack.length,leaf:this.leaf,open:this.open}),this.cursor}},{key:\"commit\",value:function(){this._rollbacks.pop()}},{key:\"rollback\",value:function(){var e=this._rollbacks.pop();this._xml.length>e.xml&&this._xml.splice(e.xml,this._xml.length-e.xml),this._stack.length>e.stack&&this._stack.splice(e.stack,this._stack.length-e.stack),this.leaf=e.leaf,this.open=e.open}},{key:\"tos\",get:function(){return this._stack.length?this._stack[this._stack.length-1]:void 0}},{key:\"cursor\",get:function(){return this._xml.length}},{key:\"xml\",get:function(){return this.closeAll(),this._xml.join(\"\")}}])&&n(t.prototype,r),o&&n(t,o),e}();u.StdDocAttributes={version:\"1.0\",encoding:\"UTF-8\",standalone:\"yes\"},t.exports=u},{\"./under-dash\":23,\"./utils\":24}],26:[function(e,t,r){(function(r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t,r,n,o,i,a){try{var s=e[i](a),u=s.value}catch(e){return void r(e)}s.done?t(u):Promise.resolve(u).then(n,o)}function i(e){return function(){var t=this,r=arguments;return new Promise((function(n,i){var a=e.apply(t,r);function s(e){o(a,n,i,s,u,\"next\",e)}function u(e){o(a,n,i,s,u,\"throw\",e)}s(void 0)}))}}function a(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function s(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[t++]}},e:function(e){throw e},f:r}}throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\")}var n,i,a=!0,s=!1;return{s:function(){n=e[Symbol.iterator]()},n:function(){var e=n.next();return a=e.done,e},e:function(e){s=!0,i=e},f:function(){try{a||null==n.return||n.return()}finally{if(s)throw i}}}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e.toString()}},{key:\"toStringAttribute\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:\"toStringValue\",value:function(e,t){return void 0===e?t:e}},{key:\"toBoolAttribute\",value:function(e,t){var r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(void 0===e){if(r)return t}else if(r||e!==t)return e?\"1\":\"0\"}},{key:\"toBoolValue\",value:function(e,t){return void 0===e?t:\"1\"===e}},{key:\"toIntAttribute\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:\"toIntValue\",value:function(e,t){return void 0===e?t:parseInt(e,10)}},{key:\"toFloatAttribute\",value:function(t,r){var n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return e.toAttribute(t,r,n)}},{key:\"toFloatValue\",value:function(e,t){return void 0===e?t:parseFloat(e)}}],r&&s(t.prototype,r),o&&s(t,o),e}();t.exports=f},{\"../../utils/sax-stream\":19,\"../../utils/xml-stream\":25}],30:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;rthis.maxItems))throw new Error(\"Max \".concat(this.childXform.tag,\" count exceeded\"));return!0}return!1}},{key:\"reconcile\",value:function(e,t){if(e){var r=this.childXform;e.forEach((function(e){r.reconcile(e,t)}))}}}])&&o(r.prototype,n),c&&o(r,c),l}(e(\"./base-xform\"));t.exports=c},{\"./base-xform\":29}],69:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;re.length)&&(t=e.length);for(var r=0,n=new Array(t);re.length)&&(t=e.length);for(var r=0,n=new Array(t);r0\");case\"containsErrors\":return\"ISERROR(\".concat(t,\")\");case\"notContainsErrors\":return\"NOT(ISERROR(\".concat(t,\"))\");default:return}}(t);r&&this.formulaXform.render(e,r),e.closeNode()}},{key:\"renderTimePeriod\",value:function(e,t){e.openNode(this.tag,{type:\"timePeriod\",dxfId:t.dxfId,priority:t.priority,timePeriod:t.timePeriod});var r=function(e){if(e.formulae&&e.formulae[0])return e.formulae[0];var t=new d(e.ref).tl;switch(e.timePeriod){case\"thisWeek\":return\"AND(TODAY()-ROUNDDOWN(\".concat(t,\",0)<=WEEKDAY(TODAY())-1,ROUNDDOWN(\").concat(t,\",0)-TODAY()<=7-WEEKDAY(TODAY()))\");case\"lastWeek\":return\"AND(TODAY()-ROUNDDOWN(\".concat(t,\",0)>=(WEEKDAY(TODAY())),TODAY()-ROUNDDOWN(\").concat(t,\",0)<(WEEKDAY(TODAY())+7))\");case\"nextWeek\":return\"AND(ROUNDDOWN(\".concat(t,\",0)-TODAY()>(7-WEEKDAY(TODAY())),ROUNDDOWN(\").concat(t,\",0)-TODAY()<(15-WEEKDAY(TODAY())))\");case\"yesterday\":return\"FLOOR(\".concat(t,\",1)=TODAY()-1\");case\"today\":return\"FLOOR(\".concat(t,\",1)=TODAY()\");case\"tomorrow\":return\"FLOOR(\".concat(t,\",1)=TODAY()+1\");case\"last7Days\":return\"AND(TODAY()-FLOOR(\".concat(t,\",1)<=6,FLOOR(\").concat(t,\",1)<=TODAY())\");case\"lastMonth\":return\"AND(MONTH(\".concat(t,\")=MONTH(EDATE(TODAY(),0-1)),YEAR(\").concat(t,\")=YEAR(EDATE(TODAY(),0-1)))\");case\"thisMonth\":return\"AND(MONTH(\".concat(t,\")=MONTH(TODAY()),YEAR(\").concat(t,\")=YEAR(TODAY()))\");case\"nextMonth\":return\"AND(MONTH(\".concat(t,\")=MONTH(EDATE(TODAY(),0+1)),YEAR(\").concat(t,\")=YEAR(EDATE(TODAY(),0+1)))\");default:return}}(t);r&&this.formulaXform.render(e,r),e.closeNode()}},{key:\"createNewModel\",value:function(e){var t=e.attributes;return function(e){for(var t=1;te.length)&&(t=e.length);for(var r=0,n=new Array(t);r1||s>1){var f=o.row+(i-1),h=o.col+(s-1);return l({},t.dataValidation,{sqref:\"\".concat(t.address,\":\").concat(y.encodeAddress(f,h))})}return l({},t.dataValidation,{sqref:t.address})}return null})).filter(Boolean)}(t);r.length&&(e.openNode(\"dataValidations\",{count:r.length}),r.forEach((function(t){e.openNode(\"dataValidation\"),\"any\"!==t.type&&(e.addAttribute(\"type\",t.type),t.operator&&\"list\"!==t.type&&\"between\"!==t.operator&&e.addAttribute(\"operator\",t.operator),t.allowBlank&&e.addAttribute(\"allowBlank\",\"1\")),t.showInputMessage&&e.addAttribute(\"showInputMessage\",\"1\"),t.promptTitle&&e.addAttribute(\"promptTitle\",t.promptTitle),t.prompt&&e.addAttribute(\"prompt\",t.prompt),t.showErrorMessage&&e.addAttribute(\"showErrorMessage\",\"1\"),t.errorStyle&&e.addAttribute(\"errorStyle\",t.errorStyle),t.errorTitle&&e.addAttribute(\"errorTitle\",t.errorTitle),t.error&&e.addAttribute(\"error\",t.error),e.addAttribute(\"sqref\",t.sqref),(t.formulae||[]).forEach((function(r,n){e.openNode(\"formula\".concat(n+1)),\"date\"===t.type?e.writeText(p.dateToExcel(new Date(r))):e.writeText(r),e.closeNode()})),e.closeNode()})),e.closeNode())}},{key:\"parseOpen\",value:function(e){switch(e.name){case\"dataValidations\":return this.model={},!0;case\"dataValidation\":this._address=e.attributes.sqref;var t={type:e.attributes.type||\"any\",formulae:[]};switch(e.attributes.type&&g(t,e.attributes,\"allowBlank\"),g(t,e.attributes,\"showInputMessage\"),g(t,e.attributes,\"showErrorMessage\"),t.type){case\"any\":case\"list\":case\"custom\":break;default:v(t,e.attributes,\"operator\",\"between\")}return v(t,e.attributes,\"promptTitle\"),v(t,e.attributes,\"prompt\"),v(t,e.attributes,\"errorStyle\"),v(t,e.attributes,\"errorTitle\"),v(t,e.attributes,\"error\"),this._dataValidation=t,!0;case\"formula1\":case\"formula2\":return this._formula=[],!0;default:return!1}}},{key:\"parseText\",value:function(e){this._formula&&this._formula.push(e)}},{key:\"parseClose\",value:function(e){var t=this;switch(e){case\"dataValidations\":return!1;case\"dataValidation\":return this._dataValidation.formulae&&this._dataValidation.formulae.length||(delete this._dataValidation.formulae,delete this._dataValidation.operator),(this._address.split(/\\s+/g)||[]).forEach((function(e){e.includes(\":\")?new b(e).forEachAddress((function(e){t.model[e]=t._dataValidation})):t.model[e]=t._dataValidation})),!0;case\"formula1\":case\"formula2\":var r=this._formula.join(\"\");switch(this._dataValidation.type){case\"whole\":case\"textLength\":r=parseInt(r,10);break;case\"decimal\":r=parseFloat(r);break;case\"date\":r=p.excelToDate(parseFloat(r))}return this._dataValidation.formulae.push(r),this._formula=void 0,!0;default:return!0}}},{key:\"tag\",get:function(){return\"dataValidations\"}}])&&i(r.prototype,n),f&&i(r,f),m}(m);t.exports=w},{\"../../../doc/range\":10,\"../../../utils/col-cache\":17,\"../../../utils/under-dash\":23,\"../../../utils/utils\":24,\"../base-xform\":29}],91:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r0&&t.max>0&&t.min<=t.max&&e.addAttribute(\"spans\",\"\".concat(t.min,\":\").concat(t.max)),t.styleId&&(e.addAttribute(\"s\",t.styleId),e.addAttribute(\"customFormat\",\"1\")),e.addAttribute(\"x14ac:dyDescent\",\"0.25\"),t.outlineLevel&&e.addAttribute(\"outlineLevel\",t.outlineLevel),t.collapsed&&e.addAttribute(\"collapsed\",\"1\");var n=this.map.c;t.cells.forEach((function(t){n.render(e,t,r)})),e.closeNode()}},{key:\"parseOpen\",value:function(e){if(this.parser)return this.parser.parseOpen(e),!0;if(\"row\"===e.name){this.numRowsSeen+=1;var t=e.attributes.spans?e.attributes.spans.split(\":\").map((function(e){return parseInt(e,10)})):[void 0,void 0],r=this.model={number:parseInt(e.attributes.r,10),min:t[0],max:t[1],cells:[]};return e.attributes.s&&(r.styleId=parseInt(e.attributes.s,10)),!0!==e.attributes.hidden&&\"true\"!==e.attributes.hidden&&1!==e.attributes.hidden&&\"1\"!==e.attributes.hidden||(r.hidden=!0),e.attributes.bestFit&&(r.bestFit=!0),e.attributes.ht&&(r.height=parseFloat(e.attributes.ht)),e.attributes.outlineLevel&&(r.outlineLevel=parseInt(e.attributes.outlineLevel,10)),e.attributes.collapsed&&(r.collapsed=!0),!0}return this.parser=this.map[e.name],!!this.parser&&(this.parser.parseOpen(e),!0)}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser){if(!this.parser.parseClose(e)){if(this.model.cells.push(this.parser.model),this.maxItems&&this.model.cells.length>this.maxItems)throw new Error(\"Max column count exceeded\");this.parser=void 0}return!0}return!1}},{key:\"reconcile\",value:function(e,t){e.style=e.styleId?t.styles.getStyleModel(e.styleId):{},void 0!==e.styleId&&(e.styleId=void 0);var r=this.map.c;e.cells.forEach((function(e){r.reconcile(e,t)}))}},{key:\"tag\",get:function(){return\"row\"}}])&&o(r.prototype,n),c&&o(r,c),h}(c);t.exports=l},{\"../base-xform\":29,\"./cell-xform\":70}],107:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function i(e,t){for(var r=0;r0){var i={Id:o(n),Type:h.Comments,Target:\"../comments\".concat(e.id,\".xml\")};n.push(i);var a={Id:o(n),Type:h.VmlDrawing,Target:\"../drawings/vmlDrawing\".concat(e.id,\".vml\")};n.push(a),e.comments.forEach((function(e){e.refAddress=f.decodeAddress(e.ref)})),t.commentRefs.push({commentName:\"comments\".concat(e.id),vmlDrawing:\"vmlDrawing\".concat(e.id)})}var s,u=[];e.media.forEach((function(i){if(\"background\"===i.type){var a=o(n);s=t.media[i.imageId],n.push({Id:a,Type:h.Image,Target:\"../media/\".concat(s.name,\".\").concat(s.extension)}),e.background={rId:a},e.image=t.media[i.imageId]}else if(\"image\"===i.type){var c=e.drawing;s=t.media[i.imageId],c||(c=e.drawing={rId:o(n),name:\"drawing\".concat(++t.drawingsCount),anchors:[],rels:[]},t.drawings.push(c),n.push({Id:c.rId,Type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\",Target:\"../drawings/\".concat(c.name,\".xml\")}));var f=r.preImageId===i.imageId?u[i.imageId]:u[c.rels.length];f||(f=o(c.rels),u[c.rels.length]=f,c.rels.push({Id:f,Type:\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\",Target:\"../media/\".concat(s.name,\".\").concat(s.extension)}));var l={picture:{rId:f},range:i.range};if(i.hyperlinks&&i.hyperlinks.hyperlink){var d=o(c.rels);u[c.rels.length]=d,l.picture.hyperlinks={tooltip:i.hyperlinks.tooltip,rId:d},c.rels.push({Id:d,Type:h.Hyperlink,Target:i.hyperlinks.hyperlink,TargetMode:\"External\"})}r.preImageId=i.imageId,c.anchors.push(l)}})),e.tables.forEach((function(e){var r=o(n);e.rId=r,n.push({Id:r,Type:h.Table,Target:\"../tables/\".concat(e.target)}),e.columns.forEach((function(e){var r=e.style;r&&(e.dxfId=t.styles.addDxfStyle(r))}))})),this.map.extLst.prepare(e,t)}},{key:\"render\",value:function(e,t){e.openXml(l.StdDocAttributes),e.openNode(\"worksheet\",L.WORKSHEET_ATTRIBUTES);var r=t.properties?{defaultRowHeight:t.properties.defaultRowHeight,dyDescent:t.properties.dyDescent,outlineLevelCol:t.properties.outlineLevelCol,outlineLevelRow:t.properties.outlineLevelRow}:void 0;t.properties&&t.properties.defaultColWidth&&(r.defaultColWidth=t.properties.defaultColWidth);var n={outlineProperties:t.properties&&t.properties.outlineProperties,tabColor:t.properties&&t.properties.tabColor,pageSetup:t.pageSetup&&t.pageSetup.fitToPage?{fitToPage:t.pageSetup.fitToPage}:void 0},o=t.pageSetup&&t.pageSetup.margins,i={showRowColHeaders:t.pageSetup&&t.pageSetup.showRowColHeaders,showGridLines:t.pageSetup&&t.pageSetup.showGridLines,horizontalCentered:t.pageSetup&&t.pageSetup.horizontalCentered,verticalCentered:t.pageSetup&&t.pageSetup.verticalCentered},a=t.sheetProtection;this.map.sheetPr.render(e,n),this.map.dimension.render(e,t.dimensions),this.map.sheetViews.render(e,t.views),this.map.sheetFormatPr.render(e,r),this.map.cols.render(e,t.cols),this.map.sheetData.render(e,t.rows),this.map.sheetProtection.render(e,a),this.map.autoFilter.render(e,t.autoFilter),this.map.mergeCells.render(e,t.mergeCells),this.map.conditionalFormatting.render(e,t.conditionalFormattings),this.map.dataValidations.render(e,t.dataValidations),this.map.hyperlinks.render(e,t.hyperlinks),this.map.printOptions.render(e,i),this.map.pageMargins.render(e,o),this.map.pageSetup.render(e,t.pageSetup),this.map.headerFooter.render(e,t.headerFooter),this.map.rowBreaks.render(e,t.rowBreaks),this.map.drawing.render(e,t.drawing),this.map.picture.render(e,t.background),this.map.tableParts.render(e,t.tables),this.map.extLst.render(e,t),t.rels&&t.rels.forEach((function(t){t.Type===h.VmlDrawing&&e.leafNode(\"legacyDrawing\",{\"r:id\":t.Id})})),e.closeNode()}},{key:\"parseOpen\",value:function(e){return this.parser?(this.parser.parseOpen(e),!0):\"worksheet\"===e.name?(c.each(this.map,(function(e){e.reset()})),!0):(this.parser=this.map[e.name],this.parser&&this.parser.parseOpen(e),!0)}},{key:\"parseText\",value:function(e){this.parser&&this.parser.parseText(e)}},{key:\"parseClose\",value:function(e){if(this.parser)return this.parser.parseClose(e)||(this.parser=void 0),!0;switch(e){case\"worksheet\":var t=this.map.sheetFormatPr.model||{};this.map.sheetPr.model&&this.map.sheetPr.model.tabColor&&(t.tabColor=this.map.sheetPr.model.tabColor),this.map.sheetPr.model&&this.map.sheetPr.model.outlineProperties&&(t.outlineProperties=this.map.sheetPr.model.outlineProperties);var r={fitToPage:this.map.sheetPr.model&&this.map.sheetPr.model.pageSetup&&this.map.sheetPr.model.pageSetup.fitToPage||!1,margins:this.map.pageMargins.model},n=Object.assign(r,this.map.pageSetup.model,this.map.printOptions.model),o=B(this.map.conditionalFormatting.model,this.map.extLst.model&&this.map.extLst.model[\"x14:conditionalFormattings\"]);return this.model={dimensions:this.map.dimension.model,cols:this.map.cols.model,rows:this.map.sheetData.model,mergeCells:this.map.mergeCells.model,hyperlinks:this.map.hyperlinks.model,dataValidations:this.map.dataValidations.model,properties:t,views:this.map.sheetViews.model,pageSetup:n,headerFooter:this.map.headerFooter.model,background:this.map.picture.model,drawing:this.map.drawing.model,tables:this.map.tableParts.model,conditionalFormattings:o},this.map.autoFilter.model&&(this.model.autoFilter=this.map.autoFilter.model),this.map.sheetProtection.model&&(this.model.sheetProtection=this.map.sheetProtection.model),!1;default:return!0}}},{key:\"reconcile\",value:function(e,t){var r=(e.relationships||[]).reduce((function(r,n){if(r[n.Id]=n,n.Type===h.Comments&&(e.comments=t.comments[n.Target].comments),n.Type===h.VmlDrawing&&e.comments&&e.comments.length){var o=t.vmlDrawings[n.Target].comments;e.comments.forEach((function(e,t){e.note=Object.assign({},e.note,o[t])}))}return r}),{});if(t.commentsMap=(e.comments||[]).reduce((function(e,t){return t.ref&&(e[t.ref]=t),e}),{}),t.hyperlinkMap=(e.hyperlinks||[]).reduce((function(e,t){return t.rId&&(e[t.address]=r[t.rId].Target),e}),{}),t.formulae={},e.rows=e.rows&&e.rows.filter(Boolean)||[],e.rows.forEach((function(e){e.cells=e.cells&&e.cells.filter(Boolean)||[]})),this.map.cols.reconcile(e.cols,t),this.map.sheetData.reconcile(e.rows,t),this.map.conditionalFormatting.reconcile(e.conditionalFormattings,t),e.media=[],e.drawing){var n=r[e.drawing.rId].Target.match(/\\/drawings\\/([a-zA-Z0-9]+)[.][a-zA-Z]{3,4}$/);if(n){var o=n[1];t.drawings[o].anchors.forEach((function(t){if(t.medium){var r={type:\"image\",imageId:t.medium.index,range:t.range,hyperlinks:t.picture.hyperlinks};e.media.push(r)}}))}}var i=e.background&&r[e.background.rId];if(i){var a=i.Target.split(\"/media/\")[1],s=t.mediaIndex&&t.mediaIndex[a];void 0!==s&&e.media.push({type:\"background\",imageId:s})}e.tables=(e.tables||[]).map((function(e){var n=r[e.rId];return t.tables[n.Target]})),delete e.relationships,delete e.hyperlinks,delete e.comments}}])&&o(r.prototype,n),p&&o(r,p),L}(p);F.WORKSHEET_ATTRIBUTES={xmlns:\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\"xmlns:r\":\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\"xmlns:mc\":\"http://schemas.openxmlformats.org/markup-compatibility/2006\",\"mc:Ignorable\":\"x14ac\",\"xmlns:x14ac\":\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\"},t.exports=F},{\"../../../utils/col-cache\":17,\"../../../utils/under-dash\":23,\"../../../utils/xml-stream\":25,\"../../rel-type\":28,\"../base-xform\":29,\"../list-xform\":68,\"./auto-filter-xform\":69,\"./cf/conditional-formattings-xform\":84,\"./col-xform\":89,\"./data-validations-xform\":90,\"./dimension-xform\":91,\"./drawing-xform\":92,\"./ext-lst-xform\":93,\"./header-footer-xform\":94,\"./hyperlink-xform\":95,\"./merge-cell-xform\":96,\"./merges\":97,\"./page-margins-xform\":100,\"./page-setup-xform\":102,\"./picture-xform\":103,\"./print-options-xform\":104,\"./row-breaks-xform\":105,\"./row-xform\":106,\"./sheet-format-properties-xform\":107,\"./sheet-properties-xform\":108,\"./sheet-protection-xform\":109,\"./sheet-view-xform\":110,\"./table-part-xform\":111}],113:[function(e,t,r){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r=-90&&e<=90?e:void 0}},indent:function(e){return e=l.validInt(e),Math.max(0,e)},readingOrder:function(e){switch(e){case\"ltr\":return f.ReadingOrder.LeftToRight;case\"rtl\":return f.ReadingOrder.RightToLeft;default:return}}},p=function(e){if(e=d.textRotation(e)){if(\"vertical\"===e)return 255;var t=Math.round(e);if(t>=0&&t<=90)return t;if(t<0&&t>=-90)return 90-t}},y=function(e){var t=l.validInt(e);if(void 0!==t){if(255===t)return\"vertical\";if(t>=0&&t<=90)return t;if(t>90&&t<=180)return 90-t}},m=function(e){!function(e,t){if(\"function\"!=typeof t&&null!==t)throw new TypeError(\"Super expression must either be null or a function\");e.prototype=Object.create(t&&t.prototype,{constructor:{value:e,writable:!0,configurable:!0}}),t&&c(e,t)}(h,e);var t,r,n,f,l=(t=h,function(){var e,r=u(t);if(s()){var n=u(this).constructor;e=Reflect.construct(r,arguments,n)}else e=r.apply(this,arguments);return a(this,e)});function h(){return o(this,h),l.apply(this,arguments)}return r=h,(n=[{key:\"render\",value:function(e,t){e.addRollback(),e.openNode(\"alignment\");var r=!1;function n(t,n){n&&(e.addAttribute(t,n),r=!0)}n(\"horizontal\",d.horizontal(t.horizontal)),n(\"vertical\",d.vertical(t.vertical)),n(\"wrapText\",!!d.wrapText(t.wrapText)&&\"1\"),n(\"shrinkToFit\",!!d.shrinkToFit(t.shrinkToFit)&&\"1\"),n(\"indent\",d.indent(t.indent)),n(\"textRotation\",p(t.textRotation)),n(\"readingOrder\",d.readingOrder(t.readingOrder)),e.closeNode(),r?e.commit():e.rollback()}},{key:\"parseOpen\",value:function(e){var t={},r=!1;function n(e,n,o){e&&(t[n]=o,r=!0)}n(e.attributes.horizontal,\"horizontal\",e.attributes.horizontal),n(e.attributes.vertical,\"vertical\",\"center\"===e.attributes.vertical?\"middle\":e.attributes.vertical),n(e.attributes.wrapText,\"wrapText\",!!e.attributes.wrapText),n(e.attributes.shrinkToFit,\"shrinkToFit\",!!e.attributes.shrinkToFit),n(e.attributes.indent,\"indent\",parseInt(e.attributes.indent,10)),n(e.attributes.textRotation,\"textRotation\",y(e.attributes.textRotation)),n(e.attributes.readingOrder,\"readingOrder\",\"2\"===e.attributes.readingOrder?\"rtl\":\"ltr\"),this.model=r?t:null}},{key:\"parseText\",value:function(){}},{key:\"parseClose\",value:function(){return!1}},{key:\"tag\",get:function(){return\"alignment\"}}])&&i(r.prototype,n),f&&i(r,f),h}(h);t.exports=m},{\"../../../doc/enums\":7,\"../../../utils/utils\":24,\"../base-xform\":29}],124:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e){return(i=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function a(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}function s(e,t){for(var r=0;r=1)){e.next=6;break}return i=n.substr(o+1),a=n.substr(0,o),e.next=6,new Promise((function(e,o){var s=new u;s.on(\"finish\",(function(){r.mediaIndex[n]=r.media.length,r.mediaIndex[a]=r.media.length;var t={type:\"image\",name:a,extension:i,buffer:s.toBuffer()};r.media.push(t),e()})),t.on(\"error\",(function(e){o(e)})),t.pipe(s)}));case 6:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return V.apply(this,arguments)})},{key:\"_processDrawingEntry\",value:(H=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new g,e.next=3,o.parseStream(t);case 3:i=e.sent,r.drawings[n]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return H.apply(this,arguments)})},{key:\"_processDrawingRelsEntry\",value:(U=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new p,e.next=3,o.parseStream(t);case 3:i=e.sent,r.drawingRels[n]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return U.apply(this,arguments)})},{key:\"_processVmlDrawingEntry\",value:(z=o(regeneratorRuntime.mark((function e(t,r,n){var o,i;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return o=new k,e.next=3,o.parseStream(t);case 3:i=e.sent,r.vmlDrawings[\"../drawings/\".concat(n,\".vml\")]=i;case 5:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return z.apply(this,arguments)})},{key:\"_processThemeEntry\",value:(L=o(regeneratorRuntime.mark((function e(t,r,n){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,new Promise((function(e,o){var i=new u;t.on(\"error\",o),i.on(\"error\",o),i.on(\"finish\",(function(){r.themes[n]=i.read().toString(),e()})),t.pipe(i)}));case 2:case\"end\":return e.stop()}}),e)}))),function(e,t,r){return L.apply(this,arguments)})},{key:\"createInputStream\",value:function(e){return console.warn(\"`XLSX#createInputStream` is deprecated. You should use `XLSX#read` instead. This method will be removed in version 4.0. Please follow upgrade instruction: https://github.com/exceljs/exceljs/blob/master/UPGRADE-4.0.md\"),this._createInputStream(e)}},{key:\"_createInputStream\",value:function(e){var t=this,r={worksheets:[],worksheetHash:{},worksheetRels:[],themes:{},media:[],mediaIndex:{},drawings:{},drawingRels:{},comments:{},tables:{},vmlDrawings:{}},n=[],i=new s.ZipReader({getEntryType:function(e){return e.match(/xl\\/media\\//)?\"nodebuffer\":\"string\"}});return i.on(\"entry\",(function(i){n.push(o(regeneratorRuntime.mark((function n(){var o,a,s,u,c,f,p;return regeneratorRuntime.wrap((function(n){for(;;)switch(n.prev=n.next){case 0:n.prev=0,\"/\"===(o=i.path)[0]&&(o=o.substr(1)),n.t0=o,n.next=\"_rels/.rels\"===n.t0?6:\"xl/workbook.xml\"===n.t0?10:\"xl/_rels/workbook.xml.rels\"===n.t0?19:\"xl/sharedStrings.xml\"===n.t0?23:\"xl/styles.xml\"===n.t0?27:\"docProps/app.xml\"===n.t0?31:\"docProps/core.xml\"===n.t0?38:44;break;case 6:return n.next=8,t.parseRels(i);case 8:return r.globalRels=n.sent,n.abrupt(\"break\",90);case 10:return n.next=12,t.parseWorkbook(i);case 12:return a=n.sent,r.sheets=a.sheets,r.definedNames=a.definedNames,r.views=a.views,r.properties=a.properties,r.calcProperties=a.calcProperties,n.abrupt(\"break\",90);case 19:return n.next=21,t.parseRels(i);case 21:return r.workbookRels=n.sent,n.abrupt(\"break\",90);case 23:return r.sharedStrings=new d,n.next=26,r.sharedStrings.parseStream(i);case 26:return n.abrupt(\"break\",90);case 27:return r.styles=new l,n.next=30,r.styles.parseStream(i);case 30:return n.abrupt(\"break\",90);case 31:return s=new m,n.next=34,s.parseStream(i);case 34:return u=n.sent,r.company=u.company,r.manager=u.manager,n.abrupt(\"break\",90);case 38:return c=new h,n.next=41,c.parseStream(i);case 41:return f=n.sent,Object.assign(r,f),n.abrupt(\"break\",90);case 44:if(!(p=i.path.match(/xl\\/worksheets\\/sheet(\\d+)[.]xml/))){n.next=49;break}return n.next=48,t._processWorksheetEntry(i,r,p[1],e);case 48:return n.abrupt(\"break\",90);case 49:if(!(p=i.path.match(/xl\\/worksheets\\/_rels\\/sheet(\\d+)[.]xml.rels/))){n.next=54;break}return n.next=53,t._processWorksheetRelsEntry(i,r,p[1]);case 53:return n.abrupt(\"break\",90);case 54:if(!(p=i.path.match(/xl\\/theme\\/([a-zA-Z0-9]+)[.]xml/))){n.next=59;break}return n.next=58,t._processThemeEntry(i,r,p[1]);case 58:return n.abrupt(\"break\",90);case 59:if(!(p=i.path.match(/xl\\/media\\/([a-zA-Z0-9]+[.][a-zA-Z0-9]{3,4})$/))){n.next=64;break}return n.next=63,t._processMediaEntry(i,r,p[1]);case 63:return n.abrupt(\"break\",90);case 64:if(!(p=i.path.match(/xl\\/drawings\\/([a-zA-Z0-9]+)[.]xml/))){n.next=69;break}return n.next=68,t._processDrawingEntry(i,r,p[1]);case 68:return n.abrupt(\"break\",90);case 69:if(!(p=i.path.match(/xl\\/(comments\\d+)[.]xml/))){n.next=74;break}return n.next=73,t._processCommentEntry(i,r,p[1]);case 73:return n.abrupt(\"break\",90);case 74:if(!(p=i.path.match(/xl\\/tables\\/(table\\d+)[.]xml/))){n.next=79;break}return n.next=78,t._processTableEntry(i,r,p[1]);case 78:return n.abrupt(\"break\",90);case 79:if(!(p=i.path.match(/xl\\/drawings\\/_rels\\/([a-zA-Z0-9]+)[.]xml[.]rels/))){n.next=84;break}return n.next=83,t._processDrawingRelsEntry(i,r,p[1]);case 83:return n.abrupt(\"break\",90);case 84:if(!(p=i.path.match(/xl\\/drawings\\/(vmlDrawing\\d+)[.]vml/))){n.next=89;break}return n.next=88,t._processVmlDrawingEntry(i,r,p[1]);case 88:return n.abrupt(\"break\",90);case 89:i.autodrain();case 90:n.next=95;break;case 92:n.prev=92,n.t1=n.catch(0),t.error=n.t1;case 95:case\"end\":return n.stop()}}),n,null,[[0,92]])})))())})),i.on(\"finished\",o(regeneratorRuntime.mark((function o(){return regeneratorRuntime.wrap((function(o){for(;;)switch(o.prev=o.next){case 0:return o.prev=0,o.next=3,Promise.all(n);case 3:if(!t.error){o.next=5;break}throw t.error;case 5:t.reconcile(r,e),t.workbook.model=r,i.emit(\"done\"),o.next=13;break;case 10:o.prev=10,o.t0=o.catch(0),i.emit(\"error\",o.t0);case 13:case\"end\":return o.stop()}}),o,null,[[0,10]])})))),i}},{key:\"read\",value:function(e,t){var r=this;return new Promise((function(n,o){t=t||{};var i=r._createInputStream(t);i.on(\"done\",(function(){n(r.workbook)})).on(\"error\",(function(e){o(e)})),e.pipe(i)}))}},{key:\"load\",value:function(e,t){var n=this;void 0===t&&(t={});var o=this._createInputStream();return new Promise((function(i,a){if(o.on(\"done\",(function(){i(n.workbook)})).on(\"error\",(function(e){a(e)})),t.base64){var s=r.from(e.toString(),\"base64\");o.write(s)}else o.write(e);o.end()}))}},{key:\"addMedia\",value:(F=o(regeneratorRuntime.mark((function e(t,r){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.next=2,Promise.all(r.media.map(function(){var e=o(regeneratorRuntime.mark((function e(r){var n,o,i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:if(\"image\"!==r.type){e.next=13;break}if(n=\"xl/media/\".concat(r.name,\".\").concat(r.extension),!r.filename){e.next=7;break}return e.next=5,S(r.filename);case 5:return o=e.sent,e.abrupt(\"return\",t.append(o,{name:n}));case 7:if(!r.buffer){e.next=9;break}return e.abrupt(\"return\",t.append(r.buffer,{name:n}));case 9:if(!r.base64){e.next=13;break}return i=r.base64,a=i.substring(i.indexOf(\",\")+1),e.abrupt(\"return\",t.append(a,{name:n,base64:!0}));case 13:throw new Error(\"Unsupported media\");case 14:case\"end\":return e.stop()}}),e)})));return function(t){return e.apply(this,arguments)}}()));case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return F.apply(this,arguments)})},{key:\"addDrawings\",value:function(e,t){var r=new g,n=new p;t.worksheets.forEach((function(t){var o=t.drawing;if(o){r.prepare(o,{});var i=r.toXml(o);e.append(i,{name:\"xl/drawings/\".concat(o.name,\".xml\")}),i=n.toXml(o.rels),e.append(i,{name:\"xl/drawings/_rels/\".concat(o.name,\".xml.rels\")})}}))}},{key:\"addTables\",value:function(e,t){var r=new w;t.worksheets.forEach((function(t){t.tables.forEach((function(t){r.prepare(t,{});var n=r.toXml(t);e.append(n,{name:\"xl/tables/\".concat(t.target)})}))}))}},{key:\"addContentTypes\",value:(B=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new y,o=n.toXml(r),t.append(o,{name:\"[Content_Types].xml\"});case 3:case\"end\":return e.stop()}}),e)}))),function(e,t){return B.apply(this,arguments)})},{key:\"addApp\",value:(D=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new m,o=n.toXml(r),t.append(o,{name:\"docProps/app.xml\"});case 3:case\"end\":return e.stop()}}),e)}))),function(e,t){return D.apply(this,arguments)})},{key:\"addCore\",value:(N=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new h,t.append(n.toXml(r),{name:\"docProps/core.xml\"});case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return N.apply(this,arguments)})},{key:\"addThemes\",value:(I=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=r.themes||{theme1:x},Object.keys(n).forEach((function(e){var r=n[e],o=\"xl/theme/\".concat(e,\".xml\");t.append(r,{name:o})}));case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return I.apply(this,arguments)})},{key:\"addOfficeRels\",value:(M=o(regeneratorRuntime.mark((function t(r){var n,o;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:n=new p,o=n.toXml([{Id:\"rId1\",Type:e.RelType.OfficeDocument,Target:\"xl/workbook.xml\"},{Id:\"rId2\",Type:e.RelType.CoreProperties,Target:\"docProps/core.xml\"},{Id:\"rId3\",Type:e.RelType.ExtenderProperties,Target:\"docProps/app.xml\"}]),r.append(o,{name:\"_rels/.rels\"});case 3:case\"end\":return t.stop()}}),t)}))),function(e){return M.apply(this,arguments)})},{key:\"addWorkbookRels\",value:(A=o(regeneratorRuntime.mark((function t(r,n){var o,i,a,s;return regeneratorRuntime.wrap((function(t){for(;;)switch(t.prev=t.next){case 0:o=1,i=[{Id:\"rId\".concat(o++),Type:e.RelType.Styles,Target:\"styles.xml\"},{Id:\"rId\".concat(o++),Type:e.RelType.Theme,Target:\"theme/theme1.xml\"}],n.sharedStrings.count&&i.push({Id:\"rId\".concat(o++),Type:e.RelType.SharedStrings,Target:\"sharedStrings.xml\"}),n.worksheets.forEach((function(t){t.rId=\"rId\".concat(o++),i.push({Id:t.rId,Type:e.RelType.Worksheet,Target:\"worksheets/sheet\".concat(t.id,\".xml\")})})),a=new p,s=a.toXml(i),r.append(s,{name:\"xl/_rels/workbook.xml.rels\"});case 7:case\"end\":return t.stop()}}),t)}))),function(e,t){return A.apply(this,arguments)})},{key:\"addSharedStrings\",value:(P=o(regeneratorRuntime.mark((function e(t,r){return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:r.sharedStrings&&r.sharedStrings.count&&t.append(r.sharedStrings.xml,{name:\"xl/sharedStrings.xml\"});case 1:case\"end\":return e.stop()}}),e)}))),function(e,t){return P.apply(this,arguments)})},{key:\"addStyles\",value:(C=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:(n=r.styles.xml)&&t.append(n,{name:\"xl/styles.xml\"});case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return C.apply(this,arguments)})},{key:\"addWorkbook\",value:(T=o(regeneratorRuntime.mark((function e(t,r){var n;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new b,t.append(n.toXml(r),{name:\"xl/workbook.xml\"});case 2:case\"end\":return e.stop()}}),e)}))),function(e,t){return T.apply(this,arguments)})},{key:\"addWorksheets\",value:(j=o(regeneratorRuntime.mark((function e(t,r){var n,o,i,a;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:n=new v,o=new p,i=new _,a=new k,r.worksheets.forEach((function(e){var r=new f;n.render(r,e),t.append(r.xml,{name:\"xl/worksheets/sheet\".concat(e.id,\".xml\")}),e.rels&&e.rels.length&&(r=new f,o.render(r,e.rels),t.append(r.xml,{name:\"xl/worksheets/_rels/sheet\".concat(e.id,\".xml.rels\")})),e.comments.length>0&&(r=new f,i.render(r,e),t.append(r.xml,{name:\"xl/comments\".concat(e.id,\".xml\")}),r=new f,a.render(r,e),t.append(r.xml,{name:\"xl/drawings/vmlDrawing\".concat(e.id,\".vml\")}))}));case 5:case\"end\":return e.stop()}}),e)}))),function(e,t){return j.apply(this,arguments)})},{key:\"_finalize\",value:function(e){var t=this;return new Promise((function(r,n){e.on(\"finish\",(function(){r(t)})),e.on(\"error\",n),e.finalize()}))}},{key:\"prepareModel\",value:function(e,t){e.creator=e.creator||\"ExcelJS\",e.lastModifiedBy=e.lastModifiedBy||\"ExcelJS\",e.created=e.created||new Date,e.modified=e.modified||new Date,e.useSharedStrings=void 0===t.useSharedStrings||t.useSharedStrings,e.useStyles=void 0===t.useStyles||t.useStyles,e.sharedStrings=new d,e.styles=e.useStyles?new l(!0):new l.Mock;var r=new b,n=new v;r.prepare(e);var o={sharedStrings:e.sharedStrings,styles:e.styles,date1904:e.properties.date1904,drawingsCount:0,media:e.media};o.drawings=e.drawings=[],o.commentRefs=e.commentRefs=[];var i=0;e.tables=[],e.worksheets.forEach((function(t){t.tables.forEach((function(t){i++,t.target=\"table\".concat(i,\".xml\"),t.id=i,e.tables.push(t)})),n.prepare(t,o)}))}},{key:\"write\",value:(R=o(regeneratorRuntime.mark((function e(t,r){var n,o;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=r||{},n=this.workbook.model,(o=new s.ZipWriter(r.zip)).pipe(t),this.prepareModel(n,r),e.next=7,this.addContentTypes(o,n);case 7:return e.next=9,this.addOfficeRels(o,n);case 9:return e.next=11,this.addWorkbookRels(o,n);case 11:return e.next=13,this.addWorksheets(o,n);case 13:return e.next=15,this.addSharedStrings(o,n);case 15:return e.next=17,this.addDrawings(o,n);case 17:return e.next=19,this.addTables(o,n);case 19:return e.next=21,Promise.all([this.addThemes(o,n),this.addStyles(o,n)]);case 21:return e.next=23,this.addMedia(o,n);case 23:return e.next=25,Promise.all([this.addApp(o,n),this.addCore(o,n)]);case 25:return e.next=27,this.addWorkbook(o,n);case 27:return e.abrupt(\"return\",this._finalize(o));case 28:case\"end\":return e.stop()}}),e,this)}))),function(e,t){return R.apply(this,arguments)})},{key:\"writeFile\",value:function(e,t){var r=this,n=a.createWriteStream(e);return new Promise((function(e,o){n.on(\"finish\",(function(){e()})),n.on(\"error\",(function(e){o(e)})),r.write(n,t).then((function(){n.end()}))}))}},{key:\"writeBuffer\",value:(E=o(regeneratorRuntime.mark((function e(t){var r;return regeneratorRuntime.wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return r=new u,e.next=3,this.write(r,t);case 3:return e.abrupt(\"return\",r.read());case 4:case\"end\":return e.stop()}}),e,this)}))),function(e){return E.apply(this,arguments)})}])&&i(t.prototype,n),O&&i(t,O),e}();O.RelType=e(\"./rel-type\"),t.exports=O}).call(this,e(\"buffer\").Buffer)},{\"../utils/stream-buf\":21,\"../utils/utils\":24,\"../utils/xml-stream\":25,\"../utils/zip-stream\":26,\"./rel-type\":28,\"./xform/book/workbook-xform\":35,\"./xform/comment/comments-xform\":37,\"./xform/comment/vml-notes-xform\":42,\"./xform/core/app-xform\":48,\"./xform/core/content-types-xform\":49,\"./xform/core/core-xform\":50,\"./xform/core/relationships-xform\":52,\"./xform/drawing/drawing-xform\":59,\"./xform/sheet/worksheet-xform\":112,\"./xform/strings/shared-strings-xform\":121,\"./xform/style/styles-xform\":132,\"./xform/table/table-xform\":138,\"./xml/theme1.js\":140,buffer:188,fs:186}],140:[function(e,t,r){t.exports='\\n '},{}],141:[function(e,t,r){var n=r;n.bignum=e(\"bn.js\"),n.define=e(\"./asn1/api\").define,n.base=e(\"./asn1/base\"),n.constants=e(\"./asn1/constants\"),n.decoders=e(\"./asn1/decoders\"),n.encoders=e(\"./asn1/encoders\")},{\"./asn1/api\":142,\"./asn1/base\":144,\"./asn1/constants\":148,\"./asn1/decoders\":150,\"./asn1/encoders\":153,\"bn.js\":156}],142:[function(e,t,r){var n=e(\"../asn1\"),o=e(\"inherits\");function i(e,t){this.name=e,this.body=t,this.decoders={},this.encoders={}}r.define=function(e,t){return new i(e,t)},i.prototype._createNamed=function(t){var r;try{r=e(\"vm\").runInThisContext(\"(function \"+this.name+\"(entity) {\\n this._initNamed(entity);\\n})\")}catch(e){r=function(e){this._initNamed(e)}}return o(r,t),r.prototype._initNamed=function(e){t.call(this,e)},new r(this)},i.prototype._getDecoder=function(e){return e=e||\"der\",this.decoders.hasOwnProperty(e)||(this.decoders[e]=this._createNamed(n.decoders[e])),this.decoders[e]},i.prototype.decode=function(e,t,r){return this._getDecoder(t).decode(e,r)},i.prototype._getEncoder=function(e){return e=e||\"der\",this.encoders.hasOwnProperty(e)||(this.encoders[e]=this._createNamed(n.encoders[e])),this.encoders[e]},i.prototype.encode=function(e,t,r){return this._getEncoder(t).encode(e,r)}},{\"../asn1\":141,inherits:341,vm:481}],143:[function(e,t,r){var n=e(\"inherits\"),o=e(\"../base\").Reporter,i=e(\"buffer\").Buffer;function a(e,t){o.call(this,t),i.isBuffer(e)?(this.base=e,this.offset=0,this.length=e.length):this.error(\"Input not Buffer\")}function s(e,t){if(Array.isArray(e))this.length=0,this.value=e.map((function(e){return e instanceof s||(e=new s(e,t)),this.length+=e.length,e}),this);else if(\"number\"==typeof e){if(!(0<=e&&e<=255))return t.error(\"non-byte EncoderBuffer value\");this.value=e,this.length=1}else if(\"string\"==typeof e)this.value=e,this.length=i.byteLength(e);else{if(!i.isBuffer(e))return t.error(\"Unsupported type: \"+_typeof2(e));this.value=e,this.length=e.length}}n(a,o),r.DecoderBuffer=a,a.prototype.save=function(){return{offset:this.offset,reporter:o.prototype.save.call(this)}},a.prototype.restore=function(e){var t=new a(this.base);return t.offset=e.offset,t.length=this.offset,this.offset=e.offset,o.prototype.restore.call(this,e.reporter),t},a.prototype.isEmpty=function(){return this.offset===this.length},a.prototype.readUInt8=function(e){return this.offset+1<=this.length?this.base.readUInt8(this.offset++,!0):this.error(e||\"DecoderBuffer overrun\")},a.prototype.skip=function(e,t){if(!(this.offset+e<=this.length))return this.error(t||\"DecoderBuffer overrun\");var r=new a(this.base);return r._reporterState=this._reporterState,r.offset=this.offset,r.length=this.offset+e,this.offset+=e,r},a.prototype.raw=function(e){return this.base.slice(e?e.offset:this.offset,this.length)},r.EncoderBuffer=s,s.prototype.join=function(e,t){return e||(e=new i(this.length)),t||(t=0),0===this.length||(Array.isArray(this.value)?this.value.forEach((function(r){r.join(e,t),t+=r.length})):(\"number\"==typeof this.value?e[t]=this.value:\"string\"==typeof this.value?e.write(this.value,t):i.isBuffer(this.value)&&this.value.copy(e,t),t+=this.length)),e}},{\"../base\":144,buffer:188,inherits:341}],144:[function(e,t,r){var n=r;n.Reporter=e(\"./reporter\").Reporter,n.DecoderBuffer=e(\"./buffer\").DecoderBuffer,n.EncoderBuffer=e(\"./buffer\").EncoderBuffer,n.Node=e(\"./node\")},{\"./buffer\":143,\"./node\":145,\"./reporter\":146}],145:[function(e,t,r){var n=e(\"../base\").Reporter,o=e(\"../base\").EncoderBuffer,i=e(\"../base\").DecoderBuffer,a=e(\"minimalistic-assert\"),s=[\"seq\",\"seqof\",\"set\",\"setof\",\"objid\",\"bool\",\"gentime\",\"utctime\",\"null_\",\"enum\",\"int\",\"objDesc\",\"bitstr\",\"bmpstr\",\"charstr\",\"genstr\",\"graphstr\",\"ia5str\",\"iso646str\",\"numstr\",\"octstr\",\"printstr\",\"t61str\",\"unistr\",\"utf8str\",\"videostr\"],u=[\"key\",\"obj\",\"use\",\"optional\",\"explicit\",\"implicit\",\"def\",\"choice\",\"any\",\"contains\"].concat(s);function c(e,t){var r={};this._baseState=r,r.enc=e,r.parent=t||null,r.children=null,r.tag=null,r.args=null,r.reverseArgs=null,r.choice=null,r.optional=!1,r.any=!1,r.obj=!1,r.use=null,r.useDecoder=null,r.key=null,r.default=null,r.explicit=null,r.implicit=null,r.contains=null,r.parent||(r.children=[],this._wrap())}t.exports=c;var f=[\"enc\",\"parent\",\"children\",\"tag\",\"args\",\"reverseArgs\",\"choice\",\"optional\",\"any\",\"obj\",\"use\",\"alteredUse\",\"key\",\"default\",\"explicit\",\"implicit\",\"contains\"];c.prototype.clone=function(){var e=this._baseState,t={};f.forEach((function(r){t[r]=e[r]}));var r=new this.constructor(t.parent);return r._baseState=t,r},c.prototype._wrap=function(){var e=this._baseState;u.forEach((function(t){this[t]=function(){var r=new this.constructor(this);return e.children.push(r),r[t].apply(r,arguments)}}),this)},c.prototype._init=function(e){var t=this._baseState;a(null===t.parent),e.call(this),t.children=t.children.filter((function(e){return e._baseState.parent===this}),this),a.equal(t.children.length,1,\"Root node can have only one child\")},c.prototype._useArgs=function(e){var t=this._baseState,r=e.filter((function(e){return e instanceof this.constructor}),this);e=e.filter((function(e){return!(e instanceof this.constructor)}),this),0!==r.length&&(a(null===t.children),t.children=r,r.forEach((function(e){e._baseState.parent=this}),this)),0!==e.length&&(a(null===t.args),t.args=e,t.reverseArgs=e.map((function(e){if(\"object\"!==_typeof2(e)||e.constructor!==Object)return e;var t={};return Object.keys(e).forEach((function(r){r==(0|r)&&(r|=0);var n=e[r];t[n]=r})),t})))},[\"_peekTag\",\"_decodeTag\",\"_use\",\"_decodeStr\",\"_decodeObjid\",\"_decodeTime\",\"_decodeNull\",\"_decodeInt\",\"_decodeBool\",\"_decodeList\",\"_encodeComposite\",\"_encodeStr\",\"_encodeObjid\",\"_encodeTime\",\"_encodeNull\",\"_encodeInt\",\"_encodeBool\"].forEach((function(e){c.prototype[e]=function(){var t=this._baseState;throw new Error(e+\" not implemented for encoding: \"+t.enc)}})),s.forEach((function(e){c.prototype[e]=function(){var t=this._baseState,r=Array.prototype.slice.call(arguments);return a(null===t.tag),t.tag=e,this._useArgs(r),this}})),c.prototype.use=function(e){a(e);var t=this._baseState;return a(null===t.use),t.use=e,this},c.prototype.optional=function(){return this._baseState.optional=!0,this},c.prototype.def=function(e){var t=this._baseState;return a(null===t.default),t.default=e,t.optional=!0,this},c.prototype.explicit=function(e){var t=this._baseState;return a(null===t.explicit&&null===t.implicit),t.explicit=e,this},c.prototype.implicit=function(e){var t=this._baseState;return a(null===t.explicit&&null===t.implicit),t.implicit=e,this},c.prototype.obj=function(){var e=this._baseState,t=Array.prototype.slice.call(arguments);return e.obj=!0,0!==t.length&&this._useArgs(t),this},c.prototype.key=function(e){var t=this._baseState;return a(null===t.key),t.key=e,this},c.prototype.any=function(){return this._baseState.any=!0,this},c.prototype.choice=function(e){var t=this._baseState;return a(null===t.choice),t.choice=e,this._useArgs(Object.keys(e).map((function(t){return e[t]}))),this},c.prototype.contains=function(e){var t=this._baseState;return a(null===t.use),t.contains=e,this},c.prototype._decode=function(e,t){var r=this._baseState;if(null===r.parent)return e.wrapResult(r.children[0]._decode(e,t));var n,o=r.default,a=!0,s=null;if(null!==r.key&&(s=e.enterKey(r.key)),r.optional){var u=null;if(null!==r.explicit?u=r.explicit:null!==r.implicit?u=r.implicit:null!==r.tag&&(u=r.tag),null!==u||r.any){if(a=this._peekTag(e,u,r.any),e.isError(a))return a}else{var c=e.save();try{null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),a=!0}catch(e){a=!1}e.restore(c)}}if(r.obj&&a&&(n=e.enterObject()),a){if(null!==r.explicit){var f=this._decodeTag(e,r.explicit);if(e.isError(f))return f;e=f}var l=e.offset;if(null===r.use&&null===r.choice){if(r.any)c=e.save();var h=this._decodeTag(e,null!==r.implicit?r.implicit:r.tag,r.any);if(e.isError(h))return h;r.any?o=e.raw(c):e=h}if(t&&t.track&&null!==r.tag&&t.track(e.path(),l,e.length,\"tagged\"),t&&t.track&&null!==r.tag&&t.track(e.path(),e.offset,e.length,\"content\"),o=r.any?o:null===r.choice?this._decodeGeneric(r.tag,e,t):this._decodeChoice(e,t),e.isError(o))return o;if(r.any||null!==r.choice||null===r.children||r.children.forEach((function(r){r._decode(e,t)})),r.contains&&(\"octstr\"===r.tag||\"bitstr\"===r.tag)){var d=new i(o);o=this._getUse(r.contains,e._reporterState.obj)._decode(d,t)}}return r.obj&&a&&(o=e.leaveObject(n)),null===r.key||null===o&&!0!==a?null!==s&&e.exitKey(s):e.leaveKey(s,r.key,o),o},c.prototype._decodeGeneric=function(e,t,r){var n=this._baseState;return\"seq\"===e||\"set\"===e?null:\"seqof\"===e||\"setof\"===e?this._decodeList(t,e,n.args[0],r):/str$/.test(e)?this._decodeStr(t,e,r):\"objid\"===e&&n.args?this._decodeObjid(t,n.args[0],n.args[1],r):\"objid\"===e?this._decodeObjid(t,null,null,r):\"gentime\"===e||\"utctime\"===e?this._decodeTime(t,e,r):\"null_\"===e?this._decodeNull(t,r):\"bool\"===e?this._decodeBool(t,r):\"objDesc\"===e?this._decodeStr(t,e,r):\"int\"===e||\"enum\"===e?this._decodeInt(t,n.args&&n.args[0],r):null!==n.use?this._getUse(n.use,t._reporterState.obj)._decode(t,r):t.error(\"unknown tag: \"+e)},c.prototype._getUse=function(e,t){var r=this._baseState;return r.useDecoder=this._use(e,t),a(null===r.useDecoder._baseState.parent),r.useDecoder=r.useDecoder._baseState.children[0],r.implicit!==r.useDecoder._baseState.implicit&&(r.useDecoder=r.useDecoder.clone(),r.useDecoder._baseState.implicit=r.implicit),r.useDecoder},c.prototype._decodeChoice=function(e,t){var r=this._baseState,n=null,o=!1;return Object.keys(r.choice).some((function(i){var a=e.save(),s=r.choice[i];try{var u=s._decode(e,t);if(e.isError(u))return!1;n={type:i,value:u},o=!0}catch(t){return e.restore(a),!1}return!0}),this),o?n:e.error(\"Choice not matched\")},c.prototype._createEncoderBuffer=function(e){return new o(e,this.reporter)},c.prototype._encode=function(e,t,r){var n=this._baseState;if(null===n.default||n.default!==e){var o=this._encodeValue(e,t,r);if(void 0!==o&&!this._skipDefault(o,t,r))return o}},c.prototype._encodeValue=function(e,t,r){var o=this._baseState;if(null===o.parent)return o.children[0]._encode(e,t||new n);var i=null;if(this.reporter=t,o.optional&&void 0===e){if(null===o.default)return;e=o.default}var a=null,s=!1;if(o.any)i=this._createEncoderBuffer(e);else if(o.choice)i=this._encodeChoice(e,t);else if(o.contains)a=this._getUse(o.contains,r)._encode(e,t),s=!0;else if(o.children)a=o.children.map((function(r){if(\"null_\"===r._baseState.tag)return r._encode(null,t,e);if(null===r._baseState.key)return t.error(\"Child should have a key\");var n=t.enterKey(r._baseState.key);if(\"object\"!==_typeof2(e))return t.error(\"Child expected, but input is not object\");var o=r._encode(e[r._baseState.key],t,e);return t.leaveKey(n),o}),this).filter((function(e){return e})),a=this._createEncoderBuffer(a);else if(\"seqof\"===o.tag||\"setof\"===o.tag){if(!o.args||1!==o.args.length)return t.error(\"Too many args for : \"+o.tag);if(!Array.isArray(e))return t.error(\"seqof/setof, but data is not Array\");var u=this.clone();u._baseState.implicit=null,a=this._createEncoderBuffer(e.map((function(r){var n=this._baseState;return this._getUse(n.args[0],e)._encode(r,t)}),u))}else null!==o.use?i=this._getUse(o.use,r)._encode(e,t):(a=this._encodePrimitive(o.tag,e),s=!0);if(!o.any&&null===o.choice){var c=null!==o.implicit?o.implicit:o.tag,f=null===o.implicit?\"universal\":\"context\";null===c?null===o.use&&t.error(\"Tag could be omitted only for .use()\"):null===o.use&&(i=this._encodeComposite(c,s,f,a))}return null!==o.explicit&&(i=this._encodeComposite(o.explicit,!1,\"context\",i)),i},c.prototype._encodeChoice=function(e,t){var r=this._baseState,n=r.choice[e.type];return n||a(!1,e.type+\" not found in \"+JSON.stringify(Object.keys(r.choice))),n._encode(e.value,t)},c.prototype._encodePrimitive=function(e,t){var r=this._baseState;if(/str$/.test(e))return this._encodeStr(t,e);if(\"objid\"===e&&r.args)return this._encodeObjid(t,r.reverseArgs[0],r.args[1]);if(\"objid\"===e)return this._encodeObjid(t,null,null);if(\"gentime\"===e||\"utctime\"===e)return this._encodeTime(t,e);if(\"null_\"===e)return this._encodeNull();if(\"int\"===e||\"enum\"===e)return this._encodeInt(t,r.args&&r.reverseArgs[0]);if(\"bool\"===e)return this._encodeBool(t);if(\"objDesc\"===e)return this._encodeStr(t,e);throw new Error(\"Unsupported tag: \"+e)},c.prototype._isNumstr=function(e){return/^[0-9 ]*$/.test(e)},c.prototype._isPrintstr=function(e){return/^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(e)}},{\"../base\":144,\"minimalistic-assert\":390}],146:[function(e,t,r){var n=e(\"inherits\");function o(e){this._reporterState={obj:null,path:[],options:e||{},errors:[]}}function i(e,t){this.path=e,this.rethrow(t)}r.Reporter=o,o.prototype.isError=function(e){return e instanceof i},o.prototype.save=function(){var e=this._reporterState;return{obj:e.obj,pathLen:e.path.length}},o.prototype.restore=function(e){var t=this._reporterState;t.obj=e.obj,t.path=t.path.slice(0,e.pathLen)},o.prototype.enterKey=function(e){return this._reporterState.path.push(e)},o.prototype.exitKey=function(e){var t=this._reporterState;t.path=t.path.slice(0,e-1)},o.prototype.leaveKey=function(e,t,r){var n=this._reporterState;this.exitKey(e),null!==n.obj&&(n.obj[t]=r)},o.prototype.path=function(){return this._reporterState.path.join(\"/\")},o.prototype.enterObject=function(){var e=this._reporterState,t=e.obj;return e.obj={},t},o.prototype.leaveObject=function(e){var t=this._reporterState,r=t.obj;return t.obj=e,r},o.prototype.error=function(e){var t,r=this._reporterState,n=e instanceof i;if(t=n?e:new i(r.path.map((function(e){return\"[\"+JSON.stringify(e)+\"]\"})).join(\"\"),e.message||e,e.stack),!r.options.partial)throw t;return n||r.errors.push(t),t},o.prototype.wrapResult=function(e){var t=this._reporterState;return t.options.partial?{result:this.isError(e)?null:e,errors:t.errors}:e},n(i,Error),i.prototype.rethrow=function(e){if(this.message=e+\" at: \"+(this.path||\"(shallow)\"),Error.captureStackTrace&&Error.captureStackTrace(this,i),!this.stack)try{throw new Error(this.message)}catch(e){this.stack=e.stack}return this}},{inherits:341}],147:[function(e,t,r){var n=e(\"../constants\");r.tagClass={0:\"universal\",1:\"application\",2:\"context\",3:\"private\"},r.tagClassByName=n._reverse(r.tagClass),r.tag={0:\"end\",1:\"bool\",2:\"int\",3:\"bitstr\",4:\"octstr\",5:\"null_\",6:\"objid\",7:\"objDesc\",8:\"external\",9:\"real\",10:\"enum\",11:\"embed\",12:\"utf8str\",13:\"relativeOid\",16:\"seq\",17:\"set\",18:\"numstr\",19:\"printstr\",20:\"t61str\",21:\"videostr\",22:\"ia5str\",23:\"utctime\",24:\"gentime\",25:\"graphstr\",26:\"iso646str\",27:\"genstr\",28:\"unistr\",29:\"charstr\",30:\"bmpstr\"},r.tagByName=n._reverse(r.tag)},{\"../constants\":148}],148:[function(e,t,r){var n=r;n._reverse=function(e){var t={};return Object.keys(e).forEach((function(r){(0|r)==r&&(r|=0);var n=e[r];t[n]=r})),t},n.der=e(\"./der\")},{\"./der\":147}],149:[function(e,t,r){var n=e(\"inherits\"),o=e(\"../../asn1\"),i=o.base,a=o.bignum,s=o.constants.der;function u(e){this.enc=\"der\",this.name=e.name,this.entity=e,this.tree=new c,this.tree._init(e.body)}function c(e){i.Node.call(this,\"der\",e)}function f(e,t){var r=e.readUInt8(t);if(e.isError(r))return r;var n=s.tagClass[r>>6],o=0==(32&r);if(31==(31&r)){var i=r;for(r=0;128==(128&i);){if(i=e.readUInt8(t),e.isError(i))return i;r<<=7,r|=127&i}}else r&=31;return{cls:n,primitive:o,tag:r,tagStr:s.tag[r]}}function l(e,t,r){var n=e.readUInt8(r);if(e.isError(n))return n;if(!t&&128===n)return null;if(0==(128&n))return n;var o=127&n;if(o>4)return e.error(\"length octect is too long\");n=0;for(var i=0;i=31)return n.error(\"Multi-octet tag encoding unsupported\");t||(o|=32);return o|=s.tagClassByName[r||\"universal\"]<<6}(e,t,r,this.reporter);if(n.length<128)return(i=new o(2))[0]=a,i[1]=n.length,this._createEncoderBuffer([i,n]);for(var u=1,c=n.length;c>=256;c>>=8)u++;(i=new o(2+u))[0]=a,i[1]=128|u;c=1+u;for(var f=n.length;f>0;c--,f>>=8)i[c]=255&f;return this._createEncoderBuffer([i,n])},c.prototype._encodeStr=function(e,t){if(\"bitstr\"===t)return this._createEncoderBuffer([0|e.unused,e.data]);if(\"bmpstr\"===t){for(var r=new o(2*e.length),n=0;n=40)return this.reporter.error(\"Second objid identifier OOB\");e.splice(0,2,40*e[0]+e[1])}var i=0;for(n=0;n=128;a>>=7)i++}var s=new o(i),u=s.length-1;for(n=e.length-1;n>=0;n--){a=e[n];for(s[u--]=127&a;(a>>=7)>0;)s[u--]=128|127&a}return this._createEncoderBuffer(s)},c.prototype._encodeTime=function(e,t){var r,n=new Date(e);return\"gentime\"===t?r=[f(n.getFullYear()),f(n.getUTCMonth()+1),f(n.getUTCDate()),f(n.getUTCHours()),f(n.getUTCMinutes()),f(n.getUTCSeconds()),\"Z\"].join(\"\"):\"utctime\"===t?r=[f(n.getFullYear()%100),f(n.getUTCMonth()+1),f(n.getUTCDate()),f(n.getUTCHours()),f(n.getUTCMinutes()),f(n.getUTCSeconds()),\"Z\"].join(\"\"):this.reporter.error(\"Encoding \"+t+\" time is not supported yet\"),this._encodeStr(r,\"octstr\")},c.prototype._encodeNull=function(){return this._createEncoderBuffer(\"\")},c.prototype._encodeInt=function(e,t){if(\"string\"==typeof e){if(!t)return this.reporter.error(\"String int or enum given, but no values map\");if(!t.hasOwnProperty(e))return this.reporter.error(\"Values map doesn't contain: \"+JSON.stringify(e));e=t[e]}if(\"number\"!=typeof e&&!o.isBuffer(e)){var r=e.toArray();!e.sign&&128&r[0]&&r.unshift(0),e=new o(r)}if(o.isBuffer(e)){var n=e.length;0===e.length&&n++;var i=new o(n);return e.copy(i),0===e.length&&(i[0]=0),this._createEncoderBuffer(i)}if(e<128)return this._createEncoderBuffer(e);if(e<256)return this._createEncoderBuffer([0,e]);n=1;for(var a=e;a>=256;a>>=8)n++;for(a=(i=new Array(n)).length-1;a>=0;a--)i[a]=255&e,e>>=8;return 128&i[0]&&i.unshift(0),this._createEncoderBuffer(new o(i))},c.prototype._encodeBool=function(e){return this._createEncoderBuffer(e?255:0)},c.prototype._use=function(e,t){return\"function\"==typeof e&&(e=e(t)),e._getEncoder(\"der\").tree},c.prototype._skipDefault=function(e,t,r){var n,o=this._baseState;if(null===o.default)return!1;var i=e.join();if(void 0===o.defaultBuffer&&(o.defaultBuffer=this._encodeValue(o.default,t,r).join()),i.length!==o.defaultBuffer.length)return!1;for(n=0;n0?a-4:a;for(r=0;r>16&255,u[f++]=t>>8&255,u[f++]=255&t;2===s&&(t=o[e.charCodeAt(r)]<<2|o[e.charCodeAt(r+1)]>>4,u[f++]=255&t);1===s&&(t=o[e.charCodeAt(r)]<<10|o[e.charCodeAt(r+1)]<<4|o[e.charCodeAt(r+2)]>>2,u[f++]=t>>8&255,u[f++]=255&t);return u},r.fromByteArray=function(e){for(var t,r=e.length,o=r%3,i=[],a=0,s=r-o;as?s:a+16383));1===o?(t=e[r-1],i.push(n[t>>2]+n[t<<4&63]+\"==\")):2===o&&(t=(e[r-2]<<8)+e[r-1],i.push(n[t>>10]+n[t>>4&63]+n[t<<2&63]+\"=\"));return i.join(\"\")};for(var n=[],o=[],i=\"undefined\"!=typeof Uint8Array?Uint8Array:Array,a=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\",s=0,u=a.length;s0)throw new Error(\"Invalid string. Length must be a multiple of 4\");var r=e.indexOf(\"=\");return-1===r&&(r=t),[r,r===t?0:4-r%4]}function f(e,t,r){for(var o,i,a=[],s=t;s>18&63]+n[i>>12&63]+n[i>>6&63]+n[63&i]);return a.join(\"\")}o[\"-\".charCodeAt(0)]=62,o[\"_\".charCodeAt(0)]=63},{}],156:[function(e,t,r){!function(t,r){function n(e,t){if(!e)throw new Error(t||\"Assertion failed\")}function o(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}function i(e,t,r){if(i.isBN(e))return e;this.negative=0,this.words=null,this.length=0,this.red=null,null!==e&&(\"le\"!==t&&\"be\"!==t||(r=t,t=10),this._init(e||0,t||10,r||\"be\"))}var a;\"object\"===_typeof2(t)?t.exports=i:r.BN=i,i.BN=i,i.wordSize=26;try{a=e(\"buffer\").Buffer}catch(e){}function s(e,t,r){for(var n=0,o=Math.min(e.length,r),i=t;i=49&&a<=54?a-49+10:a>=17&&a<=22?a-17+10:15&a}return n}function u(e,t,r,n){for(var o=0,i=Math.min(e.length,r),a=t;a=49?s-49+10:s>=17?s-17+10:s}return o}i.isBN=function(e){return e instanceof i||null!==e&&\"object\"===_typeof2(e)&&e.constructor.wordSize===i.wordSize&&Array.isArray(e.words)},i.max=function(e,t){return e.cmp(t)>0?e:t},i.min=function(e,t){return e.cmp(t)<0?e:t},i.prototype._init=function(e,t,r){if(\"number\"==typeof e)return this._initNumber(e,t,r);if(\"object\"===_typeof2(e))return this._initArray(e,t,r);\"hex\"===t&&(t=16),n(t===(0|t)&&t>=2&&t<=36);var o=0;\"-\"===(e=e.toString().replace(/\\s+/g,\"\"))[0]&&o++,16===t?this._parseHex(e,o):this._parseBase(e,t,o),\"-\"===e[0]&&(this.negative=1),this.strip(),\"le\"===r&&this._initArray(this.toArray(),t,r)},i.prototype._initNumber=function(e,t,r){e<0&&(this.negative=1,e=-e),e<67108864?(this.words=[67108863&e],this.length=1):e<4503599627370496?(this.words=[67108863&e,e/67108864&67108863],this.length=2):(n(e<9007199254740992),this.words=[67108863&e,e/67108864&67108863,1],this.length=3),\"le\"===r&&this._initArray(this.toArray(),t,r)},i.prototype._initArray=function(e,t,r){if(n(\"number\"==typeof e.length),e.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(e.length/3),this.words=new Array(this.length);for(var o=0;o=0;o-=3)a=e[o]|e[o-1]<<8|e[o-2]<<16,this.words[i]|=a<>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);else if(\"le\"===r)for(o=0,i=0;o>>26-s&67108863,(s+=24)>=26&&(s-=26,i++);return this.strip()},i.prototype._parseHex=function(e,t){this.length=Math.ceil((e.length-t)/6),this.words=new Array(this.length);for(var r=0;r=t;r-=6)o=s(e,r,r+6),this.words[n]|=o<>>26-i&4194303,(i+=24)>=26&&(i-=26,n++);r+6!==t&&(o=s(e,t,r+6),this.words[n]|=o<>>26-i&4194303),this.strip()},i.prototype._parseBase=function(e,t,r){this.words=[0],this.length=1;for(var n=0,o=1;o<=67108863;o*=t)n++;n--,o=o/t|0;for(var i=e.length-r,a=i%n,s=Math.min(i,i-a)+r,c=0,f=r;f1&&0===this.words[this.length-1];)this.length--;return this._normSign()},i.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},i.prototype.inspect=function(){return(this.red?\"\"};var c=[\"\",\"0\",\"00\",\"000\",\"0000\",\"00000\",\"000000\",\"0000000\",\"00000000\",\"000000000\",\"0000000000\",\"00000000000\",\"000000000000\",\"0000000000000\",\"00000000000000\",\"000000000000000\",\"0000000000000000\",\"00000000000000000\",\"000000000000000000\",\"0000000000000000000\",\"00000000000000000000\",\"000000000000000000000\",\"0000000000000000000000\",\"00000000000000000000000\",\"000000000000000000000000\",\"0000000000000000000000000\"],f=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],l=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];function h(e,t,r){r.negative=t.negative^e.negative;var n=e.length+t.length|0;r.length=n,n=n-1|0;var o=0|e.words[0],i=0|t.words[0],a=o*i,s=67108863&a,u=a/67108864|0;r.words[0]=s;for(var c=1;c>>26,l=67108863&u,h=Math.min(c,t.length-1),d=Math.max(0,c-e.length+1);d<=h;d++){var p=c-d|0;f+=(a=(o=0|e.words[p])*(i=0|t.words[d])+l)/67108864|0,l=67108863&a}r.words[c]=0|l,u=0|f}return 0!==u?r.words[c]=0|u:r.length--,r.strip()}i.prototype.toString=function(e,t){var r;if(t=0|t||1,16===(e=e||10)||\"hex\"===e){r=\"\";for(var o=0,i=0,a=0;a>>24-o&16777215)||a!==this.length-1?c[6-u.length]+u+r:u+r,(o+=2)>=26&&(o-=26,a--)}for(0!==i&&(r=i.toString(16)+r);r.length%t!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}if(e===(0|e)&&e>=2&&e<=36){var h=f[e],d=l[e];r=\"\";var p=this.clone();for(p.negative=0;!p.isZero();){var y=p.modn(d).toString(e);r=(p=p.idivn(d)).isZero()?y+r:c[h-y.length]+y+r}for(this.isZero()&&(r=\"0\"+r);r.length%t!=0;)r=\"0\"+r;return 0!==this.negative&&(r=\"-\"+r),r}n(!1,\"Base should be between 2 and 36\")},i.prototype.toNumber=function(){var e=this.words[0];return 2===this.length?e+=67108864*this.words[1]:3===this.length&&1===this.words[2]?e+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,\"Number can only safely store up to 53 bits\"),0!==this.negative?-e:e},i.prototype.toJSON=function(){return this.toString(16)},i.prototype.toBuffer=function(e,t){return n(void 0!==a),this.toArrayLike(a,e,t)},i.prototype.toArray=function(e,t){return this.toArrayLike(Array,e,t)},i.prototype.toArrayLike=function(e,t,r){var o=this.byteLength(),i=r||Math.max(1,o);n(o<=i,\"byte array longer than desired length\"),n(i>0,\"Requested array length <= 0\"),this.strip();var a,s,u=\"le\"===t,c=new e(i),f=this.clone();if(u){for(s=0;!f.isZero();s++)a=f.andln(255),f.iushrn(8),c[s]=a;for(;s=4096&&(r+=13,t>>>=13),t>=64&&(r+=7,t>>>=7),t>=8&&(r+=4,t>>>=4),t>=2&&(r+=2,t>>>=2),r+t},i.prototype._zeroBits=function(e){if(0===e)return 26;var t=e,r=0;return 0==(8191&t)&&(r+=13,t>>>=13),0==(127&t)&&(r+=7,t>>>=7),0==(15&t)&&(r+=4,t>>>=4),0==(3&t)&&(r+=2,t>>>=2),0==(1&t)&&r++,r},i.prototype.bitLength=function(){var e=this.words[this.length-1],t=this._countBits(e);return 26*(this.length-1)+t},i.prototype.zeroBits=function(){if(this.isZero())return 0;for(var e=0,t=0;te.length?this.clone().ior(e):e.clone().ior(this)},i.prototype.uor=function(e){return this.length>e.length?this.clone().iuor(e):e.clone().iuor(this)},i.prototype.iuand=function(e){var t;t=this.length>e.length?e:this;for(var r=0;re.length?this.clone().iand(e):e.clone().iand(this)},i.prototype.uand=function(e){return this.length>e.length?this.clone().iuand(e):e.clone().iuand(this)},i.prototype.iuxor=function(e){var t,r;this.length>e.length?(t=this,r=e):(t=e,r=this);for(var n=0;ne.length?this.clone().ixor(e):e.clone().ixor(this)},i.prototype.uxor=function(e){return this.length>e.length?this.clone().iuxor(e):e.clone().iuxor(this)},i.prototype.inotn=function(e){n(\"number\"==typeof e&&e>=0);var t=0|Math.ceil(e/26),r=e%26;this._expand(t),r>0&&t--;for(var o=0;o0&&(this.words[o]=~this.words[o]&67108863>>26-r),this.strip()},i.prototype.notn=function(e){return this.clone().inotn(e)},i.prototype.setn=function(e,t){n(\"number\"==typeof e&&e>=0);var r=e/26|0,o=e%26;return this._expand(r+1),this.words[r]=t?this.words[r]|1<e.length?(r=this,n=e):(r=e,n=this);for(var o=0,i=0;i>>26;for(;0!==o&&i>>26;if(this.length=r.length,0!==o)this.words[this.length]=o,this.length++;else if(r!==this)for(;ie.length?this.clone().iadd(e):e.clone().iadd(this)},i.prototype.isub=function(e){if(0!==e.negative){e.negative=0;var t=this.iadd(e);return e.negative=1,t._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(e),this.negative=1,this._normSign();var r,n,o=this.cmp(e);if(0===o)return this.negative=0,this.length=1,this.words[0]=0,this;o>0?(r=this,n=e):(r=e,n=this);for(var i=0,a=0;a>26,this.words[a]=67108863&t;for(;0!==i&&a>26,this.words[a]=67108863&t;if(0===i&&a>>13,d=0|a[1],p=8191&d,y=d>>>13,m=0|a[2],b=8191&m,v=m>>>13,g=0|a[3],w=8191&g,_=g>>>13,k=0|a[4],x=8191&k,S=k>>>13,O=0|a[5],E=8191&O,R=O>>>13,j=0|a[6],T=8191&j,C=j>>>13,P=0|a[7],A=8191&P,M=P>>>13,I=0|a[8],N=8191&I,D=I>>>13,B=0|a[9],F=8191&B,L=B>>>13,z=0|s[0],U=8191&z,H=z>>>13,V=0|s[1],W=8191&V,q=V>>>13,$=0|s[2],X=8191&$,K=$>>>13,Y=0|s[3],Z=8191&Y,G=Y>>>13,J=0|s[4],Q=8191&J,ee=J>>>13,te=0|s[5],re=8191&te,ne=te>>>13,oe=0|s[6],ie=8191&oe,ae=oe>>>13,se=0|s[7],ue=8191&se,ce=se>>>13,fe=0|s[8],le=8191&fe,he=fe>>>13,de=0|s[9],pe=8191&de,ye=de>>>13;r.negative=e.negative^t.negative,r.length=19;var me=(c+(n=Math.imul(l,U))|0)+((8191&(o=(o=Math.imul(l,H))+Math.imul(h,U)|0))<<13)|0;c=((i=Math.imul(h,H))+(o>>>13)|0)+(me>>>26)|0,me&=67108863,n=Math.imul(p,U),o=(o=Math.imul(p,H))+Math.imul(y,U)|0,i=Math.imul(y,H);var be=(c+(n=n+Math.imul(l,W)|0)|0)+((8191&(o=(o=o+Math.imul(l,q)|0)+Math.imul(h,W)|0))<<13)|0;c=((i=i+Math.imul(h,q)|0)+(o>>>13)|0)+(be>>>26)|0,be&=67108863,n=Math.imul(b,U),o=(o=Math.imul(b,H))+Math.imul(v,U)|0,i=Math.imul(v,H),n=n+Math.imul(p,W)|0,o=(o=o+Math.imul(p,q)|0)+Math.imul(y,W)|0,i=i+Math.imul(y,q)|0;var ve=(c+(n=n+Math.imul(l,X)|0)|0)+((8191&(o=(o=o+Math.imul(l,K)|0)+Math.imul(h,X)|0))<<13)|0;c=((i=i+Math.imul(h,K)|0)+(o>>>13)|0)+(ve>>>26)|0,ve&=67108863,n=Math.imul(w,U),o=(o=Math.imul(w,H))+Math.imul(_,U)|0,i=Math.imul(_,H),n=n+Math.imul(b,W)|0,o=(o=o+Math.imul(b,q)|0)+Math.imul(v,W)|0,i=i+Math.imul(v,q)|0,n=n+Math.imul(p,X)|0,o=(o=o+Math.imul(p,K)|0)+Math.imul(y,X)|0,i=i+Math.imul(y,K)|0;var ge=(c+(n=n+Math.imul(l,Z)|0)|0)+((8191&(o=(o=o+Math.imul(l,G)|0)+Math.imul(h,Z)|0))<<13)|0;c=((i=i+Math.imul(h,G)|0)+(o>>>13)|0)+(ge>>>26)|0,ge&=67108863,n=Math.imul(x,U),o=(o=Math.imul(x,H))+Math.imul(S,U)|0,i=Math.imul(S,H),n=n+Math.imul(w,W)|0,o=(o=o+Math.imul(w,q)|0)+Math.imul(_,W)|0,i=i+Math.imul(_,q)|0,n=n+Math.imul(b,X)|0,o=(o=o+Math.imul(b,K)|0)+Math.imul(v,X)|0,i=i+Math.imul(v,K)|0,n=n+Math.imul(p,Z)|0,o=(o=o+Math.imul(p,G)|0)+Math.imul(y,Z)|0,i=i+Math.imul(y,G)|0;var we=(c+(n=n+Math.imul(l,Q)|0)|0)+((8191&(o=(o=o+Math.imul(l,ee)|0)+Math.imul(h,Q)|0))<<13)|0;c=((i=i+Math.imul(h,ee)|0)+(o>>>13)|0)+(we>>>26)|0,we&=67108863,n=Math.imul(E,U),o=(o=Math.imul(E,H))+Math.imul(R,U)|0,i=Math.imul(R,H),n=n+Math.imul(x,W)|0,o=(o=o+Math.imul(x,q)|0)+Math.imul(S,W)|0,i=i+Math.imul(S,q)|0,n=n+Math.imul(w,X)|0,o=(o=o+Math.imul(w,K)|0)+Math.imul(_,X)|0,i=i+Math.imul(_,K)|0,n=n+Math.imul(b,Z)|0,o=(o=o+Math.imul(b,G)|0)+Math.imul(v,Z)|0,i=i+Math.imul(v,G)|0,n=n+Math.imul(p,Q)|0,o=(o=o+Math.imul(p,ee)|0)+Math.imul(y,Q)|0,i=i+Math.imul(y,ee)|0;var _e=(c+(n=n+Math.imul(l,re)|0)|0)+((8191&(o=(o=o+Math.imul(l,ne)|0)+Math.imul(h,re)|0))<<13)|0;c=((i=i+Math.imul(h,ne)|0)+(o>>>13)|0)+(_e>>>26)|0,_e&=67108863,n=Math.imul(T,U),o=(o=Math.imul(T,H))+Math.imul(C,U)|0,i=Math.imul(C,H),n=n+Math.imul(E,W)|0,o=(o=o+Math.imul(E,q)|0)+Math.imul(R,W)|0,i=i+Math.imul(R,q)|0,n=n+Math.imul(x,X)|0,o=(o=o+Math.imul(x,K)|0)+Math.imul(S,X)|0,i=i+Math.imul(S,K)|0,n=n+Math.imul(w,Z)|0,o=(o=o+Math.imul(w,G)|0)+Math.imul(_,Z)|0,i=i+Math.imul(_,G)|0,n=n+Math.imul(b,Q)|0,o=(o=o+Math.imul(b,ee)|0)+Math.imul(v,Q)|0,i=i+Math.imul(v,ee)|0,n=n+Math.imul(p,re)|0,o=(o=o+Math.imul(p,ne)|0)+Math.imul(y,re)|0,i=i+Math.imul(y,ne)|0;var ke=(c+(n=n+Math.imul(l,ie)|0)|0)+((8191&(o=(o=o+Math.imul(l,ae)|0)+Math.imul(h,ie)|0))<<13)|0;c=((i=i+Math.imul(h,ae)|0)+(o>>>13)|0)+(ke>>>26)|0,ke&=67108863,n=Math.imul(A,U),o=(o=Math.imul(A,H))+Math.imul(M,U)|0,i=Math.imul(M,H),n=n+Math.imul(T,W)|0,o=(o=o+Math.imul(T,q)|0)+Math.imul(C,W)|0,i=i+Math.imul(C,q)|0,n=n+Math.imul(E,X)|0,o=(o=o+Math.imul(E,K)|0)+Math.imul(R,X)|0,i=i+Math.imul(R,K)|0,n=n+Math.imul(x,Z)|0,o=(o=o+Math.imul(x,G)|0)+Math.imul(S,Z)|0,i=i+Math.imul(S,G)|0,n=n+Math.imul(w,Q)|0,o=(o=o+Math.imul(w,ee)|0)+Math.imul(_,Q)|0,i=i+Math.imul(_,ee)|0,n=n+Math.imul(b,re)|0,o=(o=o+Math.imul(b,ne)|0)+Math.imul(v,re)|0,i=i+Math.imul(v,ne)|0,n=n+Math.imul(p,ie)|0,o=(o=o+Math.imul(p,ae)|0)+Math.imul(y,ie)|0,i=i+Math.imul(y,ae)|0;var xe=(c+(n=n+Math.imul(l,ue)|0)|0)+((8191&(o=(o=o+Math.imul(l,ce)|0)+Math.imul(h,ue)|0))<<13)|0;c=((i=i+Math.imul(h,ce)|0)+(o>>>13)|0)+(xe>>>26)|0,xe&=67108863,n=Math.imul(N,U),o=(o=Math.imul(N,H))+Math.imul(D,U)|0,i=Math.imul(D,H),n=n+Math.imul(A,W)|0,o=(o=o+Math.imul(A,q)|0)+Math.imul(M,W)|0,i=i+Math.imul(M,q)|0,n=n+Math.imul(T,X)|0,o=(o=o+Math.imul(T,K)|0)+Math.imul(C,X)|0,i=i+Math.imul(C,K)|0,n=n+Math.imul(E,Z)|0,o=(o=o+Math.imul(E,G)|0)+Math.imul(R,Z)|0,i=i+Math.imul(R,G)|0,n=n+Math.imul(x,Q)|0,o=(o=o+Math.imul(x,ee)|0)+Math.imul(S,Q)|0,i=i+Math.imul(S,ee)|0,n=n+Math.imul(w,re)|0,o=(o=o+Math.imul(w,ne)|0)+Math.imul(_,re)|0,i=i+Math.imul(_,ne)|0,n=n+Math.imul(b,ie)|0,o=(o=o+Math.imul(b,ae)|0)+Math.imul(v,ie)|0,i=i+Math.imul(v,ae)|0,n=n+Math.imul(p,ue)|0,o=(o=o+Math.imul(p,ce)|0)+Math.imul(y,ue)|0,i=i+Math.imul(y,ce)|0;var Se=(c+(n=n+Math.imul(l,le)|0)|0)+((8191&(o=(o=o+Math.imul(l,he)|0)+Math.imul(h,le)|0))<<13)|0;c=((i=i+Math.imul(h,he)|0)+(o>>>13)|0)+(Se>>>26)|0,Se&=67108863,n=Math.imul(F,U),o=(o=Math.imul(F,H))+Math.imul(L,U)|0,i=Math.imul(L,H),n=n+Math.imul(N,W)|0,o=(o=o+Math.imul(N,q)|0)+Math.imul(D,W)|0,i=i+Math.imul(D,q)|0,n=n+Math.imul(A,X)|0,o=(o=o+Math.imul(A,K)|0)+Math.imul(M,X)|0,i=i+Math.imul(M,K)|0,n=n+Math.imul(T,Z)|0,o=(o=o+Math.imul(T,G)|0)+Math.imul(C,Z)|0,i=i+Math.imul(C,G)|0,n=n+Math.imul(E,Q)|0,o=(o=o+Math.imul(E,ee)|0)+Math.imul(R,Q)|0,i=i+Math.imul(R,ee)|0,n=n+Math.imul(x,re)|0,o=(o=o+Math.imul(x,ne)|0)+Math.imul(S,re)|0,i=i+Math.imul(S,ne)|0,n=n+Math.imul(w,ie)|0,o=(o=o+Math.imul(w,ae)|0)+Math.imul(_,ie)|0,i=i+Math.imul(_,ae)|0,n=n+Math.imul(b,ue)|0,o=(o=o+Math.imul(b,ce)|0)+Math.imul(v,ue)|0,i=i+Math.imul(v,ce)|0,n=n+Math.imul(p,le)|0,o=(o=o+Math.imul(p,he)|0)+Math.imul(y,le)|0,i=i+Math.imul(y,he)|0;var Oe=(c+(n=n+Math.imul(l,pe)|0)|0)+((8191&(o=(o=o+Math.imul(l,ye)|0)+Math.imul(h,pe)|0))<<13)|0;c=((i=i+Math.imul(h,ye)|0)+(o>>>13)|0)+(Oe>>>26)|0,Oe&=67108863,n=Math.imul(F,W),o=(o=Math.imul(F,q))+Math.imul(L,W)|0,i=Math.imul(L,q),n=n+Math.imul(N,X)|0,o=(o=o+Math.imul(N,K)|0)+Math.imul(D,X)|0,i=i+Math.imul(D,K)|0,n=n+Math.imul(A,Z)|0,o=(o=o+Math.imul(A,G)|0)+Math.imul(M,Z)|0,i=i+Math.imul(M,G)|0,n=n+Math.imul(T,Q)|0,o=(o=o+Math.imul(T,ee)|0)+Math.imul(C,Q)|0,i=i+Math.imul(C,ee)|0,n=n+Math.imul(E,re)|0,o=(o=o+Math.imul(E,ne)|0)+Math.imul(R,re)|0,i=i+Math.imul(R,ne)|0,n=n+Math.imul(x,ie)|0,o=(o=o+Math.imul(x,ae)|0)+Math.imul(S,ie)|0,i=i+Math.imul(S,ae)|0,n=n+Math.imul(w,ue)|0,o=(o=o+Math.imul(w,ce)|0)+Math.imul(_,ue)|0,i=i+Math.imul(_,ce)|0,n=n+Math.imul(b,le)|0,o=(o=o+Math.imul(b,he)|0)+Math.imul(v,le)|0,i=i+Math.imul(v,he)|0;var Ee=(c+(n=n+Math.imul(p,pe)|0)|0)+((8191&(o=(o=o+Math.imul(p,ye)|0)+Math.imul(y,pe)|0))<<13)|0;c=((i=i+Math.imul(y,ye)|0)+(o>>>13)|0)+(Ee>>>26)|0,Ee&=67108863,n=Math.imul(F,X),o=(o=Math.imul(F,K))+Math.imul(L,X)|0,i=Math.imul(L,K),n=n+Math.imul(N,Z)|0,o=(o=o+Math.imul(N,G)|0)+Math.imul(D,Z)|0,i=i+Math.imul(D,G)|0,n=n+Math.imul(A,Q)|0,o=(o=o+Math.imul(A,ee)|0)+Math.imul(M,Q)|0,i=i+Math.imul(M,ee)|0,n=n+Math.imul(T,re)|0,o=(o=o+Math.imul(T,ne)|0)+Math.imul(C,re)|0,i=i+Math.imul(C,ne)|0,n=n+Math.imul(E,ie)|0,o=(o=o+Math.imul(E,ae)|0)+Math.imul(R,ie)|0,i=i+Math.imul(R,ae)|0,n=n+Math.imul(x,ue)|0,o=(o=o+Math.imul(x,ce)|0)+Math.imul(S,ue)|0,i=i+Math.imul(S,ce)|0,n=n+Math.imul(w,le)|0,o=(o=o+Math.imul(w,he)|0)+Math.imul(_,le)|0,i=i+Math.imul(_,he)|0;var Re=(c+(n=n+Math.imul(b,pe)|0)|0)+((8191&(o=(o=o+Math.imul(b,ye)|0)+Math.imul(v,pe)|0))<<13)|0;c=((i=i+Math.imul(v,ye)|0)+(o>>>13)|0)+(Re>>>26)|0,Re&=67108863,n=Math.imul(F,Z),o=(o=Math.imul(F,G))+Math.imul(L,Z)|0,i=Math.imul(L,G),n=n+Math.imul(N,Q)|0,o=(o=o+Math.imul(N,ee)|0)+Math.imul(D,Q)|0,i=i+Math.imul(D,ee)|0,n=n+Math.imul(A,re)|0,o=(o=o+Math.imul(A,ne)|0)+Math.imul(M,re)|0,i=i+Math.imul(M,ne)|0,n=n+Math.imul(T,ie)|0,o=(o=o+Math.imul(T,ae)|0)+Math.imul(C,ie)|0,i=i+Math.imul(C,ae)|0,n=n+Math.imul(E,ue)|0,o=(o=o+Math.imul(E,ce)|0)+Math.imul(R,ue)|0,i=i+Math.imul(R,ce)|0,n=n+Math.imul(x,le)|0,o=(o=o+Math.imul(x,he)|0)+Math.imul(S,le)|0,i=i+Math.imul(S,he)|0;var je=(c+(n=n+Math.imul(w,pe)|0)|0)+((8191&(o=(o=o+Math.imul(w,ye)|0)+Math.imul(_,pe)|0))<<13)|0;c=((i=i+Math.imul(_,ye)|0)+(o>>>13)|0)+(je>>>26)|0,je&=67108863,n=Math.imul(F,Q),o=(o=Math.imul(F,ee))+Math.imul(L,Q)|0,i=Math.imul(L,ee),n=n+Math.imul(N,re)|0,o=(o=o+Math.imul(N,ne)|0)+Math.imul(D,re)|0,i=i+Math.imul(D,ne)|0,n=n+Math.imul(A,ie)|0,o=(o=o+Math.imul(A,ae)|0)+Math.imul(M,ie)|0,i=i+Math.imul(M,ae)|0,n=n+Math.imul(T,ue)|0,o=(o=o+Math.imul(T,ce)|0)+Math.imul(C,ue)|0,i=i+Math.imul(C,ce)|0,n=n+Math.imul(E,le)|0,o=(o=o+Math.imul(E,he)|0)+Math.imul(R,le)|0,i=i+Math.imul(R,he)|0;var Te=(c+(n=n+Math.imul(x,pe)|0)|0)+((8191&(o=(o=o+Math.imul(x,ye)|0)+Math.imul(S,pe)|0))<<13)|0;c=((i=i+Math.imul(S,ye)|0)+(o>>>13)|0)+(Te>>>26)|0,Te&=67108863,n=Math.imul(F,re),o=(o=Math.imul(F,ne))+Math.imul(L,re)|0,i=Math.imul(L,ne),n=n+Math.imul(N,ie)|0,o=(o=o+Math.imul(N,ae)|0)+Math.imul(D,ie)|0,i=i+Math.imul(D,ae)|0,n=n+Math.imul(A,ue)|0,o=(o=o+Math.imul(A,ce)|0)+Math.imul(M,ue)|0,i=i+Math.imul(M,ce)|0,n=n+Math.imul(T,le)|0,o=(o=o+Math.imul(T,he)|0)+Math.imul(C,le)|0,i=i+Math.imul(C,he)|0;var Ce=(c+(n=n+Math.imul(E,pe)|0)|0)+((8191&(o=(o=o+Math.imul(E,ye)|0)+Math.imul(R,pe)|0))<<13)|0;c=((i=i+Math.imul(R,ye)|0)+(o>>>13)|0)+(Ce>>>26)|0,Ce&=67108863,n=Math.imul(F,ie),o=(o=Math.imul(F,ae))+Math.imul(L,ie)|0,i=Math.imul(L,ae),n=n+Math.imul(N,ue)|0,o=(o=o+Math.imul(N,ce)|0)+Math.imul(D,ue)|0,i=i+Math.imul(D,ce)|0,n=n+Math.imul(A,le)|0,o=(o=o+Math.imul(A,he)|0)+Math.imul(M,le)|0,i=i+Math.imul(M,he)|0;var Pe=(c+(n=n+Math.imul(T,pe)|0)|0)+((8191&(o=(o=o+Math.imul(T,ye)|0)+Math.imul(C,pe)|0))<<13)|0;c=((i=i+Math.imul(C,ye)|0)+(o>>>13)|0)+(Pe>>>26)|0,Pe&=67108863,n=Math.imul(F,ue),o=(o=Math.imul(F,ce))+Math.imul(L,ue)|0,i=Math.imul(L,ce),n=n+Math.imul(N,le)|0,o=(o=o+Math.imul(N,he)|0)+Math.imul(D,le)|0,i=i+Math.imul(D,he)|0;var Ae=(c+(n=n+Math.imul(A,pe)|0)|0)+((8191&(o=(o=o+Math.imul(A,ye)|0)+Math.imul(M,pe)|0))<<13)|0;c=((i=i+Math.imul(M,ye)|0)+(o>>>13)|0)+(Ae>>>26)|0,Ae&=67108863,n=Math.imul(F,le),o=(o=Math.imul(F,he))+Math.imul(L,le)|0,i=Math.imul(L,he);var Me=(c+(n=n+Math.imul(N,pe)|0)|0)+((8191&(o=(o=o+Math.imul(N,ye)|0)+Math.imul(D,pe)|0))<<13)|0;c=((i=i+Math.imul(D,ye)|0)+(o>>>13)|0)+(Me>>>26)|0,Me&=67108863;var Ie=(c+(n=Math.imul(F,pe))|0)+((8191&(o=(o=Math.imul(F,ye))+Math.imul(L,pe)|0))<<13)|0;return c=((i=Math.imul(L,ye))+(o>>>13)|0)+(Ie>>>26)|0,Ie&=67108863,u[0]=me,u[1]=be,u[2]=ve,u[3]=ge,u[4]=we,u[5]=_e,u[6]=ke,u[7]=xe,u[8]=Se,u[9]=Oe,u[10]=Ee,u[11]=Re,u[12]=je,u[13]=Te,u[14]=Ce,u[15]=Pe,u[16]=Ae,u[17]=Me,u[18]=Ie,0!==c&&(u[19]=c,r.length++),r};function p(e,t,r){return(new y).mulp(e,t,r)}function y(e,t){this.x=e,this.y=t}Math.imul||(d=h),i.prototype.mulTo=function(e,t){var r=this.length+e.length;return 10===this.length&&10===e.length?d(this,e,t):r<63?h(this,e,t):r<1024?function(e,t,r){r.negative=t.negative^e.negative,r.length=e.length+t.length;for(var n=0,o=0,i=0;i>>26)|0)>>>26,a&=67108863}r.words[i]=s,n=a,a=o}return 0!==n?r.words[i]=n:r.length--,r.strip()}(this,e,t):p(this,e,t)},y.prototype.makeRBT=function(e){for(var t=new Array(e),r=i.prototype._countBits(e)-1,n=0;n>=1;return n},y.prototype.permute=function(e,t,r,n,o,i){for(var a=0;a>>=1)o++;return 1<>>=13,r[2*a+1]=8191&i,i>>>=13;for(a=2*t;a>=26,t+=o/67108864|0,t+=i>>>26,this.words[r]=67108863&i}return 0!==t&&(this.words[r]=t,this.length++),this},i.prototype.muln=function(e){return this.clone().imuln(e)},i.prototype.sqr=function(){return this.mul(this)},i.prototype.isqr=function(){return this.imul(this.clone())},i.prototype.pow=function(e){var t=function(e){for(var t=new Array(e.bitLength()),r=0;r>>o}return t}(e);if(0===t.length)return new i(1);for(var r=this,n=0;n=0);var t,r=e%26,o=(e-r)/26,i=67108863>>>26-r<<26-r;if(0!==r){var a=0;for(t=0;t>>26-r}a&&(this.words[t]=a,this.length++)}if(0!==o){for(t=this.length-1;t>=0;t--)this.words[t+o]=this.words[t];for(t=0;t=0),o=t?(t-t%26)/26:0;var i=e%26,a=Math.min((e-i)/26,this.length),s=67108863^67108863>>>i<a)for(this.length-=a,c=0;c=0&&(0!==f||c>=o);c--){var l=0|this.words[c];this.words[c]=f<<26-i|l>>>i,f=l&s}return u&&0!==f&&(u.words[u.length++]=f),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},i.prototype.ishrn=function(e,t,r){return n(0===this.negative),this.iushrn(e,t,r)},i.prototype.shln=function(e){return this.clone().ishln(e)},i.prototype.ushln=function(e){return this.clone().iushln(e)},i.prototype.shrn=function(e){return this.clone().ishrn(e)},i.prototype.ushrn=function(e){return this.clone().iushrn(e)},i.prototype.testn=function(e){n(\"number\"==typeof e&&e>=0);var t=e%26,r=(e-t)/26,o=1<=0);var t=e%26,r=(e-t)/26;if(n(0===this.negative,\"imaskn works only with positive numbers\"),this.length<=r)return this;if(0!==t&&r++,this.length=Math.min(r,this.length),0!==t){var o=67108863^67108863>>>t<=67108864;t++)this.words[t]-=67108864,t===this.length-1?this.words[t+1]=1:this.words[t+1]++;return this.length=Math.max(this.length,t+1),this},i.prototype.isubn=function(e){if(n(\"number\"==typeof e),n(e<67108864),e<0)return this.iaddn(-e);if(0!==this.negative)return this.negative=0,this.iaddn(e),this.negative=1,this;if(this.words[0]-=e,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var t=0;t>26)-(u/67108864|0),this.words[o+r]=67108863&i}for(;o>26,this.words[o+r]=67108863&i;if(0===s)return this.strip();for(n(-1===s),s=0,o=0;o>26,this.words[o]=67108863&i;return this.negative=1,this.strip()},i.prototype._wordDiv=function(e,t){var r=(this.length,e.length),n=this.clone(),o=e,a=0|o.words[o.length-1];0!==(r=26-this._countBits(a))&&(o=o.ushln(r),n.iushln(r),a=0|o.words[o.length-1]);var s,u=n.length-o.length;if(\"mod\"!==t){(s=new i(null)).length=u+1,s.words=new Array(s.length);for(var c=0;c=0;l--){var h=67108864*(0|n.words[o.length+l])+(0|n.words[o.length+l-1]);for(h=Math.min(h/a|0,67108863),n._ishlnsubmul(o,h,l);0!==n.negative;)h--,n.negative=0,n._ishlnsubmul(o,1,l),n.isZero()||(n.negative^=1);s&&(s.words[l]=h)}return s&&s.strip(),n.strip(),\"div\"!==t&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},i.prototype.divmod=function(e,t,r){return n(!e.isZero()),this.isZero()?{div:new i(0),mod:new i(0)}:0!==this.negative&&0===e.negative?(s=this.neg().divmod(e,t),\"mod\"!==t&&(o=s.div.neg()),\"div\"!==t&&(a=s.mod.neg(),r&&0!==a.negative&&a.iadd(e)),{div:o,mod:a}):0===this.negative&&0!==e.negative?(s=this.divmod(e.neg(),t),\"mod\"!==t&&(o=s.div.neg()),{div:o,mod:s.mod}):0!=(this.negative&e.negative)?(s=this.neg().divmod(e.neg(),t),\"div\"!==t&&(a=s.mod.neg(),r&&0!==a.negative&&a.isub(e)),{div:s.div,mod:a}):e.length>this.length||this.cmp(e)<0?{div:new i(0),mod:this}:1===e.length?\"div\"===t?{div:this.divn(e.words[0]),mod:null}:\"mod\"===t?{div:null,mod:new i(this.modn(e.words[0]))}:{div:this.divn(e.words[0]),mod:new i(this.modn(e.words[0]))}:this._wordDiv(e,t);var o,a,s},i.prototype.div=function(e){return this.divmod(e,\"div\",!1).div},i.prototype.mod=function(e){return this.divmod(e,\"mod\",!1).mod},i.prototype.umod=function(e){return this.divmod(e,\"mod\",!0).mod},i.prototype.divRound=function(e){var t=this.divmod(e);if(t.mod.isZero())return t.div;var r=0!==t.div.negative?t.mod.isub(e):t.mod,n=e.ushrn(1),o=e.andln(1),i=r.cmp(n);return i<0||1===o&&0===i?t.div:0!==t.div.negative?t.div.isubn(1):t.div.iaddn(1)},i.prototype.modn=function(e){n(e<=67108863);for(var t=(1<<26)%e,r=0,o=this.length-1;o>=0;o--)r=(t*r+(0|this.words[o]))%e;return r},i.prototype.idivn=function(e){n(e<=67108863);for(var t=0,r=this.length-1;r>=0;r--){var o=(0|this.words[r])+67108864*t;this.words[r]=o/e|0,t=o%e}return this.strip()},i.prototype.divn=function(e){return this.clone().idivn(e)},i.prototype.egcd=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var o=new i(1),a=new i(0),s=new i(0),u=new i(1),c=0;t.isEven()&&r.isEven();)t.iushrn(1),r.iushrn(1),++c;for(var f=r.clone(),l=t.clone();!t.isZero();){for(var h=0,d=1;0==(t.words[0]&d)&&h<26;++h,d<<=1);if(h>0)for(t.iushrn(h);h-- >0;)(o.isOdd()||a.isOdd())&&(o.iadd(f),a.isub(l)),o.iushrn(1),a.iushrn(1);for(var p=0,y=1;0==(r.words[0]&y)&&p<26;++p,y<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||u.isOdd())&&(s.iadd(f),u.isub(l)),s.iushrn(1),u.iushrn(1);t.cmp(r)>=0?(t.isub(r),o.isub(s),a.isub(u)):(r.isub(t),s.isub(o),u.isub(a))}return{a:s,b:u,gcd:r.iushln(c)}},i.prototype._invmp=function(e){n(0===e.negative),n(!e.isZero());var t=this,r=e.clone();t=0!==t.negative?t.umod(e):t.clone();for(var o,a=new i(1),s=new i(0),u=r.clone();t.cmpn(1)>0&&r.cmpn(1)>0;){for(var c=0,f=1;0==(t.words[0]&f)&&c<26;++c,f<<=1);if(c>0)for(t.iushrn(c);c-- >0;)a.isOdd()&&a.iadd(u),a.iushrn(1);for(var l=0,h=1;0==(r.words[0]&h)&&l<26;++l,h<<=1);if(l>0)for(r.iushrn(l);l-- >0;)s.isOdd()&&s.iadd(u),s.iushrn(1);t.cmp(r)>=0?(t.isub(r),a.isub(s)):(r.isub(t),s.isub(a))}return(o=0===t.cmpn(1)?a:s).cmpn(0)<0&&o.iadd(e),o},i.prototype.gcd=function(e){if(this.isZero())return e.abs();if(e.isZero())return this.abs();var t=this.clone(),r=e.clone();t.negative=0,r.negative=0;for(var n=0;t.isEven()&&r.isEven();n++)t.iushrn(1),r.iushrn(1);for(;;){for(;t.isEven();)t.iushrn(1);for(;r.isEven();)r.iushrn(1);var o=t.cmp(r);if(o<0){var i=t;t=r,r=i}else if(0===o||0===r.cmpn(1))break;t.isub(r)}return r.iushln(n)},i.prototype.invm=function(e){return this.egcd(e).a.umod(e)},i.prototype.isEven=function(){return 0==(1&this.words[0])},i.prototype.isOdd=function(){return 1==(1&this.words[0])},i.prototype.andln=function(e){return this.words[0]&e},i.prototype.bincn=function(e){n(\"number\"==typeof e);var t=e%26,r=(e-t)/26,o=1<>>26,s&=67108863,this.words[a]=s}return 0!==i&&(this.words[a]=i,this.length++),this},i.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},i.prototype.cmpn=function(e){var t,r=e<0;if(0!==this.negative&&!r)return-1;if(0===this.negative&&r)return 1;if(this.strip(),this.length>1)t=1;else{r&&(e=-e),n(e<=67108863,\"Number is too big\");var o=0|this.words[0];t=o===e?0:oe.length)return 1;if(this.length=0;r--){var n=0|this.words[r],o=0|e.words[r];if(n!==o){no&&(t=1);break}}return t},i.prototype.gtn=function(e){return 1===this.cmpn(e)},i.prototype.gt=function(e){return 1===this.cmp(e)},i.prototype.gten=function(e){return this.cmpn(e)>=0},i.prototype.gte=function(e){return this.cmp(e)>=0},i.prototype.ltn=function(e){return-1===this.cmpn(e)},i.prototype.lt=function(e){return-1===this.cmp(e)},i.prototype.lten=function(e){return this.cmpn(e)<=0},i.prototype.lte=function(e){return this.cmp(e)<=0},i.prototype.eqn=function(e){return 0===this.cmpn(e)},i.prototype.eq=function(e){return 0===this.cmp(e)},i.red=function(e){return new k(e)},i.prototype.toRed=function(e){return n(!this.red,\"Already a number in reduction context\"),n(0===this.negative,\"red works only with positives\"),e.convertTo(this)._forceRed(e)},i.prototype.fromRed=function(){return n(this.red,\"fromRed works only with numbers in reduction context\"),this.red.convertFrom(this)},i.prototype._forceRed=function(e){return this.red=e,this},i.prototype.forceRed=function(e){return n(!this.red,\"Already a number in reduction context\"),this._forceRed(e)},i.prototype.redAdd=function(e){return n(this.red,\"redAdd works only with red numbers\"),this.red.add(this,e)},i.prototype.redIAdd=function(e){return n(this.red,\"redIAdd works only with red numbers\"),this.red.iadd(this,e)},i.prototype.redSub=function(e){return n(this.red,\"redSub works only with red numbers\"),this.red.sub(this,e)},i.prototype.redISub=function(e){return n(this.red,\"redISub works only with red numbers\"),this.red.isub(this,e)},i.prototype.redShl=function(e){return n(this.red,\"redShl works only with red numbers\"),this.red.shl(this,e)},i.prototype.redMul=function(e){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.mul(this,e)},i.prototype.redIMul=function(e){return n(this.red,\"redMul works only with red numbers\"),this.red._verify2(this,e),this.red.imul(this,e)},i.prototype.redSqr=function(){return n(this.red,\"redSqr works only with red numbers\"),this.red._verify1(this),this.red.sqr(this)},i.prototype.redISqr=function(){return n(this.red,\"redISqr works only with red numbers\"),this.red._verify1(this),this.red.isqr(this)},i.prototype.redSqrt=function(){return n(this.red,\"redSqrt works only with red numbers\"),this.red._verify1(this),this.red.sqrt(this)},i.prototype.redInvm=function(){return n(this.red,\"redInvm works only with red numbers\"),this.red._verify1(this),this.red.invm(this)},i.prototype.redNeg=function(){return n(this.red,\"redNeg works only with red numbers\"),this.red._verify1(this),this.red.neg(this)},i.prototype.redPow=function(e){return n(this.red&&!e.red,\"redPow(normalNum)\"),this.red._verify1(this),this.red.pow(this,e)};var m={k256:null,p224:null,p192:null,p25519:null};function b(e,t){this.name=e,this.p=new i(t,16),this.n=this.p.bitLength(),this.k=new i(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function v(){b.call(this,\"k256\",\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\")}function g(){b.call(this,\"p224\",\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\")}function w(){b.call(this,\"p192\",\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\")}function _(){b.call(this,\"25519\",\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\")}function k(e){if(\"string\"==typeof e){var t=i._prime(e);this.m=t.p,this.prime=t}else n(e.gtn(1),\"modulus must be greater than 1\"),this.m=e,this.prime=null}function x(e){k.call(this,e),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new i(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}b.prototype._tmp=function(){var e=new i(null);return e.words=new Array(Math.ceil(this.n/13)),e},b.prototype.ireduce=function(e){var t,r=e;do{this.split(r,this.tmp),t=(r=(r=this.imulK(r)).iadd(this.tmp)).bitLength()}while(t>this.n);var n=t0?r.isub(this.p):r.strip(),r},b.prototype.split=function(e,t){e.iushrn(this.n,0,t)},b.prototype.imulK=function(e){return e.imul(this.k)},o(v,b),v.prototype.split=function(e,t){for(var r=Math.min(e.length,9),n=0;n>>22,o=i}o>>>=22,e.words[n-10]=o,0===o&&e.length>10?e.length-=10:e.length-=9},v.prototype.imulK=function(e){e.words[e.length]=0,e.words[e.length+1]=0,e.length+=2;for(var t=0,r=0;r>>=26,e.words[r]=o,t=n}return 0!==t&&(e.words[e.length++]=t),e},i._prime=function(e){if(m[e])return m[e];var t;if(\"k256\"===e)t=new v;else if(\"p224\"===e)t=new g;else if(\"p192\"===e)t=new w;else{if(\"p25519\"!==e)throw new Error(\"Unknown prime \"+e);t=new _}return m[e]=t,t},k.prototype._verify1=function(e){n(0===e.negative,\"red works only with positives\"),n(e.red,\"red works only with red numbers\")},k.prototype._verify2=function(e,t){n(0==(e.negative|t.negative),\"red works only with positives\"),n(e.red&&e.red===t.red,\"red works only with red numbers\")},k.prototype.imod=function(e){return this.prime?this.prime.ireduce(e)._forceRed(this):e.umod(this.m)._forceRed(this)},k.prototype.neg=function(e){return e.isZero()?e.clone():this.m.sub(e)._forceRed(this)},k.prototype.add=function(e,t){this._verify2(e,t);var r=e.add(t);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},k.prototype.iadd=function(e,t){this._verify2(e,t);var r=e.iadd(t);return r.cmp(this.m)>=0&&r.isub(this.m),r},k.prototype.sub=function(e,t){this._verify2(e,t);var r=e.sub(t);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},k.prototype.isub=function(e,t){this._verify2(e,t);var r=e.isub(t);return r.cmpn(0)<0&&r.iadd(this.m),r},k.prototype.shl=function(e,t){return this._verify1(e),this.imod(e.ushln(t))},k.prototype.imul=function(e,t){return this._verify2(e,t),this.imod(e.imul(t))},k.prototype.mul=function(e,t){return this._verify2(e,t),this.imod(e.mul(t))},k.prototype.isqr=function(e){return this.imul(e,e.clone())},k.prototype.sqr=function(e){return this.mul(e,e)},k.prototype.sqrt=function(e){if(e.isZero())return e.clone();var t=this.m.andln(3);if(n(t%2==1),3===t){var r=this.m.add(new i(1)).iushrn(2);return this.pow(e,r)}for(var o=this.m.subn(1),a=0;!o.isZero()&&0===o.andln(1);)a++,o.iushrn(1);n(!o.isZero());var s=new i(1).toRed(this),u=s.redNeg(),c=this.m.subn(1).iushrn(1),f=this.m.bitLength();for(f=new i(2*f*f).toRed(this);0!==this.pow(f,c).cmp(u);)f.redIAdd(u);for(var l=this.pow(f,o),h=this.pow(e,o.addn(1).iushrn(1)),d=this.pow(e,o),p=a;0!==d.cmp(s);){for(var y=d,m=0;0!==y.cmp(s);m++)y=y.redSqr();n(m=0;n--){for(var c=t.words[n],f=u-1;f>=0;f--){var l=c>>f&1;o!==r[0]&&(o=this.sqr(o)),0!==l||0!==a?(a<<=1,a|=l,(4===++s||0===n&&0===f)&&(o=this.mul(o,r[a]),s=0,a=0)):s=0}u=26}return o},k.prototype.convertTo=function(e){var t=e.umod(this.m);return t===e?t.clone():t},k.prototype.convertFrom=function(e){var t=e.clone();return t.red=null,t},i.mont=function(e){return new x(e)},o(x,k),x.prototype.convertTo=function(e){return this.imod(e.ushln(this.shift))},x.prototype.convertFrom=function(e){var t=this.imod(e.mul(this.rinv));return t.red=null,t},x.prototype.imul=function(e,t){if(e.isZero()||t.isZero())return e.words[0]=0,e.length=1,e;var r=e.imul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).iushrn(this.shift),i=o;return o.cmp(this.m)>=0?i=o.isub(this.m):o.cmpn(0)<0&&(i=o.iadd(this.m)),i._forceRed(this)},x.prototype.mul=function(e,t){if(e.isZero()||t.isZero())return new i(0)._forceRed(this);var r=e.mul(t),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),o=r.isub(n).iushrn(this.shift),a=o;return o.cmp(this.m)>=0?a=o.isub(this.m):o.cmpn(0)<0&&(a=o.iadd(this.m)),a._forceRed(this)},x.prototype.invm=function(e){return this.imod(e._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===t||t,this)},{buffer:158}],157:[function(e,t,r){var n;function o(e){this.rand=e}if(t.exports=function(e){return n||(n=new o(null)),n.generate(e)},t.exports.Rand=o,o.prototype.generate=function(e){return this._rand(e)},o.prototype._rand=function(e){if(this.rand.getBytes)return this.rand.getBytes(e);for(var t=new Uint8Array(e),r=0;r>>24]^f[p>>>16&255]^l[y>>>8&255]^h[255&m]^t[b++],a=c[p>>>24]^f[y>>>16&255]^l[m>>>8&255]^h[255&d]^t[b++],s=c[y>>>24]^f[m>>>16&255]^l[d>>>8&255]^h[255&p]^t[b++],u=c[m>>>24]^f[d>>>16&255]^l[p>>>8&255]^h[255&y]^t[b++],d=i,p=a,y=s,m=u;return i=(n[d>>>24]<<24|n[p>>>16&255]<<16|n[y>>>8&255]<<8|n[255&m])^t[b++],a=(n[p>>>24]<<24|n[y>>>16&255]<<16|n[m>>>8&255]<<8|n[255&d])^t[b++],s=(n[y>>>24]<<24|n[m>>>16&255]<<16|n[d>>>8&255]<<8|n[255&p])^t[b++],u=(n[m>>>24]<<24|n[d>>>16&255]<<16|n[p>>>8&255]<<8|n[255&y])^t[b++],[i>>>=0,a>>>=0,s>>>=0,u>>>=0]}var s=[0,1,2,4,8,16,32,64,128,27,54],u=function(){for(var e=new Array(256),t=0;t<256;t++)e[t]=t<128?t<<1:t<<1^283;for(var r=[],n=[],o=[[],[],[],[]],i=[[],[],[],[]],a=0,s=0,u=0;u<256;++u){var c=s^s<<1^s<<2^s<<3^s<<4;c=c>>>8^255&c^99,r[a]=c,n[c]=a;var f=e[a],l=e[f],h=e[l],d=257*e[c]^16843008*c;o[0][a]=d<<24|d>>>8,o[1][a]=d<<16|d>>>16,o[2][a]=d<<8|d>>>24,o[3][a]=d,d=16843009*h^65537*l^257*f^16843008*a,i[0][c]=d<<24|d>>>8,i[1][c]=d<<16|d>>>16,i[2][c]=d<<8|d>>>24,i[3][c]=d,0===a?a=s=1:(a=f^e[e[e[h^f]]],s^=e[e[s]])}return{SBOX:r,INV_SBOX:n,SUB_MIX:o,INV_SUB_MIX:i}}();function c(e){this._key=o(e),this._reset()}c.blockSize=16,c.keySize=32,c.prototype.blockSize=c.blockSize,c.prototype.keySize=c.keySize,c.prototype._reset=function(){for(var e=this._key,t=e.length,r=t+6,n=4*(r+1),o=[],i=0;i>>24,a=u.SBOX[a>>>24]<<24|u.SBOX[a>>>16&255]<<16|u.SBOX[a>>>8&255]<<8|u.SBOX[255&a],a^=s[i/t|0]<<24):t>6&&i%t==4&&(a=u.SBOX[a>>>24]<<24|u.SBOX[a>>>16&255]<<16|u.SBOX[a>>>8&255]<<8|u.SBOX[255&a]),o[i]=o[i-t]^a}for(var c=[],f=0;f>>24]]^u.INV_SUB_MIX[1][u.SBOX[h>>>16&255]]^u.INV_SUB_MIX[2][u.SBOX[h>>>8&255]]^u.INV_SUB_MIX[3][u.SBOX[255&h]]}this._nRounds=r,this._keySchedule=o,this._invKeySchedule=c},c.prototype.encryptBlockRaw=function(e){return a(e=o(e),this._keySchedule,u.SUB_MIX,u.SBOX,this._nRounds)},c.prototype.encryptBlock=function(e){var t=this.encryptBlockRaw(e),r=n.allocUnsafe(16);return r.writeUInt32BE(t[0],0),r.writeUInt32BE(t[1],4),r.writeUInt32BE(t[2],8),r.writeUInt32BE(t[3],12),r},c.prototype.decryptBlock=function(e){var t=(e=o(e))[1];e[1]=e[3],e[3]=t;var r=a(e,this._invKeySchedule,u.INV_SUB_MIX,u.INV_SBOX,this._nRounds),i=n.allocUnsafe(16);return i.writeUInt32BE(r[0],0),i.writeUInt32BE(r[3],4),i.writeUInt32BE(r[2],8),i.writeUInt32BE(r[1],12),i},c.prototype.scrub=function(){i(this._keySchedule),i(this._invKeySchedule),i(this._key)},t.exports.AES=c},{\"safe-buffer\":445}],160:[function(e,t,r){var n=e(\"./aes\"),o=e(\"safe-buffer\").Buffer,i=e(\"cipher-base\"),a=e(\"inherits\"),s=e(\"./ghash\"),u=e(\"buffer-xor\"),c=e(\"./incr32\");function f(e,t,r,a){i.call(this);var u=o.alloc(4,0);this._cipher=new n.AES(t);var f=this._cipher.encryptBlock(u);this._ghash=new s(f),r=function(e,t,r){if(12===t.length)return e._finID=o.concat([t,o.from([0,0,0,1])]),o.concat([t,o.from([0,0,0,2])]);var n=new s(r),i=t.length,a=i%16;n.update(t),a&&(a=16-a,n.update(o.alloc(a,0))),n.update(o.alloc(8,0));var u=8*i,f=o.alloc(8);f.writeUIntBE(u,0,8),n.update(f),e._finID=n.state;var l=o.from(e._finID);return c(l),l}(this,r,f),this._prev=o.from(r),this._cache=o.allocUnsafe(0),this._secCache=o.allocUnsafe(0),this._decrypt=a,this._alen=0,this._len=0,this._mode=e,this._authTag=null,this._called=!1}a(f,i),f.prototype._update=function(e){if(!this._called&&this._alen){var t=16-this._alen%16;t<16&&(t=o.alloc(t,0),this._ghash.update(t))}this._called=!0;var r=this._mode.encrypt(this,e);return this._decrypt?this._ghash.update(e):this._ghash.update(r),this._len+=e.length,r},f.prototype._final=function(){if(this._decrypt&&!this._authTag)throw new Error(\"Unsupported state or unable to authenticate data\");var e=u(this._ghash.final(8*this._alen,8*this._len),this._cipher.encryptBlock(this._finID));if(this._decrypt&&function(e,t){var r=0;e.length!==t.length&&r++;for(var n=Math.min(e.length,t.length),o=0;o16)throw new Error(\"unable to decrypt data\");var r=-1;for(;++r16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t}else if(this.cache.length>=16)return t=this.cache.slice(0,16),this.cache=this.cache.slice(16),t;return null},l.prototype.flush=function(){if(this.cache.length)return this.cache},r.createDecipher=function(e,t){var r=i[e.toLowerCase()];if(!r)throw new TypeError(\"invalid suite type\");var n=c(t,!1,r.key,r.iv);return h(e,n.key,n.iv)},r.createDecipheriv=h},{\"./aes\":159,\"./authCipher\":160,\"./modes\":172,\"./streamCipher\":175,\"cipher-base\":189,evp_bytestokey:300,inherits:341,\"safe-buffer\":445}],163:[function(e,t,r){var n=e(\"./modes\"),o=e(\"./authCipher\"),i=e(\"safe-buffer\").Buffer,a=e(\"./streamCipher\"),s=e(\"cipher-base\"),u=e(\"./aes\"),c=e(\"evp_bytestokey\");function f(e,t,r){s.call(this),this._cache=new h,this._cipher=new u.AES(t),this._prev=i.from(r),this._mode=e,this._autopadding=!0}e(\"inherits\")(f,s),f.prototype._update=function(e){var t,r;this._cache.add(e);for(var n=[];t=this._cache.get();)r=this._mode.encrypt(this,t),n.push(r);return i.concat(n)};var l=i.alloc(16,16);function h(){this.cache=i.allocUnsafe(0)}function d(e,t,r){var s=n[e.toLowerCase()];if(!s)throw new TypeError(\"invalid suite type\");if(\"string\"==typeof t&&(t=i.from(t)),t.length!==s.key/8)throw new TypeError(\"invalid key length \"+t.length);if(\"string\"==typeof r&&(r=i.from(r)),\"GCM\"!==s.mode&&r.length!==s.iv)throw new TypeError(\"invalid iv length \"+r.length);return\"stream\"===s.type?new a(s.module,t,r):\"auth\"===s.type?new o(s.module,t,r):new f(s.module,t,r)}f.prototype._final=function(){var e=this._cache.flush();if(this._autopadding)return e=this._mode.encrypt(this,e),this._cipher.scrub(),e;if(!e.equals(l))throw this._cipher.scrub(),new Error(\"data not multiple of block length\")},f.prototype.setAutoPadding=function(e){return this._autopadding=!!e,this},h.prototype.add=function(e){this.cache=i.concat([this.cache,e])},h.prototype.get=function(){if(this.cache.length>15){var e=this.cache.slice(0,16);return this.cache=this.cache.slice(16),e}return null},h.prototype.flush=function(){for(var e=16-this.cache.length,t=i.allocUnsafe(e),r=-1;++r>>0,0),t.writeUInt32BE(e[1]>>>0,4),t.writeUInt32BE(e[2]>>>0,8),t.writeUInt32BE(e[3]>>>0,12),t}function a(e){this.h=e,this.state=n.alloc(16,0),this.cache=n.allocUnsafe(0)}a.prototype.ghash=function(e){for(var t=-1;++t0;t--)n[t]=n[t]>>>1|(1&n[t-1])<<31;n[0]=n[0]>>>1,r&&(n[0]=n[0]^225<<24)}this.state=i(o)},a.prototype.update=function(e){var t;for(this.cache=n.concat([this.cache,e]);this.cache.length>=16;)t=this.cache.slice(0,16),this.cache=this.cache.slice(16),this.ghash(t)},a.prototype.final=function(e,t){return this.cache.length&&this.ghash(n.concat([this.cache,o],16)),this.ghash(i([0,e,0,t])),this.state},t.exports=a},{\"safe-buffer\":445}],165:[function(e,t,r){t.exports=function(e){for(var t,r=e.length;r--;){if(255!==(t=e.readUInt8(r))){t++,e.writeUInt8(t,r);break}e.writeUInt8(0,r)}}},{}],166:[function(e,t,r){var n=e(\"buffer-xor\");r.encrypt=function(e,t){var r=n(t,e._prev);return e._prev=e._cipher.encryptBlock(r),e._prev},r.decrypt=function(e,t){var r=e._prev;e._prev=t;var o=e._cipher.decryptBlock(t);return n(o,r)}},{\"buffer-xor\":187}],167:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"buffer-xor\");function i(e,t,r){var i=t.length,a=o(t,e._cache);return e._cache=e._cache.slice(i),e._prev=n.concat([e._prev,r?t:a]),a}r.encrypt=function(e,t,r){for(var o,a=n.allocUnsafe(0);t.length;){if(0===e._cache.length&&(e._cache=e._cipher.encryptBlock(e._prev),e._prev=n.allocUnsafe(0)),!(e._cache.length<=t.length)){a=n.concat([a,i(e,t,r)]);break}o=e._cache.length,a=n.concat([a,i(e,t.slice(0,o),r)]),t=t.slice(o)}return a}},{\"buffer-xor\":187,\"safe-buffer\":445}],168:[function(e,t,r){var n=e(\"safe-buffer\").Buffer;function o(e,t,r){for(var n,o,a=-1,s=0;++a<8;)n=t&1<<7-a?128:0,s+=(128&(o=e._cipher.encryptBlock(e._prev)[0]^n))>>a%8,e._prev=i(e._prev,r?n:o);return s}function i(e,t){var r=e.length,o=-1,i=n.allocUnsafe(e.length);for(e=n.concat([e,n.from([t])]);++o>7;return i}r.encrypt=function(e,t,r){for(var i=t.length,a=n.allocUnsafe(i),s=-1;++s=0||!r.umod(e.prime1)||!r.umod(e.prime2);)r=new n(o(t));return r}t.exports=i,i.getr=a}).call(this,e(\"buffer\").Buffer)},{\"bn.js\":156,buffer:188,randombytes:426}],180:[function(e,t,r){t.exports=e(\"./browser/algorithms.json\")},{\"./browser/algorithms.json\":181}],181:[function(e,t,r){t.exports={sha224WithRSAEncryption:{sign:\"rsa\",hash:\"sha224\",id:\"302d300d06096086480165030402040500041c\"},\"RSA-SHA224\":{sign:\"ecdsa/rsa\",hash:\"sha224\",id:\"302d300d06096086480165030402040500041c\"},sha256WithRSAEncryption:{sign:\"rsa\",hash:\"sha256\",id:\"3031300d060960864801650304020105000420\"},\"RSA-SHA256\":{sign:\"ecdsa/rsa\",hash:\"sha256\",id:\"3031300d060960864801650304020105000420\"},sha384WithRSAEncryption:{sign:\"rsa\",hash:\"sha384\",id:\"3041300d060960864801650304020205000430\"},\"RSA-SHA384\":{sign:\"ecdsa/rsa\",hash:\"sha384\",id:\"3041300d060960864801650304020205000430\"},sha512WithRSAEncryption:{sign:\"rsa\",hash:\"sha512\",id:\"3051300d060960864801650304020305000440\"},\"RSA-SHA512\":{sign:\"ecdsa/rsa\",hash:\"sha512\",id:\"3051300d060960864801650304020305000440\"},\"RSA-SHA1\":{sign:\"rsa\",hash:\"sha1\",id:\"3021300906052b0e03021a05000414\"},\"ecdsa-with-SHA1\":{sign:\"ecdsa\",hash:\"sha1\",id:\"\"},sha256:{sign:\"ecdsa\",hash:\"sha256\",id:\"\"},sha224:{sign:\"ecdsa\",hash:\"sha224\",id:\"\"},sha384:{sign:\"ecdsa\",hash:\"sha384\",id:\"\"},sha512:{sign:\"ecdsa\",hash:\"sha512\",id:\"\"},\"DSA-SHA\":{sign:\"dsa\",hash:\"sha1\",id:\"\"},\"DSA-SHA1\":{sign:\"dsa\",hash:\"sha1\",id:\"\"},DSA:{sign:\"dsa\",hash:\"sha1\",id:\"\"},\"DSA-WITH-SHA224\":{sign:\"dsa\",hash:\"sha224\",id:\"\"},\"DSA-SHA224\":{sign:\"dsa\",hash:\"sha224\",id:\"\"},\"DSA-WITH-SHA256\":{sign:\"dsa\",hash:\"sha256\",id:\"\"},\"DSA-SHA256\":{sign:\"dsa\",hash:\"sha256\",id:\"\"},\"DSA-WITH-SHA384\":{sign:\"dsa\",hash:\"sha384\",id:\"\"},\"DSA-SHA384\":{sign:\"dsa\",hash:\"sha384\",id:\"\"},\"DSA-WITH-SHA512\":{sign:\"dsa\",hash:\"sha512\",id:\"\"},\"DSA-SHA512\":{sign:\"dsa\",hash:\"sha512\",id:\"\"},\"DSA-RIPEMD160\":{sign:\"dsa\",hash:\"rmd160\",id:\"\"},ripemd160WithRSA:{sign:\"rsa\",hash:\"rmd160\",id:\"3021300906052b2403020105000414\"},\"RSA-RIPEMD160\":{sign:\"rsa\",hash:\"rmd160\",id:\"3021300906052b2403020105000414\"},md5WithRSAEncryption:{sign:\"rsa\",hash:\"md5\",id:\"3020300c06082a864886f70d020505000410\"},\"RSA-MD5\":{sign:\"rsa\",hash:\"md5\",id:\"3020300c06082a864886f70d020505000410\"}}},{}],182:[function(e,t,r){t.exports={\"1.3.132.0.10\":\"secp256k1\",\"1.3.132.0.33\":\"p224\",\"1.2.840.10045.3.1.1\":\"p192\",\"1.2.840.10045.3.1.7\":\"p256\",\"1.3.132.0.34\":\"p384\",\"1.3.132.0.35\":\"p521\"}},{}],183:[function(e,t,r){(function(r){var n=e(\"create-hash\"),o=e(\"stream\"),i=e(\"inherits\"),a=e(\"./sign\"),s=e(\"./verify\"),u=e(\"./algorithms.json\");function c(e){o.Writable.call(this);var t=u[e];if(!t)throw new Error(\"Unknown message digest\");this._hashType=t.hash,this._hash=n(t.hash),this._tag=t.id,this._signType=t.sign}function f(e){o.Writable.call(this);var t=u[e];if(!t)throw new Error(\"Unknown message digest\");this._hash=n(t.hash),this._tag=t.id,this._signType=t.sign}function l(e){return new c(e)}function h(e){return new f(e)}Object.keys(u).forEach((function(e){u[e].id=new r(u[e].id,\"hex\"),u[e.toLowerCase()]=u[e]})),i(c,o.Writable),c.prototype._write=function(e,t,r){this._hash.update(e),r()},c.prototype.update=function(e,t){return\"string\"==typeof e&&(e=new r(e,t)),this._hash.update(e),this},c.prototype.sign=function(e,t){this.end();var r=this._hash.digest(),n=a(r,e,this._hashType,this._signType,this._tag);return t?n.toString(t):n},i(f,o.Writable),f.prototype._write=function(e,t,r){this._hash.update(e),r()},f.prototype.update=function(e,t){return\"string\"==typeof e&&(e=new r(e,t)),this._hash.update(e),this},f.prototype.verify=function(e,t,n){\"string\"==typeof t&&(t=new r(t,n)),this.end();var o=this._hash.digest();return s(t,o,e,this._signType,this._tag)},t.exports={Sign:l,Verify:h,createSign:l,createVerify:h}}).call(this,e(\"buffer\").Buffer)},{\"./algorithms.json\":181,\"./sign\":184,\"./verify\":185,buffer:188,\"create-hash\":265,inherits:341,stream:456}],184:[function(e,t,r){(function(r){var n=e(\"create-hmac\"),o=e(\"browserify-rsa\"),i=e(\"elliptic\").ec,a=e(\"bn.js\"),s=e(\"parse-asn1\"),u=e(\"./curves.json\");function c(e,t,o,i){if((e=new r(e.toArray())).length0&&r.ishrn(n),r}function l(e,t,o){var i,a;do{for(i=new r(0);8*i.length=t)throw new Error(\"invalid sig\")}t.exports=function(e,t,u,c,f){var l=i(u);if(\"ec\"===l.type){if(\"ecdsa\"!==c&&\"ecdsa/rsa\"!==c)throw new Error(\"wrong public key type\");return function(e,t,r){var n=a[r.data.algorithm.curve.join(\".\")];if(!n)throw new Error(\"unknown curve \"+r.data.algorithm.curve.join(\".\"));var i=new o(n),s=r.data.subjectPrivateKey.data;return i.verify(t,e,s)}(e,t,l)}if(\"dsa\"===l.type){if(\"dsa\"!==c)throw new Error(\"wrong public key type\");return function(e,t,r){var o=r.data.p,a=r.data.q,u=r.data.g,c=r.data.pub_key,f=i.signature.decode(e,\"der\"),l=f.s,h=f.r;s(l,a),s(h,a);var d=n.mont(o),p=l.invm(a);return 0===u.toRed(d).redPow(new n(t).mul(p).mod(a)).fromRed().mul(c.toRed(d).redPow(h.mul(p).mod(a)).fromRed()).mod(o).mod(a).cmp(h)}(e,t,l)}if(\"rsa\"!==c&&\"ecdsa/rsa\"!==c)throw new Error(\"wrong public key type\");t=r.concat([f,t]);for(var h=l.modulus.byteLength(),d=[1],p=0;t.length+d.length+22147483647)throw new RangeError('The value \"'+e+'\" is invalid for option \"size\"');var r=new Uint8Array(e);return Object.setPrototypeOf(r,t.prototype),r}function t(e,t,r){if(\"number\"==typeof e){if(\"string\"==typeof t)throw new TypeError('The \"string\" argument must be of type string. Received type number');return c(e)}return s(e,t,r)}function s(e,r,n){if(\"string\"==typeof e)return function(e,r){\"string\"==typeof r&&\"\"!==r||(r=\"utf8\");if(!t.isEncoding(r))throw new TypeError(\"Unknown encoding: \"+r);var n=0|h(e,r),o=a(n),i=o.write(e,r);i!==n&&(o=o.slice(0,i));return o}(e,r);if(ArrayBuffer.isView(e))return f(e);if(null==e)throw new TypeError(\"The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type \"+_typeof2(e));if(L(e,ArrayBuffer)||e&&L(e.buffer,ArrayBuffer))return function(e,r,n){if(r<0||e.byteLength=2147483647)throw new RangeError(\"Attempt to allocate Buffer larger than maximum size: 0x\"+2147483647..toString(16)+\" bytes\");return 0|e}function h(e,r){if(t.isBuffer(e))return e.length;if(ArrayBuffer.isView(e)||L(e,ArrayBuffer))return e.byteLength;if(\"string\"!=typeof e)throw new TypeError('The \"string\" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+_typeof2(e));var n=e.length,o=arguments.length>2&&!0===arguments[2];if(!o&&0===n)return 0;for(var i=!1;;)switch(r){case\"ascii\":case\"latin1\":case\"binary\":return n;case\"utf8\":case\"utf-8\":return D(e).length;case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return 2*n;case\"hex\":return n>>>1;case\"base64\":return B(e).length;default:if(i)return o?-1:D(e).length;r=(\"\"+r).toLowerCase(),i=!0}}function d(e,t,r){var n=!1;if((void 0===t||t<0)&&(t=0),t>this.length)return\"\";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return\"\";if((r>>>=0)<=(t>>>=0))return\"\";for(e||(e=\"utf8\");;)switch(e){case\"hex\":return R(this,t,r);case\"utf8\":case\"utf-8\":return S(this,t,r);case\"ascii\":return O(this,t,r);case\"latin1\":case\"binary\":return E(this,t,r);case\"base64\":return x(this,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return j(this,t,r);default:if(n)throw new TypeError(\"Unknown encoding: \"+e);e=(e+\"\").toLowerCase(),n=!0}}function p(e,t,r){var n=e[t];e[t]=e[r],e[r]=n}function y(e,r,n,o,i){if(0===e.length)return-1;if(\"string\"==typeof n?(o=n,n=0):n>2147483647?n=2147483647:n<-2147483648&&(n=-2147483648),z(n=+n)&&(n=i?0:e.length-1),n<0&&(n=e.length+n),n>=e.length){if(i)return-1;n=e.length-1}else if(n<0){if(!i)return-1;n=0}if(\"string\"==typeof r&&(r=t.from(r,o)),t.isBuffer(r))return 0===r.length?-1:m(e,r,n,o,i);if(\"number\"==typeof r)return r&=255,\"function\"==typeof Uint8Array.prototype.indexOf?i?Uint8Array.prototype.indexOf.call(e,r,n):Uint8Array.prototype.lastIndexOf.call(e,r,n):m(e,[r],n,o,i);throw new TypeError(\"val must be string, number or Buffer\")}function m(e,t,r,n,o){var i,a=1,s=e.length,u=t.length;if(void 0!==n&&(\"ucs2\"===(n=String(n).toLowerCase())||\"ucs-2\"===n||\"utf16le\"===n||\"utf-16le\"===n)){if(e.length<2||t.length<2)return-1;a=2,s/=2,u/=2,r/=2}function c(e,t){return 1===a?e[t]:e.readUInt16BE(t*a)}if(o){var f=-1;for(i=r;is&&(r=s-u),i=r;i>=0;i--){for(var l=!0,h=0;ho&&(n=o):n=o;var i=t.length;n>i/2&&(n=i/2);for(var a=0;a>8,o=r%256,i.push(o),i.push(n);return i}(t,e.length-r),e,r,n)}function x(e,t,r){return 0===t&&r===e.length?n.fromByteArray(e):n.fromByteArray(e.slice(t,r))}function S(e,t,r){r=Math.min(e.length,r);for(var n=[],o=t;o239?4:c>223?3:c>191?2:1;if(o+l<=r)switch(l){case 1:c<128&&(f=c);break;case 2:128==(192&(i=e[o+1]))&&(u=(31&c)<<6|63&i)>127&&(f=u);break;case 3:i=e[o+1],a=e[o+2],128==(192&i)&&128==(192&a)&&(u=(15&c)<<12|(63&i)<<6|63&a)>2047&&(u<55296||u>57343)&&(f=u);break;case 4:i=e[o+1],a=e[o+2],s=e[o+3],128==(192&i)&&128==(192&a)&&128==(192&s)&&(u=(15&c)<<18|(63&i)<<12|(63&a)<<6|63&s)>65535&&u<1114112&&(f=u)}null===f?(f=65533,l=1):f>65535&&(f-=65536,n.push(f>>>10&1023|55296),f=56320|1023&f),n.push(f),o+=l}return function(e){var t=e.length;if(t<=4096)return String.fromCharCode.apply(String,e);var r=\"\",n=0;for(;nt&&(e+=\" ... \"),\"\"},i&&(t.prototype[i]=t.prototype.inspect),t.prototype.compare=function(e,r,n,o,i){if(L(e,Uint8Array)&&(e=t.from(e,e.offset,e.byteLength)),!t.isBuffer(e))throw new TypeError('The \"target\" argument must be one of type Buffer or Uint8Array. Received type '+_typeof2(e));if(void 0===r&&(r=0),void 0===n&&(n=e?e.length:0),void 0===o&&(o=0),void 0===i&&(i=this.length),r<0||n>e.length||o<0||i>this.length)throw new RangeError(\"out of range index\");if(o>=i&&r>=n)return 0;if(o>=i)return-1;if(r>=n)return 1;if(this===e)return 0;for(var a=(i>>>=0)-(o>>>=0),s=(n>>>=0)-(r>>>=0),u=Math.min(a,s),c=this.slice(o,i),f=e.slice(r,n),l=0;l>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n=\"utf8\")):(n=r,r=void 0)}var o=this.length-t;if((void 0===r||r>o)&&(r=o),e.length>0&&(r<0||t<0)||t>this.length)throw new RangeError(\"Attempt to write outside buffer bounds\");n||(n=\"utf8\");for(var i=!1;;)switch(n){case\"hex\":return b(this,e,t,r);case\"utf8\":case\"utf-8\":return v(this,e,t,r);case\"ascii\":return g(this,e,t,r);case\"latin1\":case\"binary\":return w(this,e,t,r);case\"base64\":return _(this,e,t,r);case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return k(this,e,t,r);default:if(i)throw new TypeError(\"Unknown encoding: \"+n);n=(\"\"+n).toLowerCase(),i=!0}},t.prototype.toJSON=function(){return{type:\"Buffer\",data:Array.prototype.slice.call(this._arr||this,0)}};function O(e,t,r){var n=\"\";r=Math.min(e.length,r);for(var o=t;on)&&(r=n);for(var o=\"\",i=t;ir)throw new RangeError(\"Trying to access beyond buffer length\")}function C(e,r,n,o,i,a){if(!t.isBuffer(e))throw new TypeError('\"buffer\" argument must be a Buffer instance');if(r>i||re.length)throw new RangeError(\"Index out of range\")}function P(e,t,r,n,o,i){if(r+n>e.length)throw new RangeError(\"Index out of range\");if(r<0)throw new RangeError(\"Index out of range\")}function A(e,t,r,n,i){return t=+t,r>>>=0,i||P(e,0,r,4),o.write(e,t,r,n,23,4),r+4}function M(e,t,r,n,i){return t=+t,r>>>=0,i||P(e,0,r,8),o.write(e,t,r,n,52,8),r+8}t.prototype.slice=function(e,r){var n=this.length;(e=~~e)<0?(e+=n)<0&&(e=0):e>n&&(e=n),(r=void 0===r?n:~~r)<0?(r+=n)<0&&(r=0):r>n&&(r=n),r>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],o=1,i=0;++i>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e+--t],o=1;t>0&&(o*=256);)n+=this[e+--t]*o;return n},t.prototype.readUInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),this[e]},t.prototype.readUInt16LE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]|this[e+1]<<8},t.prototype.readUInt16BE=function(e,t){return e>>>=0,t||T(e,2,this.length),this[e]<<8|this[e+1]},t.prototype.readUInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),(this[e]|this[e+1]<<8|this[e+2]<<16)+16777216*this[e+3]},t.prototype.readUInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),16777216*this[e]+(this[e+1]<<16|this[e+2]<<8|this[e+3])},t.prototype.readIntLE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=this[e],o=1,i=0;++i=(o*=128)&&(n-=Math.pow(2,8*t)),n},t.prototype.readIntBE=function(e,t,r){e>>>=0,t>>>=0,r||T(e,t,this.length);for(var n=t,o=1,i=this[e+--n];n>0&&(o*=256);)i+=this[e+--n]*o;return i>=(o*=128)&&(i-=Math.pow(2,8*t)),i},t.prototype.readInt8=function(e,t){return e>>>=0,t||T(e,1,this.length),128&this[e]?-1*(255-this[e]+1):this[e]},t.prototype.readInt16LE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e]|this[e+1]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt16BE=function(e,t){e>>>=0,t||T(e,2,this.length);var r=this[e+1]|this[e]<<8;return 32768&r?4294901760|r:r},t.prototype.readInt32LE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]|this[e+1]<<8|this[e+2]<<16|this[e+3]<<24},t.prototype.readInt32BE=function(e,t){return e>>>=0,t||T(e,4,this.length),this[e]<<24|this[e+1]<<16|this[e+2]<<8|this[e+3]},t.prototype.readFloatLE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!0,23,4)},t.prototype.readFloatBE=function(e,t){return e>>>=0,t||T(e,4,this.length),o.read(this,e,!1,23,4)},t.prototype.readDoubleLE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!0,52,8)},t.prototype.readDoubleBE=function(e,t){return e>>>=0,t||T(e,8,this.length),o.read(this,e,!1,52,8)},t.prototype.writeUIntLE=function(e,t,r,n){(e=+e,t>>>=0,r>>>=0,n)||C(this,e,t,r,Math.pow(2,8*r)-1,0);var o=1,i=0;for(this[t]=255&e;++i>>=0,r>>>=0,n)||C(this,e,t,r,Math.pow(2,8*r)-1,0);var o=r-1,i=1;for(this[t+o]=255&e;--o>=0&&(i*=256);)this[t+o]=e/i&255;return t+r},t.prototype.writeUInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,255,0),this[t]=255&e,t+1},t.prototype.writeUInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeUInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,65535,0),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeUInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t+3]=e>>>24,this[t+2]=e>>>16,this[t+1]=e>>>8,this[t]=255&e,t+4},t.prototype.writeUInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,4294967295,0),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeIntLE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);C(this,e,t,r,o-1,-o)}var i=0,a=1,s=0;for(this[t]=255&e;++i>0)-s&255;return t+r},t.prototype.writeIntBE=function(e,t,r,n){if(e=+e,t>>>=0,!n){var o=Math.pow(2,8*r-1);C(this,e,t,r,o-1,-o)}var i=r-1,a=1,s=0;for(this[t+i]=255&e;--i>=0&&(a*=256);)e<0&&0===s&&0!==this[t+i+1]&&(s=1),this[t+i]=(e/a>>0)-s&255;return t+r},t.prototype.writeInt8=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,1,127,-128),e<0&&(e=255+e+1),this[t]=255&e,t+1},t.prototype.writeInt16LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=255&e,this[t+1]=e>>>8,t+2},t.prototype.writeInt16BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,2,32767,-32768),this[t]=e>>>8,this[t+1]=255&e,t+2},t.prototype.writeInt32LE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),this[t]=255&e,this[t+1]=e>>>8,this[t+2]=e>>>16,this[t+3]=e>>>24,t+4},t.prototype.writeInt32BE=function(e,t,r){return e=+e,t>>>=0,r||C(this,e,t,4,2147483647,-2147483648),e<0&&(e=4294967295+e+1),this[t]=e>>>24,this[t+1]=e>>>16,this[t+2]=e>>>8,this[t+3]=255&e,t+4},t.prototype.writeFloatLE=function(e,t,r){return A(this,e,t,!0,r)},t.prototype.writeFloatBE=function(e,t,r){return A(this,e,t,!1,r)},t.prototype.writeDoubleLE=function(e,t,r){return M(this,e,t,!0,r)},t.prototype.writeDoubleBE=function(e,t,r){return M(this,e,t,!1,r)},t.prototype.copy=function(e,r,n,o){if(!t.isBuffer(e))throw new TypeError(\"argument should be a Buffer\");if(n||(n=0),o||0===o||(o=this.length),r>=e.length&&(r=e.length),r||(r=0),o>0&&o=this.length)throw new RangeError(\"Index out of range\");if(o<0)throw new RangeError(\"sourceEnd out of bounds\");o>this.length&&(o=this.length),e.length-r=0;--a)e[a+r]=this[a+n];else Uint8Array.prototype.set.call(e,this.subarray(n,o),r);return i},t.prototype.fill=function(e,r,n,o){if(\"string\"==typeof e){if(\"string\"==typeof r?(o=r,r=0,n=this.length):\"string\"==typeof n&&(o=n,n=this.length),void 0!==o&&\"string\"!=typeof o)throw new TypeError(\"encoding must be a string\");if(\"string\"==typeof o&&!t.isEncoding(o))throw new TypeError(\"Unknown encoding: \"+o);if(1===e.length){var i=e.charCodeAt(0);(\"utf8\"===o&&i<128||\"latin1\"===o)&&(e=i)}}else\"number\"==typeof e?e&=255:\"boolean\"==typeof e&&(e=Number(e));if(r<0||this.length>>=0,n=void 0===n?this.length:n>>>0,e||(e=0),\"number\"==typeof e)for(a=r;a55295&&r<57344){if(!o){if(r>56319){(t-=3)>-1&&i.push(239,191,189);continue}if(a+1===n){(t-=3)>-1&&i.push(239,191,189);continue}o=r;continue}if(r<56320){(t-=3)>-1&&i.push(239,191,189),o=r;continue}r=65536+(o-55296<<10|r-56320)}else o&&(t-=3)>-1&&i.push(239,191,189);if(o=null,r<128){if((t-=1)<0)break;i.push(r)}else if(r<2048){if((t-=2)<0)break;i.push(r>>6|192,63&r|128)}else if(r<65536){if((t-=3)<0)break;i.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error(\"Invalid code point\");if((t-=4)<0)break;i.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return i}function B(e){return n.toByteArray(function(e){if((e=(e=e.split(\"=\")[0]).trim().replace(I,\"\")).length<2)return\"\";for(;e.length%4!=0;)e+=\"=\";return e}(e))}function F(e,t,r,n){for(var o=0;o=t.length||o>=e.length);++o)t[o+r]=e[o];return o}function L(e,t){return e instanceof t||null!=e&&null!=e.constructor&&null!=e.constructor.name&&e.constructor.name===t.name}function z(e){return e!=e}}).call(this,e(\"buffer\").Buffer)},{\"base64-js\":155,buffer:188,ieee754:339}],189:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"stream\").Transform,i=e(\"string_decoder\").StringDecoder;function a(e){o.call(this),this.hashMode=\"string\"==typeof e,this.hashMode?this[e]=this._finalOrDigest:this.final=this._finalOrDigest,this._final&&(this.__final=this._final,this._final=null),this._decoder=null,this._encoding=null}e(\"inherits\")(a,o),a.prototype.update=function(e,t,r){\"string\"==typeof e&&(e=n.from(e,t));var o=this._update(e);return this.hashMode?this:(r&&(o=this._toString(o,r)),o)},a.prototype.setAutoPadding=function(){},a.prototype.getAuthTag=function(){throw new Error(\"trying to get auth tag in unsupported state\")},a.prototype.setAuthTag=function(){throw new Error(\"trying to set auth tag in unsupported state\")},a.prototype.setAAD=function(){throw new Error(\"trying to set aad in unsupported state\")},a.prototype._transform=function(e,t,r){var n;try{this.hashMode?this._update(e):this.push(this._update(e))}catch(e){n=e}finally{r(n)}},a.prototype._flush=function(e){var t;try{this.push(this.__final())}catch(e){t=e}e(t)},a.prototype._finalOrDigest=function(e){var t=this.__final()||n.alloc(0);return e&&(t=this._toString(t,e,!0)),t},a.prototype._toString=function(e,t,r){if(this._decoder||(this._decoder=new i(t),this._encoding=t),this._encoding!==t)throw new Error(\"can't switch encodings\");var n=this._decoder.write(e);return r&&(n+=this._decoder.end()),n},t.exports=a},{inherits:341,\"safe-buffer\":445,stream:456,string_decoder:470}],190:[function(e,t,r){t.exports=function(e){if(\"function\"!=typeof e)throw TypeError(String(e)+\" is not a function\");return e}},{}],191:[function(e,t,r){t.exports=function(e,t,r){if(!(e instanceof t))throw TypeError(\"Incorrect \"+(r?r+\" \":\"\")+\"invocation\");return e}},{}],192:[function(e,t,r){var n=e(\"../internals/is-object\");t.exports=function(e){if(!n(e))throw TypeError(String(e)+\" is not an object\");return e}},{\"../internals/is-object\":220}],193:[function(e,t,r){var n=e(\"../internals/to-indexed-object\"),o=e(\"../internals/to-length\"),i=e(\"../internals/to-absolute-index\"),a=function(e){return function(t,r,a){var s,u=n(t),c=o(u.length),f=i(a,c);if(e&&r!=r){for(;c>f;)if((s=u[f++])!=s)return!0}else for(;c>f;f++)if((e||f in u)&&u[f]===r)return e||f||0;return!e&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}},{\"../internals/to-absolute-index\":251,\"../internals/to-indexed-object\":252,\"../internals/to-length\":254}],194:[function(e,t,r){var n=e(\"../internals/a-function\");t.exports=function(e,t,r){if(n(e),void 0===t)return e;switch(r){case 0:return function(){return e.call(t)};case 1:return function(r){return e.call(t,r)};case 2:return function(r,n){return e.call(t,r,n)};case 3:return function(r,n,o){return e.call(t,r,n,o)}}return function(){return e.apply(t,arguments)}}},{\"../internals/a-function\":190}],195:[function(e,t,r){var n=e(\"../internals/an-object\");t.exports=function(e,t,r,o){try{return o?t(n(r)[0],r[1]):t(r)}catch(t){var i=e.return;throw void 0!==i&&n(i.call(e)),t}}},{\"../internals/an-object\":192}],196:[function(e,t,r){var n=e(\"../internals/well-known-symbol\")(\"iterator\"),o=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){o=!0}};a[n]=function(){return this},Array.from(a,(function(){throw 2}))}catch(e){}t.exports=function(e,t){if(!t&&!o)return!1;var r=!1;try{var i={};i[n]=function(){return{next:function(){return{done:r=!0}}}},e(i)}catch(e){}return r}},{\"../internals/well-known-symbol\":259}],197:[function(e,t,r){var n={}.toString;t.exports=function(e){return n.call(e).slice(8,-1)}},{}],198:[function(e,t,r){var n=e(\"../internals/classof-raw\"),o=e(\"../internals/well-known-symbol\")(\"toStringTag\"),i=\"Arguments\"==n(function(){return arguments}());t.exports=function(e){var t,r,a;return void 0===e?\"Undefined\":null===e?\"Null\":\"string\"==typeof(r=function(e,t){try{return e[t]}catch(e){}}(t=Object(e),o))?r:i?n(t):\"Object\"==(a=n(t))&&\"function\"==typeof t.callee?\"Arguments\":a}},{\"../internals/classof-raw\":197,\"../internals/well-known-symbol\":259}],199:[function(e,t,r){var n=e(\"../internals/has\"),o=e(\"../internals/own-keys\"),i=e(\"../internals/object-get-own-property-descriptor\"),a=e(\"../internals/object-define-property\");t.exports=function(e,t){for(var r=o(t),s=a.f,u=i.f,c=0;cp;p++)if((m=f?v(n(b=e[p])[0],b[1]):v(e[p]))&&m instanceof c)return m;return new c(!1)}h=d.call(e)}for(;!(b=h.next()).done;)if((m=u(h,v,b.value,f))&&m instanceof c)return m;return new c(!1)}).stop=function(e){return new c(!0,e)}},{\"../internals/an-object\":192,\"../internals/bind-context\":194,\"../internals/call-with-safe-iteration-closing\":195,\"../internals/get-iterator-method\":208,\"../internals/is-array-iterator-method\":218,\"../internals/to-length\":254}],223:[function(e,t,r){arguments[4][211][0].apply(r,arguments)},{dup:211}],224:[function(e,t,r){var n,o,i,a,s,u,c,f,l=e(\"../internals/global\"),h=e(\"../internals/object-get-own-property-descriptor\").f,d=e(\"../internals/classof-raw\"),p=e(\"../internals/task\").set,y=e(\"../internals/user-agent\"),m=l.MutationObserver||l.WebKitMutationObserver,b=l.process,v=l.Promise,g=\"process\"==d(b),w=h(l,\"queueMicrotask\"),_=w&&w.value;_||(n=function(){var e,t;for(g&&(e=b.domain)&&e.exit();o;){t=o.fn,o=o.next;try{t()}catch(e){throw o?a():i=void 0,e}}i=void 0,e&&e.enter()},g?a=function(){b.nextTick(n)}:m&&!/(iphone|ipod|ipad).*applewebkit/i.test(y)?(s=!0,u=document.createTextNode(\"\"),new m(n).observe(u,{characterData:!0}),a=function(){u.data=s=!s}):v&&v.resolve?(c=v.resolve(void 0),f=c.then,a=function(){f.call(c,n)}):a=function(){p.call(l,n)}),t.exports=_||function(e){var t={fn:e,next:void 0};i&&(i.next=t),o||(o=t,a()),i=t}},{\"../internals/classof-raw\":197,\"../internals/global\":209,\"../internals/object-get-own-property-descriptor\":231,\"../internals/task\":250,\"../internals/user-agent\":258}],225:[function(e,t,r){var n=e(\"../internals/global\");t.exports=n.Promise},{\"../internals/global\":209}],226:[function(e,t,r){var n=e(\"../internals/fails\");t.exports=!!Object.getOwnPropertySymbols&&!n((function(){return!String(Symbol())}))},{\"../internals/fails\":205}],227:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/function-to-string\"),i=n.WeakMap;t.exports=\"function\"==typeof i&&/native code/.test(o.call(i))},{\"../internals/function-to-string\":206,\"../internals/global\":209}],228:[function(e,t,r){var n=e(\"../internals/a-function\"),o=function(e){var t,r;this.promise=new e((function(e,n){if(void 0!==t||void 0!==r)throw TypeError(\"Bad Promise constructor\");t=e,r=n})),this.resolve=n(t),this.reject=n(r)};t.exports.f=function(e){return new o(e)}},{\"../internals/a-function\":190}],229:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/fails\"),i=e(\"../internals/object-keys\"),a=e(\"../internals/object-get-own-property-symbols\"),s=e(\"../internals/object-property-is-enumerable\"),u=e(\"../internals/to-object\"),c=e(\"../internals/indexed-object\"),f=Object.assign;t.exports=!f||o((function(){var e={},t={},r=Symbol();return e[r]=7,\"abcdefghijklmnopqrst\".split(\"\").forEach((function(e){t[e]=e})),7!=f({},e)[r]||\"abcdefghijklmnopqrst\"!=i(f({},t)).join(\"\")}))?function(e,t){for(var r=u(e),o=arguments.length,f=1,l=a.f,h=s.f;o>f;)for(var d,p=c(arguments[f++]),y=l?i(p).concat(l(p)):i(p),m=y.length,b=0;m>b;)d=y[b++],n&&!h.call(p,d)||(r[d]=p[d]);return r}:f},{\"../internals/descriptors\":201,\"../internals/fails\":205,\"../internals/indexed-object\":216,\"../internals/object-get-own-property-symbols\":233,\"../internals/object-keys\":235,\"../internals/object-property-is-enumerable\":236,\"../internals/to-object\":255}],230:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/ie8-dom-define\"),i=e(\"../internals/an-object\"),a=e(\"../internals/to-primitive\"),s=Object.defineProperty;r.f=n?s:function(e,t,r){if(i(e),t=a(t,!0),i(r),o)try{return s(e,t,r)}catch(e){}if(\"get\"in r||\"set\"in r)throw TypeError(\"Accessors not supported\");return\"value\"in r&&(e[t]=r.value),e}},{\"../internals/an-object\":192,\"../internals/descriptors\":201,\"../internals/ie8-dom-define\":215,\"../internals/to-primitive\":256}],231:[function(e,t,r){var n=e(\"../internals/descriptors\"),o=e(\"../internals/object-property-is-enumerable\"),i=e(\"../internals/create-property-descriptor\"),a=e(\"../internals/to-indexed-object\"),s=e(\"../internals/to-primitive\"),u=e(\"../internals/has\"),c=e(\"../internals/ie8-dom-define\"),f=Object.getOwnPropertyDescriptor;r.f=n?f:function(e,t){if(e=a(e),t=s(t,!0),c)try{return f(e,t)}catch(e){}if(u(e,t))return i(!o.f.call(e,t),e[t])}},{\"../internals/create-property-descriptor\":200,\"../internals/descriptors\":201,\"../internals/has\":210,\"../internals/ie8-dom-define\":215,\"../internals/object-property-is-enumerable\":236,\"../internals/to-indexed-object\":252,\"../internals/to-primitive\":256}],232:[function(e,t,r){var n=e(\"../internals/object-keys-internal\"),o=e(\"../internals/enum-bug-keys\").concat(\"length\",\"prototype\");r.f=Object.getOwnPropertyNames||function(e){return n(e,o)}},{\"../internals/enum-bug-keys\":203,\"../internals/object-keys-internal\":234}],233:[function(e,t,r){r.f=Object.getOwnPropertySymbols},{}],234:[function(e,t,r){var n=e(\"../internals/has\"),o=e(\"../internals/to-indexed-object\"),i=e(\"../internals/array-includes\").indexOf,a=e(\"../internals/hidden-keys\");t.exports=function(e,t){var r,s=o(e),u=0,c=[];for(r in s)!n(a,r)&&n(s,r)&&c.push(r);for(;t.length>u;)n(s,r=t[u++])&&(~i(c,r)||c.push(r));return c}},{\"../internals/array-includes\":193,\"../internals/has\":210,\"../internals/hidden-keys\":211,\"../internals/to-indexed-object\":252}],235:[function(e,t,r){var n=e(\"../internals/object-keys-internal\"),o=e(\"../internals/enum-bug-keys\");t.exports=Object.keys||function(e){return n(e,o)}},{\"../internals/enum-bug-keys\":203,\"../internals/object-keys-internal\":234}],236:[function(e,t,r){var n={}.propertyIsEnumerable,o=Object.getOwnPropertyDescriptor,i=o&&!n.call({1:2},1);r.f=i?function(e){var t=o(this,e);return!!t&&t.enumerable}:n},{}],237:[function(e,t,r){var n=e(\"../internals/get-built-in\"),o=e(\"../internals/object-get-own-property-names\"),i=e(\"../internals/object-get-own-property-symbols\"),a=e(\"../internals/an-object\");t.exports=n(\"Reflect\",\"ownKeys\")||function(e){var t=o.f(a(e)),r=i.f;return r?t.concat(r(e)):t}},{\"../internals/an-object\":192,\"../internals/get-built-in\":207,\"../internals/object-get-own-property-names\":232,\"../internals/object-get-own-property-symbols\":233}],238:[function(e,t,r){t.exports=e(\"../internals/global\")},{\"../internals/global\":209}],239:[function(e,t,r){t.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}},{}],240:[function(e,t,r){var n=e(\"../internals/an-object\"),o=e(\"../internals/is-object\"),i=e(\"../internals/new-promise-capability\");t.exports=function(e,t){if(n(e),o(t)&&t.constructor===e)return t;var r=i.f(e);return(0,r.resolve)(t),r.promise}},{\"../internals/an-object\":192,\"../internals/is-object\":220,\"../internals/new-promise-capability\":228}],241:[function(e,t,r){var n=e(\"../internals/redefine\");t.exports=function(e,t,r){for(var o in t)n(e,o,t[o],r);return e}},{\"../internals/redefine\":242}],242:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/shared\"),i=e(\"../internals/hide\"),a=e(\"../internals/has\"),s=e(\"../internals/set-global\"),u=e(\"../internals/function-to-string\"),c=e(\"../internals/internal-state\"),f=c.get,l=c.enforce,h=String(u).split(\"toString\");o(\"inspectSource\",(function(e){return u.call(e)})),(t.exports=function(e,t,r,o){var u=!!o&&!!o.unsafe,c=!!o&&!!o.enumerable,f=!!o&&!!o.noTargetGet;\"function\"==typeof r&&(\"string\"!=typeof t||a(r,\"name\")||i(r,\"name\",t),l(r).source=h.join(\"string\"==typeof t?t:\"\")),e!==n?(u?!f&&e[t]&&(c=!0):delete e[t],c?e[t]=r:i(e,t,r)):c?e[t]=r:s(t,r)})(Function.prototype,\"toString\",(function(){return\"function\"==typeof this&&f(this).source||u.call(this)}))},{\"../internals/function-to-string\":206,\"../internals/global\":209,\"../internals/has\":210,\"../internals/hide\":212,\"../internals/internal-state\":217,\"../internals/set-global\":244,\"../internals/shared\":248}],243:[function(e,t,r){t.exports=function(e){if(null==e)throw TypeError(\"Can't call method on \"+e);return e}},{}],244:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/hide\");t.exports=function(e,t){try{o(n,e,t)}catch(r){n[e]=t}return t}},{\"../internals/global\":209,\"../internals/hide\":212}],245:[function(e,t,r){var n=e(\"../internals/get-built-in\"),o=e(\"../internals/object-define-property\"),i=e(\"../internals/well-known-symbol\"),a=e(\"../internals/descriptors\"),s=i(\"species\");t.exports=function(e){var t=n(e),r=o.f;a&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}},{\"../internals/descriptors\":201,\"../internals/get-built-in\":207,\"../internals/object-define-property\":230,\"../internals/well-known-symbol\":259}],246:[function(e,t,r){var n=e(\"../internals/object-define-property\").f,o=e(\"../internals/has\"),i=e(\"../internals/well-known-symbol\")(\"toStringTag\");t.exports=function(e,t,r){e&&!o(e=r?e:e.prototype,i)&&n(e,i,{configurable:!0,value:t})}},{\"../internals/has\":210,\"../internals/object-define-property\":230,\"../internals/well-known-symbol\":259}],247:[function(e,t,r){var n=e(\"../internals/shared\"),o=e(\"../internals/uid\"),i=n(\"keys\");t.exports=function(e){return i[e]||(i[e]=o(e))}},{\"../internals/shared\":248,\"../internals/uid\":257}],248:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/set-global\"),i=e(\"../internals/is-pure\"),a=n[\"__core-js_shared__\"]||o(\"__core-js_shared__\",{});(t.exports=function(e,t){return a[e]||(a[e]=void 0!==t?t:{})})(\"versions\",[]).push({version:\"3.2.1\",mode:i?\"pure\":\"global\",copyright:\"\\xa9 2019 Denis Pushkarev (zloirock.ru)\"})},{\"../internals/global\":209,\"../internals/is-pure\":221,\"../internals/set-global\":244}],249:[function(e,t,r){var n=e(\"../internals/an-object\"),o=e(\"../internals/a-function\"),i=e(\"../internals/well-known-symbol\")(\"species\");t.exports=function(e,t){var r,a=n(e).constructor;return void 0===a||null==(r=n(a)[i])?t:o(r)}},{\"../internals/a-function\":190,\"../internals/an-object\":192,\"../internals/well-known-symbol\":259}],250:[function(e,t,r){var n,o,i,a=e(\"../internals/global\"),s=e(\"../internals/fails\"),u=e(\"../internals/classof-raw\"),c=e(\"../internals/bind-context\"),f=e(\"../internals/html\"),l=e(\"../internals/document-create-element\"),h=a.location,d=a.setImmediate,p=a.clearImmediate,y=a.process,m=a.MessageChannel,b=a.Dispatch,v=0,g={},w=function(e){if(g.hasOwnProperty(e)){var t=g[e];delete g[e],t()}},_=function(e){return function(){w(e)}},k=function(e){w(e.data)},x=function(e){a.postMessage(e+\"\",h.protocol+\"//\"+h.host)};d&&p||(d=function(e){for(var t=[],r=1;arguments.length>r;)t.push(arguments[r++]);return g[++v]=function(){(\"function\"==typeof e?e:Function(e)).apply(void 0,t)},n(v),v},p=function(e){delete g[e]},\"process\"==u(y)?n=function(e){y.nextTick(_(e))}:b&&b.now?n=function(e){b.now(_(e))}:m?(i=(o=new m).port2,o.port1.onmessage=k,n=c(i.postMessage,i,1)):!a.addEventListener||\"function\"!=typeof postMessage||a.importScripts||s(x)?n=\"onreadystatechange\"in l(\"script\")?function(e){f.appendChild(l(\"script\")).onreadystatechange=function(){f.removeChild(this),w(e)}}:function(e){setTimeout(_(e),0)}:(n=x,a.addEventListener(\"message\",k,!1))),t.exports={set:d,clear:p}},{\"../internals/bind-context\":194,\"../internals/classof-raw\":197,\"../internals/document-create-element\":202,\"../internals/fails\":205,\"../internals/global\":209,\"../internals/html\":214}],251:[function(e,t,r){var n=e(\"../internals/to-integer\"),o=Math.max,i=Math.min;t.exports=function(e,t){var r=n(e);return r<0?o(r+t,0):i(r,t)}},{\"../internals/to-integer\":253}],252:[function(e,t,r){var n=e(\"../internals/indexed-object\"),o=e(\"../internals/require-object-coercible\");t.exports=function(e){return n(o(e))}},{\"../internals/indexed-object\":216,\"../internals/require-object-coercible\":243}],253:[function(e,t,r){var n=Math.ceil,o=Math.floor;t.exports=function(e){return isNaN(e=+e)?0:(e>0?o:n)(e)}},{}],254:[function(e,t,r){var n=e(\"../internals/to-integer\"),o=Math.min;t.exports=function(e){return e>0?o(n(e),9007199254740991):0}},{\"../internals/to-integer\":253}],255:[function(e,t,r){var n=e(\"../internals/require-object-coercible\");t.exports=function(e){return Object(n(e))}},{\"../internals/require-object-coercible\":243}],256:[function(e,t,r){var n=e(\"../internals/is-object\");t.exports=function(e,t){if(!n(e))return e;var r,o;if(t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;if(\"function\"==typeof(r=e.valueOf)&&!n(o=r.call(e)))return o;if(!t&&\"function\"==typeof(r=e.toString)&&!n(o=r.call(e)))return o;throw TypeError(\"Can't convert object to primitive value\")}},{\"../internals/is-object\":220}],257:[function(e,t,r){var n=0,o=Math.random();t.exports=function(e){return\"Symbol(\"+String(void 0===e?\"\":e)+\")_\"+(++n+o).toString(36)}},{}],258:[function(e,t,r){var n=e(\"../internals/get-built-in\");t.exports=n(\"navigator\",\"userAgent\")||\"\"},{\"../internals/get-built-in\":207}],259:[function(e,t,r){var n=e(\"../internals/global\"),o=e(\"../internals/shared\"),i=e(\"../internals/uid\"),a=e(\"../internals/native-symbol\"),s=n.Symbol,u=o(\"wks\");t.exports=function(e){return u[e]||(u[e]=a&&s[e]||(a?s:i)(\"Symbol.\"+e))}},{\"../internals/global\":209,\"../internals/native-symbol\":226,\"../internals/shared\":248,\"../internals/uid\":257}],260:[function(e,t,r){var n=e(\"../internals/export\"),o=e(\"../internals/object-assign\");n({target:\"Object\",stat:!0,forced:Object.assign!==o},{assign:o})},{\"../internals/export\":204,\"../internals/object-assign\":229}],261:[function(e,t,r){var n=e(\"../internals/export\"),o=e(\"../internals/to-object\"),i=e(\"../internals/object-keys\");n({target:\"Object\",stat:!0,forced:e(\"../internals/fails\")((function(){i(1)}))},{keys:function(e){return i(o(e))}})},{\"../internals/export\":204,\"../internals/fails\":205,\"../internals/object-keys\":235,\"../internals/to-object\":255}],262:[function(e,t,r){var n,o,i,a,s=e(\"../internals/export\"),u=e(\"../internals/is-pure\"),c=e(\"../internals/global\"),f=e(\"../internals/path\"),l=e(\"../internals/native-promise-constructor\"),h=e(\"../internals/redefine\"),d=e(\"../internals/redefine-all\"),p=e(\"../internals/set-to-string-tag\"),y=e(\"../internals/set-species\"),m=e(\"../internals/is-object\"),b=e(\"../internals/a-function\"),v=e(\"../internals/an-instance\"),g=e(\"../internals/classof-raw\"),w=e(\"../internals/iterate\"),_=e(\"../internals/check-correctness-of-iteration\"),k=e(\"../internals/species-constructor\"),x=e(\"../internals/task\").set,S=e(\"../internals/microtask\"),O=e(\"../internals/promise-resolve\"),E=e(\"../internals/host-report-errors\"),R=e(\"../internals/new-promise-capability\"),j=e(\"../internals/perform\"),T=e(\"../internals/user-agent\"),C=e(\"../internals/internal-state\"),P=e(\"../internals/is-forced\"),A=e(\"../internals/well-known-symbol\")(\"species\"),M=\"Promise\",I=C.get,N=C.set,D=C.getterFor(M),B=l,F=c.TypeError,L=c.document,z=c.process,U=c.fetch,H=z&&z.versions,V=H&&H.v8||\"\",W=R.f,q=W,$=\"process\"==g(z),X=!!(L&&L.createEvent&&c.dispatchEvent),K=P(M,(function(){var e=B.resolve(1),t=function(){},r=(e.constructor={})[A]=function(e){e(t,t)};return!(($||\"function\"==typeof PromiseRejectionEvent)&&(!u||e.finally)&&e.then(t)instanceof r&&0!==V.indexOf(\"6.6\")&&-1===T.indexOf(\"Chrome/66\"))})),Y=K||!_((function(e){B.all(e).catch((function(){}))})),Z=function(e){var t;return!(!m(e)||\"function\"!=typeof(t=e.then))&&t},G=function(e,t,r){if(!t.notified){t.notified=!0;var n=t.reactions;S((function(){for(var o=t.value,i=1==t.state,a=0;n.length>a;){var s,u,c,f=n[a++],l=i?f.ok:f.fail,h=f.resolve,d=f.reject,p=f.domain;try{l?(i||(2===t.rejection&&te(e,t),t.rejection=1),!0===l?s=o:(p&&p.enter(),s=l(o),p&&(p.exit(),c=!0)),s===f.promise?d(F(\"Promise-chain cycle\")):(u=Z(s))?u.call(s,h,d):h(s)):d(o)}catch(e){p&&!c&&p.exit(),d(e)}}t.reactions=[],t.notified=!1,r&&!t.rejection&&Q(e,t)}))}},J=function(e,t,r){var n,o;X?((n=L.createEvent(\"Event\")).promise=t,n.reason=r,n.initEvent(e,!1,!0),c.dispatchEvent(n)):n={promise:t,reason:r},(o=c[\"on\"+e])?o(n):\"unhandledrejection\"===e&&E(\"Unhandled promise rejection\",r)},Q=function(e,t){x.call(c,(function(){var r,n=t.value;if(ee(t)&&(r=j((function(){$?z.emit(\"unhandledRejection\",n,e):J(\"unhandledrejection\",e,n)})),t.rejection=$||ee(t)?2:1,r.error))throw r.value}))},ee=function(e){return 1!==e.rejection&&!e.parent},te=function(e,t){x.call(c,(function(){$?z.emit(\"rejectionHandled\",e):J(\"rejectionhandled\",e,t.value)}))},re=function(e,t,r,n){return function(o){e(t,r,o,n)}},ne=function(e,t,r,n){t.done||(t.done=!0,n&&(t=n),t.value=r,t.state=2,G(e,t,!0))},oe=function e(t,r,n,o){if(!r.done){r.done=!0,o&&(r=o);try{if(t===n)throw F(\"Promise can't be resolved itself\");var i=Z(n);i?S((function(){var o={done:!1};try{i.call(n,re(e,t,o,r),re(ne,t,o,r))}catch(e){ne(t,o,e,r)}})):(r.value=n,r.state=1,G(t,r,!1))}catch(e){ne(t,{done:!1},e,r)}}};K&&(B=function(e){v(this,B,M),b(e),n.call(this);var t=I(this);try{e(re(oe,this,t),re(ne,this,t))}catch(e){ne(this,t,e)}},(n=function(e){N(this,{type:M,done:!1,notified:!1,parent:!1,reactions:[],rejection:!1,state:0,value:void 0})}).prototype=d(B.prototype,{then:function(e,t){var r=D(this),n=W(k(this,B));return n.ok=\"function\"!=typeof e||e,n.fail=\"function\"==typeof t&&t,n.domain=$?z.domain:void 0,r.parent=!0,r.reactions.push(n),0!=r.state&&G(this,r,!1),n.promise},catch:function(e){return this.then(void 0,e)}}),o=function(){var e=new n,t=I(e);this.promise=e,this.resolve=re(oe,e,t),this.reject=re(ne,e,t)},R.f=W=function(e){return e===B||e===i?new o(e):q(e)},u||\"function\"!=typeof l||(a=l.prototype.then,h(l.prototype,\"then\",(function(e,t){var r=this;return new B((function(e,t){a.call(r,e,t)})).then(e,t)})),\"function\"==typeof U&&s({global:!0,enumerable:!0,forced:!0},{fetch:function(e){return O(B,U.apply(c,arguments))}}))),s({global:!0,wrap:!0,forced:K},{Promise:B}),p(B,M,!1,!0),y(M),i=f[M],s({target:M,stat:!0,forced:K},{reject:function(e){var t=W(this);return t.reject.call(void 0,e),t.promise}}),s({target:M,stat:!0,forced:u||K},{resolve:function(e){return O(u&&this===i?B:this,e)}}),s({target:M,stat:!0,forced:Y},{all:function(e){var t=this,r=W(t),n=r.resolve,o=r.reject,i=j((function(){var r=b(t.resolve),i=[],a=0,s=1;w(e,(function(e){var u=a++,c=!1;i.push(void 0),s++,r.call(t,e).then((function(e){c||(c=!0,i[u]=e,--s||n(i))}),o)})),--s||n(i)}));return i.error&&o(i.value),r.promise},race:function(e){var t=this,r=W(t),n=r.reject,o=j((function(){var o=b(t.resolve);w(e,(function(e){o.call(t,e).then(r.resolve,n)}))}));return o.error&&n(o.value),r.promise}})},{\"../internals/a-function\":190,\"../internals/an-instance\":191,\"../internals/check-correctness-of-iteration\":196,\"../internals/classof-raw\":197,\"../internals/export\":204,\"../internals/global\":209,\"../internals/host-report-errors\":213,\"../internals/internal-state\":217,\"../internals/is-forced\":219,\"../internals/is-object\":220,\"../internals/is-pure\":221,\"../internals/iterate\":222,\"../internals/microtask\":224,\"../internals/native-promise-constructor\":225,\"../internals/new-promise-capability\":228,\"../internals/path\":238,\"../internals/perform\":239,\"../internals/promise-resolve\":240,\"../internals/redefine\":242,\"../internals/redefine-all\":241,\"../internals/set-species\":245,\"../internals/set-to-string-tag\":246,\"../internals/species-constructor\":249,\"../internals/task\":250,\"../internals/user-agent\":258,\"../internals/well-known-symbol\":259}],263:[function(e,t,r){(function(e){function t(e){return Object.prototype.toString.call(e)}r.isArray=function(e){return Array.isArray?Array.isArray(e):\"[object Array]\"===t(e)},r.isBoolean=function(e){return\"boolean\"==typeof e},r.isNull=function(e){return null===e},r.isNullOrUndefined=function(e){return null==e},r.isNumber=function(e){return\"number\"==typeof e},r.isString=function(e){return\"string\"==typeof e},r.isSymbol=function(e){return\"symbol\"===_typeof2(e)},r.isUndefined=function(e){return void 0===e},r.isRegExp=function(e){return\"[object RegExp]\"===t(e)},r.isObject=function(e){return\"object\"===_typeof2(e)&&null!==e},r.isDate=function(e){return\"[object Date]\"===t(e)},r.isError=function(e){return\"[object Error]\"===t(e)||e instanceof Error},r.isFunction=function(e){return\"function\"==typeof e},r.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"===_typeof2(e)||void 0===e},r.isBuffer=e.isBuffer}).call(this,{isBuffer:e(\"../../is-buffer/index.js\")})},{\"../../is-buffer/index.js\":342}],264:[function(e,t,r){(function(r){var n=e(\"elliptic\"),o=e(\"bn.js\");t.exports=function(e){return new a(e)};var i={secp256k1:{name:\"secp256k1\",byteLength:32},secp224r1:{name:\"p224\",byteLength:28},prime256v1:{name:\"p256\",byteLength:32},prime192v1:{name:\"p192\",byteLength:24},ed25519:{name:\"ed25519\",byteLength:32},secp384r1:{name:\"p384\",byteLength:48},secp521r1:{name:\"p521\",byteLength:66}};function a(e){this.curveType=i[e],this.curveType||(this.curveType={name:e}),this.curve=new n.ec(this.curveType.name),this.keys=void 0}function s(e,t,n){Array.isArray(e)||(e=e.toArray());var o=new r(e);if(n&&o.lengthr)?t=(\"rmd160\"===e?new u:c(e)).update(t).digest():t.length64?t=e(t):t.length<64&&(t=o.concat([t,a],64));for(var r=this._ipad=o.allocUnsafe(64),n=this._opad=o.allocUnsafe(64),s=0;s<64;s++)r[s]=54^t[s],n[s]=92^t[s];this._hash=[r]}n(s,i),s.prototype._update=function(e){this._hash.push(e)},s.prototype._final=function(){var e=this._alg(o.concat(this._hash));return this._alg(o.concat([this._opad,e]))},t.exports=s},{\"cipher-base\":189,inherits:341,\"safe-buffer\":445}],269:[function(e,t,r){r.randomBytes=r.rng=r.pseudoRandomBytes=r.prng=e(\"randombytes\"),r.createHash=r.Hash=e(\"create-hash\"),r.createHmac=r.Hmac=e(\"create-hmac\");var n=e(\"browserify-sign/algos\"),o=Object.keys(n),i=[\"sha1\",\"sha224\",\"sha256\",\"sha384\",\"sha512\",\"md5\",\"rmd160\"].concat(o);r.getHashes=function(){return i};var a=e(\"pbkdf2\");r.pbkdf2=a.pbkdf2,r.pbkdf2Sync=a.pbkdf2Sync;var s=e(\"browserify-cipher\");r.Cipher=s.Cipher,r.createCipher=s.createCipher,r.Cipheriv=s.Cipheriv,r.createCipheriv=s.createCipheriv,r.Decipher=s.Decipher,r.createDecipher=s.createDecipher,r.Decipheriv=s.Decipheriv,r.createDecipheriv=s.createDecipheriv,r.getCiphers=s.getCiphers,r.listCiphers=s.listCiphers;var u=e(\"diffie-hellman\");r.DiffieHellmanGroup=u.DiffieHellmanGroup,r.createDiffieHellmanGroup=u.createDiffieHellmanGroup,r.getDiffieHellman=u.getDiffieHellman,r.createDiffieHellman=u.createDiffieHellman,r.DiffieHellman=u.DiffieHellman;var c=e(\"browserify-sign\");r.createSign=c.createSign,r.Sign=c.Sign,r.createVerify=c.createVerify,r.Verify=c.Verify,r.createECDH=e(\"create-ecdh\");var f=e(\"public-encrypt\");r.publicEncrypt=f.publicEncrypt,r.privateEncrypt=f.privateEncrypt,r.publicDecrypt=f.publicDecrypt,r.privateDecrypt=f.privateDecrypt;var l=e(\"randomfill\");r.randomFill=l.randomFill,r.randomFillSync=l.randomFillSync,r.createCredentials=function(){throw new Error([\"sorry, createCredentials is not implemented yet\",\"we accept pull requests\",\"https://github.com/crypto-browserify/crypto-browserify\"].join(\"\\n\"))},r.constants={DH_CHECK_P_NOT_SAFE_PRIME:2,DH_CHECK_P_NOT_PRIME:1,DH_UNABLE_TO_CHECK_GENERATOR:4,DH_NOT_SUITABLE_GENERATOR:8,NPN_ENABLED:1,ALPN_ENABLED:1,RSA_PKCS1_PADDING:1,RSA_SSLV23_PADDING:2,RSA_NO_PADDING:3,RSA_PKCS1_OAEP_PADDING:4,RSA_X931_PADDING:5,RSA_PKCS1_PSS_PADDING:6,POINT_CONVERSION_COMPRESSED:2,POINT_CONVERSION_UNCOMPRESSED:4,POINT_CONVERSION_HYBRID:6}},{\"browserify-cipher\":176,\"browserify-sign\":183,\"browserify-sign/algos\":180,\"create-ecdh\":264,\"create-hash\":265,\"create-hmac\":267,\"diffie-hellman\":279,pbkdf2:413,\"public-encrypt\":420,randombytes:426,randomfill:427}],270:[function(e,t,r){!function(e,n){\"object\"==_typeof2(r)&&void 0!==t?t.exports=n():\"function\"==typeof define&&define.amd?define(n):e.dayjs=n()}(this,(function(){var e=\"millisecond\",t=\"second\",r=\"minute\",n=\"hour\",o=\"day\",i=\"week\",a=\"month\",s=\"quarter\",u=\"year\",c=/^(\\d{4})-?(\\d{1,2})-?(\\d{0,2})[^0-9]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?.?(\\d{1,3})?$/,f=/\\[([^\\]]+)]|Y{2,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,l=function(e,t,r){var n=String(e);return!n||n.length>=t?e:\"\"+Array(t+1-n.length).join(r)+e},h={s:l,z:function(e){var t=-e.utcOffset(),r=Math.abs(t),n=Math.floor(r/60),o=r%60;return(t<=0?\"+\":\"-\")+l(n,2,\"0\")+\":\"+l(o,2,\"0\")},m:function(e,t){var r=12*(t.year()-e.year())+(t.month()-e.month()),n=e.clone().add(r,a),o=t-n<0,i=e.clone().add(r+(o?-1:1),a);return Number(-(r+(t-n)/(o?n-i:i-n))||0)},a:function(e){return e<0?Math.ceil(e)||0:Math.floor(e)},p:function(c){return{M:a,y:u,w:i,d:o,D:\"date\",h:n,m:r,s:t,ms:e,Q:s}[c]||String(c||\"\").toLowerCase().replace(/s$/,\"\")},u:function(e){return void 0===e}},d={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\")},p=\"en\",y={};y[p]=d;var m=function(e){return e instanceof w},b=function(e,t,r){var n;if(!e)return p;if(\"string\"==typeof e)y[e]&&(n=e),t&&(y[e]=t,n=e);else{var o=e.name;y[o]=e,n=o}return!r&&n&&(p=n),n||!r&&p},v=function(e,t,r){if(m(e))return e.clone();var n=t?\"string\"==typeof t?{format:t,pl:r}:t:{};return n.date=e,new w(n)},g=h;g.l=b,g.i=m,g.w=function(e,t){return v(e,{locale:t.$L,utc:t.$u,$offset:t.$offset})};var w=function(){function l(e){this.$L=this.$L||b(e.locale,null,!0),this.parse(e)}var h=l.prototype;return h.parse=function(e){this.$d=function(e){var t=e.date,r=e.utc;if(null===t)return new Date(NaN);if(g.u(t))return new Date;if(t instanceof Date)return new Date(t);if(\"string\"==typeof t&&!/Z$/i.test(t)){var n=t.match(c);if(n)return r?new Date(Date.UTC(n[1],n[2]-1,n[3]||1,n[4]||0,n[5]||0,n[6]||0,n[7]||0)):new Date(n[1],n[2]-1,n[3]||1,n[4]||0,n[5]||0,n[6]||0,n[7]||0)}return new Date(t)}(e),this.init()},h.init=function(){var e=this.$d;this.$y=e.getFullYear(),this.$M=e.getMonth(),this.$D=e.getDate(),this.$W=e.getDay(),this.$H=e.getHours(),this.$m=e.getMinutes(),this.$s=e.getSeconds(),this.$ms=e.getMilliseconds()},h.$utils=function(){return g},h.isValid=function(){return!(\"Invalid Date\"===this.$d.toString())},h.isSame=function(e,t){var r=v(e);return this.startOf(t)<=r&&r<=this.endOf(t)},h.isAfter=function(e,t){return v(e)68?1900:2e3)}],YYYY:[/\\d{4}/,i(\"year\")],Z:a,ZZ:a},u=function(e,r,n){try{var o=function(e){for(var r=e.match(t),n=r.length,o=0;o0?a-1:p.getMonth(),v=c||0,g=f||0,w=l||0,_=h||0;return n?new Date(Date.UTC(m,b,y,v,g,w,_)):new Date(m,b,y,v,g,w,_)}catch(e){return new Date(\"\")}};return function(t,r,n){var o=r.prototype,i=o.parse;o.parse=function(t){var r=t.date,o=t.format,a=t.pl,s=t.utc;this.$u=s,o?(e=a?n.Ls[a]:this.$locale(),this.$d=u(r,o,s),this.init(t),a&&(this.$L=a)):i.call(this,t)}}}))},{}],272:[function(e,t,r){var n,o;n=this,o=function(){return function(e,t,r){var n=(new Date).getTimezoneOffset(),o=t.prototype;r.utc=function(e,r){return new t({date:e,utc:!0,format:r})},o.utc=function(){return r(this.toDate(),{locale:this.$L,utc:!0})},o.local=function(){return r(this.toDate(),{locale:this.$L,utc:!1})};var i=o.parse;o.parse=function(e){e.utc&&(this.$u=!0),this.$utils().u(e.$offset)||(this.$offset=e.$offset),i.call(this,e)};var a=o.init;o.init=function(){if(this.$u){var e=this.$d;this.$y=e.getUTCFullYear(),this.$M=e.getUTCMonth(),this.$D=e.getUTCDate(),this.$W=e.getUTCDay(),this.$H=e.getUTCHours(),this.$m=e.getUTCMinutes(),this.$s=e.getUTCSeconds(),this.$ms=e.getUTCMilliseconds()}else a.call(this)};var s=o.utcOffset;o.utcOffset=function(e){var t=this.$utils().u;if(t(e))return this.$u?0:t(this.$offset)?s.call(this):this.$offset;var r,o=Math.abs(e)<=16?60*e:e;return 0!==e?(r=this.local().add(o+n,\"minute\")).$offset=o:r=this.utc(),r};var u=o.format;o.format=function(e){var t=e||(this.$u?\"YYYY-MM-DDTHH:mm:ss[Z]\":\"\");return u.call(this,t)},o.valueOf=function(){var e=this.$utils().u(this.$offset)?0:this.$offset+n;return this.$d.valueOf()-6e4*e},o.isUTC=function(){return!!this.$u},o.toISOString=function(){return this.toDate().toISOString()},o.toString=function(){return this.toDate().toUTCString()}}},\"object\"==_typeof2(r)&&void 0!==t?t.exports=o():\"function\"==typeof define&&define.amd?define(o):n.dayjs_plugin_utc=o()},{}],273:[function(e,t,r){r.utils=e(\"./des/utils\"),r.Cipher=e(\"./des/cipher\"),r.DES=e(\"./des/des\"),r.CBC=e(\"./des/cbc\"),r.EDE=e(\"./des/ede\")},{\"./des/cbc\":274,\"./des/cipher\":275,\"./des/des\":276,\"./des/ede\":277,\"./des/utils\":278}],274:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i={};function a(e){n.equal(e.length,8,\"Invalid IV length\"),this.iv=new Array(8);for(var t=0;t0;n--)t+=this._buffer(e,t),r+=this._flushBuffer(o,r);return t+=this._buffer(e,t),o},o.prototype.final=function(e){var t,r;return e&&(t=this.update(e)),r=\"encrypt\"===this.type?this._finalEncrypt():this._finalDecrypt(),t?t.concat(r):r},o.prototype._pad=function(e,t){if(0===t)return!1;for(;t>>1];r=a.r28shl(r,s),o=a.r28shl(o,s),a.pc2(r,o,e.keys,i)}},c.prototype._update=function(e,t,r,n){var o=this._desState,i=a.readUInt32BE(e,t),s=a.readUInt32BE(e,t+4);a.ip(i,s,o.tmp,0),i=o.tmp[0],s=o.tmp[1],\"encrypt\"===this.type?this._encrypt(o,i,s,o.tmp,0):this._decrypt(o,i,s,o.tmp,0),i=o.tmp[0],s=o.tmp[1],a.writeUInt32BE(r,i,n),a.writeUInt32BE(r,s,n+4)},c.prototype._pad=function(e,t){for(var r=e.length-t,n=t;n>>0,i=h}a.rip(s,i,n,o)},c.prototype._decrypt=function(e,t,r,n,o){for(var i=r,s=t,u=e.keys.length-2;u>=0;u-=2){var c=e.keys[u],f=e.keys[u+1];a.expand(i,e.tmp,0),c^=e.tmp[0],f^=e.tmp[1];var l=a.substitute(c,f),h=i;i=(s^a.permute(l))>>>0,s=h}a.rip(i,s,n,o)}},{\"../des\":273,inherits:341,\"minimalistic-assert\":390}],277:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\"),i=e(\"../des\"),a=i.Cipher,s=i.DES;function u(e,t){n.equal(t.length,24,\"Invalid key length\");var r=t.slice(0,8),o=t.slice(8,16),i=t.slice(16,24);this.ciphers=\"encrypt\"===e?[s.create({type:\"encrypt\",key:r}),s.create({type:\"decrypt\",key:o}),s.create({type:\"encrypt\",key:i})]:[s.create({type:\"decrypt\",key:i}),s.create({type:\"encrypt\",key:o}),s.create({type:\"decrypt\",key:r})]}function c(e){a.call(this,e);var t=new u(this.type,this.options.key);this._edeState=t}o(c,a),t.exports=c,c.create=function(e){return new c(e)},c.prototype._update=function(e,t,r,n){var o=this._edeState;o.ciphers[0]._update(e,t,r,n),o.ciphers[1]._update(r,n,r,n),o.ciphers[2]._update(r,n,r,n)},c.prototype._pad=s.prototype._pad,c.prototype._unpad=s.prototype._unpad},{\"../des\":273,inherits:341,\"minimalistic-assert\":390}],278:[function(e,t,r){r.readUInt32BE=function(e,t){return(e[0+t]<<24|e[1+t]<<16|e[2+t]<<8|e[3+t])>>>0},r.writeUInt32BE=function(e,t,r){e[0+r]=t>>>24,e[1+r]=t>>>16&255,e[2+r]=t>>>8&255,e[3+r]=255&t},r.ip=function(e,t,r,n){for(var o=0,i=0,a=6;a>=0;a-=2){for(var s=0;s<=24;s+=8)o<<=1,o|=t>>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>>s+a&1}for(a=6;a>=0;a-=2){for(s=1;s<=25;s+=8)i<<=1,i|=t>>>s+a&1;for(s=1;s<=25;s+=8)i<<=1,i|=e>>>s+a&1}r[n+0]=o>>>0,r[n+1]=i>>>0},r.rip=function(e,t,r,n){for(var o=0,i=0,a=0;a<4;a++)for(var s=24;s>=0;s-=8)o<<=1,o|=t>>>s+a&1,o<<=1,o|=e>>>s+a&1;for(a=4;a<8;a++)for(s=24;s>=0;s-=8)i<<=1,i|=t>>>s+a&1,i<<=1,i|=e>>>s+a&1;r[n+0]=o>>>0,r[n+1]=i>>>0},r.pc1=function(e,t,r,n){for(var o=0,i=0,a=7;a>=5;a--){for(var s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(s=0;s<=24;s+=8)o<<=1,o|=e>>s+a&1}for(s=0;s<=24;s+=8)o<<=1,o|=t>>s+a&1;for(a=1;a<=3;a++){for(s=0;s<=24;s+=8)i<<=1,i|=t>>s+a&1;for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1}for(s=0;s<=24;s+=8)i<<=1,i|=e>>s+a&1;r[n+0]=o>>>0,r[n+1]=i>>>0},r.r28shl=function(e,t){return e<>>28-t};var n=[14,11,17,4,27,23,25,0,13,22,7,18,5,9,16,24,2,20,12,21,1,8,15,26,15,4,25,19,9,1,26,16,5,11,23,8,12,7,17,0,22,3,10,14,6,20,27,24];r.pc2=function(e,t,r,o){for(var i=0,a=0,s=n.length>>>1,u=0;u>>n[u]&1;for(u=s;u>>n[u]&1;r[o+0]=i>>>0,r[o+1]=a>>>0},r.expand=function(e,t,r){var n=0,o=0;n=(1&e)<<5|e>>>27;for(var i=23;i>=15;i-=4)n<<=6,n|=e>>>i&63;for(i=11;i>=3;i-=4)o|=e>>>i&63,o<<=6;o|=(31&e)<<1|e>>>31,t[r+0]=n>>>0,t[r+1]=o>>>0};var o=[14,0,4,15,13,7,1,4,2,14,15,2,11,13,8,1,3,10,10,6,6,12,12,11,5,9,9,5,0,3,7,8,4,15,1,12,14,8,8,2,13,4,6,9,2,1,11,7,15,5,12,11,9,3,7,14,3,10,10,0,5,6,0,13,15,3,1,13,8,4,14,7,6,15,11,2,3,8,4,14,9,12,7,0,2,1,13,10,12,6,0,9,5,11,10,5,0,13,14,8,7,10,11,1,10,3,4,15,13,4,1,2,5,11,8,6,12,7,6,12,9,0,3,5,2,14,15,9,10,13,0,7,9,0,14,9,6,3,3,4,15,6,5,10,1,2,13,8,12,5,7,14,11,12,4,11,2,15,8,1,13,1,6,10,4,13,9,0,8,6,15,9,3,8,0,7,11,4,1,15,2,14,12,3,5,11,10,5,14,2,7,12,7,13,13,8,14,11,3,5,0,6,6,15,9,0,10,3,1,4,2,7,8,2,5,12,11,1,12,10,4,14,15,9,10,3,6,15,9,0,0,6,12,10,11,1,7,13,13,8,15,9,1,4,3,5,14,11,5,12,2,7,8,2,4,14,2,14,12,11,4,2,1,12,7,4,10,7,11,13,6,1,8,5,5,0,3,15,15,10,13,3,0,9,14,8,9,6,4,11,2,8,1,12,11,7,10,1,13,14,7,2,8,13,15,6,9,15,12,0,5,9,6,10,3,4,0,5,14,3,12,10,1,15,10,4,15,2,9,7,2,12,6,9,8,5,0,6,13,1,3,13,4,14,14,0,7,11,5,3,11,8,9,4,14,3,15,2,5,12,2,9,8,5,12,15,3,10,7,11,0,14,4,1,10,7,1,6,13,0,11,8,6,13,4,13,11,0,2,11,14,7,15,4,0,9,8,1,13,10,3,14,12,3,9,5,7,12,5,2,10,15,6,8,1,6,1,6,4,11,11,13,13,8,12,1,3,4,7,10,14,7,10,9,15,5,6,0,8,15,0,14,5,2,9,3,2,12,13,1,2,15,8,13,4,8,6,10,15,3,11,7,1,4,10,12,9,5,3,6,14,11,5,0,0,14,12,9,7,2,7,2,11,1,4,14,1,7,9,4,12,10,14,8,2,13,0,15,6,12,10,9,13,0,15,3,3,5,5,6,8,11];r.substitute=function(e,t){for(var r=0,n=0;n<4;n++){r<<=4,r|=o[64*n+(e>>>18-6*n&63)]}for(n=0;n<4;n++){r<<=4,r|=o[256+64*n+(t>>>18-6*n&63)]}return r>>>0};var i=[16,25,12,11,3,20,4,15,31,17,9,6,27,14,1,22,30,24,8,18,0,5,29,23,13,19,2,26,10,21,28,7];r.permute=function(e){for(var t=0,r=0;r>>i[r]&1;return t>>>0},r.padSplit=function(e,t,r){for(var n=e.toString(2);n.lengthe;)r.ishrn(1);if(r.isEven()&&r.iadd(s),r.testn(1)||r.iadd(u),t.cmp(u)){if(!t.cmp(c))for(;r.mod(f).cmp(l);)r.iadd(d)}else for(;r.mod(i).cmp(h);)r.iadd(d);if(m(p=r.shrn(1))&&m(r)&&b(p)&&b(r)&&a.test(p)&&a.test(r))return r}}},{\"bn.js\":156,\"miller-rabin\":389,randombytes:426}],282:[function(e,t,r){t.exports={modp1:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a63a3620ffffffffffffffff\"},modp2:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece65381ffffffffffffffff\"},modp5:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca237327ffffffffffffffff\"},modp14:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aacaa68ffffffffffffffff\"},modp15:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a93ad2caffffffffffffffff\"},modp16:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c934063199ffffffffffffffff\"},modp17:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dcc4024ffffffffffffffff\"},modp18:{gen:\"02\",prime:\"ffffffffffffffffc90fdaa22168c234c4c6628b80dc1cd129024e088a67cc74020bbea63b139b22514a08798e3404ddef9519b3cd3a431b302b0a6df25f14374fe1356d6d51c245e485b576625e7ec6f44c42e9a637ed6b0bff5cb6f406b7edee386bfb5a899fa5ae9f24117c4b1fe649286651ece45b3dc2007cb8a163bf0598da48361c55d39a69163fa8fd24cf5f83655d23dca3ad961c62f356208552bb9ed529077096966d670c354e4abc9804f1746c08ca18217c32905e462e36ce3be39e772c180e86039b2783a2ec07a28fb5c55df06f4c52c9de2bcbf6955817183995497cea956ae515d2261898fa051015728e5a8aaac42dad33170d04507a33a85521abdf1cba64ecfb850458dbef0a8aea71575d060c7db3970f85a6e1e4c7abf5ae8cdb0933d71e8c94e04a25619dcee3d2261ad2ee6bf12ffa06d98a0864d87602733ec86a64521f2b18177b200cbbe117577a615d6c770988c0bad946e208e24fa074e5ab3143db5bfce0fd108e4b82d120a92108011a723c12a787e6d788719a10bdba5b2699c327186af4e23c1a946834b6150bda2583e9ca2ad44ce8dbbbc2db04de8ef92e8efc141fbecaa6287c59474e6bc05d99b2964fa090c3a2233ba186515be7ed1f612970cee2d7afb81bdd762170481cd0069127d5b05aa993b4ea988d8fddc186ffb7dc90a6c08f4df435c93402849236c3fab4d27c7026c1d4dcb2602646dec9751e763dba37bdf8ff9406ad9e530ee5db382f413001aeb06a53ed9027d831179727b0865a8918da3edbebcf9b14ed44ce6cbaced4bb1bdb7f1447e6cc254b332051512bd7af426fb8f401378cd2bf5983ca01c64b92ecf032ea15d1721d03f482d7ce6e74fef6d55e702f46980c82b5a84031900b1c9e59e7c97fbec7e8f323a97a7e36cc88be0f1d45b7ff585ac54bd407b22b4154aacc8f6d7ebf48e1d814cc5ed20f8037e0a79715eef29be32806a1d58bb7c5da76f550aa3d8a1fbff0eb19ccb1a313d55cda56c9ec2ef29632387fe8d76e3c0468043e8f663f4860ee12bf2d5b0b7474d6e694f91e6dbe115974a3926f12fee5e438777cb6a932df8cd8bec4d073b931ba3bc832b68d9dd300741fa7bf8afc47ed2576f6936ba424663aab639c5ae4f5683423b4742bf1c978238f16cbe39d652de3fdb8befc848ad922222e04a4037c0713eb57a81a23f0c73473fc646cea306b4bcbc8862f8385ddfa9d4b7fa2c087e879683303ed5bdd3a062b3cf5b3a278a66d2a13f83f44f82ddf310ee074ab6a364597e899a0255dc164f31cc50846851df9ab48195ded7ea1b1d510bd7ee74d73faf36bc31ecfa268359046f4eb879f924009438b481c6cd7889a002ed5ee382bc9190da6fc026e479558e4475677e9aa9e3050e2765694dfc81f56e880b96e7160c980dd98edd3dfffffffffffffffff\"}}},{}],283:[function(e,t,r){var n=r;n.version=e(\"../package.json\").version,n.utils=e(\"./elliptic/utils\"),n.rand=e(\"brorand\"),n.curve=e(\"./elliptic/curve\"),n.curves=e(\"./elliptic/curves\"),n.ec=e(\"./elliptic/ec\"),n.eddsa=e(\"./elliptic/eddsa\")},{\"../package.json\":298,\"./elliptic/curve\":286,\"./elliptic/curves\":289,\"./elliptic/ec\":290,\"./elliptic/eddsa\":293,\"./elliptic/utils\":297,brorand:157}],284:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.getNAF,a=o.getJSF,s=o.assert;function u(e,t){this.type=e,this.p=new n(t.p,16),this.red=t.prime?n.red(t.prime):n.mont(this.p),this.zero=new n(0).toRed(this.red),this.one=new n(1).toRed(this.red),this.two=new n(2).toRed(this.red),this.n=t.n&&new n(t.n,16),this.g=t.g&&this.pointFromJSON(t.g,t.gRed),this._wnafT1=new Array(4),this._wnafT2=new Array(4),this._wnafT3=new Array(4),this._wnafT4=new Array(4);var r=this.n&&this.p.div(this.n);!r||r.cmpn(100)>0?this.redN=null:(this._maxwellTrick=!0,this.redN=this.n.toRed(this.red))}function c(e,t){this.curve=e,this.type=t,this.precomputed=null}t.exports=u,u.prototype.point=function(){throw new Error(\"Not implemented\")},u.prototype.validate=function(){throw new Error(\"Not implemented\")},u.prototype._fixedNafMul=function(e,t){s(e.precomputed);var r=e._getDoubles(),n=i(t,1),o=(1<=u;t--)c=(c<<1)+n[t];a.push(c)}for(var f=this.jpoint(null,null,null),l=this.jpoint(null,null,null),h=o;h>0;h--){for(u=0;u=0;c--){for(t=0;c>=0&&0===a[c];c--)t++;if(c>=0&&t++,u=u.dblp(t),c<0)break;var f=a[c];s(0!==f),u=\"affine\"===e.type?f>0?u.mixedAdd(o[f-1>>1]):u.mixedAdd(o[-f-1>>1].neg()):f>0?u.add(o[f-1>>1]):u.add(o[-f-1>>1].neg())}return\"affine\"===e.type?u.toP():u},u.prototype._wnafMulAdd=function(e,t,r,n,o){for(var s=this._wnafT1,u=this._wnafT2,c=this._wnafT3,f=0,l=0;l=1;l-=2){var d=l-1,p=l;if(1===s[d]&&1===s[p]){var y=[t[d],null,null,t[p]];0===t[d].y.cmp(t[p].y)?(y[1]=t[d].add(t[p]),y[2]=t[d].toJ().mixedAdd(t[p].neg())):0===t[d].y.cmp(t[p].y.redNeg())?(y[1]=t[d].toJ().mixedAdd(t[p]),y[2]=t[d].add(t[p].neg())):(y[1]=t[d].toJ().mixedAdd(t[p]),y[2]=t[d].toJ().mixedAdd(t[p].neg()));var m=[-3,-1,-5,-7,0,7,5,1,3],b=a(r[d],r[p]);f=Math.max(b[0].length,f),c[d]=new Array(f),c[p]=new Array(f);for(var v=0;v=0;l--){for(var x=0;l>=0;){var S=!0;for(v=0;v=0&&x++,_=_.dblp(x),l<0)break;for(v=0;v0?O=u[v][E-1>>1]:E<0&&(O=u[v][-E-1>>1].neg()),_=\"affine\"===O.type?_.mixedAdd(O):_.add(O))}}for(l=0;l=Math.ceil((e.bitLength()+1)/t.step)},c.prototype._getDoubles=function(e,t){if(this.precomputed&&this.precomputed.doubles)return this.precomputed.doubles;for(var r=[this],n=this,o=0;o\":\"\"},c.prototype.isInfinity=function(){return 0===this.x.cmpn(0)&&(0===this.y.cmp(this.z)||this.zOne&&0===this.y.cmp(this.curve.c))},c.prototype._extDbl=function(){var e=this.x.redSqr(),t=this.y.redSqr(),r=this.z.redSqr();r=r.redIAdd(r);var n=this.curve._mulA(e),o=this.x.redAdd(this.y).redSqr().redISub(e).redISub(t),i=n.redAdd(t),a=i.redSub(r),s=n.redSub(t),u=o.redMul(a),c=i.redMul(s),f=o.redMul(s),l=a.redMul(i);return this.curve.point(u,c,l,f)},c.prototype._projDbl=function(){var e,t,r,n=this.x.redAdd(this.y).redSqr(),o=this.x.redSqr(),i=this.y.redSqr();if(this.curve.twisted){var a=(c=this.curve._mulA(o)).redAdd(i);if(this.zOne)e=n.redSub(o).redSub(i).redMul(a.redSub(this.curve.two)),t=a.redMul(c.redSub(i)),r=a.redSqr().redSub(a).redSub(a);else{var s=this.z.redSqr(),u=a.redSub(s).redISub(s);e=n.redSub(o).redISub(i).redMul(u),t=a.redMul(c.redSub(i)),r=a.redMul(u)}}else{var c=o.redAdd(i);s=this.curve._mulC(this.z).redSqr(),u=c.redSub(s).redSub(s);e=this.curve._mulC(n.redISub(c)).redMul(u),t=this.curve._mulC(c).redMul(o.redISub(i)),r=c.redMul(u)}return this.curve.point(e,t,r)},c.prototype.dbl=function(){return this.isInfinity()?this:this.curve.extended?this._extDbl():this._projDbl()},c.prototype._extAdd=function(e){var t=this.y.redSub(this.x).redMul(e.y.redSub(e.x)),r=this.y.redAdd(this.x).redMul(e.y.redAdd(e.x)),n=this.t.redMul(this.curve.dd).redMul(e.t),o=this.z.redMul(e.z.redAdd(e.z)),i=r.redSub(t),a=o.redSub(n),s=o.redAdd(n),u=r.redAdd(t),c=i.redMul(a),f=s.redMul(u),l=i.redMul(u),h=a.redMul(s);return this.curve.point(c,f,h,l)},c.prototype._projAdd=function(e){var t,r,n=this.z.redMul(e.z),o=n.redSqr(),i=this.x.redMul(e.x),a=this.y.redMul(e.y),s=this.curve.d.redMul(i).redMul(a),u=o.redSub(s),c=o.redAdd(s),f=this.x.redAdd(this.y).redMul(e.x.redAdd(e.y)).redISub(i).redISub(a),l=n.redMul(u).redMul(f);return this.curve.twisted?(t=n.redMul(c).redMul(a.redSub(this.curve._mulA(i))),r=u.redMul(c)):(t=n.redMul(c).redMul(a.redSub(i)),r=this.curve._mulC(u).redMul(c)),this.curve.point(l,t,r)},c.prototype.add=function(e){return this.isInfinity()?e:e.isInfinity()?this:this.curve.extended?this._extAdd(e):this._projAdd(e)},c.prototype.mul=function(e){return this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!1)},c.prototype.jmulAdd=function(e,t,r){return this.curve._wnafMulAdd(1,[this,t],[e,r],2,!0)},c.prototype.normalize=function(){if(this.zOne)return this;var e=this.z.redInvm();return this.x=this.x.redMul(e),this.y=this.y.redMul(e),this.t&&(this.t=this.t.redMul(e)),this.z=this.curve.one,this.zOne=!0,this},c.prototype.neg=function(){return this.curve.point(this.x.redNeg(),this.y,this.z,this.t&&this.t.redNeg())},c.prototype.getX=function(){return this.normalize(),this.x.fromRed()},c.prototype.getY=function(){return this.normalize(),this.y.fromRed()},c.prototype.eq=function(e){return this===e||0===this.getX().cmp(e.getX())&&0===this.getY().cmp(e.getY())},c.prototype.eqXToP=function(e){var t=e.toRed(this.curve.red).redMul(this.z);if(0===this.x.cmp(t))return!0;for(var r=e.clone(),n=this.curve.redN.redMul(this.z);;){if(r.iadd(this.curve.n),r.cmp(this.curve.p)>=0)return!1;if(t.redIAdd(n),0===this.x.cmp(t))return!0}},c.prototype.toP=c.prototype.normalize,c.prototype.mixedAdd=c.prototype.add},{\"../utils\":297,\"./base\":284,\"bn.js\":156,inherits:341}],286:[function(e,t,r){var n=r;n.base=e(\"./base\"),n.short=e(\"./short\"),n.mont=e(\"./mont\"),n.edwards=e(\"./edwards\")},{\"./base\":284,\"./edwards\":285,\"./mont\":287,\"./short\":288}],287:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"inherits\"),i=e(\"./base\"),a=e(\"../utils\");function s(e){i.call(this,\"mont\",e),this.a=new n(e.a,16).toRed(this.red),this.b=new n(e.b,16).toRed(this.red),this.i4=new n(4).toRed(this.red).redInvm(),this.two=new n(2).toRed(this.red),this.a24=this.i4.redMul(this.a.redAdd(this.two))}function u(e,t,r){i.BasePoint.call(this,e,\"projective\"),null===t&&null===r?(this.x=this.curve.one,this.z=this.curve.zero):(this.x=new n(t,16),this.z=new n(r,16),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)))}o(s,i),t.exports=s,s.prototype.validate=function(e){var t=e.normalize().x,r=t.redSqr(),n=r.redMul(t).redAdd(r.redMul(this.a)).redAdd(t);return 0===n.redSqrt().redSqr().cmp(n)},o(u,i.BasePoint),s.prototype.decodePoint=function(e,t){return this.point(a.toArray(e,t),1)},s.prototype.point=function(e,t){return new u(this,e,t)},s.prototype.pointFromJSON=function(e){return u.fromJSON(this,e)},u.prototype.precompute=function(){},u.prototype._encode=function(){return this.getX().toArray(\"be\",this.curve.p.byteLength())},u.fromJSON=function(e,t){return new u(e,t[0],t[1]||e.one)},u.prototype.inspect=function(){return this.isInfinity()?\"\":\"\"},u.prototype.isInfinity=function(){return 0===this.z.cmpn(0)},u.prototype.dbl=function(){var e=this.x.redAdd(this.z).redSqr(),t=this.x.redSub(this.z).redSqr(),r=e.redSub(t),n=e.redMul(t),o=r.redMul(t.redAdd(this.curve.a24.redMul(r)));return this.curve.point(n,o)},u.prototype.add=function(){throw new Error(\"Not supported on Montgomery curve\")},u.prototype.diffAdd=function(e,t){var r=this.x.redAdd(this.z),n=this.x.redSub(this.z),o=e.x.redAdd(e.z),i=e.x.redSub(e.z).redMul(r),a=o.redMul(n),s=t.z.redMul(i.redAdd(a).redSqr()),u=t.x.redMul(i.redISub(a).redSqr());return this.curve.point(s,u)},u.prototype.mul=function(e){for(var t=e.clone(),r=this,n=this.curve.point(null,null),o=[];0!==t.cmpn(0);t.iushrn(1))o.push(t.andln(1));for(var i=o.length-1;i>=0;i--)0===o[i]?(r=r.diffAdd(n,this),n=n.dbl()):(n=r.diffAdd(n,this),r=r.dbl());return n},u.prototype.mulAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},u.prototype.jumlAdd=function(){throw new Error(\"Not supported on Montgomery curve\")},u.prototype.eq=function(e){return 0===this.getX().cmp(e.getX())},u.prototype.normalize=function(){return this.x=this.x.redMul(this.z.redInvm()),this.z=this.curve.one,this},u.prototype.getX=function(){return this.normalize(),this.x.fromRed()}},{\"../utils\":297,\"./base\":284,\"bn.js\":156,inherits:341}],288:[function(e,t,r){var n=e(\"../utils\"),o=e(\"bn.js\"),i=e(\"inherits\"),a=e(\"./base\"),s=n.assert;function u(e){a.call(this,\"short\",e),this.a=new o(e.a,16).toRed(this.red),this.b=new o(e.b,16).toRed(this.red),this.tinv=this.two.redInvm(),this.zeroA=0===this.a.fromRed().cmpn(0),this.threeA=0===this.a.fromRed().sub(this.p).cmpn(-3),this.endo=this._getEndomorphism(e),this._endoWnafT1=new Array(4),this._endoWnafT2=new Array(4)}function c(e,t,r,n){a.BasePoint.call(this,e,\"affine\"),null===t&&null===r?(this.x=null,this.y=null,this.inf=!0):(this.x=new o(t,16),this.y=new o(r,16),n&&(this.x.forceRed(this.curve.red),this.y.forceRed(this.curve.red)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.inf=!1)}function f(e,t,r,n){a.BasePoint.call(this,e,\"jacobian\"),null===t&&null===r&&null===n?(this.x=this.curve.one,this.y=this.curve.one,this.z=new o(0)):(this.x=new o(t,16),this.y=new o(r,16),this.z=new o(n,16)),this.x.red||(this.x=this.x.toRed(this.curve.red)),this.y.red||(this.y=this.y.toRed(this.curve.red)),this.z.red||(this.z=this.z.toRed(this.curve.red)),this.zOne=this.z===this.curve.one}i(u,a),t.exports=u,u.prototype._getEndomorphism=function(e){if(this.zeroA&&this.g&&this.n&&1===this.p.modn(3)){var t,r;if(e.beta)t=new o(e.beta,16).toRed(this.red);else{var n=this._getEndoRoots(this.p);t=(t=n[0].cmp(n[1])<0?n[0]:n[1]).toRed(this.red)}if(e.lambda)r=new o(e.lambda,16);else{var i=this._getEndoRoots(this.n);0===this.g.mul(i[0]).x.cmp(this.g.x.redMul(t))?r=i[0]:(r=i[1],s(0===this.g.mul(r).x.cmp(this.g.x.redMul(t))))}return{beta:t,lambda:r,basis:e.basis?e.basis.map((function(e){return{a:new o(e.a,16),b:new o(e.b,16)}})):this._getEndoBasis(r)}}},u.prototype._getEndoRoots=function(e){var t=e===this.p?this.red:o.mont(e),r=new o(2).toRed(t).redInvm(),n=r.redNeg(),i=new o(3).toRed(t).redNeg().redSqrt().redMul(r);return[n.redAdd(i).fromRed(),n.redSub(i).fromRed()]},u.prototype._getEndoBasis=function(e){for(var t,r,n,i,a,s,u,c,f,l=this.n.ushrn(Math.floor(this.n.bitLength()/2)),h=e,d=this.n.clone(),p=new o(1),y=new o(0),m=new o(0),b=new o(1),v=0;0!==h.cmpn(0);){var g=d.div(h);c=d.sub(g.mul(h)),f=m.sub(g.mul(p));var w=b.sub(g.mul(y));if(!n&&c.cmp(l)<0)t=u.neg(),r=p,n=c.neg(),i=f;else if(n&&2==++v)break;u=c,d=h,h=c,m=p,p=f,b=y,y=w}a=c.neg(),s=f;var _=n.sqr().add(i.sqr());return a.sqr().add(s.sqr()).cmp(_)>=0&&(a=t,s=r),n.negative&&(n=n.neg(),i=i.neg()),a.negative&&(a=a.neg(),s=s.neg()),[{a:n,b:i},{a:a,b:s}]},u.prototype._endoSplit=function(e){var t=this.endo.basis,r=t[0],n=t[1],o=n.b.mul(e).divRound(this.n),i=r.b.neg().mul(e).divRound(this.n),a=o.mul(r.a),s=i.mul(n.a),u=o.mul(r.b),c=i.mul(n.b);return{k1:e.sub(a).sub(s),k2:u.add(c).neg()}},u.prototype.pointFromX=function(e,t){(e=new o(e,16)).red||(e=e.toRed(this.red));var r=e.redSqr().redMul(e).redIAdd(e.redMul(this.a)).redIAdd(this.b),n=r.redSqrt();if(0!==n.redSqr().redSub(r).cmp(this.zero))throw new Error(\"invalid point\");var i=n.fromRed().isOdd();return(t&&!i||!t&&i)&&(n=n.redNeg()),this.point(e,n)},u.prototype.validate=function(e){if(e.inf)return!0;var t=e.x,r=e.y,n=this.a.redMul(t),o=t.redSqr().redMul(t).redIAdd(n).redIAdd(this.b);return 0===r.redSqr().redISub(o).cmpn(0)},u.prototype._endoWnafMulAdd=function(e,t,r){for(var n=this._endoWnafT1,o=this._endoWnafT2,i=0;i\":\"\"},c.prototype.isInfinity=function(){return this.inf},c.prototype.add=function(e){if(this.inf)return e;if(e.inf)return this;if(this.eq(e))return this.dbl();if(this.neg().eq(e))return this.curve.point(null,null);if(0===this.x.cmp(e.x))return this.curve.point(null,null);var t=this.y.redSub(e.y);0!==t.cmpn(0)&&(t=t.redMul(this.x.redSub(e.x).redInvm()));var r=t.redSqr().redISub(this.x).redISub(e.x),n=t.redMul(this.x.redSub(r)).redISub(this.y);return this.curve.point(r,n)},c.prototype.dbl=function(){if(this.inf)return this;var e=this.y.redAdd(this.y);if(0===e.cmpn(0))return this.curve.point(null,null);var t=this.curve.a,r=this.x.redSqr(),n=e.redInvm(),o=r.redAdd(r).redIAdd(r).redIAdd(t).redMul(n),i=o.redSqr().redISub(this.x.redAdd(this.x)),a=o.redMul(this.x.redSub(i)).redISub(this.y);return this.curve.point(i,a)},c.prototype.getX=function(){return this.x.fromRed()},c.prototype.getY=function(){return this.y.fromRed()},c.prototype.mul=function(e){return e=new o(e,16),this._hasDoubles(e)?this.curve._fixedNafMul(this,e):this.curve.endo?this.curve._endoWnafMulAdd([this],[e]):this.curve._wnafMul(this,e)},c.prototype.mulAdd=function(e,t,r){var n=[this,t],o=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,o):this.curve._wnafMulAdd(1,n,o,2)},c.prototype.jmulAdd=function(e,t,r){var n=[this,t],o=[e,r];return this.curve.endo?this.curve._endoWnafMulAdd(n,o,!0):this.curve._wnafMulAdd(1,n,o,2,!0)},c.prototype.eq=function(e){return this===e||this.inf===e.inf&&(this.inf||0===this.x.cmp(e.x)&&0===this.y.cmp(e.y))},c.prototype.neg=function(e){if(this.inf)return this;var t=this.curve.point(this.x,this.y.redNeg());if(e&&this.precomputed){var r=this.precomputed,n=function(e){return e.neg()};t.precomputed={naf:r.naf&&{wnd:r.naf.wnd,points:r.naf.points.map(n)},doubles:r.doubles&&{step:r.doubles.step,points:r.doubles.points.map(n)}}}return t},c.prototype.toJ=function(){return this.inf?this.curve.jpoint(null,null,null):this.curve.jpoint(this.x,this.y,this.curve.one)},i(f,a.BasePoint),u.prototype.jpoint=function(e,t,r){return new f(this,e,t,r)},f.prototype.toP=function(){if(this.isInfinity())return this.curve.point(null,null);var e=this.z.redInvm(),t=e.redSqr(),r=this.x.redMul(t),n=this.y.redMul(t).redMul(e);return this.curve.point(r,n)},f.prototype.neg=function(){return this.curve.jpoint(this.x,this.y.redNeg(),this.z)},f.prototype.add=function(e){if(this.isInfinity())return e;if(e.isInfinity())return this;var t=e.z.redSqr(),r=this.z.redSqr(),n=this.x.redMul(t),o=e.x.redMul(r),i=this.y.redMul(t.redMul(e.z)),a=e.y.redMul(r.redMul(this.z)),s=n.redSub(o),u=i.redSub(a);if(0===s.cmpn(0))return 0!==u.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var c=s.redSqr(),f=c.redMul(s),l=n.redMul(c),h=u.redSqr().redIAdd(f).redISub(l).redISub(l),d=u.redMul(l.redISub(h)).redISub(i.redMul(f)),p=this.z.redMul(e.z).redMul(s);return this.curve.jpoint(h,d,p)},f.prototype.mixedAdd=function(e){if(this.isInfinity())return e.toJ();if(e.isInfinity())return this;var t=this.z.redSqr(),r=this.x,n=e.x.redMul(t),o=this.y,i=e.y.redMul(t).redMul(this.z),a=r.redSub(n),s=o.redSub(i);if(0===a.cmpn(0))return 0!==s.cmpn(0)?this.curve.jpoint(null,null,null):this.dbl();var u=a.redSqr(),c=u.redMul(a),f=r.redMul(u),l=s.redSqr().redIAdd(c).redISub(f).redISub(f),h=s.redMul(f.redISub(l)).redISub(o.redMul(c)),d=this.z.redMul(a);return this.curve.jpoint(l,h,d)},f.prototype.dblp=function(e){if(0===e)return this;if(this.isInfinity())return this;if(!e)return this.dbl();if(this.curve.zeroA||this.curve.threeA){for(var t=this,r=0;r=0)return!1;if(r.redIAdd(o),0===this.x.cmp(r))return!0}},f.prototype.inspect=function(){return this.isInfinity()?\"\":\"\"},f.prototype.isInfinity=function(){return 0===this.z.cmpn(0)}},{\"../utils\":297,\"./base\":284,\"bn.js\":156,inherits:341}],289:[function(e,t,r){var n,o=r,i=e(\"hash.js\"),a=e(\"./curve\"),s=e(\"./utils\").assert;function u(e){\"short\"===e.type?this.curve=new a.short(e):\"edwards\"===e.type?this.curve=new a.edwards(e):this.curve=new a.mont(e),this.g=this.curve.g,this.n=this.curve.n,this.hash=e.hash,s(this.g.validate(),\"Invalid curve\"),s(this.g.mul(this.n).isInfinity(),\"Invalid curve, G*N != O\")}function c(e,t){Object.defineProperty(o,e,{configurable:!0,enumerable:!0,get:function(){var r=new u(t);return Object.defineProperty(o,e,{configurable:!0,enumerable:!0,value:r}),r}})}o.PresetCurve=u,c(\"p192\",{type:\"short\",prime:\"p192\",p:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc\",b:\"64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1\",n:\"ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831\",hash:i.sha256,gRed:!1,g:[\"188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012\",\"07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811\"]}),c(\"p224\",{type:\"short\",prime:\"p224\",p:\"ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001\",a:\"ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe\",b:\"b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4\",n:\"ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d\",hash:i.sha256,gRed:!1,g:[\"b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21\",\"bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34\"]}),c(\"p256\",{type:\"short\",prime:null,p:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff\",a:\"ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc\",b:\"5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b\",n:\"ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551\",hash:i.sha256,gRed:!1,g:[\"6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296\",\"4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5\"]}),c(\"p384\",{type:\"short\",prime:null,p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 ffffffff\",a:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe ffffffff 00000000 00000000 fffffffc\",b:\"b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f 5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef\",n:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 f4372ddf 581a0db2 48b0a77a ecec196a ccc52973\",hash:i.sha384,gRed:!1,g:[\"aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 5502f25d bf55296c 3a545e38 72760ab7\",\"3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 0a60b1ce 1d7e819d 7a431d7c 90ea0e5f\"]}),c(\"p521\",{type:\"short\",prime:null,p:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff\",a:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffc\",b:\"00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b 99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd 3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00\",n:\"000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409\",hash:i.sha512,gRed:!1,g:[\"000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66\",\"00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 3fad0761 353c7086 a272c240 88be9476 9fd16650\"]}),c(\"curve25519\",{type:\"mont\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"76d06\",b:\"1\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:i.sha256,gRed:!1,g:[\"9\"]}),c(\"ed25519\",{type:\"edwards\",prime:\"p25519\",p:\"7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed\",a:\"-1\",c:\"1\",d:\"52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3\",n:\"1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed\",hash:i.sha256,gRed:!1,g:[\"216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a\",\"6666666666666666666666666666666666666666666666666666666666666658\"]});try{n=e(\"./precomputed/secp256k1\")}catch(e){n=void 0}c(\"secp256k1\",{type:\"short\",prime:\"k256\",p:\"ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f\",a:\"0\",b:\"7\",n:\"ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141\",h:\"1\",hash:i.sha256,beta:\"7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee\",lambda:\"5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72\",basis:[{a:\"3086d221a7d46bcde86c90e49284eb15\",b:\"-e4437ed6010e88286f547fa90abfe4c3\"},{a:\"114ca50f7a8e2f3f657c1108d9d44cfd8\",b:\"3086d221a7d46bcde86c90e49284eb15\"}],gRed:!1,g:[\"79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798\",\"483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8\",n]})},{\"./curve\":286,\"./precomputed/secp256k1\":296,\"./utils\":297,\"hash.js\":326}],290:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"hmac-drbg\"),i=e(\"../utils\"),a=e(\"../curves\"),s=e(\"brorand\"),u=i.assert,c=e(\"./key\"),f=e(\"./signature\");function l(e){if(!(this instanceof l))return new l(e);\"string\"==typeof e&&(u(a.hasOwnProperty(e),\"Unknown curve \"+e),e=a[e]),e instanceof a.PresetCurve&&(e={curve:e}),this.curve=e.curve.curve,this.n=this.curve.n,this.nh=this.n.ushrn(1),this.g=this.curve.g,this.g=e.curve.g,this.g.precompute(e.curve.n.bitLength()+1),this.hash=e.hash||e.curve.hash}t.exports=l,l.prototype.keyPair=function(e){return new c(this,e)},l.prototype.keyFromPrivate=function(e,t){return c.fromPrivate(this,e,t)},l.prototype.keyFromPublic=function(e,t){return c.fromPublic(this,e,t)},l.prototype.genKeyPair=function(e){e||(e={});for(var t=new o({hash:this.hash,pers:e.pers,persEnc:e.persEnc||\"utf8\",entropy:e.entropy||s(this.hash.hmacStrength),entropyEnc:e.entropy&&e.entropyEnc||\"utf8\",nonce:this.n.toArray()}),r=this.n.byteLength(),i=this.n.sub(new n(2));;){var a=new n(t.generate(r));if(!(a.cmp(i)>0))return a.iaddn(1),this.keyFromPrivate(a)}},l.prototype._truncateToN=function(e,t){var r=8*e.byteLength()-this.n.bitLength();return r>0&&(e=e.ushrn(r)),!t&&e.cmp(this.n)>=0?e.sub(this.n):e},l.prototype.sign=function(e,t,r,i){\"object\"===_typeof2(r)&&(i=r,r=null),i||(i={}),t=this.keyFromPrivate(t,r),e=this._truncateToN(new n(e,16));for(var a=this.n.byteLength(),s=t.getPrivate().toArray(\"be\",a),u=e.toArray(\"be\",a),c=new o({hash:this.hash,entropy:s,nonce:u,pers:i.pers,persEnc:i.persEnc||\"utf8\"}),l=this.n.sub(new n(1)),h=0;;h++){var d=i.k?i.k(h):new n(c.generate(this.n.byteLength()));if(!((d=this._truncateToN(d,!0)).cmpn(1)<=0||d.cmp(l)>=0)){var p=this.g.mul(d);if(!p.isInfinity()){var y=p.getX(),m=y.umod(this.n);if(0!==m.cmpn(0)){var b=d.invm(this.n).mul(m.mul(t.getPrivate()).iadd(e));if(0!==(b=b.umod(this.n)).cmpn(0)){var v=(p.getY().isOdd()?1:0)|(0!==y.cmp(m)?2:0);return i.canonical&&b.cmp(this.nh)>0&&(b=this.n.sub(b),v^=1),new f({r:m,s:b,recoveryParam:v})}}}}}},l.prototype.verify=function(e,t,r,o){e=this._truncateToN(new n(e,16)),r=this.keyFromPublic(r,o);var i=(t=new f(t,\"hex\")).r,a=t.s;if(i.cmpn(1)<0||i.cmp(this.n)>=0)return!1;if(a.cmpn(1)<0||a.cmp(this.n)>=0)return!1;var s,u=a.invm(this.n),c=u.mul(e).umod(this.n),l=u.mul(i).umod(this.n);return this.curve._maxwellTrick?!(s=this.g.jmulAdd(c,r.getPublic(),l)).isInfinity()&&s.eqXToP(i):!(s=this.g.mulAdd(c,r.getPublic(),l)).isInfinity()&&0===s.getX().umod(this.n).cmp(i)},l.prototype.recoverPubKey=function(e,t,r,o){u((3&r)===r,\"The recovery param is more than two bits\"),t=new f(t,o);var i=this.n,a=new n(e),s=t.r,c=t.s,l=1&r,h=r>>1;if(s.cmp(this.curve.p.umod(this.curve.n))>=0&&h)throw new Error(\"Unable to find sencond key candinate\");s=h?this.curve.pointFromX(s.add(this.curve.n),l):this.curve.pointFromX(s,l);var d=t.r.invm(i),p=i.sub(a).mul(d).umod(i),y=c.mul(d).umod(i);return this.g.mulAdd(p,s,y)},l.prototype.getKeyRecoveryParam=function(e,t,r,n){if(null!==(t=new f(t,n)).recoveryParam)return t.recoveryParam;for(var o=0;o<4;o++){var i;try{i=this.recoverPubKey(e,t,o)}catch(e){continue}if(i.eq(r))return o}throw new Error(\"Unable to find valid recovery factor\")}},{\"../curves\":289,\"../utils\":297,\"./key\":291,\"./signature\":292,\"bn.js\":156,brorand:157,\"hmac-drbg\":338}],291:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\").assert;function i(e,t){this.ec=e,this.priv=null,this.pub=null,t.priv&&this._importPrivate(t.priv,t.privEnc),t.pub&&this._importPublic(t.pub,t.pubEnc)}t.exports=i,i.fromPublic=function(e,t,r){return t instanceof i?t:new i(e,{pub:t,pubEnc:r})},i.fromPrivate=function(e,t,r){return t instanceof i?t:new i(e,{priv:t,privEnc:r})},i.prototype.validate=function(){var e=this.getPublic();return e.isInfinity()?{result:!1,reason:\"Invalid public key\"}:e.validate()?e.mul(this.ec.curve.n).isInfinity()?{result:!0,reason:null}:{result:!1,reason:\"Public key * N != O\"}:{result:!1,reason:\"Public key is not a point\"}},i.prototype.getPublic=function(e,t){return\"string\"==typeof e&&(t=e,e=null),this.pub||(this.pub=this.ec.g.mul(this.priv)),t?this.pub.encode(t,e):this.pub},i.prototype.getPrivate=function(e){return\"hex\"===e?this.priv.toString(16,2):this.priv},i.prototype._importPrivate=function(e,t){this.priv=new n(e,t||16),this.priv=this.priv.umod(this.ec.curve.n)},i.prototype._importPublic=function(e,t){if(e.x||e.y)return\"mont\"===this.ec.curve.type?o(e.x,\"Need x coordinate\"):\"short\"!==this.ec.curve.type&&\"edwards\"!==this.ec.curve.type||o(e.x&&e.y,\"Need both x and y coordinate\"),void(this.pub=this.ec.curve.point(e.x,e.y));this.pub=this.ec.curve.decodePoint(e,t)},i.prototype.derive=function(e){return e.mul(this.priv).getX()},i.prototype.sign=function(e,t,r){return this.ec.sign(e,this,t,r)},i.prototype.verify=function(e,t){return this.ec.verify(e,t,this)},i.prototype.inspect=function(){return\"\"}},{\"../utils\":297,\"bn.js\":156}],292:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"../utils\"),i=o.assert;function a(e,t){if(e instanceof a)return e;this._importDER(e,t)||(i(e.r&&e.s,\"Signature without r or s\"),this.r=new n(e.r,16),this.s=new n(e.s,16),void 0===e.recoveryParam?this.recoveryParam=null:this.recoveryParam=e.recoveryParam)}function s(){this.place=0}function u(e,t){var r=e[t.place++];if(!(128&r))return r;for(var n=15&r,o=0,i=0,a=t.place;i>>3);for(e.push(128|r);--r;)e.push(t>>>(r<<3)&255);e.push(t)}}t.exports=a,a.prototype._importDER=function(e,t){e=o.toArray(e,t);var r=new s;if(48!==e[r.place++])return!1;if(u(e,r)+r.place!==e.length)return!1;if(2!==e[r.place++])return!1;var i=u(e,r),a=e.slice(r.place,i+r.place);if(r.place+=i,2!==e[r.place++])return!1;var c=u(e,r);if(e.length!==c+r.place)return!1;var f=e.slice(r.place,c+r.place);return 0===a[0]&&128&a[1]&&(a=a.slice(1)),0===f[0]&&128&f[1]&&(f=f.slice(1)),this.r=new n(a),this.s=new n(f),this.recoveryParam=null,!0},a.prototype.toDER=function(e){var t=this.r.toArray(),r=this.s.toArray();for(128&t[0]&&(t=[0].concat(t)),128&r[0]&&(r=[0].concat(r)),t=c(t),r=c(r);!(r[0]||128&r[1]);)r=r.slice(1);var n=[2];f(n,t.length),(n=n.concat(t)).push(2),f(n,r.length);var i=n.concat(r),a=[48];return f(a,i.length),a=a.concat(i),o.encode(a,e)}},{\"../utils\":297,\"bn.js\":156}],293:[function(e,t,r){var n=e(\"hash.js\"),o=e(\"../curves\"),i=e(\"../utils\"),a=i.assert,s=i.parseBytes,u=e(\"./key\"),c=e(\"./signature\");function f(e){if(a(\"ed25519\"===e,\"only tested with ed25519 so far\"),!(this instanceof f))return new f(e);e=o[e].curve;this.curve=e,this.g=e.g,this.g.precompute(e.n.bitLength()+1),this.pointClass=e.point().constructor,this.encodingLength=Math.ceil(e.n.bitLength()/8),this.hash=n.sha512}t.exports=f,f.prototype.sign=function(e,t){e=s(e);var r=this.keyFromSecret(t),n=this.hashInt(r.messagePrefix(),e),o=this.g.mul(n),i=this.encodePoint(o),a=this.hashInt(i,r.pubBytes(),e).mul(r.priv()),u=n.add(a).umod(this.curve.n);return this.makeSignature({R:o,S:u,Rencoded:i})},f.prototype.verify=function(e,t,r){e=s(e),t=this.makeSignature(t);var n=this.keyFromPublic(r),o=this.hashInt(t.Rencoded(),n.pubBytes(),e),i=this.g.mul(t.S());return t.R().add(n.pub().mul(o)).eq(i)},f.prototype.hashInt=function(){for(var e=this.hash(),t=0;t=0;){var i;if(o.isOdd()){var a=o.andln(n-1);i=a>(n>>1)-1?(n>>1)-a:a,o.isubn(i)}else i=0;r.push(i);for(var s=0!==o.cmpn(0)&&0===o.andln(n-1)?t+1:1,u=1;u0||t.cmpn(-o)>0;){var i,a,s,u=e.andln(3)+n&3,c=t.andln(3)+o&3;if(3===u&&(u=-1),3===c&&(c=-1),0==(1&u))i=0;else i=3!==(s=e.andln(7)+n&7)&&5!==s||2!==c?u:-u;if(r[0].push(i),0==(1&c))a=0;else a=3!==(s=t.andln(7)+o&7)&&5!==s||2!==u?c:-c;r[1].push(a),2*n===i+1&&(n=1-n),2*o===a+1&&(o=1-o),e.iushrn(1),t.iushrn(1)}return r},n.cachedProperty=function(e,t,r){var n=\"_\"+t;e.prototype[t]=function(){return void 0!==this[n]?this[n]:this[n]=r.call(this)}},n.parseBytes=function(e){return\"string\"==typeof e?n.toArray(e,\"hex\"):e},n.intFromLE=function(e){return new o(e,\"hex\",\"le\")}},{\"bn.js\":156,\"minimalistic-assert\":390,\"minimalistic-crypto-utils\":391}],298:[function(e,t,r){t.exports={_from:\"elliptic@^6.0.0\",_id:\"elliptic@6.5.0\",_inBundle:!1,_integrity:\"sha512-eFOJTMyCYb7xtE/caJ6JJu+bhi67WCYNbkGSknu20pmM8Ke/bqOfdnZWxyoGN26JgfxTbXrsCkEw4KheCT/KGg==\",_location:\"/elliptic\",_phantomChildren:{},_requested:{type:\"range\",registry:!0,raw:\"elliptic@^6.0.0\",name:\"elliptic\",escapedName:\"elliptic\",rawSpec:\"^6.0.0\",saveSpec:null,fetchSpec:\"^6.0.0\"},_requiredBy:[\"/browserify-sign\",\"/create-ecdh\"],_resolved:\"https://registry.npmjs.org/elliptic/-/elliptic-6.5.0.tgz\",_shasum:\"2b8ed4c891b7de3200e14412a5b8248c7af505ca\",_spec:\"elliptic@^6.0.0\",_where:\"/mnt/d/dev/git/exceljs/node_modules/browserify-sign\",author:{name:\"Fedor Indutny\",email:\"fedor@indutny.com\"},bugs:{url:\"https://github.com/indutny/elliptic/issues\"},bundleDependencies:!1,dependencies:{\"bn.js\":\"^4.4.0\",brorand:\"^1.0.1\",\"hash.js\":\"^1.0.0\",\"hmac-drbg\":\"^1.0.0\",inherits:\"^2.0.1\",\"minimalistic-assert\":\"^1.0.0\",\"minimalistic-crypto-utils\":\"^1.0.0\"},deprecated:!1,description:\"EC cryptography\",devDependencies:{brfs:\"^1.4.3\",coveralls:\"^2.11.3\",grunt:\"^0.4.5\",\"grunt-browserify\":\"^5.0.0\",\"grunt-cli\":\"^1.2.0\",\"grunt-contrib-connect\":\"^1.0.0\",\"grunt-contrib-copy\":\"^1.0.0\",\"grunt-contrib-uglify\":\"^1.0.1\",\"grunt-mocha-istanbul\":\"^3.0.1\",\"grunt-saucelabs\":\"^8.6.2\",istanbul:\"^0.4.2\",jscs:\"^2.9.0\",jshint:\"^2.6.0\",mocha:\"^2.1.0\"},files:[\"lib\"],homepage:\"https://github.com/indutny/elliptic\",keywords:[\"EC\",\"Elliptic\",\"curve\",\"Cryptography\"],license:\"MIT\",main:\"lib/elliptic.js\",name:\"elliptic\",repository:{type:\"git\",url:\"git+ssh://git@github.com/indutny/elliptic.git\"},scripts:{jscs:\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",jshint:\"jscs benchmarks/*.js lib/*.js lib/**/*.js lib/**/**/*.js test/index.js\",lint:\"npm run jscs && npm run jshint\",test:\"npm run lint && npm run unit\",unit:\"istanbul test _mocha --reporter=spec test/index.js\",version:\"grunt dist && git add dist/\"},version:\"6.5.0\"}},{}],299:[function(e,t,r){var n=Object.create||function(e){var t=function(){};return t.prototype=e,new t},o=Object.keys||function(e){var t=[];for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.push(r);return r},i=Function.prototype.bind||function(e){var t=this;return function(){return t.apply(e,arguments)}};function a(){this._events&&Object.prototype.hasOwnProperty.call(this,\"_events\")||(this._events=n(null),this._eventsCount=0),this._maxListeners=this._maxListeners||void 0}t.exports=a,a.EventEmitter=a,a.prototype._events=void 0,a.prototype._maxListeners=void 0;var s,u=10;try{var c={};Object.defineProperty&&Object.defineProperty(c,\"x\",{value:0}),s=0===c.x}catch(e){s=!1}function f(e){return void 0===e._maxListeners?a.defaultMaxListeners:e._maxListeners}function l(e,t,r){if(t)e.call(r);else for(var n=e.length,o=_(e,n),i=0;i0&&s.length>i){s.warned=!0;var u=new Error(\"Possible EventEmitter memory leak detected. \"+s.length+' \"'+String(t)+'\" listeners added. Use emitter.setMaxListeners() to increase limit.');u.name=\"MaxListenersExceededWarning\",u.emitter=e,u.type=t,u.count=s.length,\"object\"===(\"undefined\"==typeof console?\"undefined\":_typeof2(console))&&console.warn&&console.warn(\"%s: %s\",u.name,u.message)}}else s=a[t]=r,++e._eventsCount;return e}function b(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var e=new Array(arguments.length),t=0;t1&&(t=arguments[1]),t instanceof Error)throw t;var u=new Error('Unhandled \"error\" event. ('+t+\")\");throw u.context=t,u}if(!(r=a[e]))return!1;var c=\"function\"==typeof r;switch(n=arguments.length){case 1:l(r,c,this);break;case 2:h(r,c,this,arguments[1]);break;case 3:d(r,c,this,arguments[1],arguments[2]);break;case 4:p(r,c,this,arguments[1],arguments[2],arguments[3]);break;default:for(o=new Array(n-1),i=1;i=0;a--)if(r[a]===t||r[a].listener===t){s=r[a].listener,i=a;break}if(i<0)return this;0===i?r.shift():function(e,t){for(var r=t,n=r+1,o=e.length;n=0;i--)this.removeListener(e,t[i]);return this},a.prototype.listeners=function(e){return g(this,e,!0)},a.prototype.rawListeners=function(e){return g(this,e,!1)},a.listenerCount=function(e,t){return\"function\"==typeof e.listenerCount?e.listenerCount(t):w.call(e,t)},a.prototype.listenerCount=w,a.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[]}},{}],300:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"md5.js\");t.exports=function(e,t,r,i){if(n.isBuffer(e)||(e=n.from(e,\"binary\")),t&&(n.isBuffer(t)||(t=n.from(t,\"binary\")),8!==t.length))throw new RangeError(\"salt should be Buffer with 8 byte length\");for(var a=r/8,s=n.alloc(a),u=n.alloc(i||0),c=n.alloc(0);a>0||i>0;){var f=new o;f.update(c),f.update(e),t&&f.update(t),c=f.digest();var l=0;if(a>0){var h=s.length-a;l=Math.min(a,c.length),c.copy(s,h,0,l),a-=l}if(l0){var d=u.length-i,p=Math.min(i,c.length-l);c.copy(u,d,l,l+p),i-=p}}return c.fill(0),{key:s,iv:u}}},{\"md5.js\":388,\"safe-buffer\":445}],301:[function(e,t,r){(function(t){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r0&&void 0!==arguments[0]?arguments[0]:{};n(this,e),this.objectMode=!0,this.delimiter=\",\",this.rowDelimiter=\"\\n\",this.quote='\"',this.escape=this.quote,this.quoteColumns=!1,this.quoteHeaders=this.quoteColumns,this.headers=null,this.includeEndRowDelimiter=!1,this.transform=null,this.writeBOM=!1,this.BOM=\"\\ufeff\",this.alwaysWriteHeaders=!1,Object.assign(this,a||{}),void 0===(null===(t=a)||void 0===t?void 0:t.quoteHeaders)&&(this.quoteHeaders=this.quoteColumns),!0===(null===(r=a)||void 0===r?void 0:r.quote)?this.quote='\"':!1===(null===(o=a)||void 0===o?void 0:o.quote)&&(this.quote=\"\"),\"string\"!=typeof(null===(i=a)||void 0===i?void 0:i.escape)&&(this.escape=this.quote),this.shouldWriteHeaders=!!this.headers,this.headers=Array.isArray(this.headers)?this.headers:null,this.escapedQuote=\"\".concat(this.escape).concat(this.quote)}},{}],303:[function(e,t,r){function n(e,t){for(var r=0;r1&&void 0!==arguments[1]?arguments[1]:{},o=[],i=new s.Writable({write:function(e,t,r){o.push(e),r()}});return new Promise((function(a,s){i.on(\"error\",s).on(\"finish\",(function(){return a(t.concat(o))})),r.write(e,n).pipe(i)}))},r.writeToString=function(e,t){return r.writeToBuffer(e,t).then((function(e){return e.toString()}))},r.writeToPath=function(e,t,n){var o=u.createWriteStream(e,{encoding:\"utf8\"});return r.write(t,n).pipe(o)}}).call(this,e(\"buffer\").Buffer)},{\"./CsvFormatterStream\":301,\"./FormatterOptions\":302,\"./formatter\":305,buffer:188,fs:186,stream:456,util:475}],307:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"util\"),o=e(\"./parser\"),i=e(\"./formatter\");r.format=i.format,r.write=i.write,r.writeToStream=i.writeToStream,r.writeToBuffer=i.writeToBuffer,r.writeToString=i.writeToString,r.writeToPath=i.writeToPath;var a=e(\"./parser\");r.parse=a.parse,r.parseString=a.parseString,r.parseStream=a.parseStream,r.parseFile=a.parseFile,r.fromString=n.deprecate(o.parseString,\"csv.fromString has been deprecated in favor of csv.parseString\"),r.fromStream=n.deprecate(o.parseStream,\"csv.fromStream has been deprecated in favor of csv.parseStream\"),r.fromPath=n.deprecate(o.parseFile,\"csv.fromPath has been deprecated in favor of csv.parseFile\")},{\"./formatter\":306,\"./parser\":310,util:475}],308:[function(e,t,r){(function(t){function n(e){return(n=\"function\"==typeof Symbol&&\"symbol\"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&\"function\"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?\"symbol\":typeof e})(e)}function o(e,t){for(var r=0;r1?r-1:0),o=1;o=o||n.hasHitRowLimit)return r();if(n.parsedLineCount+=1,n.shouldSkipLine)return s();var u=e[a];n.rowCount+=1,n.parsedRowCount+=1;var c=n.rowCount;return n.transformRow(u,(function(e,t){if(e)return n.rowCount-=1,s(e);if(!t)return s(new Error(\"expected transform result\"));if(t.isValid){if(t.row)return n.pushRow(t.row,s)}else n.emit(\"data-invalid\",t.row,c,t.reason);return s()}))}(0)}},{key:\"transformRow\",value:function(e,t){var r=this;try{this.headerTransformer.transform(e,(function(n,o){return n?t(n):o?o.isValid?o.row?r.shouldEmitRows?r.rowTransformerValidator.transformAndValidate(o.row,t):(r.rowCount-=1,t(null,{row:null,isValid:!0})):(r.rowCount-=1,r.parsedRowCount-=1,t(null,{row:null,isValid:!0})):t(null,{isValid:!1,row:e}):t(new Error(\"Expected result from header transform\"))}))}catch(e){t(e)}}},{key:\"pushRow\",value:function(e,t){try{this.parserOptions.objectMode?this.push(e):this.push(JSON.stringify(e)),t()}catch(e){t(e)}}},{key:\"hasHitRowLimit\",get:function(){return this.parserOptions.limitRows&&this.rowCount>=this.parserOptions.maxRows}},{key:\"shouldEmitRows\",get:function(){return this.parsedRowCount>this.parserOptions.skipRows}},{key:\"shouldSkipLine\",get:function(){return this.parsedLineCount<=this.parserOptions.skipLines}}])&&o(n.prototype,l),p&&o(n,p),m}(l.Transform);r.default=p}).call(this,e(\"timers\").setImmediate)},{\"./parser\":320,\"./transforms\":323,stream:456,string_decoder:470,timers:471}],309:[function(e,t,r){var n=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var o=n(e(\"lodash.escaperegexp\")),i=n(e(\"lodash.isnil\"));r.ParserOptions=function e(t){var r;if(function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.objectMode=!0,this.delimiter=\",\",this.ignoreEmpty=!1,this.quote='\"',this.escape=null,this.escapeChar=this.quote,this.comment=null,this.supportsComments=!1,this.ltrim=!1,this.rtrim=!1,this.trim=!1,this.headers=null,this.renameHeaders=!1,this.strictColumnHandling=!1,this.discardUnmappedColumns=!1,this.carriageReturn=\"\\r\",this.encoding=\"utf8\",this.limitRows=!1,this.maxRows=0,this.skipLines=0,this.skipRows=0,Object.assign(this,t||{}),this.delimiter.length>1)throw new Error(\"delimiter option must be one character long\");this.escapedDelimiter=o.default(this.delimiter),this.escapeChar=null!=(r=this.escape)?r:this.quote,this.supportsComments=!i.default(this.comment),this.NEXT_TOKEN_REGEXP=new RegExp(\"([^\\\\s]|\\\\r\\\\n|\\\\n|\\\\r|\".concat(this.escapedDelimiter,\")\")),this.maxRows>0&&(this.limitRows=!0)}},{\"lodash.escaperegexp\":380,\"lodash.isnil\":385}],310:[function(e,t,r){function n(e){for(var t in e)r.hasOwnProperty(t)||(r[t]=e[t])}var o=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var r in e)Object.hasOwnProperty.call(e,r)&&(t[r]=e[r]);return t.default=e,t},i=function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(r,\"__esModule\",{value:!0});var a=o(e(\"fs\")),s=e(\"stream\"),u=e(\"./ParserOptions\"),c=i(e(\"./CsvParserStream\")),f=e(\"./CsvParserStream\");r.CsvParserStream=f.default,n(e(\"./types\")),n(e(\"./ParserOptions\")),n(e(\"./parser\")),n(e(\"./transforms\")),r.parse=function(e){return new c.default(new u.ParserOptions(e))},r.parseStream=function(e,t){return e.pipe(new c.default(new u.ParserOptions(t)))},r.parseFile=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};return a.createReadStream(e).pipe(new c.default(new u.ParserOptions(t)))},r.parseString=function(e,t){var r=new s.Readable;return r.push(e),r.push(null),r.pipe(new c.default(new u.ParserOptions(t)))}},{\"./CsvParserStream\":308,\"./ParserOptions\":309,\"./parser\":320,\"./transforms\":323,\"./types\":324,fs:186,stream:456}],311:[function(e,t,r){function n(e,t){for(var r=0;rthis.cursor}},{key:\"nextNonSpaceToken\",get:function(){var e=this.lineFromCursor,t=this.parserOptions.NEXT_TOKEN_REGEXP;if(-1===e.search(t))return null;var r=e.match(t);if(null==r)return null;var n=r[1],i=this.cursor+(r.index||0);return new o.Token({token:n,startCursor:i,endCursor:i+n.length-1})}},{key:\"nextCharacterToken\",get:function(){var e=this.cursor;return this.lineLength<=e?null:new o.Token({token:this.line[e],startCursor:e,endCursor:e})}},{key:\"lineFromCursor\",get:function(){return this.line.substr(this.cursor)}}])&&n(t.prototype,r),a&&n(t,a),e}();r.Scanner=a},{\"./Token\":314}],314:[function(e,t,r){function n(e,t){for(var r=0;rthis.headersLength){if(!t.strictColumnHandling)throw new Error(\"Unexpected Error: column header mismatch expected: \".concat(this.headersLength,\" columns got: \").concat(e.length));return{row:e,isValid:!1,reason:\"Column header mismatch expected: \".concat(this.headersLength,\" columns got: \").concat(e.length)}}return t.strictColumnHandling&&e.length1}));throw new Error(\"Duplicate headers found \".concat(JSON.stringify(o)))}this.headers=e,this.receivedHeaders=!0,this.headersLength=(null===(t=this.headers)||void 0===t?void 0:t.length)||0}}])&&n(t.prototype,r),o&&n(t,o),e}();r.default=c},{\"lodash.groupby\":381,\"lodash.isfunction\":384,\"lodash.isundefined\":386,\"lodash.uniq\":387}],322:[function(e,t,r){function n(e,t){for(var r=0;r=this._blockSize;){for(var i=this._blockOffset;i0;++a)this._length[a]+=s,(s=this._length[a]/4294967296|0)>0&&(this._length[a]-=4294967296*s);return this},i.prototype._update=function(){throw new Error(\"_update is not implemented\")},i.prototype.digest=function(e){if(this._finalized)throw new Error(\"Digest already called\");this._finalized=!0;var t=this._digest();void 0!==e&&(t=t.toString(e)),this._block.fill(0),this._blockOffset=0;for(var r=0;r<4;++r)this._length[r]=0;return t},i.prototype._digest=function(){throw new Error(\"_digest is not implemented\")},t.exports=i},{inherits:341,\"safe-buffer\":445,stream:456}],326:[function(e,t,r){var n=r;n.utils=e(\"./hash/utils\"),n.common=e(\"./hash/common\"),n.sha=e(\"./hash/sha\"),n.ripemd=e(\"./hash/ripemd\"),n.hmac=e(\"./hash/hmac\"),n.sha1=n.sha.sha1,n.sha256=n.sha.sha256,n.sha224=n.sha.sha224,n.sha384=n.sha.sha384,n.sha512=n.sha.sha512,n.ripemd160=n.ripemd.ripemd160},{\"./hash/common\":327,\"./hash/hmac\":328,\"./hash/ripemd\":329,\"./hash/sha\":330,\"./hash/utils\":337}],327:[function(e,t,r){var n=e(\"./utils\"),o=e(\"minimalistic-assert\");function i(){this.pending=null,this.pendingTotal=0,this.blockSize=this.constructor.blockSize,this.outSize=this.constructor.outSize,this.hmacStrength=this.constructor.hmacStrength,this.padLength=this.constructor.padLength/8,this.endian=\"big\",this._delta8=this.blockSize/8,this._delta32=this.blockSize/32}r.BlockHash=i,i.prototype.update=function(e,t){if(e=n.toArray(e,t),this.pending?this.pending=this.pending.concat(e):this.pending=e,this.pendingTotal+=e.length,this.pending.length>=this._delta8){var r=(e=this.pending).length%this._delta8;this.pending=e.slice(e.length-r,e.length),0===this.pending.length&&(this.pending=null),e=n.join32(e,0,e.length-r,this.endian);for(var o=0;o>>24&255,n[o++]=e>>>16&255,n[o++]=e>>>8&255,n[o++]=255&e}else for(n[o++]=255&e,n[o++]=e>>>8&255,n[o++]=e>>>16&255,n[o++]=e>>>24&255,n[o++]=0,n[o++]=0,n[o++]=0,n[o++]=0,i=8;ithis.blockSize&&(e=(new this.Hash).update(e).digest()),o(e.length<=this.blockSize);for(var t=e.length;t>>3},r.g1_256=function(e){return n(e,17)^n(e,19)^e>>>10}},{\"../utils\":337}],337:[function(e,t,r){var n=e(\"minimalistic-assert\"),o=e(\"inherits\");function i(e,t){return 55296==(64512&e.charCodeAt(t))&&(!(t<0||t+1>=e.length)&&56320==(64512&e.charCodeAt(t+1)))}function a(e){return(e>>>24|e>>>8&65280|e<<8&16711680|(255&e)<<24)>>>0}function s(e){return 1===e.length?\"0\"+e:e}function u(e){return 7===e.length?\"0\"+e:6===e.length?\"00\"+e:5===e.length?\"000\"+e:4===e.length?\"0000\"+e:3===e.length?\"00000\"+e:2===e.length?\"000000\"+e:1===e.length?\"0000000\"+e:e}r.inherits=o,r.toArray=function(e,t){if(Array.isArray(e))return e.slice();if(!e)return[];var r=[];if(\"string\"==typeof e)if(t){if(\"hex\"===t)for((e=e.replace(/[^a-z0-9]+/gi,\"\")).length%2!=0&&(e=\"0\"+e),o=0;o>6|192,r[n++]=63&a|128):i(e,o)?(a=65536+((1023&a)<<10)+(1023&e.charCodeAt(++o)),r[n++]=a>>18|240,r[n++]=a>>12&63|128,r[n++]=a>>6&63|128,r[n++]=63&a|128):(r[n++]=a>>12|224,r[n++]=a>>6&63|128,r[n++]=63&a|128)}else for(o=0;o>>0}return a},r.split32=function(e,t){for(var r=new Array(4*e.length),n=0,o=0;n>>24,r[o+1]=i>>>16&255,r[o+2]=i>>>8&255,r[o+3]=255&i):(r[o+3]=i>>>24,r[o+2]=i>>>16&255,r[o+1]=i>>>8&255,r[o]=255&i)}return r},r.rotr32=function(e,t){return e>>>t|e<<32-t},r.rotl32=function(e,t){return e<>>32-t},r.sum32=function(e,t){return e+t>>>0},r.sum32_3=function(e,t,r){return e+t+r>>>0},r.sum32_4=function(e,t,r,n){return e+t+r+n>>>0},r.sum32_5=function(e,t,r,n,o){return e+t+r+n+o>>>0},r.sum64=function(e,t,r,n){var o=e[t],i=n+e[t+1]>>>0,a=(i>>0,e[t+1]=i},r.sum64_hi=function(e,t,r,n){return(t+n>>>0>>0},r.sum64_lo=function(e,t,r,n){return t+n>>>0},r.sum64_4_hi=function(e,t,r,n,o,i,a,s){var u=0,c=t;return u+=(c=c+n>>>0)>>0)>>0)>>0},r.sum64_4_lo=function(e,t,r,n,o,i,a,s){return t+n+i+s>>>0},r.sum64_5_hi=function(e,t,r,n,o,i,a,s,u,c){var f=0,l=t;return f+=(l=l+n>>>0)>>0)>>0)>>0)>>0},r.sum64_5_lo=function(e,t,r,n,o,i,a,s,u,c){return t+n+i+s+c>>>0},r.rotr64_hi=function(e,t,r){return(t<<32-r|e>>>r)>>>0},r.rotr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0},r.shr64_hi=function(e,t,r){return e>>>r},r.shr64_lo=function(e,t,r){return(e<<32-r|t>>>r)>>>0}},{inherits:341,\"minimalistic-assert\":390}],338:[function(e,t,r){var n=e(\"hash.js\"),o=e(\"minimalistic-crypto-utils\"),i=e(\"minimalistic-assert\");function a(e){if(!(this instanceof a))return new a(e);this.hash=e.hash,this.predResist=!!e.predResist,this.outLen=this.hash.outSize,this.minEntropy=e.minEntropy||this.hash.hmacStrength,this._reseed=null,this.reseedInterval=null,this.K=null,this.V=null;var t=o.toArray(e.entropy,e.entropyEnc||\"hex\"),r=o.toArray(e.nonce,e.nonceEnc||\"hex\"),n=o.toArray(e.pers,e.persEnc||\"hex\");i(t.length>=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._init(t,r,n)}t.exports=a,a.prototype._init=function(e,t,r){var n=e.concat(t).concat(r);this.K=new Array(this.outLen/8),this.V=new Array(this.outLen/8);for(var o=0;o=this.minEntropy/8,\"Not enough entropy. Minimum is: \"+this.minEntropy+\" bits\"),this._update(e.concat(r||[])),this._reseed=1},a.prototype.generate=function(e,t,r,n){if(this._reseed>this.reseedInterval)throw new Error(\"Reseed is required\");\"string\"!=typeof t&&(n=r,r=t,t=null),r&&(r=o.toArray(r,n||\"hex\"),this._update(r));for(var i=[];i.length>1,f=-7,l=r?o-1:0,h=r?-1:1,d=e[t+l];for(l+=h,i=d&(1<<-f)-1,d>>=-f,f+=s;f>0;i=256*i+e[t+l],l+=h,f-=8);for(a=i&(1<<-f)-1,i>>=-f,f+=n;f>0;a=256*a+e[t+l],l+=h,f-=8);if(0===i)i=1-c;else{if(i===u)return a?NaN:1/0*(d?-1:1);a+=Math.pow(2,n),i-=c}return(d?-1:1)*a*Math.pow(2,i-n)},r.write=function(e,t,r,n,o,i){var a,s,u,c=8*i-o-1,f=(1<>1,h=23===o?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:i-1,p=n?1:-1,y=t<0||0===t&&1/t<0?1:0;for(t=Math.abs(t),isNaN(t)||t===1/0?(s=isNaN(t)?1:0,a=f):(a=Math.floor(Math.log(t)/Math.LN2),t*(u=Math.pow(2,-a))<1&&(a--,u*=2),(t+=a+l>=1?h/u:h*Math.pow(2,1-l))*u>=2&&(a++,u/=2),a+l>=f?(s=0,a=f):a+l>=1?(s=(t*u-1)*Math.pow(2,o),a+=l):(s=t*Math.pow(2,l-1)*Math.pow(2,o),a=0));o>=8;e[r+d]=255&s,d+=p,s/=256,o-=8);for(a=a<0;e[r+d]=255&a,d+=p,a/=256,c-=8);e[r+d-p]|=128*y}},{}],340:[function(e,t,r){(function(e){var r,n,o=e.MutationObserver||e.WebKitMutationObserver;if(o){var i=0,a=new o(f),s=e.document.createTextNode(\"\");a.observe(s,{characterData:!0}),r=function(){s.data=i=++i%2}}else if(e.setImmediate||void 0===e.MessageChannel)r=\"document\"in e&&\"onreadystatechange\"in e.document.createElement(\"script\")?function(){var t=e.document.createElement(\"script\");t.onreadystatechange=function(){f(),t.onreadystatechange=null,t.parentNode.removeChild(t),t=null},e.document.documentElement.appendChild(t)}:function(){setTimeout(f,0)};else{var u=new e.MessageChannel;u.port1.onmessage=f,r=function(){u.port2.postMessage(0)}}var c=[];function f(){var e,t;n=!0;for(var r=c.length;r;){for(t=c,c=[],e=-1;++e\n * @license MIT\n */\nt.exports=function(e){return null!=e&&(n(e)||function(e){return\"function\"==typeof e.readFloatLE&&\"function\"==typeof e.slice&&n(e.slice(0,0))}(e)||!!e._isBuffer)}},{}],343:[function(e,t,r){var n={}.toString;t.exports=Array.isArray||function(e){return\"[object Array]\"==n.call(e)}},{}],344:[function(e,t,r){var n=e(\"./utils\"),o=e(\"./support\"),i=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.encode=function(e){for(var t,r,o,a,s,u,c,f=[],l=0,h=e.length,d=h,p=\"string\"!==n.getTypeOf(e);l>2,s=(3&t)<<4|r>>4,u=d>1?(15&r)<<2|o>>6:64,c=d>2?63&o:64,f.push(i.charAt(a)+i.charAt(s)+i.charAt(u)+i.charAt(c));return f.join(\"\")},r.decode=function(e){var t,r,n,a,s,u,c=0,f=0;if(\"data:\"===e.substr(0,\"data:\".length))throw new Error(\"Invalid base64 input, it looks like a data url.\");var l,h=3*(e=e.replace(/[^A-Za-z0-9\\+\\/\\=]/g,\"\")).length/4;if(e.charAt(e.length-1)===i.charAt(64)&&h--,e.charAt(e.length-2)===i.charAt(64)&&h--,h%1!=0)throw new Error(\"Invalid base64 input, bad content length.\");for(l=o.uint8array?new Uint8Array(0|h):new Array(0|h);c>4,r=(15&a)<<4|(s=i.indexOf(e.charAt(c++)))>>2,n=(3&s)<<6|(u=i.indexOf(e.charAt(c++))),l[f++]=t,64!==s&&(l[f++]=r),64!==u&&(l[f++]=n);return l}},{\"./support\":373,\"./utils\":375}],345:[function(e,t,r){var n=e(\"./external\"),o=e(\"./stream/DataWorker\"),i=e(\"./stream/DataLengthProbe\"),a=e(\"./stream/Crc32Probe\");i=e(\"./stream/DataLengthProbe\");function s(e,t,r,n,o){this.compressedSize=e,this.uncompressedSize=t,this.crc32=r,this.compression=n,this.compressedContent=o}s.prototype={getContentWorker:function(){var e=new o(n.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new i(\"data_length\")),t=this;return e.on(\"end\",(function(){if(this.streamInfo.data_length!==t.uncompressedSize)throw new Error(\"Bug : uncompressed data size mismatch\")})),e},getCompressedWorker:function(){return new o(n.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\",this.compressedSize).withStreamInfo(\"uncompressedSize\",this.uncompressedSize).withStreamInfo(\"crc32\",this.crc32).withStreamInfo(\"compression\",this.compression)}},s.createWorkerFrom=function(e,t,r){return e.pipe(new a).pipe(new i(\"uncompressedSize\")).pipe(t.compressWorker(r)).pipe(new i(\"compressedSize\")).withStreamInfo(\"compression\",t)},t.exports=s},{\"./external\":349,\"./stream/Crc32Probe\":368,\"./stream/DataLengthProbe\":369,\"./stream/DataWorker\":370}],346:[function(e,t,r){var n=e(\"./stream/GenericWorker\");r.STORE={magic:\"\\0\\0\",compressWorker:function(e){return new n(\"STORE compression\")},uncompressWorker:function(){return new n(\"STORE decompression\")}},r.DEFLATE=e(\"./flate\")},{\"./flate\":350,\"./stream/GenericWorker\":371}],347:[function(e,t,r){var n=e(\"./utils\");var o=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t){return void 0!==e&&e.length?\"string\"!==n.getTypeOf(e)?function(e,t,r,n){var i=o,a=n+r;e^=-1;for(var s=n;s>>8^i[255&(e^t[s])];return-1^e}(0|t,e,e.length,0):function(e,t,r,n){var i=o,a=n+r;e^=-1;for(var s=n;s>>8^i[255&(e^t.charCodeAt(s))];return-1^e}(0|t,e,e.length,0):0}},{\"./utils\":375}],348:[function(e,t,r){r.base64=!1,r.binary=!1,r.dir=!1,r.createFolders=!0,r.date=null,r.compression=null,r.compressionOptions=null,r.comment=null,r.unixPermissions=null,r.dosPermissions=null},{}],349:[function(e,t,r){var n=null;n=\"undefined\"!=typeof Promise?Promise:e(\"lie\"),t.exports={Promise:n}},{lie:379}],350:[function(e,t,r){var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Uint32Array,o=e(\"pako\"),i=e(\"./utils\"),a=e(\"./stream/GenericWorker\"),s=n?\"uint8array\":\"array\";function u(e,t){a.call(this,\"FlateWorker/\"+e),this._pako=null,this._pakoAction=e,this._pakoOptions=t,this.meta={}}r.magic=\"\\b\\0\",i.inherits(u,a),u.prototype.processChunk=function(e){this.meta=e.meta,null===this._pako&&this._createPako(),this._pako.push(i.transformTo(s,e.data),!1)},u.prototype.flush=function(){a.prototype.flush.call(this),null===this._pako&&this._createPako(),this._pako.push([],!0)},u.prototype.cleanUp=function(){a.prototype.cleanUp.call(this),this._pako=null},u.prototype._createPako=function(){this._pako=new o[this._pakoAction]({raw:!0,level:this._pakoOptions.level||-1});var e=this;this._pako.onData=function(t){e.push({data:t,meta:e.meta})}},r.compressWorker=function(e){return new u(\"Deflate\",e)},r.uncompressWorker=function(){return new u(\"Inflate\",{})}},{\"./stream/GenericWorker\":371,\"./utils\":375,pako:392}],351:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../stream/GenericWorker\"),i=e(\"../utf8\"),a=e(\"../crc32\"),s=e(\"../signature\"),u=function(e,t){var r,n=\"\";for(r=0;r>>=8;return n},c=function(e,t,r,o,c,f){var l,h,d=e.file,p=e.compression,y=f!==i.utf8encode,m=n.transformTo(\"string\",f(d.name)),b=n.transformTo(\"string\",i.utf8encode(d.name)),v=d.comment,g=n.transformTo(\"string\",f(v)),w=n.transformTo(\"string\",i.utf8encode(v)),_=b.length!==d.name.length,k=w.length!==v.length,x=\"\",S=\"\",O=\"\",E=d.dir,R=d.date,j={crc32:0,compressedSize:0,uncompressedSize:0};t&&!r||(j.crc32=e.crc32,j.compressedSize=e.compressedSize,j.uncompressedSize=e.uncompressedSize);var T=0;t&&(T|=8),y||!_&&!k||(T|=2048);var C,P,A,M=0,I=0;E&&(M|=16),\"UNIX\"===c?(I=798,M|=(C=d.unixPermissions,P=E,A=C,C||(A=P?16893:33204),(65535&A)<<16)):(I=20,M|=63&(d.dosPermissions||0)),l=R.getUTCHours(),l<<=6,l|=R.getUTCMinutes(),l<<=5,l|=R.getUTCSeconds()/2,h=R.getUTCFullYear()-1980,h<<=4,h|=R.getUTCMonth()+1,h<<=5,h|=R.getUTCDate(),_&&(S=u(1,1)+u(a(m),4)+b,x+=\"up\"+u(S.length,2)+S),k&&(O=u(1,1)+u(a(g),4)+w,x+=\"uc\"+u(O.length,2)+O);var N=\"\";return N+=\"\\n\\0\",N+=u(T,2),N+=p.magic,N+=u(l,2),N+=u(h,2),N+=u(j.crc32,4),N+=u(j.compressedSize,4),N+=u(j.uncompressedSize,4),N+=u(m.length,2),N+=u(x.length,2),{fileRecord:s.LOCAL_FILE_HEADER+N+m+x,dirRecord:s.CENTRAL_FILE_HEADER+u(I,2)+N+u(g.length,2)+\"\\0\\0\\0\\0\"+u(M,4)+u(o,4)+m+x+g}},f=function(e){return s.DATA_DESCRIPTOR+u(e.crc32,4)+u(e.compressedSize,4)+u(e.uncompressedSize,4)};function l(e,t,r,n){o.call(this,\"ZipFileWorker\"),this.bytesWritten=0,this.zipComment=t,this.zipPlatform=r,this.encodeFileName=n,this.streamFiles=e,this.accumulate=!1,this.contentBuffer=[],this.dirRecords=[],this.currentSourceOffset=0,this.entriesCount=0,this.currentFile=null,this._sources=[]}n.inherits(l,o),l.prototype.push=function(e){var t=e.meta.percent||0,r=this.entriesCount,n=this._sources.length;this.accumulate?this.contentBuffer.push(e):(this.bytesWritten+=e.data.length,o.prototype.push.call(this,{data:e.data,meta:{currentFile:this.currentFile,percent:r?(t+100*(r-n-1))/r:100}}))},l.prototype.openedSource=function(e){this.currentSourceOffset=this.bytesWritten,this.currentFile=e.file.name;var t=this.streamFiles&&!e.file.dir;if(t){var r=c(e,t,!1,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);this.push({data:r.fileRecord,meta:{percent:0}})}else this.accumulate=!0},l.prototype.closedSource=function(e){this.accumulate=!1;var t=this.streamFiles&&!e.file.dir,r=c(e,t,!0,this.currentSourceOffset,this.zipPlatform,this.encodeFileName);if(this.dirRecords.push(r.dirRecord),t)this.push({data:f(e),meta:{percent:100}});else for(this.push({data:r.fileRecord,meta:{percent:0}});this.contentBuffer.length;)this.push(this.contentBuffer.shift());this.currentFile=null},l.prototype.flush=function(){for(var e=this.bytesWritten,t=0;t0?e.substring(0,t):\"\"},y=function(e){return\"/\"!==e.slice(-1)&&(e+=\"/\"),e},m=function(e,t){return t=void 0!==t?t:s.createFolders,e=y(e),this.files[e]||d.call(this,e,null,{dir:!0,createFolders:t}),this.files[e]};function b(e){return\"[object RegExp]\"===Object.prototype.toString.call(e)}var v={load:function(){throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\")},forEach:function(e){var t,r,n;for(t in this.files)this.files.hasOwnProperty(t)&&(n=this.files[t],(r=t.slice(this.root.length,t.length))&&t.slice(0,this.root.length)===this.root&&e(r,n))},filter:function(e){var t=[];return this.forEach((function(r,n){e(r,n)&&t.push(n)})),t},file:function(e,t,r){if(1===arguments.length){if(b(e)){var n=e;return this.filter((function(e,t){return!t.dir&&n.test(e)}))}var o=this.files[this.root+e];return o&&!o.dir?o:null}return e=this.root+e,d.call(this,e,t,r),this},folder:function(e){if(!e)return this;if(b(e))return this.filter((function(t,r){return r.dir&&e.test(t)}));var t=this.root+e,r=m.call(this,t),n=this.clone();return n.root=r.name,n},remove:function(e){e=this.root+e;var t=this.files[e];if(t||(\"/\"!==e.slice(-1)&&(e+=\"/\"),t=this.files[e]),t&&!t.dir)delete this.files[e];else for(var r=this.filter((function(t,r){return r.name.slice(0,e.length)===e})),n=0;n=0;--i)if(this.data[i]===t&&this.data[i+1]===r&&this.data[i+2]===n&&this.data[i+3]===o)return i-this.zero;return-1},o.prototype.readAndCheckSignature=function(e){var t=e.charCodeAt(0),r=e.charCodeAt(1),n=e.charCodeAt(2),o=e.charCodeAt(3),i=this.readData(4);return t===i[0]&&r===i[1]&&n===i[2]&&o===i[3]},o.prototype.readData=function(e){if(this.checkOffset(e),0===e)return[];var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./DataReader\":361}],361:[function(e,t,r){var n=e(\"../utils\");function o(e){this.data=e,this.length=e.length,this.index=0,this.zero=0}o.prototype={checkOffset:function(e){this.checkIndex(this.index+e)},checkIndex:function(e){if(this.length=this.index;t--)r=(r<<8)+this.byteAt(t);return this.index+=e,r},readString:function(e){return n.transformTo(\"string\",this.readData(e))},readData:function(e){},lastIndexOfSignature:function(e){},readAndCheckSignature:function(e){},readDate:function(){var e=this.readInt(4);return new Date(Date.UTC(1980+(e>>25&127),(e>>21&15)-1,e>>16&31,e>>11&31,e>>5&63,(31&e)<<1))}},t.exports=o},{\"../utils\":375}],362:[function(e,t,r){var n=e(\"./Uint8ArrayReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./Uint8ArrayReader\":364}],363:[function(e,t,r){var n=e(\"./DataReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.byteAt=function(e){return this.data.charCodeAt(this.zero+e)},o.prototype.lastIndexOfSignature=function(e){return this.data.lastIndexOf(e)-this.zero},o.prototype.readAndCheckSignature=function(e){return e===this.readData(4)},o.prototype.readData=function(e){this.checkOffset(e);var t=this.data.slice(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./DataReader\":361}],364:[function(e,t,r){var n=e(\"./ArrayReader\");function o(e){n.call(this,e)}e(\"../utils\").inherits(o,n),o.prototype.readData=function(e){if(this.checkOffset(e),0===e)return new Uint8Array(0);var t=this.data.subarray(this.zero+this.index,this.zero+this.index+e);return this.index+=e,t},t.exports=o},{\"../utils\":375,\"./ArrayReader\":360}],365:[function(e,t,r){var n=e(\"../utils\"),o=e(\"../support\"),i=e(\"./ArrayReader\"),a=e(\"./StringReader\"),s=e(\"./NodeBufferReader\"),u=e(\"./Uint8ArrayReader\");t.exports=function(e){var t=n.getTypeOf(e);return n.checkSupport(t),\"string\"!==t||o.uint8array?\"nodebuffer\"===t?new s(e):o.uint8array?new u(n.transformTo(\"uint8array\",e)):new i(n.transformTo(\"array\",e)):new a(e)}},{\"../support\":373,\"../utils\":375,\"./ArrayReader\":360,\"./NodeBufferReader\":362,\"./StringReader\":363,\"./Uint8ArrayReader\":364}],366:[function(e,t,r){r.LOCAL_FILE_HEADER=\"PK\\x03\\x04\",r.CENTRAL_FILE_HEADER=\"PK\\x01\\x02\",r.CENTRAL_DIRECTORY_END=\"PK\\x05\\x06\",r.ZIP64_CENTRAL_DIRECTORY_LOCATOR=\"PK\\x06\\x07\",r.ZIP64_CENTRAL_DIRECTORY_END=\"PK\\x06\\x06\",r.DATA_DESCRIPTOR=\"PK\\x07\\b\"},{}],367:[function(e,t,r){var n=e(\"./GenericWorker\"),o=e(\"../utils\");function i(e){n.call(this,\"ConvertWorker to \"+e),this.destType=e}o.inherits(i,n),i.prototype.processChunk=function(e){this.push({data:o.transformTo(this.destType,e.data),meta:e.meta})},t.exports=i},{\"../utils\":375,\"./GenericWorker\":371}],368:[function(e,t,r){var n=e(\"./GenericWorker\"),o=e(\"../crc32\");function i(){n.call(this,\"Crc32Probe\"),this.withStreamInfo(\"crc32\",0)}e(\"../utils\").inherits(i,n),i.prototype.processChunk=function(e){this.streamInfo.crc32=o(e.data,this.streamInfo.crc32||0),this.push(e)},t.exports=i},{\"../crc32\":347,\"../utils\":375,\"./GenericWorker\":371}],369:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./GenericWorker\");function i(e){o.call(this,\"DataLengthProbe for \"+e),this.propName=e,this.withStreamInfo(e,0)}n.inherits(i,o),i.prototype.processChunk=function(e){if(e){var t=this.streamInfo[this.propName]||0;this.streamInfo[this.propName]=t+e.data.length}o.prototype.processChunk.call(this,e)},t.exports=i},{\"../utils\":375,\"./GenericWorker\":371}],370:[function(e,t,r){var n=e(\"../utils\"),o=e(\"./GenericWorker\");function i(e){o.call(this,\"DataWorker\");var t=this;this.dataIsReady=!1,this.index=0,this.max=0,this.data=null,this.type=\"\",this._tickScheduled=!1,e.then((function(e){t.dataIsReady=!0,t.data=e,t.max=e&&e.length||0,t.type=n.getTypeOf(e),t.isPaused||t._tickAndRepeat()}),(function(e){t.error(e)}))}n.inherits(i,o),i.prototype.cleanUp=function(){o.prototype.cleanUp.call(this),this.data=null},i.prototype.resume=function(){return!!o.prototype.resume.call(this)&&(!this._tickScheduled&&this.dataIsReady&&(this._tickScheduled=!0,n.delay(this._tickAndRepeat,[],this)),!0)},i.prototype._tickAndRepeat=function(){this._tickScheduled=!1,this.isPaused||this.isFinished||(this._tick(),this.isFinished||(n.delay(this._tickAndRepeat,[],this),this._tickScheduled=!0))},i.prototype._tick=function(){if(this.isPaused||this.isFinished)return!1;var e=null,t=Math.min(this.max,this.index+16384);if(this.index>=this.max)return this.end();switch(this.type){case\"string\":e=this.data.substring(this.index,t);break;case\"uint8array\":e=this.data.subarray(this.index,t);break;case\"array\":case\"nodebuffer\":e=this.data.slice(this.index,t)}return this.index=t,this.push({data:e,meta:{percent:this.max?this.index/this.max*100:0}})},t.exports=i},{\"../utils\":375,\"./GenericWorker\":371}],371:[function(e,t,r){function n(e){this.name=e||\"default\",this.streamInfo={},this.generatedError=null,this.extraStreamInfo={},this.isPaused=!0,this.isFinished=!1,this.isLocked=!1,this._listeners={data:[],end:[],error:[]},this.previous=null}n.prototype={push:function(e){this.emit(\"data\",e)},end:function(){if(this.isFinished)return!1;this.flush();try{this.emit(\"end\"),this.cleanUp(),this.isFinished=!0}catch(e){this.emit(\"error\",e)}return!0},error:function(e){return!this.isFinished&&(this.isPaused?this.generatedError=e:(this.isFinished=!0,this.emit(\"error\",e),this.previous&&this.previous.error(e),this.cleanUp()),!0)},on:function(e,t){return this._listeners[e].push(t),this},cleanUp:function(){this.streamInfo=this.generatedError=this.extraStreamInfo=null,this._listeners=[]},emit:function(e,t){if(this._listeners[e])for(var r=0;r \"+e:e}},t.exports=n},{}],372:[function(e,t,r){(function(r){var n=e(\"../utils\"),o=e(\"./ConvertWorker\"),i=e(\"./GenericWorker\"),a=e(\"../base64\"),s=e(\"../support\"),u=e(\"../external\"),c=null;if(s.nodestream)try{c=e(\"../nodejs/NodejsStreamOutputAdapter\")}catch(e){}function f(e,t){return new u.Promise((function(o,i){var s=[],u=e._internalType,c=e._outputType,f=e._mimeType;e.on(\"data\",(function(e,r){s.push(e),t&&t(r)})).on(\"error\",(function(e){s=[],i(e)})).on(\"end\",(function(){try{var e=function(e,t,r){switch(e){case\"blob\":return n.newBlob(n.transformTo(\"arraybuffer\",t),r);case\"base64\":return a.encode(t);default:return n.transformTo(e,t)}}(c,function(e,t){var n,o=0,i=null,a=0;for(n=0;n=252?6:u>=248?5:u>=240?4:u>=224?3:u>=192?2:1;s[254]=s[254]=1;function c(){a.call(this,\"utf-8 decode\"),this.leftOver=null}function f(){a.call(this,\"utf-8 encode\")}r.utf8encode=function(e){return o.nodebuffer?i.newBufferFrom(e,\"utf-8\"):function(e){var t,r,n,i,a,s=e.length,u=0;for(i=0;i>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t}(e)},r.utf8decode=function(e){return o.nodebuffer?n.transformTo(\"nodebuffer\",e).toString(\"utf-8\"):function(e){var t,r,o,i,a=e.length,u=new Array(2*a);for(r=0,t=0;t4)u[r++]=65533,t+=i-1;else{for(o&=2===i?31:3===i?15:7;i>1&&t1?u[r++]=65533:o<65536?u[r++]=o:(o-=65536,u[r++]=55296|o>>10&1023,u[r++]=56320|1023&o)}return u.length!==r&&(u.subarray?u=u.subarray(0,r):u.length=r),n.applyFromCharCode(u)}(e=n.transformTo(o.uint8array?\"uint8array\":\"array\",e))},n.inherits(c,a),c.prototype.processChunk=function(e){var t=n.transformTo(o.uint8array?\"uint8array\":\"array\",e.data);if(this.leftOver&&this.leftOver.length){if(o.uint8array){var i=t;(t=new Uint8Array(i.length+this.leftOver.length)).set(this.leftOver,0),t.set(i,this.leftOver.length)}else t=this.leftOver.concat(t);this.leftOver=null}var a=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+s[e[r]]>t?r:t}(t),u=t;a!==t.length&&(o.uint8array?(u=t.subarray(0,a),this.leftOver=t.subarray(a,t.length)):(u=t.slice(0,a),this.leftOver=t.slice(a,t.length))),this.push({data:r.utf8decode(u),meta:e.meta})},c.prototype.flush=function(){this.leftOver&&this.leftOver.length&&(this.push({data:r.utf8decode(this.leftOver),meta:{}}),this.leftOver=null)},r.Utf8DecodeWorker=c,n.inherits(f,a),f.prototype.processChunk=function(e){this.push({data:r.utf8encode(e.data),meta:e.meta})},r.Utf8EncodeWorker=f},{\"./nodejsUtils\":357,\"./stream/GenericWorker\":371,\"./support\":373,\"./utils\":375}],375:[function(e,t,r){var n=e(\"./support\"),o=e(\"./base64\"),i=e(\"./nodejsUtils\"),a=e(\"set-immediate-shim\"),s=e(\"./external\");function u(e){return e}function c(e,t){for(var r=0;r1;)try{return f.stringifyByChunk(e,n,t)}catch(e){t=Math.floor(t/2)}return f.stringifyByChar(e)}function h(e,t){for(var r=0;r1)throw new Error(\"Multi-volumes zip are not supported\")},readLocalFiles:function(){var e,t;for(e=0;e0)this.isSignature(t,i.CENTRAL_FILE_HEADER)||(this.reader.zero=n);else if(n<0)throw new Error(\"Corrupted zip: missing \"+Math.abs(n)+\" bytes.\")},prepareReader:function(e){this.reader=n(e)},load:function(e){this.prepareReader(e),this.readEndOfCentral(),this.readCentralDir(),this.readLocalFiles()}},t.exports=u},{\"./reader/readerFor\":365,\"./signature\":366,\"./support\":373,\"./utf8\":374,\"./utils\":375,\"./zipEntry\":377}],377:[function(e,t,r){var n=e(\"./reader/readerFor\"),o=e(\"./utils\"),i=e(\"./compressedObject\"),a=e(\"./crc32\"),s=e(\"./utf8\"),u=e(\"./compressions\"),c=e(\"./support\");function f(e,t){this.options=e,this.loadOptions=t}f.prototype={isEncrypted:function(){return 1==(1&this.bitFlag)},useUTF8:function(){return 2048==(2048&this.bitFlag)},readLocalPart:function(e){var t,r;if(e.skip(22),this.fileNameLength=e.readInt(2),r=e.readInt(2),this.fileName=e.readData(this.fileNameLength),e.skip(r),-1===this.compressedSize||-1===this.uncompressedSize)throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory (compressedSize === -1 || uncompressedSize === -1)\");if(null===(t=function(e){for(var t in u)if(u.hasOwnProperty(t)&&u[t].magic===e)return u[t];return null}(this.compressionMethod)))throw new Error(\"Corrupted zip : compression \"+o.pretty(this.compressionMethod)+\" unknown (inner file : \"+o.transformTo(\"string\",this.fileName)+\")\");this.decompressed=new i(this.compressedSize,this.uncompressedSize,this.crc32,t,e.readData(this.compressedSize))},readCentralPart:function(e){this.versionMadeBy=e.readInt(2),e.skip(2),this.bitFlag=e.readInt(2),this.compressionMethod=e.readString(2),this.date=e.readDate(),this.crc32=e.readInt(4),this.compressedSize=e.readInt(4),this.uncompressedSize=e.readInt(4);var t=e.readInt(2);if(this.extraFieldsLength=e.readInt(2),this.fileCommentLength=e.readInt(2),this.diskNumberStart=e.readInt(2),this.internalFileAttributes=e.readInt(2),this.externalFileAttributes=e.readInt(4),this.localHeaderOffset=e.readInt(4),this.isEncrypted())throw new Error(\"Encrypted zip are not supported\");e.skip(t),this.readExtraFields(e),this.parseZIP64ExtraField(e),this.fileComment=e.readData(this.fileCommentLength)},processAttributes:function(){this.unixPermissions=null,this.dosPermissions=null;var e=this.versionMadeBy>>8;this.dir=!!(16&this.externalFileAttributes),0===e&&(this.dosPermissions=63&this.externalFileAttributes),3===e&&(this.unixPermissions=this.externalFileAttributes>>16&65535),this.dir||\"/\"!==this.fileNameStr.slice(-1)||(this.dir=!0)},parseZIP64ExtraField:function(e){if(this.extraFields[1]){var t=n(this.extraFields[1].value);this.uncompressedSize===o.MAX_VALUE_32BITS&&(this.uncompressedSize=t.readInt(8)),this.compressedSize===o.MAX_VALUE_32BITS&&(this.compressedSize=t.readInt(8)),this.localHeaderOffset===o.MAX_VALUE_32BITS&&(this.localHeaderOffset=t.readInt(8)),this.diskNumberStart===o.MAX_VALUE_32BITS&&(this.diskNumberStart=t.readInt(4))}},readExtraFields:function(e){var t,r,n,o=e.index+this.extraFieldsLength;for(this.extraFields||(this.extraFields={});e.index-1},ae.prototype.set=function(e,t){var r=this.__data__,n=le(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},se.prototype.clear=function(){this.__data__={hash:new ie,map:new($||ae),string:new ie}},se.prototype.delete=function(e){return Oe(this,e).delete(e)},se.prototype.get=function(e){return Oe(this,e).get(e)},se.prototype.has=function(e){return Oe(this,e).has(e)},se.prototype.set=function(e,t){return Oe(this,e).set(e,t),this},ue.prototype.add=ue.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},ue.prototype.has=function(e){return this.__data__.has(e)},ce.prototype.clear=function(){this.__data__=new ae},ce.prototype.delete=function(e){return this.__data__.delete(e)},ce.prototype.get=function(e){return this.__data__.get(e)},ce.prototype.has=function(e){return this.__data__.has(e)},ce.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ae){var n=r.__data__;if(!$||n.length<199)return n.push([e,t]),this;r=this.__data__=new se(n)}return r.set(e,t),this};var de,pe,ye=(de=function(e,t){return e&&me(e,t,Ye)},function(e,t){if(null==e)return e;if(!He(e))return de(e,t);for(var r=e.length,n=pe?r:-1,o=Object(e);(pe?n--:++ns))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var f=-1,l=!0,h=1&o?new ue:void 0;for(i.set(e,t),i.set(t,e);++f-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function qe(e){var t=_typeof2(e);return!!e&&(\"object\"==t||\"function\"==t)}function $e(e){return!!e&&\"object\"==_typeof2(e)}function Xe(e){return\"symbol\"==_typeof2(e)||$e(e)&&\"[object Symbol]\"==F.call(e)}var Ke=k?function(e){return function(t){return e(t)}}(k):function(e){return $e(e)&&We(e.length)&&!!p[F.call(e)]};function Ye(e){return He(e)?fe(e):ke(e)}function Ze(e){return e}t.exports=Be}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],382:[function(e,t,r){var n=Object.prototype.toString;t.exports=function(e){return!0===e||!1===e||function(e){return!!e&&\"object\"==_typeof2(e)}(e)&&\"[object Boolean]\"==n.call(e)}},{}],383:[function(e,t,r){(function(e){var n=\"[object Arguments]\",o=\"[object Map]\",i=\"[object Object]\",a=\"[object Set]\",s=/^\\[object .+?Constructor\\]$/,u=/^(?:0|[1-9]\\d*)$/,c={};c[\"[object Float32Array]\"]=c[\"[object Float64Array]\"]=c[\"[object Int8Array]\"]=c[\"[object Int16Array]\"]=c[\"[object Int32Array]\"]=c[\"[object Uint8Array]\"]=c[\"[object Uint8ClampedArray]\"]=c[\"[object Uint16Array]\"]=c[\"[object Uint32Array]\"]=!0,c[n]=c[\"[object Array]\"]=c[\"[object ArrayBuffer]\"]=c[\"[object Boolean]\"]=c[\"[object DataView]\"]=c[\"[object Date]\"]=c[\"[object Error]\"]=c[\"[object Function]\"]=c[o]=c[\"[object Number]\"]=c[i]=c[\"[object RegExp]\"]=c[a]=c[\"[object String]\"]=c[\"[object WeakMap]\"]=!1;var f=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,l=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,h=f||l||Function(\"return this\")(),d=\"object\"==_typeof2(r)&&r&&!r.nodeType&&r,p=d&&\"object\"==_typeof2(t)&&t&&!t.nodeType&&t,y=p&&p.exports===d,m=y&&f.process,b=function(){try{return m&&m.binding&&m.binding(\"util\")}catch(e){}}(),v=b&&b.isTypedArray;function g(e,t){for(var r=-1,n=null==e?0:e.length;++rs))return!1;var c=i.get(e);if(c&&i.get(t))return c==t;var f=-1,l=!0,h=2&r?new ie:void 0;for(i.set(e,t),i.set(t,e);++f-1},ne.prototype.set=function(e,t){var r=this.__data__,n=ue(r,e);return n<0?(++this.size,r.push([e,t])):r[n][1]=t,this},oe.prototype.clear=function(){this.size=0,this.__data__={hash:new re,map:new(W||ne),string:new re}},oe.prototype.delete=function(e){var t=me(this,e).delete(e);return this.size-=t?1:0,t},oe.prototype.get=function(e){return me(this,e).get(e)},oe.prototype.has=function(e){return me(this,e).has(e)},oe.prototype.set=function(e,t){var r=me(this,e),n=r.size;return r.set(e,t),this.size+=r.size==n?0:1,this},ie.prototype.add=ie.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},ie.prototype.has=function(e){return this.__data__.has(e)},ae.prototype.clear=function(){this.__data__=new ne,this.size=0},ae.prototype.delete=function(e){var t=this.__data__,r=t.delete(e);return this.size=t.size,r},ae.prototype.get=function(e){return this.__data__.get(e)},ae.prototype.has=function(e){return this.__data__.has(e)},ae.prototype.set=function(e,t){var r=this.__data__;if(r instanceof ne){var n=r.__data__;if(!W||n.length<199)return n.push([e,t]),this.size=++r.size,this;r=this.__data__=new oe(n)}return r.set(e,t),this.size=r.size,this};var ve=z?function(e){return null==e?[]:(e=Object(e),function(e,t){for(var r=-1,n=null==e?0:e.length,o=0,i=[];++r-1&&e%1==0&&e-1&&e%1==0&&e<=9007199254740991}function je(e){var t=_typeof2(e);return null!=e&&(\"object\"==t||\"function\"==t)}function Te(e){return null!=e&&\"object\"==_typeof2(e)}var Ce=v?function(e){return function(t){return e(t)}}(v):function(e){return Te(e)&&Re(e.length)&&!!c[ce(e)]};function Pe(e){return null!=(t=e)&&Re(t.length)&&!Ee(t)?se(e):de(e);var t}t.exports=function(e,t){return le(e,t)}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],384:[function(e,t,r){(function(e){var r=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,n=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,o=r||n||Function(\"return this\")(),i=Object.prototype,a=i.hasOwnProperty,s=i.toString,u=o.Symbol,c=u?u.toStringTag:void 0;function f(e){return null==e?void 0===e?\"[object Undefined]\":\"[object Null]\":c&&c in Object(e)?function(e){var t=a.call(e,c),r=e[c];try{e[c]=void 0;var n=!0}catch(e){}var o=s.call(e);n&&(t?e[c]=r:delete e[c]);return o}(e):function(e){return s.call(e)}(e)}t.exports=function(e){if(!function(e){var t=_typeof2(e);return null!=e&&(\"object\"==t||\"function\"==t)}(e))return!1;var t=f(e);return\"[object Function]\"==t||\"[object GeneratorFunction]\"==t||\"[object AsyncFunction]\"==t||\"[object Proxy]\"==t}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],385:[function(e,t,r){t.exports=function(e){return null==e}},{}],386:[function(e,t,r){t.exports=function(e){return void 0===e}},{}],387:[function(e,t,r){(function(e){var r=/^\\[object .+?Constructor\\]$/,n=\"object\"==_typeof2(e)&&e&&e.Object===Object&&e,o=\"object\"==(\"undefined\"==typeof self?\"undefined\":_typeof2(self))&&self&&self.Object===Object&&self,i=n||o||Function(\"return this\")();function a(e,t){return!!(e?e.length:0)&&function(e,t,r){if(t!=t)return function(e,t,r,n){var o=e.length,i=r+(n?1:-1);for(;n?i--:++i-1}function s(e,t,r){for(var n=-1,o=e?e.length:0;++n-1},E.prototype.set=function(e,t){var r=this.__data__,n=T(r,e);return n<0?r.push([e,t]):r[n][1]=t,this},R.prototype.clear=function(){this.__data__={hash:new O,map:new(k||E),string:new O}},R.prototype.delete=function(e){return A(this,e).delete(e)},R.prototype.get=function(e){return A(this,e).get(e)},R.prototype.has=function(e){return A(this,e).has(e)},R.prototype.set=function(e,t){return A(this,e).set(e,t),this},j.prototype.add=j.prototype.push=function(e){return this.__data__.set(e,\"__lodash_hash_undefined__\"),this},j.prototype.has=function(e){return this.__data__.has(e)};var P=x&&1/f(new x([,-0]))[1]==1/0?function(e){return new x(e)}:function(){};function A(e,t){var r,n,o=e.__data__;return(\"string\"==(n=_typeof2(r=t))||\"number\"==n||\"symbol\"==n||\"boolean\"==n?\"__proto__\"!==r:null===r)?o[\"string\"==typeof t?\"string\":\"hash\"]:o.map}function M(e,t){var r=function(e,t){return null==e?void 0:e[t]}(e,t);return C(r)?r:void 0}function I(e){var t=_typeof2(e);return!!e&&(\"object\"==t||\"function\"==t)}t.exports=function(e){return e&&e.length?function(e,t,r){var n=-1,o=a,i=e.length,u=!0,l=[],h=l;if(r)u=!1,o=s;else if(i>=200){var d=t?null:P(e);if(d)return f(d);u=!1,o=c,h=new j}else h=t?[]:l;e:for(;++n>>32-t}function c(e,t,r,n,o,i,a){return u(e+(t&r|~t&n)+o+i|0,a)+t|0}function f(e,t,r,n,o,i,a){return u(e+(t&n|r&~n)+o+i|0,a)+t|0}function l(e,t,r,n,o,i,a){return u(e+(t^r^n)+o+i|0,a)+t|0}function h(e,t,r,n,o,i,a){return u(e+(r^(t|~n))+o+i|0,a)+t|0}n(s,o),s.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);var r=this._a,n=this._b,o=this._c,i=this._d;r=c(r,n,o,i,e[0],3614090360,7),i=c(i,r,n,o,e[1],3905402710,12),o=c(o,i,r,n,e[2],606105819,17),n=c(n,o,i,r,e[3],3250441966,22),r=c(r,n,o,i,e[4],4118548399,7),i=c(i,r,n,o,e[5],1200080426,12),o=c(o,i,r,n,e[6],2821735955,17),n=c(n,o,i,r,e[7],4249261313,22),r=c(r,n,o,i,e[8],1770035416,7),i=c(i,r,n,o,e[9],2336552879,12),o=c(o,i,r,n,e[10],4294925233,17),n=c(n,o,i,r,e[11],2304563134,22),r=c(r,n,o,i,e[12],1804603682,7),i=c(i,r,n,o,e[13],4254626195,12),o=c(o,i,r,n,e[14],2792965006,17),r=f(r,n=c(n,o,i,r,e[15],1236535329,22),o,i,e[1],4129170786,5),i=f(i,r,n,o,e[6],3225465664,9),o=f(o,i,r,n,e[11],643717713,14),n=f(n,o,i,r,e[0],3921069994,20),r=f(r,n,o,i,e[5],3593408605,5),i=f(i,r,n,o,e[10],38016083,9),o=f(o,i,r,n,e[15],3634488961,14),n=f(n,o,i,r,e[4],3889429448,20),r=f(r,n,o,i,e[9],568446438,5),i=f(i,r,n,o,e[14],3275163606,9),o=f(o,i,r,n,e[3],4107603335,14),n=f(n,o,i,r,e[8],1163531501,20),r=f(r,n,o,i,e[13],2850285829,5),i=f(i,r,n,o,e[2],4243563512,9),o=f(o,i,r,n,e[7],1735328473,14),r=l(r,n=f(n,o,i,r,e[12],2368359562,20),o,i,e[5],4294588738,4),i=l(i,r,n,o,e[8],2272392833,11),o=l(o,i,r,n,e[11],1839030562,16),n=l(n,o,i,r,e[14],4259657740,23),r=l(r,n,o,i,e[1],2763975236,4),i=l(i,r,n,o,e[4],1272893353,11),o=l(o,i,r,n,e[7],4139469664,16),n=l(n,o,i,r,e[10],3200236656,23),r=l(r,n,o,i,e[13],681279174,4),i=l(i,r,n,o,e[0],3936430074,11),o=l(o,i,r,n,e[3],3572445317,16),n=l(n,o,i,r,e[6],76029189,23),r=l(r,n,o,i,e[9],3654602809,4),i=l(i,r,n,o,e[12],3873151461,11),o=l(o,i,r,n,e[15],530742520,16),r=h(r,n=l(n,o,i,r,e[2],3299628645,23),o,i,e[0],4096336452,6),i=h(i,r,n,o,e[7],1126891415,10),o=h(o,i,r,n,e[14],2878612391,15),n=h(n,o,i,r,e[5],4237533241,21),r=h(r,n,o,i,e[12],1700485571,6),i=h(i,r,n,o,e[3],2399980690,10),o=h(o,i,r,n,e[10],4293915773,15),n=h(n,o,i,r,e[1],2240044497,21),r=h(r,n,o,i,e[8],1873313359,6),i=h(i,r,n,o,e[15],4264355552,10),o=h(o,i,r,n,e[6],2734768916,15),n=h(n,o,i,r,e[13],1309151649,21),r=h(r,n,o,i,e[4],4149444226,6),i=h(i,r,n,o,e[11],3174756917,10),o=h(o,i,r,n,e[2],718787259,15),n=h(n,o,i,r,e[9],3951481745,21),this._a=this._a+r|0,this._b=this._b+n|0,this._c=this._c+o|0,this._d=this._d+i|0},s.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=i.allocUnsafe(16);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e},t.exports=s},{\"hash-base\":325,inherits:341,\"safe-buffer\":445}],389:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"brorand\");function i(e){this.rand=e||new o.Rand}t.exports=i,i.create=function(e){return new i(e)},i.prototype._randbelow=function(e){var t=e.bitLength(),r=Math.ceil(t/8);do{var o=new n(this.rand.generate(r))}while(o.cmp(e)>=0);return o},i.prototype._randrange=function(e,t){var r=t.sub(e);return e.add(this._randbelow(r))},i.prototype.test=function(e,t,r){var o=e.bitLength(),i=n.mont(e),a=new n(1).toRed(i);t||(t=Math.max(1,o/48|0));for(var s=e.subn(1),u=0;!s.testn(u);u++);for(var c=e.shrn(u),f=s.toRed(i);t>0;t--){var l=this._randrange(new n(2),s);r&&r(l);var h=l.toRed(i).redPow(c);if(0!==h.cmp(a)&&0!==h.cmp(f)){for(var d=1;d0;t--){var f=this._randrange(new n(2),a),l=e.gcd(f);if(0!==l.cmpn(1))return l;var h=f.toRed(o).redPow(u);if(0!==h.cmp(i)&&0!==h.cmp(c)){for(var d=1;d>8,a=255&o;i?r.push(i,a):r.push(a)}return r},n.zero2=o,n.toHex=i,n.encode=function(e,t){return\"hex\"===t?i(e):e}},{}],392:[function(e,t,r){var n={};(0,e(\"./lib/utils/common\").assign)(n,e(\"./lib/deflate\"),e(\"./lib/inflate\"),e(\"./lib/zlib/constants\")),t.exports=n},{\"./lib/deflate\":393,\"./lib/inflate\":394,\"./lib/utils/common\":395,\"./lib/zlib/constants\":398}],393:[function(e,t,r){var n=e(\"./zlib/deflate\"),o=e(\"./utils/common\"),i=e(\"./utils/strings\"),a=e(\"./zlib/messages\"),s=e(\"./zlib/zstream\"),u=Object.prototype.toString;function c(e){if(!(this instanceof c))return new c(e);this.options=o.assign({level:-1,method:8,chunkSize:16384,windowBits:15,memLevel:8,strategy:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new s,this.strm.avail_out=0;var r=n.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(0!==r)throw new Error(a[r]);if(t.header&&n.deflateSetHeader(this.strm,t.header),t.dictionary){var f;if(f=\"string\"==typeof t.dictionary?i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===u.call(t.dictionary)?new Uint8Array(t.dictionary):t.dictionary,0!==(r=n.deflateSetDictionary(this.strm,f)))throw new Error(a[r]);this._dict_set=!0}}function f(e,t){var r=new c(t);if(r.push(e,!0),r.err)throw r.msg||a[r.err];return r.result}c.prototype.push=function(e,t){var r,a,s=this.strm,c=this.options.chunkSize;if(this.ended)return!1;a=t===~~t?t:!0===t?4:0,\"string\"==typeof e?s.input=i.string2buf(e):\"[object ArrayBuffer]\"===u.call(e)?s.input=new Uint8Array(e):s.input=e,s.next_in=0,s.avail_in=s.input.length;do{if(0===s.avail_out&&(s.output=new o.Buf8(c),s.next_out=0,s.avail_out=c),1!==(r=n.deflate(s,a))&&0!==r)return this.onEnd(r),this.ended=!0,!1;0!==s.avail_out&&(0!==s.avail_in||4!==a&&2!==a)||(\"string\"===this.options.to?this.onData(i.buf2binstring(o.shrinkBuf(s.output,s.next_out))):this.onData(o.shrinkBuf(s.output,s.next_out)))}while((s.avail_in>0||0===s.avail_out)&&1!==r);return 4===a?(r=n.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,0===r):2!==a||(this.onEnd(0),s.avail_out=0,!0)},c.prototype.onData=function(e){this.chunks.push(e)},c.prototype.onEnd=function(e){0===e&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Deflate=c,r.deflate=f,r.deflateRaw=function(e,t){return(t=t||{}).raw=!0,f(e,t)},r.gzip=function(e,t){return(t=t||{}).gzip=!0,f(e,t)}},{\"./utils/common\":395,\"./utils/strings\":396,\"./zlib/deflate\":400,\"./zlib/messages\":405,\"./zlib/zstream\":407}],394:[function(e,t,r){var n=e(\"./zlib/inflate\"),o=e(\"./utils/common\"),i=e(\"./utils/strings\"),a=e(\"./zlib/constants\"),s=e(\"./zlib/messages\"),u=e(\"./zlib/zstream\"),c=e(\"./zlib/gzheader\"),f=Object.prototype.toString;function l(e){if(!(this instanceof l))return new l(e);this.options=o.assign({chunkSize:16384,windowBits:0,to:\"\"},e||{});var t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,0===t.windowBits&&(t.windowBits=-15)),!(t.windowBits>=0&&t.windowBits<16)||e&&e.windowBits||(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&0==(15&t.windowBits)&&(t.windowBits|=15),this.err=0,this.msg=\"\",this.ended=!1,this.chunks=[],this.strm=new u,this.strm.avail_out=0;var r=n.inflateInit2(this.strm,t.windowBits);if(r!==a.Z_OK)throw new Error(s[r]);if(this.header=new c,n.inflateGetHeader(this.strm,this.header),t.dictionary&&(\"string\"==typeof t.dictionary?t.dictionary=i.string2buf(t.dictionary):\"[object ArrayBuffer]\"===f.call(t.dictionary)&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(r=n.inflateSetDictionary(this.strm,t.dictionary))!==a.Z_OK))throw new Error(s[r])}function h(e,t){var r=new l(t);if(r.push(e,!0),r.err)throw r.msg||s[r.err];return r.result}l.prototype.push=function(e,t){var r,s,u,c,l,h=this.strm,d=this.options.chunkSize,p=this.options.dictionary,y=!1;if(this.ended)return!1;s=t===~~t?t:!0===t?a.Z_FINISH:a.Z_NO_FLUSH,\"string\"==typeof e?h.input=i.binstring2buf(e):\"[object ArrayBuffer]\"===f.call(e)?h.input=new Uint8Array(e):h.input=e,h.next_in=0,h.avail_in=h.input.length;do{if(0===h.avail_out&&(h.output=new o.Buf8(d),h.next_out=0,h.avail_out=d),(r=n.inflate(h,a.Z_NO_FLUSH))===a.Z_NEED_DICT&&p&&(r=n.inflateSetDictionary(this.strm,p)),r===a.Z_BUF_ERROR&&!0===y&&(r=a.Z_OK,y=!1),r!==a.Z_STREAM_END&&r!==a.Z_OK)return this.onEnd(r),this.ended=!0,!1;h.next_out&&(0!==h.avail_out&&r!==a.Z_STREAM_END&&(0!==h.avail_in||s!==a.Z_FINISH&&s!==a.Z_SYNC_FLUSH)||(\"string\"===this.options.to?(u=i.utf8border(h.output,h.next_out),c=h.next_out-u,l=i.buf2string(h.output,u),h.next_out=c,h.avail_out=d-c,c&&o.arraySet(h.output,h.output,u,c,0),this.onData(l)):this.onData(o.shrinkBuf(h.output,h.next_out)))),0===h.avail_in&&0===h.avail_out&&(y=!0)}while((h.avail_in>0||0===h.avail_out)&&r!==a.Z_STREAM_END);return r===a.Z_STREAM_END&&(s=a.Z_FINISH),s===a.Z_FINISH?(r=n.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===a.Z_OK):s!==a.Z_SYNC_FLUSH||(this.onEnd(a.Z_OK),h.avail_out=0,!0)},l.prototype.onData=function(e){this.chunks.push(e)},l.prototype.onEnd=function(e){e===a.Z_OK&&(\"string\"===this.options.to?this.result=this.chunks.join(\"\"):this.result=o.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg},r.Inflate=l,r.inflate=h,r.inflateRaw=function(e,t){return(t=t||{}).raw=!0,h(e,t)},r.ungzip=h},{\"./utils/common\":395,\"./utils/strings\":396,\"./zlib/constants\":398,\"./zlib/gzheader\":401,\"./zlib/inflate\":403,\"./zlib/messages\":405,\"./zlib/zstream\":407}],395:[function(e,t,r){var n=\"undefined\"!=typeof Uint8Array&&\"undefined\"!=typeof Uint16Array&&\"undefined\"!=typeof Int32Array;function o(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.assign=function(e){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var r=t.shift();if(r){if(\"object\"!==_typeof2(r))throw new TypeError(r+\"must be non-object\");for(var n in r)o(r,n)&&(e[n]=r[n])}}return e},r.shrinkBuf=function(e,t){return e.length===t?e:e.subarray?e.subarray(0,t):(e.length=t,e)};var i={arraySet:function(e,t,r,n,o){if(t.subarray&&e.subarray)e.set(t.subarray(r,r+n),o);else for(var i=0;i=252?6:s>=248?5:s>=240?4:s>=224?3:s>=192?2:1;function u(e,t){if(t<65534&&(e.subarray&&i||!e.subarray&&o))return String.fromCharCode.apply(null,n.shrinkBuf(e,t));for(var r=\"\",a=0;a>>6,t[a++]=128|63&r):r<65536?(t[a++]=224|r>>>12,t[a++]=128|r>>>6&63,t[a++]=128|63&r):(t[a++]=240|r>>>18,t[a++]=128|r>>>12&63,t[a++]=128|r>>>6&63,t[a++]=128|63&r);return t},r.buf2binstring=function(e){return u(e,e.length)},r.binstring2buf=function(e){for(var t=new n.Buf8(e.length),r=0,o=t.length;r4)c[n++]=65533,r+=i-1;else{for(o&=2===i?31:3===i?15:7;i>1&&r1?c[n++]=65533:o<65536?c[n++]=o:(o-=65536,c[n++]=55296|o>>10&1023,c[n++]=56320|1023&o)}return u(c,n)},r.utf8border=function(e,t){var r;for((t=t||e.length)>e.length&&(t=e.length),r=t-1;r>=0&&128==(192&e[r]);)r--;return r<0||0===r?t:r+a[e[r]]>t?r:t}},{\"./common\":395}],397:[function(e,t,r){t.exports=function(e,t,r,n){for(var o=65535&e|0,i=e>>>16&65535|0,a=0;0!==r;){r-=a=r>2e3?2e3:r;do{i=i+(o=o+t[n++]|0)|0}while(--a);o%=65521,i%=65521}return o|i<<16|0}},{}],398:[function(e,t,r){t.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],399:[function(e,t,r){var n=function(){for(var e,t=[],r=0;r<256;r++){e=r;for(var n=0;n<8;n++)e=1&e?3988292384^e>>>1:e>>>1;t[r]=e}return t}();t.exports=function(e,t,r,o){var i=n,a=o+r;e^=-1;for(var s=o;s>>8^i[255&(e^t[s])];return-1^e}},{}],400:[function(e,t,r){var n,o=e(\"../utils/common\"),i=e(\"./trees\"),a=e(\"./adler32\"),s=e(\"./crc32\"),u=e(\"./messages\");function c(e,t){return e.msg=u[t],t}function f(e){return(e<<1)-(e>4?9:0)}function l(e){for(var t=e.length;--t>=0;)e[t]=0}function h(e){var t=e.state,r=t.pending;r>e.avail_out&&(r=e.avail_out),0!==r&&(o.arraySet(e.output,t.pending_buf,t.pending_out,r,e.next_out),e.next_out+=r,t.pending_out+=r,e.total_out+=r,e.avail_out-=r,t.pending-=r,0===t.pending&&(t.pending_out=0))}function d(e,t){i._tr_flush_block(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,h(e.strm)}function p(e,t){e.pending_buf[e.pending++]=t}function y(e,t){e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=255&t}function m(e,t){var r,n,o=e.max_chain_length,i=e.strstart,a=e.prev_length,s=e.nice_match,u=e.strstart>e.w_size-262?e.strstart-(e.w_size-262):0,c=e.window,f=e.w_mask,l=e.prev,h=e.strstart+258,d=c[i+a-1],p=c[i+a];e.prev_length>=e.good_match&&(o>>=2),s>e.lookahead&&(s=e.lookahead);do{if(c[(r=t)+a]===p&&c[r+a-1]===d&&c[r]===c[i]&&c[++r]===c[i+1]){i+=2,r++;do{}while(c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&c[++i]===c[++r]&&ia){if(e.match_start=t,a=n,n>=s)break;d=c[i+a-1],p=c[i+a]}}}while((t=l[t&f])>u&&0!=--o);return a<=e.lookahead?a:e.lookahead}function b(e){var t,r,n,i,u,c,f,l,h,d,p=e.w_size;do{if(i=e.window_size-e.lookahead-e.strstart,e.strstart>=p+(p-262)){o.arraySet(e.window,e.window,p,p,0),e.match_start-=p,e.strstart-=p,e.block_start-=p,t=r=e.hash_size;do{n=e.head[--t],e.head[t]=n>=p?n-p:0}while(--r);t=r=p;do{n=e.prev[--t],e.prev[t]=n>=p?n-p:0}while(--r);i+=p}if(0===e.strm.avail_in)break;if(c=e.strm,f=e.window,l=e.strstart+e.lookahead,h=i,d=void 0,(d=c.avail_in)>h&&(d=h),r=0===d?0:(c.avail_in-=d,o.arraySet(f,c.input,c.next_in,d,l),1===c.state.wrap?c.adler=a(c.adler,f,d,l):2===c.state.wrap&&(c.adler=s(c.adler,f,d,l)),c.next_in+=d,c.total_in+=d,d),e.lookahead+=r,e.lookahead+e.insert>=3)for(u=e.strstart-e.insert,e.ins_h=e.window[u],e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<=3)if(n=i._tr_tally(e,e.strstart-e.match_start,e.match_length-3),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=3){e.match_length--;do{e.strstart++,e.ins_h=(e.ins_h<=3&&(e.ins_h=(e.ins_h<4096)&&(e.match_length=2)),e.prev_length>=3&&e.match_length<=e.prev_length){o=e.strstart+e.lookahead-3,n=i._tr_tally(e,e.strstart-1-e.prev_match,e.prev_length-3),e.lookahead-=e.prev_length-1,e.prev_length-=2;do{++e.strstart<=o&&(e.ins_h=(e.ins_h<15&&(s=2,n-=16),i<1||i>9||8!==r||n<8||n>15||t<0||t>9||a<0||a>4)return c(e,-2);8===n&&(n=9);var u=new _;return e.state=u,u.strm=e,u.wrap=s,u.gzhead=null,u.w_bits=n,u.w_size=1<e.pending_buf_size-5&&(r=e.pending_buf_size-5);;){if(e.lookahead<=1){if(b(e),0===e.lookahead&&0===t)return 1;if(0===e.lookahead)break}e.strstart+=e.lookahead,e.lookahead=0;var n=e.block_start+r;if((0===e.strstart||e.strstart>=n)&&(e.lookahead=e.strstart-n,e.strstart=n,d(e,!1),0===e.strm.avail_out))return 1;if(e.strstart-e.block_start>=e.w_size-262&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):(e.strstart>e.block_start&&(d(e,!1),e.strm.avail_out),1)})),new w(4,4,8,4,v),new w(4,5,16,8,v),new w(4,6,32,32,v),new w(4,4,16,16,g),new w(8,16,32,32,g),new w(8,16,128,128,g),new w(8,32,128,256,g),new w(32,128,258,1024,g),new w(32,258,258,4096,g)],r.deflateInit=function(e,t){return S(e,t,8,15,8,0)},r.deflateInit2=S,r.deflateReset=x,r.deflateResetKeep=k,r.deflateSetHeader=function(e,t){return e&&e.state?2!==e.state.wrap?-2:(e.state.gzhead=t,0):-2},r.deflate=function(e,t){var r,o,a,u;if(!e||!e.state||t>5||t<0)return e?c(e,-2):-2;if(o=e.state,!e.output||!e.input&&0!==e.avail_in||666===o.status&&4!==t)return c(e,0===e.avail_out?-5:-2);if(o.strm=e,r=o.last_flush,o.last_flush=t,42===o.status)if(2===o.wrap)e.adler=0,p(o,31),p(o,139),p(o,8),o.gzhead?(p(o,(o.gzhead.text?1:0)+(o.gzhead.hcrc?2:0)+(o.gzhead.extra?4:0)+(o.gzhead.name?8:0)+(o.gzhead.comment?16:0)),p(o,255&o.gzhead.time),p(o,o.gzhead.time>>8&255),p(o,o.gzhead.time>>16&255),p(o,o.gzhead.time>>24&255),p(o,9===o.level?2:o.strategy>=2||o.level<2?4:0),p(o,255&o.gzhead.os),o.gzhead.extra&&o.gzhead.extra.length&&(p(o,255&o.gzhead.extra.length),p(o,o.gzhead.extra.length>>8&255)),o.gzhead.hcrc&&(e.adler=s(e.adler,o.pending_buf,o.pending,0)),o.gzindex=0,o.status=69):(p(o,0),p(o,0),p(o,0),p(o,0),p(o,0),p(o,9===o.level?2:o.strategy>=2||o.level<2?4:0),p(o,3),o.status=113);else{var m=8+(o.w_bits-8<<4)<<8;m|=(o.strategy>=2||o.level<2?0:o.level<6?1:6===o.level?2:3)<<6,0!==o.strstart&&(m|=32),m+=31-m%31,o.status=113,y(o,m),0!==o.strstart&&(y(o,e.adler>>>16),y(o,65535&e.adler)),e.adler=1}if(69===o.status)if(o.gzhead.extra){for(a=o.pending;o.gzindex<(65535&o.gzhead.extra.length)&&(o.pending!==o.pending_buf_size||(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),h(e),a=o.pending,o.pending!==o.pending_buf_size));)p(o,255&o.gzhead.extra[o.gzindex]),o.gzindex++;o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),o.gzindex===o.gzhead.extra.length&&(o.gzindex=0,o.status=73)}else o.status=73;if(73===o.status)if(o.gzhead.name){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),h(e),a=o.pending,o.pending===o.pending_buf_size)){u=1;break}u=o.gzindexa&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===u&&(o.gzindex=0,o.status=91)}else o.status=91;if(91===o.status)if(o.gzhead.comment){a=o.pending;do{if(o.pending===o.pending_buf_size&&(o.gzhead.hcrc&&o.pending>a&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),h(e),a=o.pending,o.pending===o.pending_buf_size)){u=1;break}u=o.gzindexa&&(e.adler=s(e.adler,o.pending_buf,o.pending-a,a)),0===u&&(o.status=103)}else o.status=103;if(103===o.status&&(o.gzhead.hcrc?(o.pending+2>o.pending_buf_size&&h(e),o.pending+2<=o.pending_buf_size&&(p(o,255&e.adler),p(o,e.adler>>8&255),e.adler=0,o.status=113)):o.status=113),0!==o.pending){if(h(e),0===e.avail_out)return o.last_flush=-1,0}else if(0===e.avail_in&&f(t)<=f(r)&&4!==t)return c(e,-5);if(666===o.status&&0!==e.avail_in)return c(e,-5);if(0!==e.avail_in||0!==o.lookahead||0!==t&&666!==o.status){var v=2===o.strategy?function(e,t){for(var r;;){if(0===e.lookahead&&(b(e),0===e.lookahead)){if(0===t)return 1;break}if(e.match_length=0,r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,r&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}(o,t):3===o.strategy?function(e,t){for(var r,n,o,a,s=e.window;;){if(e.lookahead<=258){if(b(e),e.lookahead<=258&&0===t)return 1;if(0===e.lookahead)break}if(e.match_length=0,e.lookahead>=3&&e.strstart>0&&(n=s[o=e.strstart-1])===s[++o]&&n===s[++o]&&n===s[++o]){a=e.strstart+258;do{}while(n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&n===s[++o]&&oe.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=3?(r=i._tr_tally(e,1,e.match_length-3),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(r=i._tr_tally(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),r&&(d(e,!1),0===e.strm.avail_out))return 1}return e.insert=0,4===t?(d(e,!0),0===e.strm.avail_out?3:4):e.last_lit&&(d(e,!1),0===e.strm.avail_out)?1:2}(o,t):n[o.level].func(o,t);if(3!==v&&4!==v||(o.status=666),1===v||3===v)return 0===e.avail_out&&(o.last_flush=-1),0;if(2===v&&(1===t?i._tr_align(o):5!==t&&(i._tr_stored_block(o,0,0,!1),3===t&&(l(o.head),0===o.lookahead&&(o.strstart=0,o.block_start=0,o.insert=0))),h(e),0===e.avail_out))return o.last_flush=-1,0}return 4!==t?0:o.wrap<=0?1:(2===o.wrap?(p(o,255&e.adler),p(o,e.adler>>8&255),p(o,e.adler>>16&255),p(o,e.adler>>24&255),p(o,255&e.total_in),p(o,e.total_in>>8&255),p(o,e.total_in>>16&255),p(o,e.total_in>>24&255)):(y(o,e.adler>>>16),y(o,65535&e.adler)),h(e),o.wrap>0&&(o.wrap=-o.wrap),0!==o.pending?0:1)},r.deflateEnd=function(e){var t;return e&&e.state?42!==(t=e.state.status)&&69!==t&&73!==t&&91!==t&&103!==t&&113!==t&&666!==t?c(e,-2):(e.state=null,113===t?c(e,-3):0):-2},r.deflateSetDictionary=function(e,t){var r,n,i,s,u,c,f,h,d=t.length;if(!e||!e.state)return-2;if(2===(s=(r=e.state).wrap)||1===s&&42!==r.status||r.lookahead)return-2;for(1===s&&(e.adler=a(e.adler,t,d,0)),r.wrap=0,d>=r.w_size&&(0===s&&(l(r.head),r.strstart=0,r.block_start=0,r.insert=0),h=new o.Buf8(r.w_size),o.arraySet(h,t,d-r.w_size,r.w_size,0),t=h,d=r.w_size),u=e.avail_in,c=e.next_in,f=e.input,e.avail_in=d,e.next_in=0,e.input=t,b(r);r.lookahead>=3;){n=r.strstart,i=r.lookahead-2;do{r.ins_h=(r.ins_h<>>=w=g>>>24,p-=w,0===(w=g>>>16&255))E[i++]=65535&g;else{if(!(16&w)){if(0==(64&w)){g=y[(65535&g)+(d&(1<>>=w,p-=w),p<15&&(d+=O[n++]<>>=w=g>>>24,p-=w,!(16&(w=g>>>16&255))){if(0==(64&w)){g=m[(65535&g)+(d&(1<u){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(d>>>=w,p-=w,k>(w=i-a)){if((w=k-w)>f&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break e}if(x=0,S=h,0===l){if(x+=c-w,w<_){_-=w;do{E[i++]=h[x++]}while(--w);x=i-k,S=E}}else if(l2;)E[i++]=S[x++],E[i++]=S[x++],E[i++]=S[x++],_-=3;_&&(E[i++]=S[x++],_>1&&(E[i++]=S[x++]))}else{x=i-k;do{E[i++]=E[x++],E[i++]=E[x++],E[i++]=E[x++],_-=3}while(_>2);_&&(E[i++]=E[x++],_>1&&(E[i++]=E[x++]))}break}}break}}while(n>3,d&=(1<<(p-=_<<3))-1,e.next_in=n,e.next_out=i,e.avail_in=n>>24&255)+(e>>>8&65280)+((65280&e)<<8)+((255&e)<<24)}function c(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new n.Buf16(320),this.work=new n.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function f(e){var t;return e&&e.state?(t=e.state,e.total_in=e.total_out=t.total=0,e.msg=\"\",t.wrap&&(e.adler=1&t.wrap),t.mode=1,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new n.Buf32(852),t.distcode=t.distdyn=new n.Buf32(592),t.sane=1,t.back=-1,0):-2}function l(e){var t;return e&&e.state?((t=e.state).wsize=0,t.whave=0,t.wnext=0,f(e)):-2}function h(e,t){var r,n;return e&&e.state?(n=e.state,t<0?(r=0,t=-t):(r=1+(t>>4),t<48&&(t&=15)),t&&(t<8||t>15)?-2:(null!==n.window&&n.wbits!==t&&(n.window=null),n.wrap=r,n.wbits=t,l(e))):-2}function d(e,t){var r,n;return e?(n=new c,e.state=n,n.window=null,0!==(r=h(e,t))&&(e.state=null),r):-2}var p,y,m=!0;function b(e){if(m){var t;for(p=new n.Buf32(512),y=new n.Buf32(32),t=0;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(s(1,e.lens,0,288,p,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;s(2,e.lens,0,32,y,0,e.work,{bits:5}),m=!1}e.lencode=p,e.lenbits=9,e.distcode=y,e.distbits=5}function v(e,t,r,o){var i,a=e.state;return null===a.window&&(a.wsize=1<=a.wsize?(n.arraySet(a.window,t,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):((i=a.wsize-a.wnext)>o&&(i=o),n.arraySet(a.window,t,r-o,i,a.wnext),(o-=i)?(n.arraySet(a.window,t,r-o,o,0),a.wnext=o,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=i(r.check,N,2,0),y=0,m=0,r.mode=2;break}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&y)<<8)+(y>>8))%31){e.msg=\"incorrect header check\",r.mode=30;break}if(8!=(15&y)){e.msg=\"unknown compression method\",r.mode=30;break}if(m-=4,C=8+(15&(y>>>=4)),0===r.wbits)r.wbits=C;else if(C>r.wbits){e.msg=\"invalid window size\",r.mode=30;break}r.dmax=1<>8&1),512&r.flags&&(N[0]=255&y,N[1]=y>>>8&255,r.check=i(r.check,N,2,0)),y=0,m=0,r.mode=3;case 3:for(;m<32;){if(0===d)break e;d--,y+=c[l++]<>>8&255,N[2]=y>>>16&255,N[3]=y>>>24&255,r.check=i(r.check,N,4,0)),y=0,m=0,r.mode=4;case 4:for(;m<16;){if(0===d)break e;d--,y+=c[l++]<>8),512&r.flags&&(N[0]=255&y,N[1]=y>>>8&255,r.check=i(r.check,N,2,0)),y=0,m=0,r.mode=5;case 5:if(1024&r.flags){for(;m<16;){if(0===d)break e;d--,y+=c[l++]<>>8&255,r.check=i(r.check,N,2,0)),y=0,m=0}else r.head&&(r.head.extra=null);r.mode=6;case 6:if(1024&r.flags&&((_=r.length)>d&&(_=d),_&&(r.head&&(C=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),n.arraySet(r.head.extra,c,l,_,C)),512&r.flags&&(r.check=i(r.check,c,_,l)),d-=_,l+=_,r.length-=_),r.length))break e;r.length=0,r.mode=7;case 7:if(2048&r.flags){if(0===d)break e;_=0;do{C=c[l+_++],r.head&&C&&r.length<65536&&(r.head.name+=String.fromCharCode(C))}while(C&&_>9&1,r.head.done=!0),e.adler=r.check=0,r.mode=12;break;case 10:for(;m<32;){if(0===d)break e;d--,y+=c[l++]<>>=7&m,m-=7&m,r.mode=27;break}for(;m<3;){if(0===d)break e;d--,y+=c[l++]<>>=1)){case 0:r.mode=14;break;case 1:if(b(r),r.mode=20,6===t){y>>>=2,m-=2;break e}break;case 2:r.mode=17;break;case 3:e.msg=\"invalid block type\",r.mode=30}y>>>=2,m-=2;break;case 14:for(y>>>=7&m,m-=7&m;m<32;){if(0===d)break e;d--,y+=c[l++]<>>16^65535)){e.msg=\"invalid stored block lengths\",r.mode=30;break}if(r.length=65535&y,y=0,m=0,r.mode=15,6===t)break e;case 15:r.mode=16;case 16:if(_=r.length){if(_>d&&(_=d),_>p&&(_=p),0===_)break e;n.arraySet(f,c,l,_,h),d-=_,l+=_,p-=_,h+=_,r.length-=_;break}r.mode=12;break;case 17:for(;m<14;){if(0===d)break e;d--,y+=c[l++]<>>=5,m-=5,r.ndist=1+(31&y),y>>>=5,m-=5,r.ncode=4+(15&y),y>>>=4,m-=4,r.nlen>286||r.ndist>30){e.msg=\"too many length or distance symbols\",r.mode=30;break}r.have=0,r.mode=18;case 18:for(;r.have>>=3,m-=3}for(;r.have<19;)r.lens[D[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,A={bits:r.lenbits},P=s(0,r.lens,0,19,r.lencode,0,r.work,A),r.lenbits=A.bits,P){e.msg=\"invalid code lengths set\",r.mode=30;break}r.have=0,r.mode=19;case 19:for(;r.have>>16&255,E=65535&I,!((S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<>>=S,m-=S,r.lens[r.have++]=E;else{if(16===E){for(M=S+2;m>>=S,m-=S,0===r.have){e.msg=\"invalid bit length repeat\",r.mode=30;break}C=r.lens[r.have-1],_=3+(3&y),y>>>=2,m-=2}else if(17===E){for(M=S+3;m>>=S)),y>>>=3,m-=3}else{for(M=S+7;m>>=S)),y>>>=7,m-=7}if(r.have+_>r.nlen+r.ndist){e.msg=\"invalid bit length repeat\",r.mode=30;break}for(;_--;)r.lens[r.have++]=C}}if(30===r.mode)break;if(0===r.lens[256]){e.msg=\"invalid code -- missing end-of-block\",r.mode=30;break}if(r.lenbits=9,A={bits:r.lenbits},P=s(1,r.lens,0,r.nlen,r.lencode,0,r.work,A),r.lenbits=A.bits,P){e.msg=\"invalid literal/lengths set\",r.mode=30;break}if(r.distbits=6,r.distcode=r.distdyn,A={bits:r.distbits},P=s(2,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,A),r.distbits=A.bits,P){e.msg=\"invalid distances set\",r.mode=30;break}if(r.mode=20,6===t)break e;case 20:r.mode=21;case 21:if(d>=6&&p>=258){e.next_out=h,e.avail_out=p,e.next_in=l,e.avail_in=d,r.hold=y,r.bits=m,a(e,w),h=e.next_out,f=e.output,p=e.avail_out,l=e.next_in,c=e.input,d=e.avail_in,y=r.hold,m=r.bits,12===r.mode&&(r.back=-1);break}for(r.back=0;O=(I=r.lencode[y&(1<>>16&255,E=65535&I,!((S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<>R)])>>>16&255,E=65535&I,!(R+(S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<>>=R,m-=R,r.back+=R}if(y>>>=S,m-=S,r.back+=S,r.length=E,0===O){r.mode=26;break}if(32&O){r.back=-1,r.mode=12;break}if(64&O){e.msg=\"invalid literal/length code\",r.mode=30;break}r.extra=15&O,r.mode=22;case 22:if(r.extra){for(M=r.extra;m>>=r.extra,m-=r.extra,r.back+=r.extra}r.was=r.length,r.mode=23;case 23:for(;O=(I=r.distcode[y&(1<>>16&255,E=65535&I,!((S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<>R)])>>>16&255,E=65535&I,!(R+(S=I>>>24)<=m);){if(0===d)break e;d--,y+=c[l++]<>>=R,m-=R,r.back+=R}if(y>>>=S,m-=S,r.back+=S,64&O){e.msg=\"invalid distance code\",r.mode=30;break}r.offset=E,r.extra=15&O,r.mode=24;case 24:if(r.extra){for(M=r.extra;m>>=r.extra,m-=r.extra,r.back+=r.extra}if(r.offset>r.dmax){e.msg=\"invalid distance too far back\",r.mode=30;break}r.mode=25;case 25:if(0===p)break e;if(_=w-p,r.offset>_){if((_=r.offset-_)>r.whave&&r.sane){e.msg=\"invalid distance too far back\",r.mode=30;break}_>r.wnext?(_-=r.wnext,k=r.wsize-_):k=r.wnext-_,_>r.length&&(_=r.length),x=r.window}else x=f,k=h-r.offset,_=r.length;_>p&&(_=p),p-=_,r.length-=_;do{f[h++]=x[k++]}while(--_);0===r.length&&(r.mode=21);break;case 26:if(0===p)break e;f[h++]=r.length,p--,r.mode=21;break;case 27:if(r.wrap){for(;m<32;){if(0===d)break e;d--,y|=c[l++]<=1&&0===N[E];E--);if(R>E&&(R=E),0===E)return c[f++]=20971520,c[f++]=20971520,h.bits=1,0;for(O=1;O0&&(0===e||1!==E))return-1;for(D[1]=0,x=1;x<15;x++)D[x+1]=D[x]+N[x];for(S=0;S852||2===e&&P>592)return 1;for(;;){g=x-T,l[S]v?(w=B[F+l[S]],_=M[I+l[S]]):(w=96,_=0),d=1<>T)+(p-=d)]=g<<24|w<<16|_|0}while(0!==p);for(d=1<>=1;if(0!==d?(A&=d-1,A+=d):A=0,S++,0==--N[x]){if(x===E)break;x=t[r+l[S]]}if(x>R&&(A&m)!==y){for(0===T&&(T=R),b+=O,C=1<<(j=x-T);j+T852||2===e&&P>592)return 1;c[y=A&m]=R<<24|j<<16|b-f|0}}return 0!==A&&(c[b+A]=x-T<<24|64<<16|0),h.bits=R,0}},{\"../utils/common\":395}],405:[function(e,t,r){t.exports={2:\"need dictionary\",1:\"stream end\",0:\"\",\"-1\":\"file error\",\"-2\":\"stream error\",\"-3\":\"data error\",\"-4\":\"insufficient memory\",\"-5\":\"buffer error\",\"-6\":\"incompatible version\"}},{}],406:[function(e,t,r){var n=e(\"../utils/common\");function o(e){for(var t=e.length;--t>=0;)e[t]=0}var i=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],a=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],s=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],u=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],c=new Array(576);o(c);var f=new Array(60);o(f);var l=new Array(512);o(l);var h=new Array(256);o(h);var d=new Array(29);o(d);var p,y,m,b=new Array(30);function v(e,t,r,n,o){this.static_tree=e,this.extra_bits=t,this.extra_base=r,this.elems=n,this.max_length=o,this.has_stree=e&&e.length}function g(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}function w(e){return e<256?l[e]:l[256+(e>>>7)]}function _(e,t){e.pending_buf[e.pending++]=255&t,e.pending_buf[e.pending++]=t>>>8&255}function k(e,t,r){e.bi_valid>16-r?(e.bi_buf|=t<>16-e.bi_valid,e.bi_valid+=r-16):(e.bi_buf|=t<>>=1,r<<=1}while(--t>0);return r>>>1}function O(e,t,r){var n,o,i=new Array(16),a=0;for(n=1;n<=15;n++)i[n]=a=a+r[n-1]<<1;for(o=0;o<=t;o++){var s=e[2*o+1];0!==s&&(e[2*o]=S(i[s]++,s))}}function E(e){var t;for(t=0;t<286;t++)e.dyn_ltree[2*t]=0;for(t=0;t<30;t++)e.dyn_dtree[2*t]=0;for(t=0;t<19;t++)e.bl_tree[2*t]=0;e.dyn_ltree[512]=1,e.opt_len=e.static_len=0,e.last_lit=e.matches=0}function R(e){e.bi_valid>8?_(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0}function j(e,t,r,n){var o=2*t,i=2*r;return e[o]>1;r>=1;r--)T(e,i,r);o=u;do{r=e.heap[1],e.heap[1]=e.heap[e.heap_len--],T(e,i,1),n=e.heap[1],e.heap[--e.heap_max]=r,e.heap[--e.heap_max]=n,i[2*o]=i[2*r]+i[2*n],e.depth[o]=(e.depth[r]>=e.depth[n]?e.depth[r]:e.depth[n])+1,i[2*r+1]=i[2*n+1]=o,e.heap[1]=o++,T(e,i,1)}while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],function(e,t){var r,n,o,i,a,s,u=t.dyn_tree,c=t.max_code,f=t.stat_desc.static_tree,l=t.stat_desc.has_stree,h=t.stat_desc.extra_bits,d=t.stat_desc.extra_base,p=t.stat_desc.max_length,y=0;for(i=0;i<=15;i++)e.bl_count[i]=0;for(u[2*e.heap[e.heap_max]+1]=0,r=e.heap_max+1;r<573;r++)(i=u[2*u[2*(n=e.heap[r])+1]+1]+1)>p&&(i=p,y++),u[2*n+1]=i,n>c||(e.bl_count[i]++,a=0,n>=d&&(a=h[n-d]),s=u[2*n],e.opt_len+=s*(i+a),l&&(e.static_len+=s*(f[2*n+1]+a)));if(0!==y){do{for(i=p-1;0===e.bl_count[i];)i--;e.bl_count[i]--,e.bl_count[i+1]+=2,e.bl_count[p]--,y-=2}while(y>0);for(i=p;0!==i;i--)for(n=e.bl_count[i];0!==n;)(o=e.heap[--r])>c||(u[2*o+1]!==i&&(e.opt_len+=(i-u[2*o+1])*u[2*o],u[2*o+1]=i),n--)}}(e,t),O(i,c,e.bl_count)}function A(e,t,r){var n,o,i=-1,a=t[1],s=0,u=7,c=4;for(0===a&&(u=138,c=3),t[2*(r+1)+1]=65535,n=0;n<=r;n++)o=a,a=t[2*(n+1)+1],++s>=7;n<30;n++)for(b[n]=o<<7,e=0;e<1<0?(2===e.strm.data_type&&(e.strm.data_type=function(e){var t,r=4093624447;for(t=0;t<=31;t++,r>>>=1)if(1&r&&0!==e.dyn_ltree[2*t])return 0;if(0!==e.dyn_ltree[18]||0!==e.dyn_ltree[20]||0!==e.dyn_ltree[26])return 1;for(t=32;t<256;t++)if(0!==e.dyn_ltree[2*t])return 1;return 0}(e)),P(e,e.l_desc),P(e,e.d_desc),a=function(e){var t;for(A(e,e.dyn_ltree,e.l_desc.max_code),A(e,e.dyn_dtree,e.d_desc.max_code),P(e,e.bl_desc),t=18;t>=3&&0===e.bl_tree[2*u[t]+1];t--);return e.opt_len+=3*(t+1)+5+5+4,t}(e),o=e.opt_len+3+7>>>3,(i=e.static_len+3+7>>>3)<=o&&(o=i)):o=i=r+5,r+4<=o&&-1!==t?N(e,t,r,n):4===e.strategy||i===o?(k(e,2+(n?1:0),3),C(e,c,f)):(k(e,4+(n?1:0),3),function(e,t,r,n){var o;for(k(e,t-257,5),k(e,r-1,5),k(e,n-4,4),o=0;o>>8&255,e.pending_buf[e.d_buf+2*e.last_lit+1]=255&t,e.pending_buf[e.l_buf+e.last_lit]=255&r,e.last_lit++,0===t?e.dyn_ltree[2*r]++:(e.matches++,t--,e.dyn_ltree[2*(h[r]+256+1)]++,e.dyn_dtree[2*w(t)]++),e.last_lit===e.lit_bufsize-1},r._tr_align=function(e){k(e,2,3),x(e,256,c),function(e){16===e.bi_valid?(_(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=255&e.bi_buf,e.bi_buf>>=8,e.bi_valid-=8)}(e)}},{\"../utils/common\":395}],407:[function(e,t,r){t.exports=function(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=\"\",this.state=null,this.data_type=2,this.adler=0}},{}],408:[function(e,t,r){t.exports={\"2.16.840.1.101.3.4.1.1\":\"aes-128-ecb\",\"2.16.840.1.101.3.4.1.2\":\"aes-128-cbc\",\"2.16.840.1.101.3.4.1.3\":\"aes-128-ofb\",\"2.16.840.1.101.3.4.1.4\":\"aes-128-cfb\",\"2.16.840.1.101.3.4.1.21\":\"aes-192-ecb\",\"2.16.840.1.101.3.4.1.22\":\"aes-192-cbc\",\"2.16.840.1.101.3.4.1.23\":\"aes-192-ofb\",\"2.16.840.1.101.3.4.1.24\":\"aes-192-cfb\",\"2.16.840.1.101.3.4.1.41\":\"aes-256-ecb\",\"2.16.840.1.101.3.4.1.42\":\"aes-256-cbc\",\"2.16.840.1.101.3.4.1.43\":\"aes-256-ofb\",\"2.16.840.1.101.3.4.1.44\":\"aes-256-cfb\"}},{}],409:[function(e,t,r){var n=e(\"asn1.js\");r.certificate=e(\"./certificate\");var o=n.define(\"RSAPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"modulus\").int(),this.key(\"publicExponent\").int(),this.key(\"privateExponent\").int(),this.key(\"prime1\").int(),this.key(\"prime2\").int(),this.key(\"exponent1\").int(),this.key(\"exponent2\").int(),this.key(\"coefficient\").int())}));r.RSAPrivateKey=o;var i=n.define(\"RSAPublicKey\",(function(){this.seq().obj(this.key(\"modulus\").int(),this.key(\"publicExponent\").int())}));r.RSAPublicKey=i;var a=n.define(\"SubjectPublicKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").use(s),this.key(\"subjectPublicKey\").bitstr())}));r.PublicKey=a;var s=n.define(\"AlgorithmIdentifier\",(function(){this.seq().obj(this.key(\"algorithm\").objid(),this.key(\"none\").null_().optional(),this.key(\"curve\").objid().optional(),this.key(\"params\").seq().obj(this.key(\"p\").int(),this.key(\"q\").int(),this.key(\"g\").int()).optional())})),u=n.define(\"PrivateKeyInfo\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"algorithm\").use(s),this.key(\"subjectPrivateKey\").octstr())}));r.PrivateKey=u;var c=n.define(\"EncryptedPrivateKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").seq().obj(this.key(\"id\").objid(),this.key(\"decrypt\").seq().obj(this.key(\"kde\").seq().obj(this.key(\"id\").objid(),this.key(\"kdeparams\").seq().obj(this.key(\"salt\").octstr(),this.key(\"iters\").int())),this.key(\"cipher\").seq().obj(this.key(\"algo\").objid(),this.key(\"iv\").octstr()))),this.key(\"subjectPrivateKey\").octstr())}));r.EncryptedPrivateKey=c;var f=n.define(\"DSAPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"p\").int(),this.key(\"q\").int(),this.key(\"g\").int(),this.key(\"pub_key\").int(),this.key(\"priv_key\").int())}));r.DSAPrivateKey=f,r.DSAparam=n.define(\"DSAparam\",(function(){this.int()}));var l=n.define(\"ECPrivateKey\",(function(){this.seq().obj(this.key(\"version\").int(),this.key(\"privateKey\").octstr(),this.key(\"parameters\").optional().explicit(0).use(h),this.key(\"publicKey\").optional().explicit(1).bitstr())}));r.ECPrivateKey=l;var h=n.define(\"ECParameters\",(function(){this.choice({namedCurve:this.objid()})}));r.signature=n.define(\"signature\",(function(){this.seq().obj(this.key(\"r\").int(),this.key(\"s\").int())}))},{\"./certificate\":410,\"asn1.js\":141}],410:[function(e,t,r){var n=e(\"asn1.js\"),o=n.define(\"Time\",(function(){this.choice({utcTime:this.utctime(),generalTime:this.gentime()})})),i=n.define(\"AttributeTypeValue\",(function(){this.seq().obj(this.key(\"type\").objid(),this.key(\"value\").any())})),a=n.define(\"AlgorithmIdentifier\",(function(){this.seq().obj(this.key(\"algorithm\").objid(),this.key(\"parameters\").optional(),this.key(\"curve\").objid().optional())})),s=n.define(\"SubjectPublicKeyInfo\",(function(){this.seq().obj(this.key(\"algorithm\").use(a),this.key(\"subjectPublicKey\").bitstr())})),u=n.define(\"RelativeDistinguishedName\",(function(){this.setof(i)})),c=n.define(\"RDNSequence\",(function(){this.seqof(u)})),f=n.define(\"Name\",(function(){this.choice({rdnSequence:this.use(c)})})),l=n.define(\"Validity\",(function(){this.seq().obj(this.key(\"notBefore\").use(o),this.key(\"notAfter\").use(o))})),h=n.define(\"Extension\",(function(){this.seq().obj(this.key(\"extnID\").objid(),this.key(\"critical\").bool().def(!1),this.key(\"extnValue\").octstr())})),d=n.define(\"TBSCertificate\",(function(){this.seq().obj(this.key(\"version\").explicit(0).int().optional(),this.key(\"serialNumber\").int(),this.key(\"signature\").use(a),this.key(\"issuer\").use(f),this.key(\"validity\").use(l),this.key(\"subject\").use(f),this.key(\"subjectPublicKeyInfo\").use(s),this.key(\"issuerUniqueID\").implicit(1).bitstr().optional(),this.key(\"subjectUniqueID\").implicit(2).bitstr().optional(),this.key(\"extensions\").explicit(3).seqof(h).optional())})),p=n.define(\"X509Certificate\",(function(){this.seq().obj(this.key(\"tbsCertificate\").use(d),this.key(\"signatureAlgorithm\").use(a),this.key(\"signatureValue\").bitstr())}));t.exports=p},{\"asn1.js\":141}],411:[function(e,t,r){var n=/Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m,o=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m,i=/^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m,a=e(\"evp_bytestokey\"),s=e(\"browserify-aes\"),u=e(\"safe-buffer\").Buffer;t.exports=function(e,t){var r,c=e.toString(),f=c.match(n);if(f){var l=\"aes\"+f[1],h=u.from(f[2],\"hex\"),d=u.from(f[3].replace(/[\\r\\n]/g,\"\"),\"base64\"),p=a(t,h.slice(0,8),parseInt(f[1],10)).key,y=[],m=s.createDecipheriv(l,p,h);y.push(m.update(d)),y.push(m.final()),r=u.concat(y)}else{var b=c.match(i);r=new u(b[2].replace(/[\\r\\n]/g,\"\"),\"base64\")}return{tag:c.match(o)[1],data:r}}},{\"browserify-aes\":161,evp_bytestokey:300,\"safe-buffer\":445}],412:[function(e,t,r){var n=e(\"./asn1\"),o=e(\"./aesid.json\"),i=e(\"./fixProc\"),a=e(\"browserify-aes\"),s=e(\"pbkdf2\"),u=e(\"safe-buffer\").Buffer;function c(e){var t;\"object\"!==_typeof2(e)||u.isBuffer(e)||(t=e.passphrase,e=e.key),\"string\"==typeof e&&(e=u.from(e));var r,c,f=i(e,t),l=f.tag,h=f.data;switch(l){case\"CERTIFICATE\":c=n.certificate.decode(h,\"der\").tbsCertificate.subjectPublicKeyInfo;case\"PUBLIC KEY\":switch(c||(c=n.PublicKey.decode(h,\"der\")),r=c.algorithm.algorithm.join(\".\")){case\"1.2.840.113549.1.1.1\":return n.RSAPublicKey.decode(c.subjectPublicKey.data,\"der\");case\"1.2.840.10045.2.1\":return c.subjectPrivateKey=c.subjectPublicKey,{type:\"ec\",data:c};case\"1.2.840.10040.4.1\":return c.algorithm.params.pub_key=n.DSAparam.decode(c.subjectPublicKey.data,\"der\"),{type:\"dsa\",data:c.algorithm.params};default:throw new Error(\"unknown key id \"+r)}throw new Error(\"unknown key type \"+l);case\"ENCRYPTED PRIVATE KEY\":h=function(e,t){var r=e.algorithm.decrypt.kde.kdeparams.salt,n=parseInt(e.algorithm.decrypt.kde.kdeparams.iters.toString(),10),i=o[e.algorithm.decrypt.cipher.algo.join(\".\")],c=e.algorithm.decrypt.cipher.iv,f=e.subjectPrivateKey,l=parseInt(i.split(\"-\")[1],10)/8,h=s.pbkdf2Sync(t,r,n,l,\"sha1\"),d=a.createDecipheriv(i,h,c),p=[];return p.push(d.update(f)),p.push(d.final()),u.concat(p)}(h=n.EncryptedPrivateKey.decode(h,\"der\"),t);case\"PRIVATE KEY\":switch(r=(c=n.PrivateKey.decode(h,\"der\")).algorithm.algorithm.join(\".\")){case\"1.2.840.113549.1.1.1\":return n.RSAPrivateKey.decode(c.subjectPrivateKey,\"der\");case\"1.2.840.10045.2.1\":return{curve:c.algorithm.curve,privateKey:n.ECPrivateKey.decode(c.subjectPrivateKey,\"der\").privateKey};case\"1.2.840.10040.4.1\":return c.algorithm.params.priv_key=n.DSAparam.decode(c.subjectPrivateKey,\"der\"),{type:\"dsa\",params:c.algorithm.params};default:throw new Error(\"unknown key id \"+r)}throw new Error(\"unknown key type \"+l);case\"RSA PUBLIC KEY\":return n.RSAPublicKey.decode(h,\"der\");case\"RSA PRIVATE KEY\":return n.RSAPrivateKey.decode(h,\"der\");case\"DSA PRIVATE KEY\":return{type:\"dsa\",params:n.DSAPrivateKey.decode(h,\"der\")};case\"EC PRIVATE KEY\":return{curve:(h=n.ECPrivateKey.decode(h,\"der\")).parameters.value,privateKey:h.privateKey};default:throw new Error(\"unknown key type \"+l)}}t.exports=c,c.signature=n.signature},{\"./aesid.json\":408,\"./asn1\":409,\"./fixProc\":411,\"browserify-aes\":161,pbkdf2:413,\"safe-buffer\":445}],413:[function(e,t,r){r.pbkdf2=e(\"./lib/async\"),r.pbkdf2Sync=e(\"./lib/sync\")},{\"./lib/async\":414,\"./lib/sync\":417}],414:[function(e,t,r){(function(r,n){var o,i=e(\"./precondition\"),a=e(\"./default-encoding\"),s=e(\"./sync\"),u=e(\"safe-buffer\").Buffer,c=n.crypto&&n.crypto.subtle,f={sha:\"SHA-1\",\"sha-1\":\"SHA-1\",sha1:\"SHA-1\",sha256:\"SHA-256\",\"sha-256\":\"SHA-256\",sha384:\"SHA-384\",\"sha-384\":\"SHA-384\",\"sha-512\":\"SHA-512\",sha512:\"SHA-512\"},l=[];function h(e,t,r,n,o){return c.importKey(\"raw\",e,{name:\"PBKDF2\"},!1,[\"deriveBits\"]).then((function(e){return c.deriveBits({name:\"PBKDF2\",salt:t,iterations:r,hash:{name:o}},e,n<<3)})).then((function(e){return u.from(e)}))}t.exports=function(e,t,d,p,y,m){\"function\"==typeof y&&(m=y,y=void 0);var b=f[(y=y||\"sha1\").toLowerCase()];if(!b||\"function\"!=typeof n.Promise)return r.nextTick((function(){var r;try{r=s(e,t,d,p,y)}catch(e){return m(e)}m(null,r)}));if(i(e,t,d,p),\"function\"!=typeof m)throw new Error(\"No callback provided to pbkdf2\");u.isBuffer(e)||(e=u.from(e,a)),u.isBuffer(t)||(t=u.from(t,a)),function(e,t){e.then((function(e){r.nextTick((function(){t(null,e)}))}),(function(e){r.nextTick((function(){t(e)}))}))}(function(e){if(n.process&&!n.process.browser)return Promise.resolve(!1);if(!c||!c.importKey||!c.deriveBits)return Promise.resolve(!1);if(void 0!==l[e])return l[e];var t=h(o=o||u.alloc(8),o,10,128,e).then((function(){return!0})).catch((function(){return!1}));return l[e]=t,t}(b).then((function(r){return r?h(e,t,d,p,b):s(e,t,d,p,y)})),m)}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./default-encoding\":415,\"./precondition\":416,\"./sync\":417,_process:419,\"safe-buffer\":445}],415:[function(e,t,r){(function(e){var r;e.browser?r=\"utf-8\":r=parseInt(e.version.split(\".\")[0].slice(1),10)>=6?\"utf-8\":\"binary\";t.exports=r}).call(this,e(\"_process\"))},{_process:419}],416:[function(e,t,r){(function(e){var r=Math.pow(2,30)-1;function n(t,r){if(\"string\"!=typeof t&&!e.isBuffer(t))throw new TypeError(r+\" must be a buffer or string\")}t.exports=function(e,t,o,i){if(n(e,\"Password\"),n(t,\"Salt\"),\"number\"!=typeof o)throw new TypeError(\"Iterations not a number\");if(o<0)throw new TypeError(\"Bad iterations\");if(\"number\"!=typeof i)throw new TypeError(\"Key length not a number\");if(i<0||i>r||i!=i)throw new TypeError(\"Bad key length\")}}).call(this,{isBuffer:e(\"../../is-buffer/index.js\")})},{\"../../is-buffer/index.js\":342}],417:[function(e,t,r){var n=e(\"create-hash/md5\"),o=e(\"ripemd160\"),i=e(\"sha.js\"),a=e(\"./precondition\"),s=e(\"./default-encoding\"),u=e(\"safe-buffer\").Buffer,c=u.alloc(128),f={md5:16,sha1:20,sha224:28,sha256:32,sha384:48,sha512:64,rmd160:20,ripemd160:20};function l(e,t,r){var a=function(e){function t(t){return i(e).update(t).digest()}return\"rmd160\"===e||\"ripemd160\"===e?function(e){return(new o).update(e).digest()}:\"md5\"===e?n:t}(e),s=\"sha512\"===e||\"sha384\"===e?128:64;t.length>s?t=a(t):t.length1)for(var r=1;rp||new a(t).cmp(d.modulus)>=0)throw new Error(\"decryption error\");h=r?c(new a(t),d):s(t,d);var y=f.alloc(p-h.length);if(h=f.concat([y,h],p),4===l)return function(e,t){var r=e.modulus.byteLength(),n=u(\"sha1\").update(f.alloc(0)).digest(),a=n.length;if(0!==t[0])throw new Error(\"decryption error\");var s=t.slice(1,a+1),c=t.slice(a+1),l=i(s,o(c,a)),h=i(c,o(l,r-a-1));if(function(e,t){e=f.from(e),t=f.from(t);var r=0,n=e.length;e.length!==t.length&&(r++,n=Math.min(e.length,t.length));var o=-1;for(;++o=t.length){i++;break}var a=t.slice(2,o-1);(\"0002\"!==n.toString(\"hex\")&&!r||\"0001\"!==n.toString(\"hex\")&&r)&&i++;a.length<8&&i++;if(i)throw new Error(\"decryption error\");return t.slice(o)}(0,h,r);if(3===l)return h;throw new Error(\"unknown padding\")}},{\"./mgf\":421,\"./withPublic\":424,\"./xor\":425,\"bn.js\":156,\"browserify-rsa\":179,\"create-hash\":265,\"parse-asn1\":412,\"safe-buffer\":445}],423:[function(e,t,r){var n=e(\"parse-asn1\"),o=e(\"randombytes\"),i=e(\"create-hash\"),a=e(\"./mgf\"),s=e(\"./xor\"),u=e(\"bn.js\"),c=e(\"./withPublic\"),f=e(\"browserify-rsa\"),l=e(\"safe-buffer\").Buffer;t.exports=function(e,t,r){var h;h=e.padding?e.padding:r?1:4;var d,p=n(e);if(4===h)d=function(e,t){var r=e.modulus.byteLength(),n=t.length,c=i(\"sha1\").update(l.alloc(0)).digest(),f=c.length,h=2*f;if(n>r-h-2)throw new Error(\"message too long\");var d=l.alloc(r-n-h-2),p=r-f-1,y=o(f),m=s(l.concat([c,d,l.alloc(1,1),t],p),a(y,p)),b=s(y,a(m,f));return new u(l.concat([l.alloc(1),b,m],r))}(p,t);else if(1===h)d=function(e,t,r){var n,i=t.length,a=e.modulus.byteLength();if(i>a-11)throw new Error(\"message too long\");n=r?l.alloc(a-i-3,255):function(e){var t,r=l.allocUnsafe(e),n=0,i=o(2*e),a=0;for(;n=0)throw new Error(\"data too long for modulus\")}return r?f(d,p):c(d,p)}},{\"./mgf\":421,\"./withPublic\":424,\"./xor\":425,\"bn.js\":156,\"browserify-rsa\":179,\"create-hash\":265,\"parse-asn1\":412,randombytes:426,\"safe-buffer\":445}],424:[function(e,t,r){var n=e(\"bn.js\"),o=e(\"safe-buffer\").Buffer;t.exports=function(e,t){return o.from(e.toRed(n.mont(t.modulus)).redPow(new n(t.publicExponent)).fromRed().toArray())}},{\"bn.js\":156,\"safe-buffer\":445}],425:[function(e,t,r){t.exports=function(e,t){for(var r=e.length,n=-1;++n4294967295)throw new RangeError(\"requested too many random bytes\");var n=o.allocUnsafe(e);if(e>0)if(e>65536)for(var a=0;af||e<0)throw new TypeError(\"offset must be a uint32\");if(e>u||e>t)throw new RangeError(\"offset out of range\")}function h(e,t,r){if(\"number\"!=typeof e||e!=e)throw new TypeError(\"size must be a number\");if(e>f||e<0)throw new TypeError(\"size must be a uint32\");if(e+t>r||e>u)throw new RangeError(\"buffer too small\")}function d(e,r,n,o){if(t.browser){var i=e.buffer,s=new Uint8Array(i,r,n);return c.getRandomValues(s),o?void t.nextTick((function(){o(null,e)})):e}if(!o)return a(n).copy(e,r),e;a(n,(function(t,n){if(t)return o(t);n.copy(e,r),o(null,e)}))}c&&c.getRandomValues||!t.browser?(r.randomFill=function(e,t,r,o){if(!(s.isBuffer(e)||e instanceof n.Uint8Array))throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');if(\"function\"==typeof t)o=t,t=0,r=e.length;else if(\"function\"==typeof r)o=r,r=e.length-t;else if(\"function\"!=typeof o)throw new TypeError('\"cb\" argument must be a function');return l(t,e.length),h(r,t,e.length),d(e,t,r,o)},r.randomFillSync=function(e,t,r){void 0===t&&(t=0);if(!(s.isBuffer(e)||e instanceof n.Uint8Array))throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');l(t,e.length),void 0===r&&(r=e.length-t);return h(r,t,e.length),d(e,t,r)}):(r.randomFill=o,r.randomFillSync=o)}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{_process:419,randombytes:426,\"safe-buffer\":445}],428:[function(e,t,r){var n={};function o(e,t,r){r||(r=Error);var o=function(e){var r,n;function o(r,n,o){return e.call(this,function(e,r,n){return\"string\"==typeof t?t:t(e,r,n)}(r,n,o))||this}return n=e,(r=o).prototype=Object.create(n.prototype),r.prototype.constructor=r,r.__proto__=n,o}(r);o.prototype.name=r.name,o.prototype.code=e,n[e]=o}function i(e,t){if(Array.isArray(e)){var r=e.length;return e=e.map((function(e){return String(e)})),r>2?\"one of \".concat(t,\" \").concat(e.slice(0,r-1).join(\", \"),\", or \")+e[r-1]:2===r?\"one of \".concat(t,\" \").concat(e[0],\" or \").concat(e[1]):\"of \".concat(t,\" \").concat(e[0])}return\"of \".concat(t,\" \").concat(String(e))}o(\"ERR_INVALID_OPT_VALUE\",(function(e,t){return'The value \"'+t+'\" is invalid for option \"'+e+'\"'}),TypeError),o(\"ERR_INVALID_ARG_TYPE\",(function(e,t,r){var n,o,a,s;if(\"string\"==typeof t&&(o=\"not \",t.substr(!a||a<0?0:+a,o.length)===o)?(n=\"must not be\",t=t.replace(/^not /,\"\")):n=\"must be\",function(e,t,r){return(void 0===r||r>e.length)&&(r=e.length),e.substring(r-t.length,r)===t}(e,\" argument\"))s=\"The \".concat(e,\" \").concat(n,\" \").concat(i(t,\"type\"));else{var u=function(e,t,r){return\"number\"!=typeof r&&(r=0),!(r+t.length>e.length)&&-1!==e.indexOf(t,r)}(e,\".\")?\"property\":\"argument\";s='The \"'.concat(e,'\" ').concat(u,\" \").concat(n,\" \").concat(i(t,\"type\"))}return s+=\". Received type \".concat(_typeof2(r))}),TypeError),o(\"ERR_STREAM_PUSH_AFTER_EOF\",\"stream.push() after EOF\"),o(\"ERR_METHOD_NOT_IMPLEMENTED\",(function(e){return\"The \"+e+\" method is not implemented\"})),o(\"ERR_STREAM_PREMATURE_CLOSE\",\"Premature close\"),o(\"ERR_STREAM_DESTROYED\",(function(e){return\"Cannot call \"+e+\" after a stream was destroyed\"})),o(\"ERR_MULTIPLE_CALLBACK\",\"Callback called multiple times\"),o(\"ERR_STREAM_CANNOT_PIPE\",\"Cannot pipe, not readable\"),o(\"ERR_STREAM_WRITE_AFTER_END\",\"write after end\"),o(\"ERR_STREAM_NULL_VALUES\",\"May not write null values to stream\",TypeError),o(\"ERR_UNKNOWN_ENCODING\",(function(e){return\"Unknown encoding: \"+e}),TypeError),o(\"ERR_STREAM_UNSHIFT_AFTER_END_EVENT\",\"stream.unshift() after end event\"),t.exports.codes=n},{}],429:[function(e,t,r){(function(r){var n=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=c;var o=e(\"./_stream_readable\"),i=e(\"./_stream_writable\");e(\"inherits\")(c,o);for(var a=n(i.prototype),s=0;s0)if(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===s.prototype||(t=function(e){return s.from(e)}(t)),n)a.endEmitted?k(e,new _):R(e,a,t,!0);else if(a.ended)k(e,new g);else{if(a.destroyed)return!1;a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?R(e,a,t,!1):P(e,a)):R(e,a,t,!1)}else n||(a.reading=!1,P(e,a));return!a.ended&&(a.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=1073741824?e=1073741824:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function T(e){var t=e._readableState;c(\"emitReadable\",t.needReadable,t.emittedReadable),t.needReadable=!1,t.emittedReadable||(c(\"emitReadable\",t.flowing),t.emittedReadable=!0,r.nextTick(C,e))}function C(e){var t=e._readableState;c(\"emitReadable_\",t.destroyed,t.length,t.ended),t.destroyed||!t.length&&!t.ended||(e.emit(\"readable\"),t.emittedReadable=!1),t.needReadable=!t.flowing&&!t.ended&&t.length<=t.highWaterMark,D(e)}function P(e,t){t.readingMore||(t.readingMore=!0,r.nextTick(A,e,t))}function A(e,t){for(;!t.reading&&!t.ended&&(t.length0,t.resumeScheduled&&!t.paused?t.flowing=!0:e.listenerCount(\"data\")>0&&e.resume()}function I(e){c(\"readable nexttick read 0\"),e.read(0)}function N(e,t){c(\"resume\",t.reading),t.reading||e.read(0),t.resumeScheduled=!1,e.emit(\"resume\"),D(e),t.flowing&&!t.reading&&e.read(0)}function D(e){var t=e._readableState;for(c(\"flow\",t.flowing);t.flowing&&null!==e.read(););}function B(e,t){return 0===t.length?null:(t.objectMode?r=t.buffer.shift():!e||e>=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.first():t.buffer.concat(t.length),t.buffer.clear()):r=t.buffer.consume(e,t.decoder),r);var r}function F(e){var t=e._readableState;c(\"endReadable\",t.endEmitted),t.endEmitted||(t.ended=!0,r.nextTick(L,t,e))}function L(e,t){if(c(\"endReadableNT\",e.endEmitted,e.length),!e.endEmitted&&0===e.length&&(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"),e.autoDestroy)){var r=t._writableState;(!r||r.autoDestroy&&r.finished)&&t.destroy()}}function z(e,t){for(var r=0,n=e.length;r=t.highWaterMark:t.length>0)||t.ended))return c(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?F(this):T(this),null;if(0===(e=j(e,t))&&t.ended)return 0===t.length&&F(this),null;var n,o=t.needReadable;return c(\"need readable\",o),(0===t.length||t.length-e0?B(e,t):null)?(t.needReadable=t.length<=t.highWaterMark,e=0):(t.length-=e,t.awaitDrain=0),0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&F(this)),null!==n&&this.emit(\"data\",n),n},O.prototype._read=function(e){k(this,new w(\"_read()\"))},O.prototype.pipe=function(e,t){var n=this,o=this._readableState;switch(o.pipesCount){case 0:o.pipes=e;break;case 1:o.pipes=[o.pipes,e];break;default:o.pipes.push(e)}o.pipesCount+=1,c(\"pipe count=%d opts=%j\",o.pipesCount,t);var a=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?u:m;function s(t,r){c(\"onunpipe\"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,c(\"cleanup\"),e.removeListener(\"close\",p),e.removeListener(\"finish\",y),e.removeListener(\"drain\",f),e.removeListener(\"error\",d),e.removeListener(\"unpipe\",s),n.removeListener(\"end\",u),n.removeListener(\"end\",m),n.removeListener(\"data\",h),l=!0,!o.awaitDrain||e._writableState&&!e._writableState.needDrain||f())}function u(){c(\"onend\"),e.end()}o.endEmitted?r.nextTick(a):n.once(\"end\",a),e.on(\"unpipe\",s);var f=function(e){return function(){var t=e._readableState;c(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&i(e,\"data\")&&(t.flowing=!0,D(e))}}(n);e.on(\"drain\",f);var l=!1;function h(t){c(\"ondata\");var r=e.write(t);c(\"dest.write\",r),!1===r&&((1===o.pipesCount&&o.pipes===e||o.pipesCount>1&&-1!==z(o.pipes,e))&&!l&&(c(\"false write response, pause\",o.awaitDrain),o.awaitDrain++),n.pause())}function d(t){c(\"onerror\",t),m(),e.removeListener(\"error\",d),0===i(e,\"error\")&&k(e,t)}function p(){e.removeListener(\"finish\",y),m()}function y(){c(\"onfinish\"),e.removeListener(\"close\",p),m()}function m(){c(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",h),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?Array.isArray(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",d),e.once(\"close\",p),e.once(\"finish\",y),e.emit(\"pipe\",n),o.flowing||(c(\"pipe resume\"),n.resume()),e},O.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i0,!1!==o.flowing&&this.resume()):\"readable\"===e&&(o.endEmitted||o.readableListening||(o.readableListening=o.needReadable=!0,o.flowing=!1,o.emittedReadable=!1,c(\"on readable\",o.length,o.reading),o.length?T(this):o.reading||r.nextTick(I,this))),n},O.prototype.addListener=O.prototype.on,O.prototype.removeListener=function(e,t){var n=a.prototype.removeListener.call(this,e,t);return\"readable\"===e&&r.nextTick(M,this),n},O.prototype.removeAllListeners=function(e){var t=a.prototype.removeAllListeners.apply(this,arguments);return\"readable\"!==e&&void 0!==e||r.nextTick(M,this),t},O.prototype.resume=function(){var e=this._readableState;return e.flowing||(c(\"resume\"),e.flowing=!e.readableListening,function(e,t){t.resumeScheduled||(t.resumeScheduled=!0,r.nextTick(N,e,t))}(this,e)),e.paused=!1,this},O.prototype.pause=function(){return c(\"call pause flowing=%j\",this._readableState.flowing),!1!==this._readableState.flowing&&(c(\"pause\"),this._readableState.flowing=!1,this.emit(\"pause\")),this._readableState.paused=!0,this},O.prototype.wrap=function(e){var t=this,r=this._readableState,n=!1;for(var o in e.on(\"end\",(function(){if(c(\"wrapped end\"),r.decoder&&!r.ended){var e=r.decoder.end();e&&e.length&&t.push(e)}t.push(null)})),e.on(\"data\",(function(o){(c(\"wrapped data\"),r.decoder&&(o=r.decoder.write(o)),r.objectMode&&null==o)||(r.objectMode||o&&o.length)&&(t.push(o)||(n=!0,e.pause()))})),e)void 0===this[o]&&\"function\"==typeof e[o]&&(this[o]=function(t){return function(){return e[t].apply(e,arguments)}}(o));for(var i=0;i-1))throw new _(e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(O.prototype,\"writableBuffer\",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer()}}),Object.defineProperty(O.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),O.prototype._write=function(e,t,r){r(new y(\"_write()\"))},O.prototype._writev=null,O.prototype.end=function(e,t,n){var o=this._writableState;return\"function\"==typeof e?(n=e,e=null,t=null):\"function\"==typeof t&&(n=t,t=null),null!=e&&this.write(e,t),o.corked&&(o.corked=1,this.uncork()),o.ending||function(e,t,n){t.ending=!0,P(e,t),n&&(t.finished?r.nextTick(n):e.once(\"finish\",n));t.ended=!0,e.writable=!1}(this,o,n),this},Object.defineProperty(O.prototype,\"writableLength\",{enumerable:!1,get:function(){return this._writableState.length}}),Object.defineProperty(O.prototype,\"destroyed\",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),O.prototype.destroy=l.destroy,O.prototype._undestroy=l.undestroy,O.prototype._destroy=function(e,t){t(e)}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"../errors\":428,\"./_stream_duplex\":429,\"./internal/streams/destroy\":436,\"./internal/streams/state\":440,\"./internal/streams/stream\":441,_process:419,buffer:188,inherits:341,\"util-deprecate\":472}],434:[function(e,t,r){(function(r){var n;function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var i=e(\"./end-of-stream\"),a=Symbol(\"lastResolve\"),s=Symbol(\"lastReject\"),u=Symbol(\"error\"),c=Symbol(\"ended\"),f=Symbol(\"lastPromise\"),l=Symbol(\"handlePromise\"),h=Symbol(\"stream\");function d(e,t){return{value:e,done:t}}function p(e){var t=e[a];if(null!==t){var r=e[h].read();null!==r&&(e[f]=null,e[a]=null,e[s]=null,t(d(r,!1)))}}function y(e){r.nextTick(p,e)}var m=Object.getPrototypeOf((function(){})),b=Object.setPrototypeOf((o(n={get stream(){return this[h]},next:function(){var e=this,t=this[u];if(null!==t)return Promise.reject(t);if(this[c])return Promise.resolve(d(void 0,!0));if(this[h].destroyed)return new Promise((function(t,n){r.nextTick((function(){e[u]?n(e[u]):t(d(void 0,!0))}))}));var n,o=this[f];if(o)n=new Promise(function(e,t){return function(r,n){e.then((function(){t[c]?r(d(void 0,!0)):t[l](r,n)}),n)}}(o,this));else{var i=this[h].read();if(null!==i)return Promise.resolve(d(i,!1));n=new Promise(this[l])}return this[f]=n,n}},Symbol.asyncIterator,(function(){return this})),o(n,\"return\",(function(){var e=this;return new Promise((function(t,r){e[h].destroy(null,(function(e){e?r(e):t(d(void 0,!0))}))}))})),n),m);t.exports=function(e){var t,r=Object.create(b,(o(t={},h,{value:e,writable:!0}),o(t,a,{value:null,writable:!0}),o(t,s,{value:null,writable:!0}),o(t,u,{value:null,writable:!0}),o(t,c,{value:e._readableState.endEmitted,writable:!0}),o(t,l,{value:function(e,t){var n=r[h].read();n?(r[f]=null,r[a]=null,r[s]=null,e(d(n,!1))):(r[a]=e,r[s]=t)},writable:!0}),t));return r[f]=null,i(e,(function(e){if(e&&\"ERR_STREAM_PREMATURE_CLOSE\"!==e.code){var t=r[s];return null!==t&&(r[f]=null,r[a]=null,r[s]=null,t(e)),void(r[u]=e)}var n=r[a];null!==n&&(r[f]=null,r[a]=null,r[s]=null,n(d(void 0,!0))),r[c]=!0})),e.on(\"readable\",y.bind(null,r)),r}}).call(this,e(\"_process\"))},{\"./end-of-stream\":437,_process:419}],435:[function(e,t,r){function n(e,t){var r=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),r.push.apply(r,n)}return r}function o(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}function i(e,t){for(var r=0;r0?this.tail.next=t:this.head=t,this.tail=t,++this.length}},{key:\"unshift\",value:function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length}},{key:\"shift\",value:function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}}},{key:\"clear\",value:function(){this.head=this.tail=null,this.length=0}},{key:\"join\",value:function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r}},{key:\"concat\",value:function(e){if(0===this.length)return a.alloc(0);for(var t,r,n,o=a.allocUnsafe(e>>>0),i=this.head,s=0;i;)t=i.data,r=o,n=s,a.prototype.copy.call(t,r,n),s+=i.data.length,i=i.next;return o}},{key:\"consume\",value:function(e,t){var r;return eo.length?o.length:e;if(i===o.length?n+=o:n+=o.slice(0,e),0==(e-=i)){i===o.length?(++r,t.next?this.head=t.next:this.head=this.tail=null):(this.head=t,t.data=o.slice(i));break}++r}return this.length-=r,n}},{key:\"_getBuffer\",value:function(e){var t=a.allocUnsafe(e),r=this.head,n=1;for(r.data.copy(t),e-=r.data.length;r=r.next;){var o=r.data,i=e>o.length?o.length:e;if(o.copy(t,t.length-e,0,i),0==(e-=i)){i===o.length?(++n,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=o.slice(i));break}++n}return this.length-=n,t}},{key:u,value:function(e,t){return s(this,function(e){for(var t=1;t0,(function(e){n||(n=e),e&&a.forEach(c),i||(a.forEach(c),o(n))}))}));return t.reduce(f)}},{\"../../../errors\":428,\"./end-of-stream\":437}],440:[function(e,t,r){var n=e(\"../../../errors\").codes.ERR_INVALID_OPT_VALUE;t.exports={getHighWaterMark:function(e,t,r,o){var i=function(e,t,r){return null!=e.highWaterMark?e.highWaterMark:t?e[r]:null}(t,o,r);if(null!=i){if(!isFinite(i)||Math.floor(i)!==i||i<0)throw new n(o?r:\"highWaterMark\",i);return Math.floor(i)}return e.objectMode?16:16384}}},{\"../../../errors\":428}],441:[function(e,t,r){t.exports=e(\"events\").EventEmitter},{events:299}],442:[function(e,t,r){(r=t.exports=e(\"./lib/_stream_readable.js\")).Stream=r,r.Readable=r,r.Writable=e(\"./lib/_stream_writable.js\"),r.Duplex=e(\"./lib/_stream_duplex.js\"),r.Transform=e(\"./lib/_stream_transform.js\"),r.PassThrough=e(\"./lib/_stream_passthrough.js\"),r.finished=e(\"./lib/internal/streams/end-of-stream.js\"),r.pipeline=e(\"./lib/internal/streams/pipeline.js\")},{\"./lib/_stream_duplex.js\":429,\"./lib/_stream_passthrough.js\":430,\"./lib/_stream_readable.js\":431,\"./lib/_stream_transform.js\":432,\"./lib/_stream_writable.js\":433,\"./lib/internal/streams/end-of-stream.js\":437,\"./lib/internal/streams/pipeline.js\":439}],443:[function(e,t,r){var n=function(e){var t=Object.prototype,r=t.hasOwnProperty,n=\"function\"==typeof Symbol?Symbol:{},o=n.iterator||\"@@iterator\",i=n.asyncIterator||\"@@asyncIterator\",a=n.toStringTag||\"@@toStringTag\";function s(e,t,r,n){var o=t&&t.prototype instanceof f?t:f,i=Object.create(o.prototype),a=new k(n||[]);return i._invoke=function(e,t,r){var n=\"suspendedStart\";return function(o,i){if(\"executing\"===n)throw new Error(\"Generator is already running\");if(\"completed\"===n){if(\"throw\"===o)throw i;return S()}for(r.method=o,r.arg=i;;){var a=r.delegate;if(a){var s=g(a,r);if(s){if(s===c)continue;return s}}if(\"next\"===r.method)r.sent=r._sent=r.arg;else if(\"throw\"===r.method){if(\"suspendedStart\"===n)throw n=\"completed\",r.arg;r.dispatchException(r.arg)}else\"return\"===r.method&&r.abrupt(\"return\",r.arg);n=\"executing\";var f=u(e,t,r);if(\"normal\"===f.type){if(n=r.done?\"completed\":\"suspendedYield\",f.arg===c)continue;return{value:f.arg,done:r.done}}\"throw\"===f.type&&(n=\"completed\",r.method=\"throw\",r.arg=f.arg)}}}(e,r,a),i}function u(e,t,r){try{return{type:\"normal\",arg:e.call(t,r)}}catch(e){return{type:\"throw\",arg:e}}}e.wrap=s;var c={};function f(){}function l(){}function h(){}var d={};d[o]=function(){return this};var p=Object.getPrototypeOf,y=p&&p(p(x([])));y&&y!==t&&r.call(y,o)&&(d=y);var m=h.prototype=f.prototype=Object.create(d);function b(e){[\"next\",\"throw\",\"return\"].forEach((function(t){e[t]=function(e){return this._invoke(t,e)}}))}function v(e,t){var n;this._invoke=function(o,i){function a(){return new t((function(n,a){!function n(o,i,a,s){var c=u(e[o],e,i);if(\"throw\"!==c.type){var f=c.arg,l=f.value;return l&&\"object\"===_typeof2(l)&&r.call(l,\"__await\")?t.resolve(l.__await).then((function(e){n(\"next\",e,a,s)}),(function(e){n(\"throw\",e,a,s)})):t.resolve(l).then((function(e){f.value=e,a(f)}),(function(e){return n(\"throw\",e,a,s)}))}s(c.arg)}(o,i,n,a)}))}return n=n?n.then(a,a):a()}}function g(e,t){var r=e.iterator[t.method];if(void 0===r){if(t.delegate=null,\"throw\"===t.method){if(e.iterator.return&&(t.method=\"return\",t.arg=void 0,g(e,t),\"throw\"===t.method))return c;t.method=\"throw\",t.arg=new TypeError(\"The iterator does not provide a 'throw' method\")}return c}var n=u(r,e.iterator,t.arg);if(\"throw\"===n.type)return t.method=\"throw\",t.arg=n.arg,t.delegate=null,c;var o=n.arg;return o?o.done?(t[e.resultName]=o.value,t.next=e.nextLoc,\"return\"!==t.method&&(t.method=\"next\",t.arg=void 0),t.delegate=null,c):o:(t.method=\"throw\",t.arg=new TypeError(\"iterator result is not an object\"),t.delegate=null,c)}function w(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function _(e){var t=e.completion||{};t.type=\"normal\",delete t.arg,e.completion=t}function k(e){this.tryEntries=[{tryLoc:\"root\"}],e.forEach(w,this),this.reset(!0)}function x(e){if(e){var t=e[o];if(t)return t.call(e);if(\"function\"==typeof e.next)return e;if(!isNaN(e.length)){var n=-1,i=function t(){for(;++n=0;--o){var i=this.tryEntries[o],a=i.completion;if(\"root\"===i.tryLoc)return n(\"end\");if(i.tryLoc<=this.prev){var s=r.call(i,\"catchLoc\"),u=r.call(i,\"finallyLoc\");if(s&&u){if(this.prev=0;--n){var o=this.tryEntries[n];if(o.tryLoc<=this.prev&&r.call(o,\"finallyLoc\")&&this.prev=0;--t){var r=this.tryEntries[t];if(r.finallyLoc===e)return this.complete(r.completion,r.afterLoc),_(r),c}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var r=this.tryEntries[t];if(r.tryLoc===e){var n=r.completion;if(\"throw\"===n.type){var o=n.arg;_(r)}return o}}throw new Error(\"illegal catch attempt\")},delegateYield:function(e,t,r){return this.delegate={iterator:x(e),resultName:t,nextLoc:r},\"next\"===this.method&&(this.arg=void 0),c}},e}(\"object\"===_typeof2(t)?t.exports:{});try{regeneratorRuntime=n}catch(e){Function(\"r\",\"regeneratorRuntime = r\")(n)}},{}],444:[function(e,t,r){var n=e(\"buffer\").Buffer,o=e(\"inherits\"),i=e(\"hash-base\"),a=new Array(16),s=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,7,4,13,1,10,6,15,3,12,0,9,5,2,14,11,8,3,10,14,4,9,15,8,1,2,7,0,6,13,11,5,12,1,9,11,10,0,8,12,4,13,3,7,15,14,5,6,2,4,0,5,9,7,12,2,10,14,1,3,8,11,6,15,13],u=[5,14,7,0,9,2,11,4,13,6,15,8,1,10,3,12,6,11,3,7,0,13,5,10,14,15,8,12,4,9,1,2,15,5,1,3,7,14,6,9,11,8,12,2,10,0,4,13,8,6,4,1,3,11,15,0,5,12,2,13,9,7,10,14,12,15,10,4,1,5,8,7,6,2,13,14,0,3,9,11],c=[11,14,15,12,5,8,7,9,11,13,14,15,6,7,9,8,7,6,8,13,11,9,7,15,7,12,15,9,11,7,13,12,11,13,6,7,14,9,13,15,14,8,13,6,5,12,7,5,11,12,14,15,14,15,9,8,9,14,5,6,8,6,5,12,9,15,5,11,6,8,13,12,5,12,13,14,11,8,5,6],f=[8,9,9,11,13,15,15,5,7,7,8,11,14,14,12,6,9,13,15,7,12,8,9,11,7,7,12,7,6,15,13,11,9,7,15,11,8,6,6,14,12,13,5,14,13,13,7,5,15,5,8,11,14,14,6,14,6,9,12,9,12,5,15,8,8,5,12,9,12,5,14,6,8,13,6,5,15,13,11,11],l=[0,1518500249,1859775393,2400959708,2840853838],h=[1352829926,1548603684,1836072691,2053994217,0];function d(){i.call(this,64),this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520}function p(e,t){return e<>>32-t}function y(e,t,r,n,o,i,a,s){return p(e+(t^r^n)+i+a|0,s)+o|0}function m(e,t,r,n,o,i,a,s){return p(e+(t&r|~t&n)+i+a|0,s)+o|0}function b(e,t,r,n,o,i,a,s){return p(e+((t|~r)^n)+i+a|0,s)+o|0}function v(e,t,r,n,o,i,a,s){return p(e+(t&n|r&~n)+i+a|0,s)+o|0}function g(e,t,r,n,o,i,a,s){return p(e+(t^(r|~n))+i+a|0,s)+o|0}o(d,i),d.prototype._update=function(){for(var e=a,t=0;t<16;++t)e[t]=this._block.readInt32LE(4*t);for(var r=0|this._a,n=0|this._b,o=0|this._c,i=0|this._d,d=0|this._e,w=0|this._a,_=0|this._b,k=0|this._c,x=0|this._d,S=0|this._e,O=0;O<80;O+=1){var E,R;O<16?(E=y(r,n,o,i,d,e[s[O]],l[0],c[O]),R=g(w,_,k,x,S,e[u[O]],h[0],f[O])):O<32?(E=m(r,n,o,i,d,e[s[O]],l[1],c[O]),R=v(w,_,k,x,S,e[u[O]],h[1],f[O])):O<48?(E=b(r,n,o,i,d,e[s[O]],l[2],c[O]),R=b(w,_,k,x,S,e[u[O]],h[2],f[O])):O<64?(E=v(r,n,o,i,d,e[s[O]],l[3],c[O]),R=m(w,_,k,x,S,e[u[O]],h[3],f[O])):(E=g(r,n,o,i,d,e[s[O]],l[4],c[O]),R=y(w,_,k,x,S,e[u[O]],h[4],f[O])),r=d,d=i,i=p(o,10),o=n,n=E,w=S,S=x,x=p(k,10),k=_,_=R}var j=this._b+o+x|0;this._b=this._c+i+S|0,this._c=this._d+d+w|0,this._d=this._e+r+_|0,this._e=this._a+n+k|0,this._a=j},d.prototype._digest=function(){this._block[this._blockOffset++]=128,this._blockOffset>56&&(this._block.fill(0,this._blockOffset,64),this._update(),this._blockOffset=0),this._block.fill(0,this._blockOffset,56),this._block.writeUInt32LE(this._length[0],56),this._block.writeUInt32LE(this._length[1],60),this._update();var e=n.alloc?n.alloc(20):new n(20);return e.writeInt32LE(this._a,0),e.writeInt32LE(this._b,4),e.writeInt32LE(this._c,8),e.writeInt32LE(this._d,12),e.writeInt32LE(this._e,16),e},t.exports=d},{buffer:188,\"hash-base\":325,inherits:341}],445:[function(e,t,r){var n=e(\"buffer\"),o=n.Buffer;function i(e,t){for(var r in e)t[r]=e[r]}function a(e,t,r){return o(e,t,r)}o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?t.exports=n:(i(n,r),r.Buffer=a),i(o,a),a.from=function(e,t,r){if(\"number\"==typeof e)throw new TypeError(\"Argument must not be a number\");return o(e,t,r)},a.alloc=function(e,t,r){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");var n=o(e);return void 0!==t?\"string\"==typeof r?n.fill(t,r):n.fill(t):n.fill(0),n},a.allocUnsafe=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return o(e)},a.allocUnsafeSlow=function(e){if(\"number\"!=typeof e)throw new TypeError(\"Argument must be a number\");return n.SlowBuffer(e)}},{buffer:188}],446:[function(e,t,r){Object.defineProperty(r,\"__esModule\",{value:!0});var n=e(\"xmlchars/xml/1.0/ed5\"),o=e(\"xmlchars/xml/1.1/ed2\"),i=e(\"xmlchars/xmlns/1.0/ed3\"),a=n.isS,s=n.isChar,u=n.isNameStartChar,c=n.isNameChar,f=n.S_LIST,l=n.NAME_RE,h=o.isChar,d=i.isNCNameStartChar,p=i.isNCNameChar,y=i.NC_NAME_RE,m=\"http://www.w3.org/XML/1998/namespace\",b=\"http://www.w3.org/2000/xmlns/\",v={__proto__:null,xml:m,xmlns:b},g={__proto__:null,amp:\"&\",gt:\">\",lt:\"<\",quot:'\"',apos:\"'\"},w=61,_=63,k=function(e){return 34===e||39===e},x=[34,39],S=[].concat(x,[91,62]),O=[].concat(x,[60,93]),E=[w,_].concat(_toConsumableArray2(f)),R=[].concat(_toConsumableArray2(f),[62,38,60]);function j(e,t,r){switch(t){case\"xml\":r!==m&&e.fail(\"xml prefix must be bound to \".concat(m,\".\"));break;case\"xmlns\":r!==b&&e.fail(\"xmlns prefix must be bound to \".concat(b,\".\"))}switch(r){case b:e.fail(\"\"===t?\"the default namespace may not be set to \".concat(r,\".\"):'may not assign a prefix (even \"xmlns\") to the URI '.concat(b,\".\"));break;case m:switch(t){case\"xml\":break;case\"\":e.fail(\"the default namespace may not be set to \".concat(r,\".\"));break;default:e.fail(\"may not assign the xml namespace to another prefix.\")}}}var T=function(e){return y.test(e)},C=function(e){return l.test(e)};r.EVENTS=[\"xmldecl\",\"text\",\"processinginstruction\",\"doctype\",\"comment\",\"opentagstart\",\"attribute\",\"opentag\",\"closetag\",\"cdata\",\"error\",\"end\",\"ready\"];var P={xmldecl:\"xmldeclHandler\",text:\"textHandler\",processinginstruction:\"piHandler\",doctype:\"doctypeHandler\",comment:\"commentHandler\",opentagstart:\"openTagStartHandler\",attribute:\"attributeHandler\",opentag:\"openTagHandler\",closetag:\"closeTagHandler\",cdata:\"cdataHandler\",error:\"errorHandler\",end:\"endHandler\",ready:\"readyHandler\"},A=function(){function e(t){_classCallCheck2(this,e),this.opt=null!=t?t:{},this.fragmentOpt=!!this.opt.fragment;var r=this.xmlnsOpt=!!this.opt.xmlns;if(this.trackPosition=!1!==this.opt.position,this.fileName=this.opt.fileName,r){this.nameStartCheck=d,this.nameCheck=p,this.isName=T,this.processAttribs=this.processAttribsNS,this.pushAttrib=this.pushAttribNS,this.ns=Object.assign({__proto__:null},v);var n=this.opt.additionalNamespaces;null!=n&&(!function(e,t){for(var r=0,n=Object.keys(t);r0&&(r+=\":\"),r+=\"\".concat(this.line,\":\").concat(this.column)),r.length>0&&(r+=\": \"),new Error(r+e)}},{key:\"fail\",value:function(e){var t=this.makeError(e),r=this.errorHandler;if(void 0===r)throw t;return r(t),this}},{key:\"write\",value:function(e){if(this.closed)return this.fail(\"cannot write after close; assign an onready handler.\");var t=!1;null===e?(t=!0,e=\"\"):\"object\"===_typeof2(e)&&(e=e.toString()),void 0!==this.carriedFromPrevious&&(e=\"\".concat(this.carriedFromPrevious).concat(e),this.carriedFromPrevious=void 0);var r=e.length,n=e.charCodeAt(r-1);!t&&(13===n||n>=55296&&n<=56319)&&(this.carriedFromPrevious=e[r-1],r--,e=e.slice(0,r));var o=this.stateTable;for(this.chunk=e,this.i=0;this.i=e.length)return-1;var r=e.charCodeAt(t);if(this.column++,r<55296){if(r>=32||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:return 10===e.charCodeAt(t+1)&&(this.i=t+2),this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail(\"disallowed character.\"),r}}if(r>56319)return r>=57344&&r<=65533||this.fail(\"disallowed character.\"),r;var n=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,n>1114111&&this.fail(\"disallowed character.\"),n}},{key:\"getCode11\",value:function(){var e=this.chunk,t=this.i;if(this.prevI=t,this.i=t+1,t>=e.length)return-1;var r=e.charCodeAt(t);if(this.column++,r<55296){if(r>31&&r<127||r>159&&8232!==r||9===r)return r;switch(r){case 10:return this.line++,this.column=0,this.positionAtNewLine=this.position,10;case 13:var n=e.charCodeAt(t+1);10!==n&&133!==n||(this.i=t+2);case 133:case 8232:return this.line++,this.column=0,this.positionAtNewLine=this.position,-2;default:return this.fail(\"disallowed character.\"),r}}if(r>56319)return r>=57344&&r<=65533||this.fail(\"disallowed character.\"),r;var o=65536+1024*(r-55296)+(e.charCodeAt(t+1)-56320);return this.i=t+2,o>1114111&&this.fail(\"disallowed character.\"),o}},{key:\"getCodeNorm\",value:function(){var e=this.getCode();return-2===e?10:e}},{key:\"unget\",value:function(){this.i=this.prevI,this.column--}},{key:\"captureTo\",value:function(e){for(var t=this.i,r=this.chunk;;){var n=this.getCode(),o=-2===n,i=o?10:n;if(-1===i||e.includes(i))return this.text+=r.slice(t,this.prevI),i;o&&(this.text+=\"\".concat(r.slice(t,this.prevI),\"\\n\"),t=this.i)}}},{key:\"captureToChar\",value:function(e){for(var t=this.i,r=this.chunk;;){var n=this.getCode();switch(n){case-2:this.text+=\"\".concat(r.slice(t,this.prevI),\"\\n\"),t=this.i,n=10;break;case-1:return this.text+=r.slice(t),!1}if(n===e)return this.text+=r.slice(t,this.prevI),!0}}},{key:\"captureNameChars\",value:function(){for(var e=this.chunk,t=this.i;;){var r=this.getCode();if(-1===r)return this.name+=e.slice(t),-1;if(!c(r))return this.name+=e.slice(t,this.prevI),-2===r?10:r}}},{key:\"skipSpaces\",value:function(){for(;;){var e=this.getCodeNorm();if(-1===e||!a(e))return e}}},{key:\"setXMLVersion\",value:function(e){this.currentXMLVersion=e,\"1.0\"===e?(this.isChar=s,this.getCode=this.getCode10):(this.isChar=h,this.getCode=this.getCode11)}},{key:\"sBegin\",value:function(){65279===this.chunk.charCodeAt(0)&&(this.i++,this.column++),this.state=1}},{key:\"sBeginWhitespace\",value:function(){var e=this.i,t=this.skipSpaces();switch(this.prevI!==e&&(this.xmlDeclPossible=!1),t){case 60:if(this.state=15,0!==this.text.length)throw new Error(\"no-empty text at start\");break;case-1:break;default:this.unget(),this.state=13,this.xmlDeclPossible=!1}}},{key:\"sDoctype\",value:function(){var e,t=this.captureTo(S);switch(t){case 62:null===(e=this.doctypeHandler)||void 0===e||e.call(this,this.text),this.text=\"\",this.state=13,this.doctype=!0;break;case-1:break;default:this.text+=String.fromCodePoint(t),91===t?this.state=4:k(t)&&(this.state=3,this.q=t)}}},{key:\"sDoctypeQuote\",value:function(){var e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.q=null,this.state=2)}},{key:\"sDTD\",value:function(){var e=this.captureTo(O);-1!==e&&(this.text+=String.fromCodePoint(e),93===e?this.state=2:60===e?this.state=6:k(e)&&(this.state=5,this.q=e))}},{key:\"sDTDQuoted\",value:function(){var e=this.q;this.captureToChar(e)&&(this.text+=String.fromCodePoint(e),this.state=4,this.q=null)}},{key:\"sDTDOpenWaka\",value:function(){var e=this.getCodeNorm();switch(this.text+=String.fromCodePoint(e),e){case 33:this.state=7,this.openWakaBang=\"\";break;case _:this.state=11;break;default:this.state=4}}},{key:\"sDTDOpenWakaBang\",value:function(){var e=String.fromCodePoint(this.getCodeNorm()),t=this.openWakaBang+=e;this.text+=e,\"-\"!==t&&(this.state=\"--\"===t?8:4,this.openWakaBang=\"\")}},{key:\"sDTDComment\",value:function(){this.captureToChar(45)&&(this.text+=\"-\",this.state=9)}},{key:\"sDTDCommentEnding\",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),this.state=45===e?10:8}},{key:\"sDTDCommentEnded\",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e?this.state=4:(this.fail(\"malformed comment.\"),this.state=8)}},{key:\"sDTDPI\",value:function(){this.captureToChar(_)&&(this.text+=\"?\",this.state=12)}},{key:\"sDTDPIEnding\",value:function(){var e=this.getCodeNorm();this.text+=String.fromCodePoint(e),62===e&&(this.state=4)}},{key:\"sText\",value:function(){0!==this.tags.length?this.handleTextInRoot():this.handleTextOutsideRoot()}},{key:\"sEntity\",value:function(){var e=this.i,t=this.chunk;e:for(;;)switch(this.getCode()){case-2:this.entity+=\"\".concat(t.slice(e,this.prevI),\"\\n\"),e=this.i;break;case 59:var r=this.entity+t.slice(e,this.prevI);if(this.state=this.entityReturnState,\"\"===r)return this.fail(\"empty entity name.\"),void(this.text+=\"&;\");this.text+=this.parseEntity(r),this.entity=\"\";break e;case-1:this.entity+=t.slice(e);break e}}},{key:\"sOpenWaka\",value:function(){var e=this.getCode();if(u(e))this.state=34,this.unget(),this.xmlDeclPossible=!1;else switch(e){case 47:this.state=43,this.xmlDeclPossible=!1;break;case 33:this.state=16,this.openWakaBang=\"\",this.xmlDeclPossible=!1;break;case _:this.state=23;break;default:this.fail(\"disallowed character in tag name\"),this.state=13,this.xmlDeclPossible=!1}}},{key:\"sOpenWakaBang\",value:function(){switch(this.openWakaBang+=String.fromCodePoint(this.getCodeNorm()),this.openWakaBang){case\"[CDATA[\":this.sawRoot||this.reportedTextBeforeRoot||(this.fail(\"text data outside of root node.\"),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail(\"text data outside of root node.\"),this.reportedTextAfterRoot=!0),this.state=20,this.openWakaBang=\"\";break;case\"--\":this.state=17,this.openWakaBang=\"\";break;case\"DOCTYPE\":this.state=2,(this.doctype||this.sawRoot)&&this.fail(\"inappropriately located doctype declaration.\"),this.openWakaBang=\"\";break;default:this.openWakaBang.length>=7&&this.fail(\"incorrect syntax.\")}}},{key:\"sComment\",value:function(){this.captureToChar(45)&&(this.state=18)}},{key:\"sCommentEnding\",value:function(){var e,t=this.getCodeNorm();45===t?(this.state=19,null===(e=this.commentHandler)||void 0===e||e.call(this,this.text),this.text=\"\"):(this.text+=\"-\".concat(String.fromCodePoint(t)),this.state=17)}},{key:\"sCommentEnded\",value:function(){var e=this.getCodeNorm();62!==e?(this.fail(\"malformed comment.\"),this.text+=\"--\".concat(String.fromCodePoint(e)),this.state=17):this.state=13}},{key:\"sCData\",value:function(){this.captureToChar(93)&&(this.state=21)}},{key:\"sCDataEnding\",value:function(){var e=this.getCodeNorm();93===e?this.state=22:(this.text+=\"]\".concat(String.fromCodePoint(e)),this.state=20)}},{key:\"sCDataEnding2\",value:function(){var e,t=this.getCodeNorm();switch(t){case 62:null===(e=this.cdataHandler)||void 0===e||e.call(this,this.text),this.text=\"\",this.state=13;break;case 93:this.text+=\"]\";break;default:this.text+=\"]]\".concat(String.fromCodePoint(t)),this.state=20}}},{key:\"sPIFirstChar\",value:function(){var e=this.getCodeNorm();this.nameStartCheck(e)?(this.piTarget+=String.fromCodePoint(e),this.state=24):e===_||a(e)?(this.fail(\"processing instruction without a target.\"),this.state=e===_?26:25):(this.fail(\"disallowed character in processing instruction name.\"),this.piTarget+=String.fromCodePoint(e),this.state=24)}},{key:\"sPIRest\",value:function(){for(var e=this.chunk,t=this.i;;){var r=this.getCodeNorm();if(-1===r)return void(this.piTarget+=e.slice(t));if(!this.nameCheck(r)){this.piTarget+=e.slice(t,this.prevI);var n=r===_;n||a(r)?\"xml\"===this.piTarget?(this.xmlDeclPossible||this.fail(\"an XML declaration must be at the start of the document.\"),this.state=n?33:27):this.state=n?26:25:(this.fail(\"disallowed character in processing instruction name.\"),this.piTarget+=String.fromCodePoint(r));break}}}},{key:\"sPIBody\",value:function(){if(0===this.text.length){var e=this.getCodeNorm();e===_?this.state=26:a(e)||(this.text=String.fromCodePoint(e))}else this.captureToChar(_)&&(this.state=26)}},{key:\"sPIEnding\",value:function(){var e,t=this.getCodeNorm();if(62===t){var r=this.piTarget;\"xml\"===r.toLowerCase()&&this.fail(\"the XML declaration must appear at the start of the document.\"),null===(e=this.piHandler)||void 0===e||e.call(this,{target:r,body:this.text}),this.piTarget=this.text=\"\",this.state=13}else t===_?this.text+=\"?\":(this.text+=\"?\".concat(String.fromCodePoint(t)),this.state=25);this.xmlDeclPossible=!1}},{key:\"sXMLDeclNameStart\",value:function(){var e=this.skipSpaces();e!==_?-1!==e&&(this.state=28,this.name=String.fromCodePoint(e)):this.state=33}},{key:\"sXMLDeclName\",value:function(){var e=this.captureTo(E);if(e===_)return this.state=33,this.name+=this.text,this.text=\"\",void this.fail(\"XML declaration is incomplete.\");if(a(e)||e===w){if(this.name+=this.text,this.text=\"\",!this.xmlDeclExpects.includes(this.name))switch(this.name.length){case 0:this.fail(\"did not expect any more name/value pairs.\");break;case 1:this.fail(\"expected the name \".concat(this.xmlDeclExpects[0],\".\"));break;default:this.fail(\"expected one of \".concat(this.xmlDeclExpects.join(\", \")))}this.state=e===w?30:29}}},{key:\"sXMLDeclEq\",value:function(){var e=this.getCodeNorm();if(e===_)return this.state=33,void this.fail(\"XML declaration is incomplete.\");a(e)||(e!==w&&this.fail(\"value required.\"),this.state=30)}},{key:\"sXMLDeclValueStart\",value:function(){var e=this.getCodeNorm();if(e===_)return this.state=33,void this.fail(\"XML declaration is incomplete.\");a(e)||(k(e)?this.q=e:(this.fail(\"value must be quoted.\"),this.q=32),this.state=31)}},{key:\"sXMLDeclValue\",value:function(){var e=this.captureTo([this.q,_]);if(e===_)return this.state=33,this.text=\"\",void this.fail(\"XML declaration is incomplete.\");if(-1!==e){var t=this.text;switch(this.text=\"\",this.name){case\"version\":this.xmlDeclExpects=[\"encoding\",\"standalone\"];var r=t;this.xmlDecl.version=r,/^1\\.[0-9]+$/.test(r)?this.opt.forceXMLVersion||this.setXMLVersion(r):this.fail(\"version number must match /^1\\\\.[0-9]+$/.\");break;case\"encoding\":/^[A-Za-z][A-Za-z0-9._-]*$/.test(t)||this.fail(\"encoding value must match /^[A-Za-z0-9][A-Za-z0-9._-]*$/.\"),this.xmlDeclExpects=[\"standalone\"],this.xmlDecl.encoding=t;break;case\"standalone\":\"yes\"!==t&&\"no\"!==t&&this.fail('standalone value must match \"yes\" or \"no\".'),this.xmlDeclExpects=[],this.xmlDecl.standalone=t}this.name=\"\",this.state=32}}},{key:\"sXMLDeclSeparator\",value:function(){var e=this.getCodeNorm();e!==_?(a(e)||(this.fail(\"whitespace required.\"),this.unget()),this.state=27):this.state=33}},{key:\"sXMLDeclEnding\",value:function(){var e;62===this.getCodeNorm()?(\"xml\"!==this.piTarget?this.fail(\"processing instructions are not allowed before root.\"):\"version\"!==this.name&&this.xmlDeclExpects.includes(\"version\")&&this.fail(\"XML declaration must contain a version.\"),null===(e=this.xmldeclHandler)||void 0===e||e.call(this,this.xmlDecl),this.name=\"\",this.piTarget=this.text=\"\",this.state=13):this.fail(\"The character ? is disallowed anywhere in XML declarations.\"),this.xmlDeclPossible=!1}},{key:\"sOpenTag\",value:function(){var e,t=this.captureNameChars();if(-1!==t){var r=this.tag={name:this.name,attributes:Object.create(null)};switch(this.name=\"\",this.xmlnsOpt&&(this.topNS=r.ns=Object.create(null)),null===(e=this.openTagStartHandler)||void 0===e||e.call(this,r),this.sawRoot=!0,!this.fragmentOpt&&this.closedRoot&&this.fail(\"documents may contain only one root.\"),t){case 62:this.openTag();break;case 47:this.state=35;break;default:a(t)||this.fail(\"disallowed character in tag name.\"),this.state=36}}}},{key:\"sOpenTagSlash\",value:function(){62===this.getCode()?this.openSelfClosingTag():(this.fail(\"forward-slash in opening tag not followed by >.\"),this.state=36)}},{key:\"sAttrib\",value:function(){var e=this.skipSpaces();-1!==e&&(u(e)?(this.unget(),this.state=37):62===e?this.openTag():47===e?this.state=35:this.fail(\"disallowed character in attribute name.\"))}},{key:\"sAttribName\",value:function(){var e=this.captureNameChars();e===w?this.state=39:a(e)?this.state=38:62===e?(this.fail(\"attribute without value.\"),this.pushAttrib(this.name,this.name),this.name=this.text=\"\",this.openTag()):-1!==e&&this.fail(\"disallowed character in attribute name.\")}},{key:\"sAttribNameSawWhite\",value:function(){var e=this.skipSpaces();switch(e){case-1:return;case w:this.state=39;break;default:this.fail(\"attribute without value.\"),this.text=\"\",this.name=\"\",62===e?this.openTag():u(e)?(this.unget(),this.state=37):(this.fail(\"disallowed character in attribute name.\"),this.state=36)}}},{key:\"sAttribValue\",value:function(){var e=this.getCodeNorm();k(e)?(this.q=e,this.state=40):a(e)||(this.fail(\"unquoted attribute value.\"),this.state=42,this.unget())}},{key:\"sAttribValueQuoted\",value:function(){for(var e=this.q,t=this.chunk,r=this.i;;)switch(this.getCode()){case e:return this.pushAttrib(this.name,this.text+t.slice(r,this.prevI)),this.name=this.text=\"\",this.q=null,void(this.state=41);case 38:return this.text+=t.slice(r,this.prevI),this.state=14,void(this.entityReturnState=40);case 10:case-2:case 9:this.text+=\"\".concat(t.slice(r,this.prevI),\" \"),r=this.i;break;case 60:return this.text+=t.slice(r,this.prevI),void this.fail(\"disallowed character.\");case-1:return void(this.text+=t.slice(r))}}},{key:\"sAttribValueClosed\",value:function(){var e=this.getCodeNorm();a(e)?this.state=36:62===e?this.openTag():47===e?this.state=35:u(e)?(this.fail(\"no whitespace between attributes.\"),this.unget(),this.state=37):this.fail(\"disallowed character in attribute name.\")}},{key:\"sAttribValueUnquoted\",value:function(){var e=this.captureTo(R);switch(e){case 38:this.state=14,this.entityReturnState=42;break;case 60:this.fail(\"disallowed character.\");break;case-1:break;default:this.text.includes(\"]]>\")&&this.fail('the string \"]]>\" is disallowed in char data.'),this.pushAttrib(this.name,this.text),this.name=this.text=\"\",62===e?this.openTag():this.state=36}}},{key:\"sCloseTag\",value:function(){var e=this.captureNameChars();62===e?this.closeTag():a(e)?this.state=44:-1!==e&&this.fail(\"disallowed character in closing tag.\")}},{key:\"sCloseTagSawWhite\",value:function(){switch(this.skipSpaces()){case 62:this.closeTag();break;case-1:break;default:this.fail(\"disallowed character in closing tag.\")}}},{key:\"handleTextInRoot\",value:function(){var e=this.i,t=this.forbiddenState,r=this.chunk,n=this.textHandler;e:for(;;)switch(this.getCode()){case 60:if(this.state=15,void 0!==n){var o=this.text,i=r.slice(e,this.prevI);0!==o.length?(n(o+i),this.text=\"\"):0!==i.length&&n(i)}t=0;break e;case 38:this.state=14,this.entityReturnState=13,void 0!==n&&(this.text+=r.slice(e,this.prevI)),t=0;break e;case 93:switch(t){case 0:t=1;break;case 1:t=2;break;case 2:break;default:throw new Error(\"impossible state\")}break;case 62:2===t&&this.fail('the string \"]]>\" is disallowed in char data.'),t=0;break;case-2:void 0!==n&&(this.text+=\"\".concat(r.slice(e,this.prevI),\"\\n\")),e=this.i,t=0;break;case-1:void 0!==n&&(this.text+=r.slice(e));break e;default:t=0}this.forbiddenState=t}},{key:\"handleTextOutsideRoot\",value:function(){var e=this.i,t=this.chunk,r=this.textHandler,n=!1;e:for(;;){var o=this.getCode();switch(o){case 60:if(this.state=15,void 0!==r){var i=this.text,s=t.slice(e,this.prevI);0!==i.length?(r(i+s),this.text=\"\"):0!==s.length&&r(s)}break e;case 38:this.state=14,this.entityReturnState=13,void 0!==r&&(this.text+=t.slice(e,this.prevI)),n=!0;break e;case-2:void 0!==r&&(this.text+=\"\".concat(t.slice(e,this.prevI),\"\\n\")),e=this.i;break;case-1:void 0!==r&&(this.text+=t.slice(e));break e;default:a(o)||(n=!0)}}n&&(this.sawRoot||this.reportedTextBeforeRoot||(this.fail(\"text data outside of root node.\"),this.reportedTextBeforeRoot=!0),this.closedRoot&&!this.reportedTextAfterRoot&&(this.fail(\"text data outside of root node.\"),this.reportedTextAfterRoot=!0))}},{key:\"pushAttribNS\",value:function(e,t){var r,n=this.qname(e),o=n.prefix,i=n.local,a={name:e,prefix:o,local:i,value:t};if(this.attribList.push(a),null===(r=this.attributeHandler)||void 0===r||r.call(this,a),\"xmlns\"===o){var s=t.trim();\"1.0\"===this.currentXMLVersion&&\"\"===s&&this.fail(\"invalid attempt to undefine prefix in XML 1.0\"),this.topNS[i]=s,j(this,i,s)}else if(\"xmlns\"===e){var u=t.trim();this.topNS[\"\"]=u,j(this,\"\",u)}}},{key:\"pushAttribPlain\",value:function(e,t){var r,n={name:e,value:t};this.attribList.push(n),null===(r=this.attributeHandler)||void 0===r||r.call(this,n)}},{key:\"end\",value:function(){var e,t;this.sawRoot||this.fail(\"document must contain a root element.\");for(var r=this.tags;r.length>0;){var n=r.pop();this.fail(\"unclosed tag: \".concat(n.name))}0!==this.state&&13!==this.state&&this.fail(\"unexpected end.\");var o=this.text;return 0!==o.length&&(null===(e=this.textHandler)||void 0===e||e.call(this,o),this.text=\"\"),this._closed=!0,null===(t=this.endHandler)||void 0===t||t.call(this),this._init(),this}},{key:\"resolve\",value:function(e){var t,r,n=this.topNS[e];if(void 0!==n)return n;for(var o=this.tags,i=o.length-1;i>=0;i--)if(void 0!==(n=o[i].ns[e]))return n;return void 0!==(n=this.ns[e])?n:null===(r=(t=this.opt).resolvePrefix)||void 0===r?void 0:r.call(t,e)}},{key:\"qname\",value:function(e){var t=e.indexOf(\":\");if(-1===t)return{prefix:\"\",local:e};var r=e.slice(t+1),n=e.slice(0,t);return(\"\"===n||\"\"===r||r.includes(\":\"))&&this.fail(\"malformed name: \".concat(e,\".\")),{prefix:n,local:r}}},{key:\"processAttribsNS\",value:function(){var e,t=this.attribList,r=this.tag,n=this.qname(r.name),o=n.prefix,i=n.local;r.prefix=o,r.local=i;var a=r.uri=null!==(e=this.resolve(o))&&void 0!==e?e:\"\";if(\"\"!==o&&(\"xmlns\"===o&&this.fail('tags may not have \"xmlns\" as prefix.'),\"\"===a&&(this.fail(\"unbound namespace prefix: \".concat(JSON.stringify(o),\".\")),r.uri=o)),0!==t.length){var s,u=r.attributes,c=new Set,f=_createForOfIteratorHelper2(t);try{for(f.s();!(s=f.n()).done;){var l=s.value,h=l.name,d=l.prefix,p=l.local,y=void 0,m=void 0;\"\"===d?(y=\"xmlns\"===h?b:\"\",m=h):(void 0===(y=this.resolve(d))&&(this.fail(\"unbound namespace prefix: \".concat(JSON.stringify(d),\".\")),y=d),m=\"{\".concat(y,\"}\").concat(p)),c.has(m)&&this.fail(\"duplicate attribute: \".concat(m,\".\")),c.add(m),l.uri=y,u[h]=l}}catch(e){f.e(e)}finally{f.f()}this.attribList=[]}}},{key:\"processAttribsPlain\",value:function(){var e,t=this.attribList,r=this.tag.attributes,n=_createForOfIteratorHelper2(t);try{for(n.s();!(e=n.n()).done;){var o=e.value,i=o.name,a=o.value;void 0!==r[i]&&this.fail(\"duplicate attribute: \".concat(i,\".\")),r[i]=a}}catch(e){n.e(e)}finally{n.f()}this.attribList=[]}},{key:\"openTag\",value:function(){var e;this.processAttribs();var t=this.tags,r=this.tag;r.isSelfClosing=!1,null===(e=this.openTagHandler)||void 0===e||e.call(this,r),t.push(r),this.state=13,this.name=\"\"}},{key:\"openSelfClosingTag\",value:function(){var e,t,r;this.processAttribs();var n=this.tags,o=this.tag;o.isSelfClosing=!0,null===(e=this.openTagHandler)||void 0===e||e.call(this,o),null===(t=this.closeTagHandler)||void 0===t||t.call(this,o),null===(this.tag=null!==(r=n[n.length-1])&&void 0!==r?r:null)&&(this.closedRoot=!0),this.state=13,this.name=\"\"}},{key:\"closeTag\",value:function(){var e=this.tags,t=this.name;if(this.state=13,this.name=\"\",\"\"===t)return this.fail(\"weird empty close tag.\"),void(this.text+=\"\");for(var r=this.closeTagHandler,n=e.length;n-- >0;){var o=this.tag=e.pop();if(this.topNS=o.ns,null==r||r(o),o.name===t)break;this.fail(\"unexpected close tag.\")}0===n?this.closedRoot=!0:n<0&&(this.fail(\"unmatched closing tag: \".concat(t,\".\")),this.text+=\"\"))}},{key:\"parseEntity\",value:function(e){if(\"#\"!==e[0]){var t=this.ENTITIES[e];return void 0!==t?t:(this.fail(this.isName(e)?\"undefined entity.\":\"disallowed character in entity name.\"),\"&\".concat(e,\";\"))}var r=NaN;return\"x\"===e[1]&&/^#x[0-9a-f]+$/i.test(e)?r=parseInt(e.slice(2),16):/^#[0-9]+$/.test(e)&&(r=parseInt(e.slice(1),10)),this.isChar(r)?String.fromCodePoint(r):(this.fail(\"malformed character entity.\"),\"&\".concat(e,\";\"))}},{key:\"closed\",get:function(){return this._closed}},{key:\"position\",get:function(){return this.chunkPosition+this.i}},{key:\"columnIndex\",get:function(){return this.position-this.positionAtNewLine}}]),e}();r.SaxesParser=A},{\"xmlchars/xml/1.0/ed5\":482,\"xmlchars/xml/1.1/ed2\":483,\"xmlchars/xmlns/1.0/ed3\":484}],447:[function(e,t,r){(function(e){t.exports=\"function\"==typeof e?e:function(){var e=[].slice.apply(arguments);e.splice(1,0,0),setTimeout.apply(null,e)}}).call(this,e(\"timers\").setImmediate)},{timers:471}],448:[function(e,t,r){var n=e(\"safe-buffer\").Buffer;function o(e,t){this._block=n.alloc(e),this._finalSize=t,this._blockSize=e,this._len=0}o.prototype.update=function(e,t){\"string\"==typeof e&&(t=t||\"utf8\",e=n.from(e,t));for(var r=this._block,o=this._blockSize,i=e.length,a=this._len,s=0;s=this._finalSize&&(this._update(this._block),this._block.fill(0));var r=8*this._len;if(r<=4294967295)this._block.writeUInt32BE(r,this._blockSize-4);else{var n=(4294967295&r)>>>0,o=(r-n)/4294967296;this._block.writeUInt32BE(o,this._blockSize-8),this._block.writeUInt32BE(n,this._blockSize-4)}this._update(this._block);var i=this._hash();return e?i.toString(e):i},o.prototype._update=function(){throw new Error(\"_update must be implemented by subclass\")},t.exports=o},{\"safe-buffer\":445}],449:[function(e,t,r){(r=t.exports=function(e){e=e.toLowerCase();var t=r[e];if(!t)throw new Error(e+\" is not supported (we accept pull requests)\");return new t}).sha=e(\"./sha\"),r.sha1=e(\"./sha1\"),r.sha224=e(\"./sha224\"),r.sha256=e(\"./sha256\"),r.sha384=e(\"./sha384\"),r.sha512=e(\"./sha512\")},{\"./sha\":450,\"./sha1\":451,\"./sha224\":452,\"./sha256\":453,\"./sha384\":454,\"./sha512\":455}],450:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<30|e>>>2}function f(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,o),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,l=0;l<16;++l)r[l]=e.readInt32BE(4*l);for(;l<80;++l)r[l]=r[l-3]^r[l-8]^r[l-14]^r[l-16];for(var h=0;h<80;++h){var d=~~(h/20),p=0|((t=n)<<5|t>>>27)+f(d,o,i,s)+u+r[h]+a[d];u=s,s=i,i=c(o),o=n,n=p}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],451:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1518500249,1859775393,-1894007588,-899497514],s=new Array(80);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e){return e<<5|e>>>27}function f(e){return e<<30|e>>>2}function l(e,t,r,n){return 0===e?t&r|~t&n:2===e?t&r|t&n|r&n:t^r^n}n(u,o),u.prototype.init=function(){return this._a=1732584193,this._b=4023233417,this._c=2562383102,this._d=271733878,this._e=3285377520,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,h=0;h<16;++h)r[h]=e.readInt32BE(4*h);for(;h<80;++h)r[h]=(t=r[h-3]^r[h-8]^r[h-14]^r[h-16])<<1|t>>>31;for(var d=0;d<80;++d){var p=~~(d/20),y=c(n)+l(p,o,i,s)+u+r[d]+a[p]|0;u=s,s=i,i=f(o),o=n,n=y}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0},u.prototype._hash=function(){var e=i.allocUnsafe(20);return e.writeInt32BE(0|this._a,0),e.writeInt32BE(0|this._b,4),e.writeInt32BE(0|this._c,8),e.writeInt32BE(0|this._d,12),e.writeInt32BE(0|this._e,16),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],452:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./sha256\"),i=e(\"./hash\"),a=e(\"safe-buffer\").Buffer,s=new Array(64);function u(){this.init(),this._w=s,i.call(this,64,56)}n(u,o),u.prototype.init=function(){return this._a=3238371032,this._b=914150663,this._c=812702999,this._d=4144912697,this._e=4290775857,this._f=1750603025,this._g=1694076839,this._h=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(28);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e},t.exports=u},{\"./hash\":448,\"./sha256\":453,inherits:341,\"safe-buffer\":445}],453:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298],s=new Array(64);function u(){this.init(),this._w=s,o.call(this,64,56)}function c(e,t,r){return r^e&(t^r)}function f(e,t,r){return e&t|r&(e|t)}function l(e){return(e>>>2|e<<30)^(e>>>13|e<<19)^(e>>>22|e<<10)}function h(e){return(e>>>6|e<<26)^(e>>>11|e<<21)^(e>>>25|e<<7)}function d(e){return(e>>>7|e<<25)^(e>>>18|e<<14)^e>>>3}n(u,o),u.prototype.init=function(){return this._a=1779033703,this._b=3144134277,this._c=1013904242,this._d=2773480762,this._e=1359893119,this._f=2600822924,this._g=528734635,this._h=1541459225,this},u.prototype._update=function(e){for(var t,r=this._w,n=0|this._a,o=0|this._b,i=0|this._c,s=0|this._d,u=0|this._e,p=0|this._f,y=0|this._g,m=0|this._h,b=0;b<16;++b)r[b]=e.readInt32BE(4*b);for(;b<64;++b)r[b]=0|(((t=r[b-2])>>>17|t<<15)^(t>>>19|t<<13)^t>>>10)+r[b-7]+d(r[b-15])+r[b-16];for(var v=0;v<64;++v){var g=m+h(u)+c(u,p,y)+a[v]+r[v]|0,w=l(n)+f(n,o,i)|0;m=y,y=p,p=u,u=s+g|0,s=i,i=o,o=n,n=g+w|0}this._a=n+this._a|0,this._b=o+this._b|0,this._c=i+this._c|0,this._d=s+this._d|0,this._e=u+this._e|0,this._f=p+this._f|0,this._g=y+this._g|0,this._h=m+this._h|0},u.prototype._hash=function(){var e=i.allocUnsafe(32);return e.writeInt32BE(this._a,0),e.writeInt32BE(this._b,4),e.writeInt32BE(this._c,8),e.writeInt32BE(this._d,12),e.writeInt32BE(this._e,16),e.writeInt32BE(this._f,20),e.writeInt32BE(this._g,24),e.writeInt32BE(this._h,28),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],454:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./sha512\"),i=e(\"./hash\"),a=e(\"safe-buffer\").Buffer,s=new Array(160);function u(){this.init(),this._w=s,i.call(this,128,112)}n(u,o),u.prototype.init=function(){return this._ah=3418070365,this._bh=1654270250,this._ch=2438529370,this._dh=355462360,this._eh=1731405415,this._fh=2394180231,this._gh=3675008525,this._hh=1203062813,this._al=3238371032,this._bl=914150663,this._cl=812702999,this._dl=4144912697,this._el=4290775857,this._fl=1750603025,this._gl=1694076839,this._hl=3204075428,this},u.prototype._hash=function(){var e=a.allocUnsafe(48);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),e},t.exports=u},{\"./hash\":448,\"./sha512\":455,inherits:341,\"safe-buffer\":445}],455:[function(e,t,r){var n=e(\"inherits\"),o=e(\"./hash\"),i=e(\"safe-buffer\").Buffer,a=[1116352408,3609767458,1899447441,602891725,3049323471,3964484399,3921009573,2173295548,961987163,4081628472,1508970993,3053834265,2453635748,2937671579,2870763221,3664609560,3624381080,2734883394,310598401,1164996542,607225278,1323610764,1426881987,3590304994,1925078388,4068182383,2162078206,991336113,2614888103,633803317,3248222580,3479774868,3835390401,2666613458,4022224774,944711139,264347078,2341262773,604807628,2007800933,770255983,1495990901,1249150122,1856431235,1555081692,3175218132,1996064986,2198950837,2554220882,3999719339,2821834349,766784016,2952996808,2566594879,3210313671,3203337956,3336571891,1034457026,3584528711,2466948901,113926993,3758326383,338241895,168717936,666307205,1188179964,773529912,1546045734,1294757372,1522805485,1396182291,2643833823,1695183700,2343527390,1986661051,1014477480,2177026350,1206759142,2456956037,344077627,2730485921,1290863460,2820302411,3158454273,3259730800,3505952657,3345764771,106217008,3516065817,3606008344,3600352804,1432725776,4094571909,1467031594,275423344,851169720,430227734,3100823752,506948616,1363258195,659060556,3750685593,883997877,3785050280,958139571,3318307427,1322822218,3812723403,1537002063,2003034995,1747873779,3602036899,1955562222,1575990012,2024104815,1125592928,2227730452,2716904306,2361852424,442776044,2428436474,593698344,2756734187,3733110249,3204031479,2999351573,3329325298,3815920427,3391569614,3928383900,3515267271,566280711,3940187606,3454069534,4118630271,4000239992,116418474,1914138554,174292421,2731055270,289380356,3203993006,460393269,320620315,685471733,587496836,852142971,1086792851,1017036298,365543100,1126000580,2618297676,1288033470,3409855158,1501505948,4234509866,1607167915,987167468,1816402316,1246189591],s=new Array(160);function u(){this.init(),this._w=s,o.call(this,128,112)}function c(e,t,r){return r^e&(t^r)}function f(e,t,r){return e&t|r&(e|t)}function l(e,t){return(e>>>28|t<<4)^(t>>>2|e<<30)^(t>>>7|e<<25)}function h(e,t){return(e>>>14|t<<18)^(e>>>18|t<<14)^(t>>>9|e<<23)}function d(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^e>>>7}function p(e,t){return(e>>>1|t<<31)^(e>>>8|t<<24)^(e>>>7|t<<25)}function y(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^e>>>6}function m(e,t){return(e>>>19|t<<13)^(t>>>29|e<<3)^(e>>>6|t<<26)}function b(e,t){return e>>>0>>0?1:0}n(u,o),u.prototype.init=function(){return this._ah=1779033703,this._bh=3144134277,this._ch=1013904242,this._dh=2773480762,this._eh=1359893119,this._fh=2600822924,this._gh=528734635,this._hh=1541459225,this._al=4089235720,this._bl=2227873595,this._cl=4271175723,this._dl=1595750129,this._el=2917565137,this._fl=725511199,this._gl=4215389547,this._hl=327033209,this},u.prototype._update=function(e){for(var t=this._w,r=0|this._ah,n=0|this._bh,o=0|this._ch,i=0|this._dh,s=0|this._eh,u=0|this._fh,v=0|this._gh,g=0|this._hh,w=0|this._al,_=0|this._bl,k=0|this._cl,x=0|this._dl,S=0|this._el,O=0|this._fl,E=0|this._gl,R=0|this._hl,j=0;j<32;j+=2)t[j]=e.readInt32BE(4*j),t[j+1]=e.readInt32BE(4*j+4);for(;j<160;j+=2){var T=t[j-30],C=t[j-30+1],P=d(T,C),A=p(C,T),M=y(T=t[j-4],C=t[j-4+1]),I=m(C,T),N=t[j-14],D=t[j-14+1],B=t[j-32],F=t[j-32+1],L=A+D|0,z=P+N+b(L,A)|0;z=(z=z+M+b(L=L+I|0,I)|0)+B+b(L=L+F|0,F)|0,t[j]=z,t[j+1]=L}for(var U=0;U<160;U+=2){z=t[U],L=t[U+1];var H=f(r,n,o),V=f(w,_,k),W=l(r,w),q=l(w,r),$=h(s,S),X=h(S,s),K=a[U],Y=a[U+1],Z=c(s,u,v),G=c(S,O,E),J=R+X|0,Q=g+$+b(J,R)|0;Q=(Q=(Q=Q+Z+b(J=J+G|0,G)|0)+K+b(J=J+Y|0,Y)|0)+z+b(J=J+L|0,L)|0;var ee=q+V|0,te=W+H+b(ee,q)|0;g=v,R=E,v=u,E=O,u=s,O=S,s=i+Q+b(S=x+J|0,x)|0,i=o,x=k,o=n,k=_,n=r,_=w,r=Q+te+b(w=J+ee|0,J)|0}this._al=this._al+w|0,this._bl=this._bl+_|0,this._cl=this._cl+k|0,this._dl=this._dl+x|0,this._el=this._el+S|0,this._fl=this._fl+O|0,this._gl=this._gl+E|0,this._hl=this._hl+R|0,this._ah=this._ah+r+b(this._al,w)|0,this._bh=this._bh+n+b(this._bl,_)|0,this._ch=this._ch+o+b(this._cl,k)|0,this._dh=this._dh+i+b(this._dl,x)|0,this._eh=this._eh+s+b(this._el,S)|0,this._fh=this._fh+u+b(this._fl,O)|0,this._gh=this._gh+v+b(this._gl,E)|0,this._hh=this._hh+g+b(this._hl,R)|0},u.prototype._hash=function(){var e=i.allocUnsafe(64);function t(t,r,n){e.writeInt32BE(t,n),e.writeInt32BE(r,n+4)}return t(this._ah,this._al,0),t(this._bh,this._bl,8),t(this._ch,this._cl,16),t(this._dh,this._dl,24),t(this._eh,this._el,32),t(this._fh,this._fl,40),t(this._gh,this._gl,48),t(this._hh,this._hl,56),e},t.exports=u},{\"./hash\":448,inherits:341,\"safe-buffer\":445}],456:[function(e,t,r){t.exports=o;var n=e(\"events\").EventEmitter;function o(){n.call(this)}e(\"inherits\")(o,n),o.Readable=e(\"readable-stream/readable.js\"),o.Writable=e(\"readable-stream/writable.js\"),o.Duplex=e(\"readable-stream/duplex.js\"),o.Transform=e(\"readable-stream/transform.js\"),o.PassThrough=e(\"readable-stream/passthrough.js\"),o.Stream=o,o.prototype.pipe=function(e,t){var r=this;function o(t){e.writable&&!1===e.write(t)&&r.pause&&r.pause()}function i(){r.readable&&r.resume&&r.resume()}r.on(\"data\",o),e.on(\"drain\",i),e._isStdio||t&&!1===t.end||(r.on(\"end\",s),r.on(\"close\",u));var a=!1;function s(){a||(a=!0,e.end())}function u(){a||(a=!0,\"function\"==typeof e.destroy&&e.destroy())}function c(e){if(f(),0===n.listenerCount(this,\"error\"))throw e}function f(){r.removeListener(\"data\",o),e.removeListener(\"drain\",i),r.removeListener(\"end\",s),r.removeListener(\"close\",u),r.removeListener(\"error\",c),e.removeListener(\"error\",c),r.removeListener(\"end\",f),r.removeListener(\"close\",f),e.removeListener(\"close\",f)}return r.on(\"error\",c),e.on(\"error\",c),r.on(\"end\",f),r.on(\"close\",f),e.on(\"close\",f),e.emit(\"pipe\",r),e}},{events:299,inherits:341,\"readable-stream/duplex.js\":457,\"readable-stream/passthrough.js\":466,\"readable-stream/readable.js\":467,\"readable-stream/transform.js\":468,\"readable-stream/writable.js\":469}],457:[function(e,t,r){t.exports=e(\"./lib/_stream_duplex.js\")},{\"./lib/_stream_duplex.js\":458}],458:[function(e,t,r){var n=e(\"process-nextick-args\"),o=Object.keys||function(e){var t=[];for(var r in e)t.push(r);return t};t.exports=l;var i=e(\"core-util-is\");i.inherits=e(\"inherits\");var a=e(\"./_stream_readable\"),s=e(\"./_stream_writable\");i.inherits(l,a);for(var u=o(s.prototype),c=0;c0?(\"string\"==typeof t||a.objectMode||Object.getPrototypeOf(t)===c.prototype||(t=function(e){return c.from(e)}(t)),n?a.endEmitted?e.emit(\"error\",new Error(\"stream.unshift() after end event\")):_(e,a,t,!0):a.ended?e.emit(\"error\",new Error(\"stream.push() after EOF\")):(a.reading=!1,a.decoder&&!r?(t=a.decoder.write(t),a.objectMode||0!==t.length?_(e,a,t,!1):O(e,a)):_(e,a,t,!1))):n||(a.reading=!1));return function(e){return!e.ended&&(e.needReadable||e.lengtht.highWaterMark&&(t.highWaterMark=function(e){return e>=8388608?e=8388608:(e--,e|=e>>>1,e|=e>>>2,e|=e>>>4,e|=e>>>8,e|=e>>>16,e++),e}(e)),e<=t.length?e:t.ended?t.length:(t.needReadable=!0,0))}function x(e){var t=e._readableState;t.needReadable=!1,t.emittedReadable||(d(\"emitReadable\",t.flowing),t.emittedReadable=!0,t.sync?o.nextTick(S,e):S(e))}function S(e){d(\"emit readable\"),e.emit(\"readable\"),T(e)}function O(e,t){t.readingMore||(t.readingMore=!0,o.nextTick(E,e,t))}function E(e,t){for(var r=t.length;!t.reading&&!t.flowing&&!t.ended&&t.length=t.length?(r=t.decoder?t.buffer.join(\"\"):1===t.buffer.length?t.buffer.head.data:t.buffer.concat(t.length),t.buffer.clear()):r=function(e,t,r){var n;ei.length?i.length:e;if(a===i.length?o+=i:o+=i.slice(0,e),0===(e-=a)){a===i.length?(++n,r.next?t.head=r.next:t.head=t.tail=null):(t.head=r,r.data=i.slice(a));break}++n}return t.length-=n,o}(e,t):function(e,t){var r=c.allocUnsafe(e),n=t.head,o=1;n.data.copy(r),e-=n.data.length;for(;n=n.next;){var i=n.data,a=e>i.length?i.length:e;if(i.copy(r,r.length-e,0,a),0===(e-=a)){a===i.length?(++o,n.next?t.head=n.next:t.head=t.tail=null):(t.head=n,n.data=i.slice(a));break}++o}return t.length-=o,r}(e,t);return n}(e,t.buffer,t.decoder),r);var r}function P(e){var t=e._readableState;if(t.length>0)throw new Error('\"endReadable()\" called on non-empty stream');t.endEmitted||(t.ended=!0,o.nextTick(A,t,e))}function A(e,t){e.endEmitted||0!==e.length||(e.endEmitted=!0,t.readable=!1,t.emit(\"end\"))}function M(e,t){for(var r=0,n=e.length;r=t.highWaterMark||t.ended))return d(\"read: emitReadable\",t.length,t.ended),0===t.length&&t.ended?P(this):x(this),null;if(0===(e=k(e,t))&&t.ended)return 0===t.length&&P(this),null;var n,o=t.needReadable;return d(\"need readable\",o),(0===t.length||t.length-e0?C(e,t):null)?(t.needReadable=!0,e=0):t.length-=e,0===t.length&&(t.ended||(t.needReadable=!0),r!==e&&t.ended&&P(this)),null!==n&&this.emit(\"data\",n),n},g.prototype._read=function(e){this.emit(\"error\",new Error(\"_read() is not implemented\"))},g.prototype.pipe=function(e,t){var n=this,i=this._readableState;switch(i.pipesCount){case 0:i.pipes=e;break;case 1:i.pipes=[i.pipes,e];break;default:i.pipes.push(e)}i.pipesCount+=1,d(\"pipe count=%d opts=%j\",i.pipesCount,t);var u=(!t||!1!==t.end)&&e!==r.stdout&&e!==r.stderr?f:g;function c(t,r){d(\"onunpipe\"),t===n&&r&&!1===r.hasUnpiped&&(r.hasUnpiped=!0,d(\"cleanup\"),e.removeListener(\"close\",b),e.removeListener(\"finish\",v),e.removeListener(\"drain\",l),e.removeListener(\"error\",m),e.removeListener(\"unpipe\",c),n.removeListener(\"end\",f),n.removeListener(\"end\",g),n.removeListener(\"data\",y),h=!0,!i.awaitDrain||e._writableState&&!e._writableState.needDrain||l())}function f(){d(\"onend\"),e.end()}i.endEmitted?o.nextTick(u):n.once(\"end\",u),e.on(\"unpipe\",c);var l=function(e){return function(){var t=e._readableState;d(\"pipeOnDrain\",t.awaitDrain),t.awaitDrain&&t.awaitDrain--,0===t.awaitDrain&&s(e,\"data\")&&(t.flowing=!0,T(e))}}(n);e.on(\"drain\",l);var h=!1;var p=!1;function y(t){d(\"ondata\"),p=!1,!1!==e.write(t)||p||((1===i.pipesCount&&i.pipes===e||i.pipesCount>1&&-1!==M(i.pipes,e))&&!h&&(d(\"false write response, pause\",n._readableState.awaitDrain),n._readableState.awaitDrain++,p=!0),n.pause())}function m(t){d(\"onerror\",t),g(),e.removeListener(\"error\",m),0===s(e,\"error\")&&e.emit(\"error\",t)}function b(){e.removeListener(\"finish\",v),g()}function v(){d(\"onfinish\"),e.removeListener(\"close\",b),g()}function g(){d(\"unpipe\"),n.unpipe(e)}return n.on(\"data\",y),function(e,t,r){if(\"function\"==typeof e.prependListener)return e.prependListener(t,r);e._events&&e._events[t]?a(e._events[t])?e._events[t].unshift(r):e._events[t]=[r,e._events[t]]:e.on(t,r)}(e,\"error\",m),e.once(\"close\",b),e.once(\"finish\",v),e.emit(\"pipe\",n),i.flowing||(d(\"pipe resume\"),n.resume()),e},g.prototype.unpipe=function(e){var t=this._readableState,r={hasUnpiped:!1};if(0===t.pipesCount)return this;if(1===t.pipesCount)return e&&e!==t.pipes||(e||(e=t.pipes),t.pipes=null,t.pipesCount=0,t.flowing=!1,e&&e.emit(\"unpipe\",this,r)),this;if(!e){var n=t.pipes,o=t.pipesCount;t.pipes=null,t.pipesCount=0,t.flowing=!1;for(var i=0;i-1?o:i.nextTick;v.WritableState=b;var c=e(\"core-util-is\");c.inherits=e(\"inherits\");var f={deprecate:e(\"util-deprecate\")},l=e(\"./internal/streams/stream\"),h=e(\"safe-buffer\").Buffer,d=n.Uint8Array||function(){};var p,y=e(\"./internal/streams/destroy\");function m(){}function b(t,r){s=s||e(\"./_stream_duplex\"),t=t||{};var n=r instanceof s;this.objectMode=!!t.objectMode,n&&(this.objectMode=this.objectMode||!!t.writableObjectMode);var o=t.highWaterMark,c=t.writableHighWaterMark,f=this.objectMode?16:16384;this.highWaterMark=o||0===o?o:n&&(c||0===c)?c:f,this.highWaterMark=Math.floor(this.highWaterMark),this.finalCalled=!1,this.needDrain=!1,this.ending=!1,this.ended=!1,this.finished=!1,this.destroyed=!1;var l=!1===t.decodeStrings;this.decodeStrings=!l,this.defaultEncoding=t.defaultEncoding||\"utf8\",this.length=0,this.writing=!1,this.corked=0,this.sync=!0,this.bufferProcessing=!1,this.onwrite=function(e){!function(e,t){var r=e._writableState,n=r.sync,o=r.writecb;if(function(e){e.writing=!1,e.writecb=null,e.length-=e.writelen,e.writelen=0}(r),t)!function(e,t,r,n,o){--t.pendingcb,r?(i.nextTick(o,n),i.nextTick(S,e,t),e._writableState.errorEmitted=!0,e.emit(\"error\",n)):(o(n),e._writableState.errorEmitted=!0,e.emit(\"error\",n),S(e,t))}(e,r,n,t,o);else{var a=k(r);a||r.corked||r.bufferProcessing||!r.bufferedRequest||_(e,r),n?u(w,e,r,a,o):w(e,r,a,o)}}(r,e)},this.writecb=null,this.writelen=0,this.bufferedRequest=null,this.lastBufferedRequest=null,this.pendingcb=0,this.prefinished=!1,this.errorEmitted=!1,this.bufferedRequestCount=0,this.corkedRequestsFree=new a(this)}function v(t){if(s=s||e(\"./_stream_duplex\"),!(p.call(v,this)||this instanceof s))return new v(t);this._writableState=new b(t,this),this.writable=!0,t&&(\"function\"==typeof t.write&&(this._write=t.write),\"function\"==typeof t.writev&&(this._writev=t.writev),\"function\"==typeof t.destroy&&(this._destroy=t.destroy),\"function\"==typeof t.final&&(this._final=t.final)),l.call(this)}function g(e,t,r,n,o,i,a){t.writelen=n,t.writecb=a,t.writing=!0,t.sync=!0,r?e._writev(o,t.onwrite):e._write(o,i,t.onwrite),t.sync=!1}function w(e,t,r,n){r||function(e,t){0===t.length&&t.needDrain&&(t.needDrain=!1,e.emit(\"drain\"))}(e,t),t.pendingcb--,n(),S(e,t)}function _(e,t){t.bufferProcessing=!0;var r=t.bufferedRequest;if(e._writev&&r&&r.next){var n=t.bufferedRequestCount,o=new Array(n),i=t.corkedRequestsFree;i.entry=r;for(var s=0,u=!0;r;)o[s]=r,r.isBuf||(u=!1),r=r.next,s+=1;o.allBuffers=u,g(e,t,!0,t.length,o,\"\",i.finish),t.pendingcb++,t.lastBufferedRequest=null,i.next?(t.corkedRequestsFree=i.next,i.next=null):t.corkedRequestsFree=new a(t),t.bufferedRequestCount=0}else{for(;r;){var c=r.chunk,f=r.encoding,l=r.callback;if(g(e,t,!1,t.objectMode?1:c.length,c,f,l),r=r.next,t.bufferedRequestCount--,t.writing)break}null===r&&(t.lastBufferedRequest=null)}t.bufferedRequest=r,t.bufferProcessing=!1}function k(e){return e.ending&&0===e.length&&null===e.bufferedRequest&&!e.finished&&!e.writing}function x(e,t){e._final((function(r){t.pendingcb--,r&&e.emit(\"error\",r),t.prefinished=!0,e.emit(\"prefinish\"),S(e,t)}))}function S(e,t){var r=k(t);return r&&(!function(e,t){t.prefinished||t.finalCalled||(\"function\"==typeof e._final?(t.pendingcb++,t.finalCalled=!0,i.nextTick(x,e,t)):(t.prefinished=!0,e.emit(\"prefinish\")))}(e,t),0===t.pendingcb&&(t.finished=!0,e.emit(\"finish\"))),r}c.inherits(v,l),b.prototype.getBuffer=function(){for(var e=this.bufferedRequest,t=[];e;)t.push(e),e=e.next;return t},function(){try{Object.defineProperty(b.prototype,\"buffer\",{get:f.deprecate((function(){return this.getBuffer()}),\"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.\",\"DEP0003\")})}catch(e){}}(),\"function\"==typeof Symbol&&Symbol.hasInstance&&\"function\"==typeof Function.prototype[Symbol.hasInstance]?(p=Function.prototype[Symbol.hasInstance],Object.defineProperty(v,Symbol.hasInstance,{value:function(e){return!!p.call(this,e)||this===v&&(e&&e._writableState instanceof b)}})):p=function(e){return e instanceof this},v.prototype.pipe=function(){this.emit(\"error\",new Error(\"Cannot pipe, not readable\"))},v.prototype.write=function(e,t,r){var n,o=this._writableState,a=!1,s=!o.objectMode&&(n=e,h.isBuffer(n)||n instanceof d);return s&&!h.isBuffer(e)&&(e=function(e){return h.from(e)}(e)),\"function\"==typeof t&&(r=t,t=null),s?t=\"buffer\":t||(t=o.defaultEncoding),\"function\"!=typeof r&&(r=m),o.ended?function(e,t){var r=new Error(\"write after end\");e.emit(\"error\",r),i.nextTick(t,r)}(this,r):(s||function(e,t,r,n){var o=!0,a=!1;return null===r?a=new TypeError(\"May not write null values to stream\"):\"string\"==typeof r||void 0===r||t.objectMode||(a=new TypeError(\"Invalid non-string/buffer chunk\")),a&&(e.emit(\"error\",a),i.nextTick(n,a),o=!1),o}(this,o,e,r))&&(o.pendingcb++,a=function(e,t,r,n,o,i){if(!r){var a=function(e,t,r){e.objectMode||!1===e.decodeStrings||\"string\"!=typeof t||(t=h.from(t,r));return t}(t,n,o);n!==a&&(r=!0,o=\"buffer\",n=a)}var s=t.objectMode?1:n.length;t.length+=s;var u=t.length-1))throw new TypeError(\"Unknown encoding: \"+e);return this._writableState.defaultEncoding=e,this},Object.defineProperty(v.prototype,\"writableHighWaterMark\",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),v.prototype._write=function(e,t,r){r(new Error(\"_write() is not implemented\"))},v.prototype._writev=null,v.prototype.end=function(e,t,r){var n=this._writableState;\"function\"==typeof e?(r=e,e=null,t=null):\"function\"==typeof t&&(r=t,t=null),null!=e&&this.write(e,t),n.corked&&(n.corked=1,this.uncork()),n.ending||n.finished||function(e,t,r){t.ending=!0,S(e,t),r&&(t.finished?i.nextTick(r):e.once(\"finish\",r));t.ended=!0,e.writable=!1}(this,n,r)},Object.defineProperty(v.prototype,\"destroyed\",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(e){this._writableState&&(this._writableState.destroyed=e)}}),v.prototype.destroy=y.destroy,v.prototype._undestroy=y.undestroy,v.prototype._destroy=function(e,t){this.end(),t(e)}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{},e(\"timers\").setImmediate)},{\"./_stream_duplex\":458,\"./internal/streams/destroy\":464,\"./internal/streams/stream\":465,_process:419,\"core-util-is\":263,inherits:341,\"process-nextick-args\":418,\"safe-buffer\":445,timers:471,\"util-deprecate\":472}],463:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=e(\"util\");t.exports=function(){function e(){!function(e,t){if(!(e instanceof t))throw new TypeError(\"Cannot call a class as a function\")}(this,e),this.head=null,this.tail=null,this.length=0}return e.prototype.push=function(e){var t={data:e,next:null};this.length>0?this.tail.next=t:this.head=t,this.tail=t,++this.length},e.prototype.unshift=function(e){var t={data:e,next:this.head};0===this.length&&(this.tail=t),this.head=t,++this.length},e.prototype.shift=function(){if(0!==this.length){var e=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,e}},e.prototype.clear=function(){this.head=this.tail=null,this.length=0},e.prototype.join=function(e){if(0===this.length)return\"\";for(var t=this.head,r=\"\"+t.data;t=t.next;)r+=e+t.data;return r},e.prototype.concat=function(e){if(0===this.length)return n.alloc(0);if(1===this.length)return this.head.data;for(var t,r,o,i=n.allocUnsafe(e>>>0),a=this.head,s=0;a;)t=a.data,r=i,o=s,t.copy(r,o),s+=a.data.length,a=a.next;return i},e}(),o&&o.inspect&&o.inspect.custom&&(t.exports.prototype[o.inspect.custom]=function(){var e=o.inspect({length:this.length});return this.constructor.name+\" \"+e})},{\"safe-buffer\":445,util:158}],464:[function(e,t,r){var n=e(\"process-nextick-args\");function o(e,t){e.emit(\"error\",t)}t.exports={destroy:function(e,t){var r=this,i=this._readableState&&this._readableState.destroyed,a=this._writableState&&this._writableState.destroyed;return i||a?(t?t(e):!e||this._writableState&&this._writableState.errorEmitted||n.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,(function(e){!t&&e?(n.nextTick(o,r,e),r._writableState&&(r._writableState.errorEmitted=!0)):t&&t(e)})),this)},undestroy:function(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}}},{\"process-nextick-args\":418}],465:[function(e,t,r){arguments[4][441][0].apply(r,arguments)},{dup:441,events:299}],466:[function(e,t,r){t.exports=e(\"./readable\").PassThrough},{\"./readable\":467}],467:[function(e,t,r){(r=t.exports=e(\"./lib/_stream_readable.js\")).Stream=r,r.Readable=r,r.Writable=e(\"./lib/_stream_writable.js\"),r.Duplex=e(\"./lib/_stream_duplex.js\"),r.Transform=e(\"./lib/_stream_transform.js\"),r.PassThrough=e(\"./lib/_stream_passthrough.js\")},{\"./lib/_stream_duplex.js\":458,\"./lib/_stream_passthrough.js\":459,\"./lib/_stream_readable.js\":460,\"./lib/_stream_transform.js\":461,\"./lib/_stream_writable.js\":462}],468:[function(e,t,r){t.exports=e(\"./readable\").Transform},{\"./readable\":467}],469:[function(e,t,r){t.exports=e(\"./lib/_stream_writable.js\")},{\"./lib/_stream_writable.js\":462}],470:[function(e,t,r){var n=e(\"safe-buffer\").Buffer,o=n.isEncoding||function(e){switch((e=\"\"+e)&&e.toLowerCase()){case\"hex\":case\"utf8\":case\"utf-8\":case\"ascii\":case\"binary\":case\"base64\":case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":case\"raw\":return!0;default:return!1}};function i(e){var t;switch(this.encoding=function(e){var t=function(e){if(!e)return\"utf8\";for(var t;;)switch(e){case\"utf8\":case\"utf-8\":return\"utf8\";case\"ucs2\":case\"ucs-2\":case\"utf16le\":case\"utf-16le\":return\"utf16le\";case\"latin1\":case\"binary\":return\"latin1\";case\"base64\":case\"ascii\":case\"hex\":return e;default:if(t)return;e=(\"\"+e).toLowerCase(),t=!0}}(e);if(\"string\"!=typeof t&&(n.isEncoding===o||!o(e)))throw new Error(\"Unknown encoding: \"+e);return t||e}(e),this.encoding){case\"utf16le\":this.text=u,this.end=c,t=4;break;case\"utf8\":this.fillLast=s,t=4;break;case\"base64\":this.text=f,this.end=l,t=3;break;default:return this.write=h,void(this.end=d)}this.lastNeed=0,this.lastTotal=0,this.lastChar=n.allocUnsafe(t)}function a(e){return e<=127?0:e>>5==6?2:e>>4==14?3:e>>3==30?4:e>>6==2?-1:-2}function s(e){var t=this.lastTotal-this.lastNeed,r=function(e,t,r){if(128!=(192&t[0]))return e.lastNeed=0,\"\\ufffd\";if(e.lastNeed>1&&t.length>1){if(128!=(192&t[1]))return e.lastNeed=1,\"\\ufffd\";if(e.lastNeed>2&&t.length>2&&128!=(192&t[2]))return e.lastNeed=2,\"\\ufffd\"}}(this,e);return void 0!==r?r:this.lastNeed<=e.length?(e.copy(this.lastChar,t,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(e.copy(this.lastChar,t,0,e.length),void(this.lastNeed-=e.length))}function u(e,t){if((e.length-t)%2==0){var r=e.toString(\"utf16le\",t);if(r){var n=r.charCodeAt(r.length-1);if(n>=55296&&n<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1],r.slice(0,-1)}return r}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=e[e.length-1],e.toString(\"utf16le\",t,e.length-1)}function c(e){var t=e&&e.length?this.write(e):\"\";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return t+this.lastChar.toString(\"utf16le\",0,r)}return t}function f(e,t){var r=(e.length-t)%3;return 0===r?e.toString(\"base64\",t):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=e[e.length-1]:(this.lastChar[0]=e[e.length-2],this.lastChar[1]=e[e.length-1]),e.toString(\"base64\",t,e.length-r))}function l(e){var t=e&&e.length?this.write(e):\"\";return this.lastNeed?t+this.lastChar.toString(\"base64\",0,3-this.lastNeed):t}function h(e){return e.toString(this.encoding)}function d(e){return e&&e.length?this.write(e):\"\"}r.StringDecoder=i,i.prototype.write=function(e){if(0===e.length)return\"\";var t,r;if(this.lastNeed){if(void 0===(t=this.fillLast(e)))return\"\";r=this.lastNeed,this.lastNeed=0}else r=0;return r=0)return o>0&&(e.lastNeed=o-1),o;if(--n=0)return o>0&&(e.lastNeed=o-2),o;if(--n=0)return o>0&&(2===o?o=0:e.lastNeed=o-3),o;return 0}(this,e,t);if(!this.lastNeed)return e.toString(\"utf8\",t);this.lastTotal=r;var n=e.length-(r-this.lastNeed);return e.copy(this.lastChar,0,n),e.toString(\"utf8\",t,n)},i.prototype.fillLast=function(e){if(this.lastNeed<=e.length)return e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal);e.copy(this.lastChar,this.lastTotal-this.lastNeed,0,e.length),this.lastNeed-=e.length}},{\"safe-buffer\":445}],471:[function(e,t,r){(function(t,n){var o=e(\"process/browser.js\").nextTick,i=Function.prototype.apply,a=Array.prototype.slice,s={},u=0;function c(e,t){this._id=e,this._clearFn=t}r.setTimeout=function(){return new c(i.call(setTimeout,window,arguments),clearTimeout)},r.setInterval=function(){return new c(i.call(setInterval,window,arguments),clearInterval)},r.clearTimeout=r.clearInterval=function(e){e.close()},c.prototype.unref=c.prototype.ref=function(){},c.prototype.close=function(){this._clearFn.call(window,this._id)},r.enroll=function(e,t){clearTimeout(e._idleTimeoutId),e._idleTimeout=t},r.unenroll=function(e){clearTimeout(e._idleTimeoutId),e._idleTimeout=-1},r._unrefActive=r.active=function(e){clearTimeout(e._idleTimeoutId);var t=e._idleTimeout;t>=0&&(e._idleTimeoutId=setTimeout((function(){e._onTimeout&&e._onTimeout()}),t))},r.setImmediate=\"function\"==typeof t?t:function(e){var t=u++,n=!(arguments.length<2)&&a.call(arguments,1);return s[t]=!0,o((function(){s[t]&&(n?e.apply(null,n):e.call(null),r.clearImmediate(t))})),t},r.clearImmediate=\"function\"==typeof n?n:function(e){delete s[e]}}).call(this,e(\"timers\").setImmediate,e(\"timers\").clearImmediate)},{\"process/browser.js\":419,timers:471}],472:[function(e,t,r){(function(e){function r(t){try{if(!e.localStorage)return!1}catch(e){return!1}var r=e.localStorage[t];return null!=r&&\"true\"===String(r).toLowerCase()}t.exports=function(e,t){if(r(\"noDeprecation\"))return e;var n=!1;return function(){if(!n){if(r(\"throwDeprecation\"))throw new Error(t);r(\"traceDeprecation\")?console.trace(t):console.warn(t),n=!0}return e.apply(this,arguments)}}}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],473:[function(e,t,r){\"function\"==typeof Object.create?t.exports=function(e,t){e.super_=t,e.prototype=Object.create(t.prototype,{constructor:{value:e,enumerable:!1,writable:!0,configurable:!0}})}:t.exports=function(e,t){e.super_=t;var r=function(){};r.prototype=t.prototype,e.prototype=new r,e.prototype.constructor=e}},{}],474:[function(e,t,r){t.exports=function(e){return e&&\"object\"===_typeof2(e)&&\"function\"==typeof e.copy&&\"function\"==typeof e.fill&&\"function\"==typeof e.readUInt8}},{}],475:[function(e,t,r){(function(t,n){var o=/%[sdj%]/g;r.format=function(e){if(!b(e)){for(var t=[],r=0;r=i)return e;switch(e){case\"%s\":return String(n[r++]);case\"%d\":return Number(n[r++]);case\"%j\":try{return JSON.stringify(n[r++])}catch(e){return\"[Circular]\"}default:return e}})),u=n[r];r=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),p(t)?n.showHidden=t:t&&r._extend(n,t),v(n.showHidden)&&(n.showHidden=!1),v(n.depth)&&(n.depth=2),v(n.colors)&&(n.colors=!1),v(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=u),f(n,e,n.depth)}function u(e,t){var r=s.styles[t];return r?\"\\x1b[\"+s.colors[r][0]+\"m\"+e+\"\\x1b[\"+s.colors[r][1]+\"m\":e}function c(e,t){return e}function f(e,t,n){if(e.customInspect&&t&&x(t.inspect)&&t.inspect!==r.inspect&&(!t.constructor||t.constructor.prototype!==t)){var o=t.inspect(n,e);return b(o)||(o=f(e,o,n)),o}var i=function(e,t){if(v(t))return e.stylize(\"undefined\",\"undefined\");if(b(t)){var r=\"'\"+JSON.stringify(t).replace(/^\"|\"$/g,\"\").replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"')+\"'\";return e.stylize(r,\"string\")}if(m(t))return e.stylize(\"\"+t,\"number\");if(p(t))return e.stylize(\"\"+t,\"boolean\");if(y(t))return e.stylize(\"null\",\"null\")}(e,t);if(i)return i;var a=Object.keys(t),s=function(e){var t={};return e.forEach((function(e,r){t[e]=!0})),t}(a);if(e.showHidden&&(a=Object.getOwnPropertyNames(t)),k(t)&&(a.indexOf(\"message\")>=0||a.indexOf(\"description\")>=0))return l(t);if(0===a.length){if(x(t)){var u=t.name?\": \"+t.name:\"\";return e.stylize(\"[Function\"+u+\"]\",\"special\")}if(g(t))return e.stylize(RegExp.prototype.toString.call(t),\"regexp\");if(_(t))return e.stylize(Date.prototype.toString.call(t),\"date\");if(k(t))return l(t)}var c,w=\"\",S=!1,O=[\"{\",\"}\"];(d(t)&&(S=!0,O=[\"[\",\"]\"]),x(t))&&(w=\" [Function\"+(t.name?\": \"+t.name:\"\")+\"]\");return g(t)&&(w=\" \"+RegExp.prototype.toString.call(t)),_(t)&&(w=\" \"+Date.prototype.toUTCString.call(t)),k(t)&&(w=\" \"+l(t)),0!==a.length||S&&0!=t.length?n<0?g(t)?e.stylize(RegExp.prototype.toString.call(t),\"regexp\"):e.stylize(\"[Object]\",\"special\"):(e.seen.push(t),c=S?function(e,t,r,n,o){for(var i=[],a=0,s=t.length;a=0&&0,e+t.replace(/\\u001b\\[\\d\\d?m/g,\"\").length+1}),0)>60)return r[0]+(\"\"===t?\"\":t+\"\\n \")+\" \"+e.join(\",\\n \")+\" \"+r[1];return r[0]+t+\" \"+e.join(\", \")+\" \"+r[1]}(c,w,O)):O[0]+w+O[1]}function l(e){return\"[\"+Error.prototype.toString.call(e)+\"]\"}function h(e,t,r,n,o,i){var a,s,u;if((u=Object.getOwnPropertyDescriptor(t,o)||{value:t[o]}).get?s=u.set?e.stylize(\"[Getter/Setter]\",\"special\"):e.stylize(\"[Getter]\",\"special\"):u.set&&(s=e.stylize(\"[Setter]\",\"special\")),j(n,o)||(a=\"[\"+o+\"]\"),s||(e.seen.indexOf(u.value)<0?(s=y(r)?f(e,u.value,null):f(e,u.value,r-1)).indexOf(\"\\n\")>-1&&(s=i?s.split(\"\\n\").map((function(e){return\" \"+e})).join(\"\\n\").substr(2):\"\\n\"+s.split(\"\\n\").map((function(e){return\" \"+e})).join(\"\\n\")):s=e.stylize(\"[Circular]\",\"special\")),v(a)){if(i&&o.match(/^\\d+$/))return s;(a=JSON.stringify(\"\"+o)).match(/^\"([a-zA-Z_][a-zA-Z_0-9]*)\"$/)?(a=a.substr(1,a.length-2),a=e.stylize(a,\"name\")):(a=a.replace(/'/g,\"\\\\'\").replace(/\\\\\"/g,'\"').replace(/(^\"|\"$)/g,\"'\"),a=e.stylize(a,\"string\"))}return a+\": \"+s}function d(e){return Array.isArray(e)}function p(e){return\"boolean\"==typeof e}function y(e){return null===e}function m(e){return\"number\"==typeof e}function b(e){return\"string\"==typeof e}function v(e){return void 0===e}function g(e){return w(e)&&\"[object RegExp]\"===S(e)}function w(e){return\"object\"===_typeof2(e)&&null!==e}function _(e){return w(e)&&\"[object Date]\"===S(e)}function k(e){return w(e)&&(\"[object Error]\"===S(e)||e instanceof Error)}function x(e){return\"function\"==typeof e}function S(e){return Object.prototype.toString.call(e)}function O(e){return e<10?\"0\"+e.toString(10):e.toString(10)}r.debuglog=function(e){if(v(i)&&(i=t.env.NODE_DEBUG||\"\"),e=e.toUpperCase(),!a[e])if(new RegExp(\"\\\\b\"+e+\"\\\\b\",\"i\").test(i)){var n=t.pid;a[e]=function(){var t=r.format.apply(r,arguments);console.error(\"%s %d: %s\",e,n,t)}}else a[e]=function(){};return a[e]},r.inspect=s,s.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},s.styles={special:\"cyan\",number:\"yellow\",boolean:\"yellow\",undefined:\"grey\",null:\"bold\",string:\"green\",date:\"magenta\",regexp:\"red\"},r.isArray=d,r.isBoolean=p,r.isNull=y,r.isNullOrUndefined=function(e){return null==e},r.isNumber=m,r.isString=b,r.isSymbol=function(e){return\"symbol\"===_typeof2(e)},r.isUndefined=v,r.isRegExp=g,r.isObject=w,r.isDate=_,r.isError=k,r.isFunction=x,r.isPrimitive=function(e){return null===e||\"boolean\"==typeof e||\"number\"==typeof e||\"string\"==typeof e||\"symbol\"===_typeof2(e)||void 0===e},r.isBuffer=e(\"./support/isBuffer\");var E=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];function R(){var e=new Date,t=[O(e.getHours()),O(e.getMinutes()),O(e.getSeconds())].join(\":\");return[e.getDate(),E[e.getMonth()],t].join(\" \")}function j(e,t){return Object.prototype.hasOwnProperty.call(e,t)}r.log=function(){console.log(\"%s - %s\",R(),r.format.apply(r,arguments))},r.inherits=e(\"inherits\"),r._extend=function(e,t){if(!t||!w(t))return e;for(var r=Object.keys(t),n=r.length;n--;)e[r[n]]=t[r[n]];return e}}).call(this,e(\"_process\"),\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{\"./support/isBuffer\":474,_process:419,inherits:473}],476:[function(e,t,r){var n=e(\"./v1\"),o=e(\"./v4\"),i=o;i.v1=n,i.v4=o,t.exports=i},{\"./v1\":479,\"./v4\":480}],477:[function(e,t,r){for(var n=[],o=0;o<256;++o)n[o]=(o+256).toString(16).substr(1);t.exports=function(e,t){var r=t||0,o=n;return[o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],\"-\",o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]],o[e[r++]]].join(\"\")}},{}],478:[function(e,t,r){var n=\"undefined\"!=typeof crypto&&crypto.getRandomValues&&crypto.getRandomValues.bind(crypto)||\"undefined\"!=typeof msCrypto&&\"function\"==typeof window.msCrypto.getRandomValues&&msCrypto.getRandomValues.bind(msCrypto);if(n){var o=new Uint8Array(16);t.exports=function(){return n(o),o}}else{var i=new Array(16);t.exports=function(){for(var e,t=0;t<16;t++)0==(3&t)&&(e=4294967296*Math.random()),i[t]=e>>>((3&t)<<3)&255;return i}}},{}],479:[function(e,t,r){var n,o,i=e(\"./lib/rng\"),a=e(\"./lib/bytesToUuid\"),s=0,u=0;t.exports=function(e,t,r){var c=t&&r||0,f=t||[],l=(e=e||{}).node||n,h=void 0!==e.clockseq?e.clockseq:o;if(null==l||null==h){var d=i();null==l&&(l=n=[1|d[0],d[1],d[2],d[3],d[4],d[5]]),null==h&&(h=o=16383&(d[6]<<8|d[7]))}var p=void 0!==e.msecs?e.msecs:(new Date).getTime(),y=void 0!==e.nsecs?e.nsecs:u+1,m=p-s+(y-u)/1e4;if(m<0&&void 0===e.clockseq&&(h=h+1&16383),(m<0||p>s)&&void 0===e.nsecs&&(y=0),y>=1e4)throw new Error(\"uuid.v1(): Can't create more than 10M uuids/sec\");s=p,u=y,o=h;var b=(1e4*(268435455&(p+=122192928e5))+y)%4294967296;f[c++]=b>>>24&255,f[c++]=b>>>16&255,f[c++]=b>>>8&255,f[c++]=255&b;var v=p/4294967296*1e4&268435455;f[c++]=v>>>8&255,f[c++]=255&v,f[c++]=v>>>24&15|16,f[c++]=v>>>16&255,f[c++]=h>>>8|128,f[c++]=255&h;for(var g=0;g<6;++g)f[c+g]=l[g];return t||a(f)}},{\"./lib/bytesToUuid\":477,\"./lib/rng\":478}],480:[function(e,t,r){var n=e(\"./lib/rng\"),o=e(\"./lib/bytesToUuid\");t.exports=function(e,t,r){var i=t&&r||0;\"string\"==typeof e&&(t=\"binary\"===e?new Array(16):null,e=null);var a=(e=e||{}).random||(e.rng||n)();if(a[6]=15&a[6]|64,a[8]=63&a[8]|128,t)for(var s=0;s<16;++s)t[i+s]=a[s];return t||o(a)}},{\"./lib/bytesToUuid\":477,\"./lib/rng\":478}],481:[function(require,module,exports){var indexOf=function(e,t){if(e.indexOf)return e.indexOf(t);for(var r=0;r=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=32&&e<=55295||10===e||13===e||9===e||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=n,r.isNameChar=function(e){return n(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],483:[function(e,t,r){\n/**\n * Character classes and associated utilities for the 2nd edition of XML 1.1.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(r,\"__esModule\",{value:!0}),r.CHAR=\"\\x01-\\ud7ff\\ue000-\\ufffd\\ud800\\udc00-\\udbff\\udfff\",r.RESTRICTED_CHAR=\"\\x01-\\b\\v\\f\\x0e-\\x1f\\x7f-\\x84\\x86-\\x9f\",r.S=\" \\t\\r\\n\",r.NAME_START_CHAR=\":A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\ud800\\udc00-\\udb7f\\udfff\",r.NAME_CHAR=\"-\"+r.NAME_START_CHAR+\".0-9\\xb7\\u0300-\\u036f\\u203f-\\u2040\",r.CHAR_RE=new RegExp(\"^[\"+r.CHAR+\"]$\",\"u\"),r.RESTRICTED_CHAR_RE=new RegExp(\"^[\"+r.RESTRICTED_CHAR+\"]$\",\"u\"),r.S_RE=new RegExp(\"^[\"+r.S+\"]+$\",\"u\"),r.NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"]$\",\"u\"),r.NAME_CHAR_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]$\",\"u\"),r.NAME_RE=new RegExp(\"^[\"+r.NAME_START_CHAR+\"][\"+r.NAME_CHAR+\"]*$\",\"u\"),r.NMTOKEN_RE=new RegExp(\"^[\"+r.NAME_CHAR+\"]+$\",\"u\");function n(e){return e>=65&&e<=90||e>=97&&e<=122||58===e||95===e||8204===e||8205===e||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}r.S_LIST=[32,10,13,9],r.isChar=function(e){return e>=1&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isRestrictedChar=function(e){return e>=1&&e<=8||11===e||12===e||e>=14&&e<=31||e>=127&&e<=132||e>=134&&e<=159},r.isCharAndNotRestricted=function(e){return 9===e||10===e||13===e||e>31&&e<127||133===e||e>159&&e<=55295||e>=57344&&e<=65533||e>=65536&&e<=1114111},r.isS=function(e){return 32===e||10===e||13===e||9===e},r.isNameStartChar=n,r.isNameChar=function(e){return n(e)||e>=48&&e<=57||45===e||46===e||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}],484:[function(e,t,r){function n(e){return e>=65&&e<=90||95===e||e>=97&&e<=122||e>=192&&e<=214||e>=216&&e<=246||e>=248&&e<=767||e>=880&&e<=893||e>=895&&e<=8191||e>=8204&&e<=8205||e>=8304&&e<=8591||e>=11264&&e<=12271||e>=12289&&e<=55295||e>=63744&&e<=64975||e>=65008&&e<=65533||e>=65536&&e<=983039}\n/**\n * Character class utilities for XML NS 1.0 edition 3.\n *\n * @author Louis-Dominique Dubeau\n * @license MIT\n * @copyright Louis-Dominique Dubeau\n */\nObject.defineProperty(r,\"__esModule\",{value:!0}),r.NC_NAME_START_CHAR=\"A-Z_a-z\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02ff\\u0370-\\u037d\\u037f-\\u1fff\\u200c-\\u200d\\u2070-\\u218f\\u2c00-\\u2fef\\u3001-\\ud7ff\\uf900-\\ufdcf\\ufdf0-\\ufffd\\ud800\\udc00-\\udb7f\\udfff\",r.NC_NAME_CHAR=\"-\"+r.NC_NAME_START_CHAR+\".0-9\\xb7\\u0300-\\u036f\\u203f-\\u2040\",r.NC_NAME_START_CHAR_RE=new RegExp(\"^[\"+r.NC_NAME_START_CHAR+\"]$\",\"u\"),r.NC_NAME_CHAR_RE=new RegExp(\"^[\"+r.NC_NAME_CHAR+\"]$\",\"u\"),r.NC_NAME_RE=new RegExp(\"^[\"+r.NC_NAME_START_CHAR+\"][\"+r.NC_NAME_CHAR+\"]*$\",\"u\"),r.isNCNameStartChar=n,r.isNCNameChar=function(e){return n(e)||45===e||46===e||e>=48&&e<=57||183===e||e>=768&&e<=879||e>=8255&&e<=8256}},{}]},{},[15])(15)}));","function webpackEmptyAsyncContext(req) {\n\t// Here Promise.resolve().then() is used instead of new Promise() to prevent\n\t// uncaught exception popping up in devtools\n\treturn Promise.resolve().then(function() {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t});\n}\nwebpackEmptyAsyncContext.keys = function() { return []; };\nwebpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext;\nmodule.exports = webpackEmptyAsyncContext;\nwebpackEmptyAsyncContext.id = \"./src/$$_lazy_route_resource lazy recursive\";","import { Component, ElementRef, NgZone, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport _ from \"lodash\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { first, filter } from \"rxjs/operators\";\nimport {\n BUILDING_SIDE,\n CONNECTION_TYPE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { ICost } from \"src/app/core/models\";\nimport SelectionManager from \"src/app-ribspan/core/selection.manager\";\nimport { UI } from \"src/app-ribspan/core/ui\";\nimport { CutOutManager } from \"src/app-ribspan/core/UI/cutOut.manager\";\nimport { EditLength2Manager } from \"src/app-ribspan/core/UI/editLength2.manager\";\nimport { EditWallManager } from \"src/app-ribspan/core/UI/editWall.manager\";\nimport { EditWidth2Manager } from \"src/app-ribspan/core/UI/editWidth2.manager\";\nimport UIRakecutManager from \"src/app-ribspan/core/UI/rakecut\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxHelper,\n Color,\n DirectionalLight,\n PerspectiveCamera,\n Scene,\n Vector3,\n WebGLRenderer,\n} from \"three\";\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls\";\nimport {\n ACTIVE_LEFT_MENU,\n APP_VERSION,\n CONFIG,\n GEOMETRY_CATEGORY,\n GEOMETRY_TYPE,\n INIT,\n OFFSET_GUTTER_TO_WALL,\n PANEL_TYPE,\n PATIOS_ROOF_TYPE,\n RELEASE_DATE,\n STATUS_TEXT,\n TEMPLATE,\n} from \"src/app/app.config\";\nimport { DimensionManager } from \"src/app-ribspan/core/dimension.manager\";\nimport { EaveManager } from \"src/app-ribspan/core/eave.manager\";\nimport { ExistingRoofManager } from \"src/app-ribspan/core/existing-roof.manager\";\nimport { ExistingWallManager } from \"src/app-ribspan/core/existing-wall.manager\";\nimport { FasciaManager } from \"src/app-ribspan/core/fascia.manager\";\nimport { GeometryManager } from \"src/app-ribspan/core/geometry.manager\";\nimport { GroundManager } from \"src/app-ribspan/core/ground.manager\";\nimport { MaterialManager } from \"src/app-ribspan/core/material.manager\";\nimport { Objects } from \"src/app-ribspan/core/objects\";\nimport { PatiosManager } from \"src/app-ribspan/core/patios.manager\";\nimport { Printing2DManager } from \"src/app-ribspan/core/printing2d.manager\";\nimport { UIManager } from \"src/app-ribspan/core/ui.manager\";\nimport { Util } from \"src/app-ribspan/core/utils\";\nimport { User } from \"src/app/models\";\nimport {\n AuthenticationService,\n JobService,\n PrintingService,\n} from \"src/app/services\";\nimport { UserService } from \"src/app/services/user.service\";\nimport { Album } from \"src/app/models/Album\";\nimport { Lightbox } from \"ngx-lightbox\";\nimport { DialogBOMComponent } from \"src/app/component/dialog-bom/dialog-bom.component\";\nimport { DialogAddCostComponent } from \"src/app/component/dialog-add-cost/dialog-add-cost.component\";\nimport { SliderInputComponent } from \"src/app/component/slider-input/slider-input.component\";\nimport { DropDownInputComponent } from \"src/app/component/dropdown-input/dropdown-input.component\";\nimport { DropDownInputCustomComponent } from \"src/app/component/dropdown-input-custom/dropdown-input-custom.component\";\nimport { DialogEditBayComponent } from \"src/app/component/dialog-edit-bay/dialog-edit-bay.component\";\nimport { SwitchInputComponent } from \"src/app/component/switch-input/switch-input.component\";\nimport { CheckboxInputComponent } from \"src/app/component/checkbox-input/checkbox-input.component\";\nimport { DialogRakeCutComponent } from \"src/app/component/dialog-rakecut/dialog-rakecut.component\";\nimport { DialogDimensionComponent } from \"src/app/component/dialog-dimension/dialog-dimension.component\";\nimport { DialogConfirmComponent } from \"src/app/component/dialog-confirm/dialog-confirm.component\";\nimport { PanelBOMComponent } from \"src/app/component/panel-bom/panel-bom.component\";\nimport { ToggleButtonComponent } from \"src/app/component/toggle-button/toggle-button.component\";\nimport { CutBeamManager } from \"src/app-ribspan/core/UI/cutBeam.manager\";\n\ndeclare var $: any;\n\n@Component({\n templateUrl: \"./home.component.html\",\n styleUrls: [\"./home.component.scss\"],\n})\nexport class HomeComponent {\n @ViewChild(\"rendererCanvas\", { static: true })\n public rendererCanvas: ElementRef;\n @ViewChild(\"viewerContainer\", { static: true })\n public viewerContainer: ElementRef;\n @ViewChild(\"sldEaveWidth\", { static: true })\n public sldEaveWidth: SliderInputComponent;\n @ViewChild(\"sldEaveHeight\", { static: true })\n public sldExistingWallHeight: SliderInputComponent;\n @ViewChild(\"sldFasciaDepth\", { static: true })\n public sldFasciaDepth: SliderInputComponent;\n\n @ViewChild(\"sldBaySize\", { static: true })\n public sldBaySize: SliderInputComponent;\n @ViewChild(\"sldSpan\", { static: true }) public sldSpan: SliderInputComponent;\n\n @ViewChild(\"sldExistingLength\", { static: true })\n public sldExistingLength: SliderInputComponent;\n @ViewChild(\"sldExistingLength2\", { static: true })\n public sldExistingLength2: SliderInputComponent;\n\n @ViewChild(\"sldExistingWidth1\", { static: true })\n public sldExistingWidth1: SliderInputComponent;\n @ViewChild(\"sldExistingWidth2\", { static: true })\n public sldExistingWidth2: SliderInputComponent;\n\n @ViewChild(\"sltExistingType\", { static: true })\n public sltExistingType: DropDownInputComponent;\n @ViewChild(\"sltStructureType\", { static: true })\n public sltStructureType: DropDownInputComponent;\n @ViewChild(\"sltWindClass\", { static: true })\n public sltWindClass: DropDownInputComponent;\n @ViewChild(\"sltWallType\", { static: true })\n public sltWallType: DropDownInputComponent;\n @ViewChild(\"sltExistingRoofType\", { static: true })\n public sltExistingRoofType: DropDownInputComponent;\n\n @ViewChild(\"sldMultiSpan\", { static: true })\n public sldMultiSpan: SliderInputComponent;\n @ViewChild(\"sldBuildingHeight\", { static: true })\n public sldBuildingHeight: SliderInputComponent;\n @ViewChild(\"sldFrontOverhang\", { static: true })\n public sldFrontOverhang: SliderInputComponent;\n @ViewChild(\"sldBackOverhang\", { static: true })\n public sldBackOverhang: SliderInputComponent;\n @ViewChild(\"sldLeftOverhang\", { static: true })\n public sldLeftOverhang: SliderInputComponent;\n @ViewChild(\"sldRightOverhang\", { static: true })\n public sldRightOverhang: SliderInputComponent;\n @ViewChild(\"sltRoofPitch\", { static: true })\n public sltRoofPitch: DropDownInputCustomComponent;\n @ViewChild(\"sldFlyOverBracketHeight\", { static: true })\n public sldFlyOverBracketHeight: SliderInputComponent;\n @ViewChild(\"sldNoOfBay\", { static: true })\n public sldNoOfBay: SliderInputComponent;\n @ViewChild(\"dialogEditBay\", { static: true })\n public dialogEditBay: DialogEditBayComponent;\n\n @ViewChild(\"sltPitch\", { static: true })\n public sltExistingRoofPitch: DropDownInputComponent;\n @ViewChild(\"sldRoofOverallLength\", { static: true })\n public sldRoofOverallLength: SliderInputComponent;\n @ViewChild(\"sldRoofOverallWidth\", { static: true })\n public sldRoofOverallWidth: SliderInputComponent;\n @ViewChild(\"sldMinHeight\", { static: true })\n public sldMinHeight: SliderInputComponent;\n @ViewChild(\"sltFlatBottom\", { static: true })\n public sltFlatBottom: DropDownInputComponent;\n @ViewChild(\"sltZFlashingType\", { static: true })\n public sltZFlashingType: DropDownInputComponent;\n // -----------------------\n @ViewChild(\"sltLeftCutType\", { static: true })\n public sltLeftCutType: DropDownInputComponent;\n @ViewChild(\"sltRightCutType\", { static: true })\n public sltRightCutType: DropDownInputComponent;\n @ViewChild(\"sldLeftCutVertical\", { static: true })\n public sldLeftCutVertical: SliderInputComponent;\n @ViewChild(\"sldLeftCutHorizontal\", { static: true })\n public sldLeftCutHorizontal: SliderInputComponent;\n @ViewChild(\"sldRightCutVertical\", { static: true })\n public sldRightCutVertical: SliderInputComponent;\n @ViewChild(\"sldRightCutHorizontal\", { static: true })\n public sldRightCutHorizontal: SliderInputComponent;\n // -----------------------\n @ViewChild(\"sltRoofSheetingType\", { static: true })\n public sltRoofSheetingType: DropDownInputComponent;\n @ViewChild(\"sltBaseFixingType\", { static: true })\n public sltBaseFixingType: DropDownInputComponent;\n @ViewChild(\"sltRoofThickness\", { static: true })\n public sltRoofThickness: DropDownInputComponent;\n @ViewChild(\"sltBargeType\", { static: true })\n public sltBargeType: DropDownInputComponent;\n\n @ViewChild(\"sltDownpipeType\", { static: true })\n public sltDownpipeType: DropDownInputComponent;\n @ViewChild(\"sltGutterType\", { static: true })\n public sltGutterType: DropDownInputComponent;\n @ViewChild(\"sltBeamType\", { static: true })\n public sltBeamType: DropDownInputComponent;\n @ViewChild(\"sltBeamSize\", { static: true })\n public sltBeamSize: DropDownInputComponent;\n @ViewChild(\"sltHouseBeamSize\", { static: true })\n public sltHouseBeamSize: DropDownInputComponent;\n @ViewChild(\"sltReceiverType\", { static: true })\n public sltReceiverType: DropDownInputComponent;\n @ViewChild(\"sltColumnType\", { static: true })\n public sltColumnType: DropDownInputComponent;\n\n @ViewChild(\"sltColourRoof\", { static: true })\n public sltColourRoof: DropDownInputComponent;\n @ViewChild(\"sltColourBarge\", { static: true })\n public sltColourBarge: DropDownInputComponent;\n @ViewChild(\"sltColourGutter\", { static: true })\n public sltColourGutter: DropDownInputComponent;\n @ViewChild(\"sltColourZFlashing\", { static: true })\n public sltColourZFlashing: DropDownInputComponent;\n @ViewChild(\"sltColourPost\", { static: true })\n public sltColourPost: DropDownInputComponent;\n @ViewChild(\"sltColourBeam\", { static: true })\n public sltColourBeam: DropDownInputComponent;\n @ViewChild(\"sltColourBracket\", { static: true })\n public sltColourBracket: DropDownInputComponent;\n @ViewChild(\"sltColourFasciaBracket\", { static: true })\n public sltColourFasciaBracket: DropDownInputComponent;\n @ViewChild(\"sltColourDownpipe\", { static: true })\n public sltColourDownpipe: DropDownInputComponent;\n\n @ViewChild(\"sltCutOut\", { static: true })\n public sltCutOut: DropDownInputComponent;\n\n @ViewChild(\"sltPanelDirection\", { static: true })\n public sltPanelDirection: SwitchInputComponent;\n @ViewChild(\"sltPanelDirectionShow\", { static: true })\n public sltPanelDirectionShow: CheckboxInputComponent;\n @ViewChild(\"sltBeamLayoutShow\", { static: true })\n public sltBeamLayoutShow: CheckboxInputComponent;\n @ViewChild(\"sltDripBarge\", { static: true })\n public sltDripBarge: CheckboxInputComponent;\n @ViewChild(\"sltFasciaUpstandBrackets\", { static: true })\n public sltFasciaUpstandBrackets: DropDownInputComponent;\n @ViewChild(\"sltUpFasciaUpstandBracket\", { static: true })\n public sltUpFasciaUpstandBracket: CheckboxInputComponent;\n @ViewChild(\"chkRapidSetCement\", { static: true })\n public chkRapidSetCement: CheckboxInputComponent;\n @ViewChild(\"chkHasHouseBeam\", { static: true })\n public chkHasHouseBeam: CheckboxInputComponent;\n\n @ViewChild(\"dialogRakeCut\", { static: true })\n dialogRakeCut: DialogRakeCutComponent;\n @ViewChild(\"dialogDimension\", { static: true })\n dialogDimension: DialogDimensionComponent;\n @ViewChild(\"dialogComfirm\", { static: true })\n dialogComfirm: DialogConfirmComponent;\n @ViewChild(\"dialogAddCost\", { static: true })\n dialogAddCost: DialogAddCostComponent;\n @ViewChild(\"dialogBOM\", { static: true }) dialogBOM: DialogBOMComponent;\n @ViewChild(\"panelBOM\", { static: true }) panelBOM: PanelBOMComponent;\n\n @ViewChild(\"btnTurnOffRakeCutLeft\", { static: true })\n btnTurnOffRakeCutLeft: ToggleButtonComponent;\n @ViewChild(\"btnTurnOffRakeCutRight\", { static: true })\n btnTurnOffRakeCutRight: ToggleButtonComponent;\n @ViewChild(\"btnTurnOffCutout\", { static: true })\n btnTurnOffCutout: ToggleButtonComponent;\n @ViewChild(\"btnTurnOnPanel\", { static: true })\n btnTurnOnPanel: ToggleButtonComponent;\n @ViewChild(\"btnEnableControl\", { static: true })\n btnEnableControl: ToggleButtonComponent;\n\n static ins: HomeComponent;\n\n public objects: Objects;\n public env = CONFIG;\n\n public utils: Util;\n\n public scene: THREE.Scene;\n public canvas: HTMLCanvasElement;\n public renderer: THREE.WebGLRenderer;\n public camera: THREE.PerspectiveCamera;\n public control: OrbitControls;\n // private control: TrackballControls;\n\n private frameId: number = null;\n\n public loadCompleted = false;\n public oldOverhangBack: number = 0;\n public geometryManager: GeometryManager;\n private materialManager: MaterialManager;\n public eaveManager: EaveManager;\n public existingWallManager: ExistingWallManager;\n public fasciaManager: FasciaManager;\n public existingRoofManager: ExistingRoofManager;\n public uiManager: UIManager;\n public printingManager: Printing2DManager;\n\n public patiosManager: PatiosManager;\n\n // public flyOverManager: PatiosFlyOverManager;\n // public backFlyOverManager: PatiosBackFlyOverManager;\n // private freeStandingManager: PatiosFreeStandingManager;\n // private existingBuildingManager: ExistingBuildingManager;\n // private toFasciaManager: ToFasciaManager;\n\n // private columnAndPurlinManager: ColumnAndPurlinManager;\n // private roofManager: RoofManager;\n public groundManager: GroundManager;\n public dimensionManager: DimensionManager;\n\n public resizeEventHandle: any;\n\n public sldExistingWidth2Visible = true;\n public sldExistingLength2Visible = true;\n currentUser: User;\n public isVisible = false;\n isVisibleMoreInfo: boolean = false;\n isVisibleOpenModal = false;\n isVisibleProperty = !environment.production;\n isVisibleDiscount = false;\n isSaveAs = 0; // 0: none, 1: Copy, 2: Revised\n public addCostInstallDes = \"\";\n public isUploading = false;\n costList: ICost[] = [];\n dataOPEN: any;\n jobNoSearch = \"\";\n cusNameSearch = \"\";\n isSearching = false;\n isOpening = false;\n isPricing = false;\n isError = false;\n isAdmin = false;\n statusError = \"\";\n public statusText = STATUS_TEXT.NEW;\n maxSpan = 0;\n maxSpanText = \"\";\n public maxThickness = \"\";\n maxBaySizeText = \"\";\n maxBaySize = 0;\n maxBeamSizeText = \"\";\n beamSizeList = [];\n houseBeamSizeList = [];\n thicknessList = [];\n baseFixingTypeList = [];\n columnTypeList = [];\n public oldBuildingInfo = null;\n currentStep = 0;\n currentStepNew = 0;\n newOpenType = 0;\n existingHouseType = -1;\n roofPercent: string = \"\";\n version: string = APP_VERSION;\n releaseDate: string = RELEASE_DATE;\n rightToLeft: boolean = false;\n public flyoverBracketNumber: 3;\n public flyoverBracketNumberCutOut: 3;\n public fasciaBracketNumber: 3;\n public fasciaBracketNumberCutOut: 3;\n public currentBuildingInfo = null;\n public currentQuoteInfo = null;\n public roofHeight: number = 0;\n public upFasciaBracketList = null;\n public _patiosRoofType = PATIOS_ROOF_TYPE.FLAT_ROOF;\n public _isFBRoof: boolean = false;\n public panelType = PANEL_TYPE.RIBSPAN;\n\n private _albums: Array = [];\n\n set patiosRoofType(value: string) {\n let oldVal = this._patiosRoofType;\n this._patiosRoofType = value;\n if (oldVal != this._patiosRoofType) {\n this.uiManager.onStructureTypeChanged(\n null,\n this.sltStructureType.currentValue\n );\n this.uiManager.setBeamSize();\n this.uiManager.setMaxSpan();\n this.uiManager.validateCutout();\n }\n }\n get patiosRoofType(): string {\n return this._patiosRoofType;\n }\n\n set isFBRoof(value: boolean) {\n if (value != this._isFBRoof) {\n this._isFBRoof = value;\n this.uiManager.setBeamSize();\n this.uiManager.setMaxSpan();\n\n this.uiManager.onStructureTypeChanged(\n null,\n this.sltStructureType.currentValue\n );\n }\n }\n get isFBRoof(): boolean {\n return this._isFBRoof;\n }\n\n public get patiosBoundingBox(): Box3 {\n let boxHelper = new BoxHelper(this.patiosManager.patiosGroup);\n return boxHelper.geometry.boundingBox;\n }\n\n public APP_CONFIG = {\n activeLeftMenu: ACTIVE_LEFT_MENU,\n };\n\n public constructor(\n private ngZone: NgZone,\n public printService: PrintingService,\n private router: Router,\n private authenticationService: AuthenticationService,\n public message: NzMessageService,\n private jobService: JobService,\n private userService: UserService,\n private uiRakecutMgr: UIRakecutManager,\n public selectionMgr: SelectionManager,\n // public uiRakecutLeft: WidthManager\n public uiEditWall: EditWallManager,\n public uiEditLength2: EditLength2Manager,\n public uiEditWidth2: EditWidth2Manager,\n public uiCutout: CutOutManager,\n public uiCutBeam: CutBeamManager,\n private _lightbox: Lightbox\n ) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.geometryManager.init(this);\n this.materialManager = MaterialManager.Instance();\n this.eaveManager = new EaveManager();\n this.existingWallManager = new ExistingWallManager();\n this.fasciaManager = new FasciaManager();\n this.existingRoofManager = new ExistingRoofManager();\n this.objects = new Objects();\n this.groundManager = new GroundManager();\n this.dimensionManager = DimensionManager.Instance();\n this.printingManager = new Printing2DManager(this);\n this.authenticationService.currentUser.subscribe(\n (x) => (this.currentUser = x)\n );\n this.upFasciaBracketList = this.objects.fasciaBracketList.filter(\n (el) => el.id != 0\n );\n\n this.resizeEventHandle = this.resize.bind(this);\n\n window[\"APP\"] = this;\n\n console.log(`App version: ${APP_VERSION}`);\n console.log(`Release date: ${RELEASE_DATE}`);\n\n HomeComponent.ins = this;\n }\n logout() {\n this.authenticationService.logout();\n this.router.navigate([\"/login\"]);\n }\n public ngOnInit(): void {\n if (!this.currentUser || !this.currentUser.user) {\n this.authenticationService.logout();\n this.router.navigate([\"/login\"]);\n return;\n }\n this.initObject();\n }\n public ngAfterViewInit(): void {\n $(\".ui.accordion\").accordion();\n this.init3D().then(() => {\n this.uiManager = new UIManager(this);\n // this.sldBaySize.addAction(this.onBaySizeChanged.bind(this));\n\n this.uiRakecutMgr.init();\n\n this.geometryManager\n .loadAll()\n .then(() => {\n return Promise.all([\n this.eaveManager.init(this),\n this.existingWallManager.init(this),\n this.fasciaManager.init(this),\n this.existingRoofManager.init(this),\n this.groundManager.init(this),\n this.dimensionManager.init(this),\n this.materialManager.init(this),\n this.selectionMgr.init(),\n // this.uiRakecutLeft.init()\n this.uiEditWall.init(),\n this.uiEditLength2.init(),\n this.uiEditWidth2.init(),\n this.uiCutout.init(),\n this.uiCutBeam.init(),\n ]);\n })\n .then(() => {\n return Promise.all([\n this.existingWallManager.optimize(),\n this.eaveManager.optimize(),\n this.fasciaManager.optimize(),\n this.existingRoofManager.optimize(),\n this.groundManager.optimize(),\n this.dimensionManager.optimize(),\n ]);\n })\n .then(() => {\n return Promise.all([\n this.existingWallManager.load(),\n this.eaveManager.load(),\n this.fasciaManager.load(),\n this.existingRoofManager.load(),\n this.selectionMgr.enable(),\n // this.dimensionManager.load(),\n // this.uiRakecutLeft.load()\n this.uiEditWall.load(),\n this.uiEditLength2.load(),\n this.uiEditWidth2.load(),\n this.uiCutout.load(),\n this.uiCutBeam.load(),\n ]);\n })\n .then(() => {\n // Init for Test\n this.sltExistingType.setSelected(INIT.EXISTING_TYPE);\n this.sltRoofPitch.setSelected(CONFIG.patiosPitch.default);\n //this.sltStructureType.setSelected(INIT.CONNECTION_TYPE);\n\n this.uiManager.load();\n this.renderStatic();\n this.newOpenType = 0;\n\n this.loadCompleted = true;\n if (environment.production) {\n this.isVisibleOpenModal = true;\n }\n });\n // this.test();\n });\n }\n\n public ngOnDestroy() {\n if (this.frameId != null) {\n cancelAnimationFrame(this.frameId);\n }\n }\n\n private init3D(): Promise {\n // The first step is to get the reference of the canvas element from our HTML document\n this.canvas = this.rendererCanvas.nativeElement;\n\n this.canvas.width = this.viewerContainer.nativeElement.clientWidth;\n this.canvas.height = this.viewerContainer.nativeElement.clientHeight;\n\n this.renderer = new WebGLRenderer({\n canvas: this.canvas,\n // alpha: true, // transparent background\n antialias: true, // smooth edges\n preserveDrawingBuffer: true,\n });\n this.renderer.setSize(this.canvas.width, this.canvas.height);\n this.renderer.localClippingEnabled = true;\n // this.renderer.gammaOutput = true;\n // this.renderer.setClearColor( 0x000000 );\n // this.renderer.setPixelRatio( window.devicePixelRatio );\n // this.renderer.shadowMap.enabled = true;\n\n // create the scene\n this.scene = new Scene();\n this.scene.background = new Color(0xcce0ff);\n // this.scene.fog = new THREE.Fog(0xcce0ff, 500, 10000);\n\n // Camera\n this.camera = new PerspectiveCamera(\n 75,\n this.canvas.width / this.canvas.height,\n 100,\n 100000\n );\n this.camera.position.set(0, 1000, 12967);\n // this.camera.position.set(91.02454523941192, 18.45966896006735, 5.692036175338248);\n this.scene.add(this.camera);\n\n this.addShadowedLight(0, 0, 10000, 0xffffff, 0.7);\n this.addShadowedLight(0, 0, -10000, 0xffffff, 0.7);\n this.addShadowedLight(0, 10000, 0, 0xffffff, 0.7);\n this.addShadowedLight(0, -10000, 0, 0xffffff, 0.7);\n this.addShadowedLight(10000, 0, 0, 0xffffff, 0.7);\n this.addShadowedLight(-10000, 0, 0, 0xffffff, 0.7);\n\n // control\n // this.control = new TrackballControls(this.camera, this.renderer.domElement);\n this.control = new OrbitControls(this.camera, this.renderer.domElement);\n // this.control.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled\n // this.control.dampingFactor = 0.05;\n // this.control.screenSpacePanning = false;\n //this.control.minDistance = 100;\n this.control.maxDistance = 50000; // max zoom\n this.control.maxPolarAngle = this.utils.degreesToRadians(90);\n\n window[\"scene\"] = this.scene;\n window[\"camera\"] = this.camera;\n\n this.animate();\n return Promise.resolve();\n }\n\n public showEditBay() {\n this.dialogEditBay.show(true);\n }\n\n private addShadowedLight(x, y, z, color, intensity): void {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.position.set(x, y, z);\n this.scene.add(directionalLight);\n }\n private animate(): void {\n // We have to run this outside angular zones,\n // because it could trigger heavy changeDetection cycles.\n this.ngZone.runOutsideAngular(() => {\n if (document.readyState !== \"loading\") {\n this.render();\n } else {\n window.addEventListener(\"DOMContentLoaded\", () => {\n this.render();\n });\n }\n\n window.addEventListener(\"resize\", this.resizeEventHandle);\n\n this.control.addEventListener(\"change\", this.renderStatic.bind(this));\n });\n }\n private render(): void {\n // this.frameId = requestAnimationFrame(() => {\n // this.render();\n // });\n // //this.control.update();\n // this.renderer.render(this.scene, this.camera);\n }\n public renderStatic() {\n this.renderer.render(this.scene, this.camera);\n }\n private resize(): void {\n const width = this.viewerContainer.nativeElement.clientWidth;\n const height = this.viewerContainer.nativeElement.clientHeight;\n\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n this.renderer.setSize(width, height);\n\n this.renderStatic();\n }\n round(number, precision = 0) {\n return _.round(number, precision);\n }\n public calcQuoteInfo(): Promise {\n return Promise.resolve().then(() => {\n const _quoteInfo = { ...this.currentQuoteInfo.quoteInfo };\n let _gst = 0;\n let _totalPrice = 0;\n if (this.currentQuoteInfo.clientInfo.supplyType === \"supply_only\") {\n _gst = this.round(\n ((_quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.supplyOnlyKits) *\n 10) /\n 100,\n 2\n );\n _totalPrice = this.round(\n _quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.supplyOnlyKits +\n _gst,\n 100\n );\n } else {\n _gst = this.round(\n ((_quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.fasciaInstall +\n _quoteInfo.flyOverInstall +\n _quoteInfo.installMaterial +\n _quoteInfo.perPostInstall +\n _quoteInfo.addCost) *\n 10) /\n 100,\n 2\n );\n _totalPrice = this.round(\n _quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.fasciaInstall +\n _quoteInfo.flyOverInstall +\n _quoteInfo.installMaterial +\n _quoteInfo.perPostInstall +\n _quoteInfo.addCost +\n _gst,\n 2\n );\n }\n const _info = {\n ...this.currentQuoteInfo.quoteInfo,\n gst: _gst,\n totalPrice: _totalPrice,\n total0: _totalPrice,\n };\n this.jobService\n .calcQuoteInfo(_info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentQuoteInfo.quoteInfo = data.data;\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n });\n // return Promise.resolve();\n }\n\n calcPayment(): void {\n /** wait for refresh value */\n const _values = { ...this.currentQuoteInfo.quoteInfo };\n let _totalPriceTmp = 0;\n let _discount = _values.discount;\n let _deposit = this.currentQuoteInfo.quoteInfo.deposit;\n let _stage1 = this.currentQuoteInfo.quoteInfo.stage1;\n let _stage2 = this.currentQuoteInfo.quoteInfo.stage2;\n let _finalPayment = 0;\n _totalPriceTmp = this.currentQuoteInfo.quoteInfo.total0;\n\n if (_values.discountPer > 0) {\n _discount = this.round((_totalPriceTmp * _values.discountPer) / 100, 2);\n }\n _totalPriceTmp -= _discount;\n if (_values.depositPer > 0) {\n _deposit = this.round((_totalPriceTmp * _values.depositPer) / 100, 2);\n } else {\n _deposit = 0;\n }\n if (_values.stage1Per > 0) {\n _stage1 = this.round((_totalPriceTmp * _values.stage1Per) / 100, 2);\n } else {\n _stage1 = 0;\n }\n if (_values.stage2Per > 0) {\n _stage2 = this.round((_totalPriceTmp * _values.stage2Per) / 100, 2);\n } else {\n _stage2 = 0;\n }\n _finalPayment = this.round(\n _totalPriceTmp - _deposit - _stage1 - _stage2,\n 2\n );\n if (_finalPayment < 0) {\n _finalPayment = 0;\n }\n // --------------\n if (\n _values.depositPer + _values.stage1Per + _values.stage2Per === 100 &&\n _finalPayment > 0\n ) {\n _stage1 = this.round(_stage1 + _finalPayment, 2);\n _finalPayment = 0;\n }\n // --------------\n if (\n this.round(_deposit + _stage1 + _stage2 + _finalPayment, 2) >\n _totalPriceTmp\n ) {\n _stage1 -=\n this.round(_deposit + _stage1 + _stage2 + _finalPayment, 2) -\n _totalPriceTmp;\n }\n //\n this.currentQuoteInfo.quoteInfo = {\n ...this.currentQuoteInfo.quoteInfo,\n totalPrice: _totalPriceTmp,\n discount: _discount,\n deposit: _deposit,\n stage1: _stage1,\n stage2: _stage2,\n finalPayment: _finalPayment,\n discountPer: _values.discountPer,\n depositPer: _values.depositPer,\n stage1Per: _values.stage1Per,\n stage2Per: _values.stage2Per,\n addCostInstall: _values.addCostInstall,\n };\n }\n getRoofPercent(value) {\n return new Promise((resolve) => {\n const _count = Math.ceil(value / 762);\n const _ret = `${this.round((value * 100) / (_count * 762), 2)}% (${\n _count * 762\n })`;\n resolve(_ret);\n }).then((value) => (this.roofPercent = value));\n }\n public getMaxOverhang(): number {\n // N2 N3\n if (UI.windClass == 0 || UI.windClass == 1) {\n return 900;\n }\n // N4\n else if (UI.windClass == 2) {\n return 600;\n } else {\n return 600;\n }\n }\n public onSetMaxValue(): void {\n const _maxRibspanOverhang = this.getMaxOverhang();\n\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n !HomeComponent.ins.isFBRoof\n ) {\n this.sldLeftOverhang.setMax(this.round(_maxRibspanOverhang));\n this.sldRightOverhang.setMax(this.round(_maxRibspanOverhang));\n if (this.dialogEditBay.listBay.length > 0) {\n const _maxBay = _.maxBy(this.dialogEditBay.listBay, \"value\").value;\n const _fasciaUpstand = this.sltFasciaUpstandBrackets.currentValue;\n if (_fasciaUpstand != 0) {\n const _beamType = this.sltBeamType.currentValue;\n const _beamSize = this.sltBeamSize.currentText;\n const _size =\n _beamType == 1\n ? _beamSize.substring(0, 3)\n : _beamSize.substring(2, 5);\n let _sizeInt = parseInt(_size);\n if (_sizeInt) {\n let _maxValue = 1200;\n if (_sizeInt >= 210) _maxValue = 1500;\n else if (_sizeInt <= 110) _maxValue = 900;\n this.sldFrontOverhang.setMax(_maxValue);\n this.sldBackOverhang.setMax(_maxValue);\n }\n } else {\n this.sldFrontOverhang.setMax(this.round(_maxBay / 4));\n this.sldBackOverhang.setMax(this.round(_maxBay / 4));\n }\n }\n } else {\n this.sldFrontOverhang.setMax(this.round(_maxRibspanOverhang));\n this.sldBackOverhang.setMax(this.round(_maxRibspanOverhang));\n if (this.dialogEditBay.listBay.length > 0) {\n const _maxBay = _.maxBy(this.dialogEditBay.listBay, \"value\").value;\n const _fasciaUpstand = this.sltFasciaUpstandBrackets.currentValue;\n if (_fasciaUpstand != 0) {\n const _beamType = this.sltBeamType.currentValue;\n const _beamSize = this.sltBeamSize.currentText;\n const _size =\n _beamType == 1\n ? _beamSize.substring(0, 3)\n : _beamSize.substring(2, 5);\n let _sizeInt = parseInt(_size);\n if (_sizeInt) {\n let _maxValue = 1200;\n if (_sizeInt >= 210) _maxValue = 1500;\n else if (_sizeInt <= 110) _maxValue = 900;\n this.sldLeftOverhang.setMax(_maxValue);\n this.sldRightOverhang.setMax(_maxValue);\n }\n } else {\n this.sldLeftOverhang.setMax(this.round(_maxBay / 4));\n this.sldRightOverhang.setMax(this.round(_maxBay / 4));\n }\n }\n }\n }\n public calcPostSpacingInfoWhenOverallRoofLengthChanged(): Promise {\n const _info = {\n ...this.currentBuildingInfo,\n buildingInfo: this.bindBuildingInfo(),\n clientInfo: this.currentQuoteInfo.clientInfo,\n quoteInfo: this.currentQuoteInfo.quoteInfo,\n };\n // const _info = {\n // buildingInfo: {\n // existingType: UI.existingType,\n // structureType: UI.structureType,\n // beamSize: UI.beamSize,\n // span: UI.span,\n // multiSpan: UI.multiSpan,\n // windClass: UI.windClass,\n // roofOverallLength: UI.roofOverallLength,\n // },\n // };\n this.jobService\n .calcRibSpanInfo(_info)\n .pipe(first())\n .subscribe((data) => {\n if (data.data.ribSpanInfo) {\n const { maxPostSpacing, noOfPost } = data.data.ribSpanInfo;\n // Set max baysize before set num of bay\n if (this.maxBaySize != maxPostSpacing) {\n this.maxBaySize = maxPostSpacing;\n this.maxBaySizeText = `${maxPostSpacing} max`;\n }\n let overhangLength = UI.overhangLeft + UI.overhangRight;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n overhangLength = UI.overhangFront + UI.overhangBack;\n }\n const current3DOverallRoofLength = UI.totalBayLength + overhangLength;\n // If no of bay change, auto seperate list bays. If no change, keep it.\n // If user input overall, we must set listbay from noOfPost\n if (\n UI.noOfBays != noOfPost + 1 ||\n current3DOverallRoofLength != UI.roofOverallLength\n ) {\n const baySpacing =\n (UI.roofOverallLength - overhangLength) / (noOfPost + 1);\n HomeComponent.ins.sldBaySize.setValue(baySpacing);\n // HomeComponent.ins.sldNoOfBay.setValue(noOfPost + 1);\n HomeComponent.ins.sldNoOfBay.setValue(\n noOfPost === 0 ? 1 : noOfPost\n );\n }\n }\n });\n return Promise.resolve();\n }\n public calcRibSpanInfo(): Promise {\n const _info = {\n ...this.currentBuildingInfo,\n buildingInfo: this.bindBuildingInfo(),\n clientInfo: this.currentQuoteInfo.clientInfo,\n quoteInfo: this.currentQuoteInfo.quoteInfo,\n };\n this.jobService\n .calcRibSpanInfo(_info)\n .pipe(first())\n .subscribe((data) => {\n if (data.data.ribSpanInfo) {\n const { noOfInternalRafter, noOfInternalBeam } =\n data.data.ribSpanInfo;\n this.patiosManager.loadRafterBeamAndInternalBeam({\n numOfInternalRafter: noOfInternalRafter,\n numOfSpanBeam: noOfInternalBeam,\n numOfMultiSpanBeam: 0,\n });\n // After call loadRafterBeamAndInternalBeam, some object will be change, need to calc BOM again.\n HomeComponent.ins.uiManager.onUIChanged(null, null);\n }\n });\n return Promise.resolve();\n }\n public onCalcPrice(): Promise {\n if (!this.currentBuildingInfo.isOpen) {\n this.isPricing = true;\n this.currentBuildingInfo.quoteInfo.totalPrice = 0;\n }\n\n const _info = {\n ...this.currentBuildingInfo,\n buildingInfo: this.bindBuildingInfo(),\n clientInfo: this.currentQuoteInfo.clientInfo,\n quoteInfo: this.currentQuoteInfo.quoteInfo,\n };\n if (!environment.production) {\n this.patiosManager.loadBracket(2);\n this.patiosManager.loadBracketCutout(2);\n return Promise.resolve();\n }\n if (\n (_info.buildingInfo.listPosts.length === 0 &&\n _info.buildingInfo.existingType.value !== 3) ||\n this.currentBuildingInfo.isOpen\n ) {\n return Promise.resolve();\n }\n const _structureType = _info.buildingInfo.structureType.value;\n if (_structureType === 0 || _structureType === 3) {\n if (\n _info.buildingInfo.existingLength +\n _info.buildingInfo.existingLength2 *\n (_info.buildingInfo.existingType.value === 3 ? 2 : 1) <\n _info.buildingInfo.roofOverallLength\n ) {\n this.isError = true;\n this.statusError =\n \"The Patios length greater than existing building. Please check existing building length.\";\n return Promise.resolve();\n }\n }\n\n if (_info.buildingInfo.minHeight < 1900) {\n this.isError = true;\n this.statusError =\n \"Min. Height Under Beam must be greater than or equal to 1900mm.\";\n return Promise.resolve();\n }\n if (_info.buildingInfo.columnType.value < 0) {\n this.isError = true;\n this.statusError = `Patios Height is over ${\n _info.buildingInfo.structureType.value === 4 ? \"3600mm\" : \"4000mm\"\n }.`;\n return Promise.resolve();\n }\n if (\n _info.buildingInfo.roofSheetingType.value === 2 &&\n _info.buildingInfo.roofPitch < 5\n ) {\n this.isError = true;\n this.statusError = `${_info.buildingInfo.roofSheetingType.text} must be greater than or equal to 5 degrees pitch`;\n return Promise.resolve();\n }\n\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n UI.span > this.maxSpan\n ) {\n this.isError = true;\n this.statusError = `Span must be less than max span!`;\n return Promise.resolve();\n }\n\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n UI.structureType == CONNECTION_TYPE.EXISTING &&\n UI.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch) >\n UI.existingWallHeight\n ) {\n this.isError = true;\n this.statusError = `Roof top must be lower eave height!`;\n return Promise.resolve();\n }\n\n this.jobService\n .calcBOMByPara(_info)\n .pipe(first())\n .subscribe(\n (data) => {\n const maxInfo = { ...data.data.maxInfo };\n if (data.statusCode === 200) {\n this.currentBuildingInfo.quoteInfo = { ...data.data.quoteInfo };\n this.currentBuildingInfo.BOMInfo = [...data.data.BOMInfo];\n this.currentBuildingInfo.additionalBOM = [\n ...data.data.additionalBOM,\n ];\n this.currentQuoteInfo.quoteInfo = { ...data.data.quoteInfo };\n this.isError = false;\n this.statusError = \"\";\n } else {\n if (data.data.error) {\n this.message.error(data.data.error);\n this.isError = true;\n this.statusError = data.data.error;\n // console.log('onCalcPrice :', data.data.error);\n } else {\n this.message.error(maxInfo.error);\n this.isError = true;\n this.statusError = maxInfo.error;\n // console.log('onCalcPrice :', _maxInfo.error);\n }\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n let _isChanged = false;\n if (maxInfo.beamSize.value === 0) {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) => f.id == 0 && f.beamType == this.sltBeamType.currentValue\n );\n this.sltBeamSize.setSelected(0);\n _isChanged = true;\n } else {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= maxInfo.minBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (this.sltBeamSize.currentValue < maxInfo.beamSize.value) {\n this.sltBeamSize.setSelected(maxInfo.beamSize.value);\n _isChanged = true;\n }\n }\n //House beam\n if (this.chkHasHouseBeam.currentValue) {\n if (maxInfo.houseBeamSize.value === 0) {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id == 0 && f.beamType == this.sltBeamType.currentValue\n );\n this.sltBeamSize.setSelected(0);\n _isChanged = true;\n } else {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= maxInfo.minHouseBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (\n this.sltHouseBeamSize.currentValue <\n maxInfo.houseBeamSize.value\n ) {\n this.sltHouseBeamSize.setSelected(\n maxInfo.houseBeamSize.value\n );\n _isChanged = true;\n }\n }\n } else {\n this.houseBeamSizeList = this.beamSizeList;\n this.sltHouseBeamSize.setSelected(this.sltBeamSize.currentValue);\n }\n\n if (_isChanged) {\n setTimeout(() => {\n this.patiosManager.load();\n }, 700);\n }\n }\n if (maxInfo.thickness.value === 0) {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id == 0\n );\n this.sltRoofThickness.setSelectedAndHandleEvent(0);\n } else {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id >= maxInfo.minThickness.value\n );\n if (this.sltRoofThickness.currentValue < maxInfo.thickness.value) {\n this.sltRoofThickness.setSelectedAndHandleEvent(\n maxInfo.thickness.value\n );\n }\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.maxSpan = maxInfo.maxSpan;\n this.maxSpanText = maxInfo.maxSpanText;\n }\n // this.maxBaySizeText = maxInfo.maxBaySizeText;\n this.maxThickness = maxInfo.maxThickness;\n this.maxBeamSizeText = maxInfo.maxBeamSizeText;\n this.flyoverBracketNumber = maxInfo.flyoverBracketNumber;\n this.flyoverBracketNumberCutOut = maxInfo.flyoverBracketNumberCutOut;\n this.fasciaBracketNumber = maxInfo.fasciaBracketNumber;\n this.fasciaBracketNumberCutOut = maxInfo.fasciaBracketNumberCutOut;\n\n if ([3, 5, 6].includes(UI.structureType)) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.fasciaBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(this.fasciaBracketNumber);\n } else {\n this.patiosManager.loadBracket(this.fasciaBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n }\n } else {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.flyoverBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n }\n }\n this.isPricing = false;\n },\n (error) => {\n this.message.error(error);\n this.isError = true;\n this.statusError = error;\n this.isUploading = false;\n }\n );\n return Promise.resolve();\n }\n public onSupplyTypeChange(): Promise {\n const _info = {\n ...this.currentBuildingInfo,\n buildingInfo: this.bindBuildingInfo(),\n clientInfo: {\n ...this.currentQuoteInfo.clientInfo,\n },\n quoteInfo: this.currentQuoteInfo.quoteInfo,\n };\n if (_info.buildingInfo.listPosts.length === 0) {\n return;\n }\n this.jobService\n .calcBOMByPara(_info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentQuoteInfo.quoteInfo = data.data.quoteInfo;\n } else {\n this.message.error(data.message);\n console.log(\"onSupplyTypeChange :\", data.message);\n }\n },\n (error) => {\n this.message.error(error);\n console.log(\"onSupplyTypeChange :\", error);\n this.isUploading = false;\n }\n );\n return Promise.resolve();\n }\n onNewConnectionType(type: number): void {\n if (type == 4) {\n this.isFBRoof = false;\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n this.sltStructureType.setSelected(type);\n\n this.uiManager.onStructureTypeChanged(null, type);\n }\n // if (type < 5) {\n if (type == 4) {\n this.existingHouseType = 0;\n }\n this.initObject();\n if (type === 5 || type == 6) {\n this.currentBuildingInfo.buildingInfo.backFascia = type === 6;\n this.currentBuildingInfo.buildingInfo.fasciaBracketHeight =\n type === 5 || type === 6\n ? this.env.fasciaUpstandBrackets.max\n : this.env.fasciaUpstandBrackets.default;\n } else if (type === 3) {\n this.currentBuildingInfo.buildingInfo.fasciaBracketHeight = 0;\n }\n this.currentBuildingInfo.buildingInfo.structureType.value = type;\n //HACK: Existing Type: Alway minHeight > 1900mm\n if (type === CONNECTION_TYPE.EXISTING) {\n this.currentBuildingInfo.buildingInfo.eaveHeight =\n this.currentBuildingInfo.buildingInfo.buildingHeight +\n EXISTING_BUILDING_CONFIG.BUILDING_HEIGHT_OFFSET;\n }\n this.uiManager.loadFromObject(this.currentBuildingInfo.buildingInfo);\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n this.sltRoofPitch.setSelected(10);\n\n if (this.isFBRoof && UI.structureType == CONNECTION_TYPE.EXISTING) {\n this.sldExistingWallHeight.setValue(4000);\n }\n } else {\n this.sltRoofPitch.setSelected(2);\n }\n this.isVisibleOpenModal = false;\n this.statusText = STATUS_TEXT.NEW;\n this.isSaveAs = 0;\n // }\n }\n onNewExistingHouseType(type: number, FBRoof: boolean = false): void {\n let isReload = false;\n if (\n this.isFBRoof !== FBRoof &&\n (type == this.existingHouseType || this.existingHouseType == -1)\n ) {\n isReload = true;\n }\n this.existingHouseType = type;\n this.currentStepNew = 1;\n this.isFBRoof = FBRoof;\n if (isReload) {\n this.uiManager.onStructureTypeChanged(null, type);\n }\n }\n onShowOpenModal(type: number): void {\n this.newOpenType = type === 0 ? 0 : 1;\n this.existingHouseType = -1;\n this.currentStepNew = 0;\n this.isSearching = false;\n this.isOpening = false;\n this.isVisibleOpenModal = true;\n }\n // Save\n onShowSaveModal(): void {\n this.isVisibleDiscount = false;\n this.isVisibleMoreInfo = false;\n // Validation checks\n this.currentBuildingInfo = {\n ...this.currentBuildingInfo,\n buildingInfo: { ...this.bindBuildingInfo() },\n };\n if (this.currentBuildingInfo.isOpen && this.isSaveAs === 0) {\n this.message.error(\n 'This project could not be saved because it is existed project, please \"Save As\" to edit as new project.'\n );\n }\n if (this.isError) {\n this.message.error(this.statusError);\n return;\n }\n this.panelBOM.onRefresh();\n this.isPricing = true;\n this.jobService\n .checkData(this.currentBuildingInfo)\n .pipe(first())\n .subscribe(\n (cb) => {\n if (cb.statusCode === 200) {\n if (cb.data.status) {\n this.currentQuoteInfo = {\n clientInfo: {\n ...this.currentBuildingInfo.clientInfo,\n date:\n this.isSaveAs > 0\n ? new Date()\n : this.currentBuildingInfo.clientInfo.date,\n },\n quoteInfo: { ...this.currentBuildingInfo.quoteInfo },\n };\n this.addCostInstallDes =\n this.currentQuoteInfo.quoteInfo.costList.length > 0\n ? this.currentQuoteInfo.quoteInfo.costList[0].description\n : \"\";\n this.currentStep = 0;\n this.isUploading = false;\n if (!this.currentQuoteInfo.quoteInfo.customText) {\n this.currentQuoteInfo.quoteInfo.customText = cb.data.customText;\n }\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumber =\n cb.data.maxInfo.flyoverBracketNumber;\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumberCutOut =\n cb.data.maxInfo.flyoverBracketNumberCutOut;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumber =\n cb.data.maxInfo.fasciaBracketNumber;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumberCutOut =\n cb.data.maxInfo.fasciaBracketNumberCutOut;\n if (\n this.currentBuildingInfo._id === null &&\n this.isSaveAs === 0\n ) {\n this.jobService\n .genJobNo({ userId: this.currentUser.user._id })\n .pipe(first())\n .subscribe(\n (cbJob) => {\n if (cbJob.statusCode === 200) {\n this.isPricing = false;\n this.currentQuoteInfo.clientInfo.jobNo = cbJob.data;\n this.isVisible = true;\n this.isError = false;\n this.statusError = \"\";\n }\n },\n (error) => {\n this.message.error(error);\n this.isError = true;\n this.statusError = error;\n }\n );\n } else {\n this.isPricing = false;\n this.isVisible = true;\n }\n } else {\n this.message.error(cb.data.error);\n this.isError = true;\n this.statusError = cb.data.error;\n // console.log('onShowSaveModal :', cb.data.error);\n }\n } else {\n this.message.error(cb.message);\n this.isError = true;\n this.statusError = cb.message;\n // console.log('onShowSaveModal :', cb.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isError = true;\n this.statusError = error;\n }\n );\n // End check\n }\n\n onNext(): void {\n if (this.currentQuoteInfo.clientInfo.jobNo === \"\") {\n this.message.warning(\"Please input your Job No.!\");\n return;\n }\n if (this.currentQuoteInfo.clientInfo.cusName === \"\") {\n this.message.warning(\"Please input your Client Name!\");\n return;\n }\n this.currentStep += 1;\n }\n onPre(): void {\n this.currentStep -= 1;\n }\n onNextNew(): void {\n this.currentStepNew = 1;\n }\n onPreNew(): void {\n this.currentStepNew = 0;\n }\n onCustomTextChange(text, type) {\n let info = null;\n if (type === 0) {\n info = { depositText: text };\n } else if (type === 1) {\n info = { stage1Text: text };\n } else {\n info = { stage2Text: text };\n }\n this.userService\n .updateCustomText(this.currentUser.user._id, info)\n .subscribe((rs) => {});\n }\n onSaveAs(type: number): void {\n if (this.currentBuildingInfo._id === null) {\n this.message.warning(\n `You can't [${\n type === 1 ? \"Copy\" : \"Revised\"\n }] because [Job No.] is empty.`\n );\n return;\n }\n this.onQuickSaveAs(type, this.currentBuildingInfo._id);\n }\n onQuickSaveAs(type: number, id: any): void {\n this.isOpening = true;\n this.jobService\n .copyOrRevisedById(id, type)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = { ...data.data.list, _id: null };\n if (!this.currentBuildingInfo.quoteInfo.costList) {\n this.currentBuildingInfo.quoteInfo.costList = [];\n }\n if (!this.currentBuildingInfo.additionalBOM) {\n this.currentBuildingInfo.additionalBOM = [];\n }\n if (\n this.currentBuildingInfo.quoteInfo.costList.length === 0 &&\n this.currentBuildingInfo.quoteInfo.addCostInstall > 0\n ) {\n this.currentBuildingInfo.quoteInfo.costList.push({\n index: 1,\n description: \"\",\n value: this.currentBuildingInfo.quoteInfo.addCostInstall,\n });\n }\n this.currentQuoteInfo = {\n clientInfo: { ...data.data.list.clientInfo },\n quoteInfo: { ...data.data.list.quoteInfo },\n };\n this.currentQuoteInfo.quoteInfo.costList = [\n ...this.currentBuildingInfo.quoteInfo.costList,\n ];\n const _structureType =\n data.data.list.buildingInfo.structureType.value;\n\n this.uiManager\n .loadFromObject(data.data.list.buildingInfo)\n .then(() => {\n const _maxInfo = { ...data.data.maxInfo };\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n if (_maxInfo.beamSize.value === 0) {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id == 0 && f.beamType == this.sltBeamType.currentValue\n );\n this.sltBeamSize.setSelected(0);\n } else {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= _maxInfo.minBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (\n this.sltBeamSize.currentValue < _maxInfo.beamSize.value\n ) {\n this.sltBeamSize.setSelected(_maxInfo.beamSize.value);\n }\n }\n //House beam\n if (this.chkHasHouseBeam.currentValue) {\n if (_maxInfo.houseBeamSize.value === 0) {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id == 0 &&\n f.beamType == this.sltBeamType.currentValue\n );\n this.sltHouseBeamSize.setSelected(0);\n } else {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= _maxInfo.minHouseBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (\n this.sltHouseBeamSize.currentValue <\n _maxInfo.houseBeamSize.value\n ) {\n this.sltHouseBeamSize.setSelected(\n _maxInfo.houseBeamSize.value\n );\n }\n }\n } else {\n this.houseBeamSizeList = this.beamSizeList;\n this.sltHouseBeamSize.setSelected(\n this.sltBeamSize.currentValue\n );\n }\n }\n\n if (_maxInfo.thickness.value === 0) {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id == 0\n );\n this.sltRoofThickness.setSelectedAndHandleEvent(0);\n } else {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id >= _maxInfo.minThickness.value\n );\n if (\n this.sltRoofThickness.currentValue <\n _maxInfo.thickness.value\n ) {\n this.sltRoofThickness.setSelectedAndHandleEvent(\n _maxInfo.thickness.value\n );\n }\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.maxSpan = _maxInfo.maxSpan;\n this.maxSpanText = _maxInfo.maxSpanText;\n }\n // this.maxBaySizeText = _maxInfo.maxBaySizeText;\n this.maxThickness = _maxInfo.maxThickness;\n this.maxBeamSizeText = _maxInfo.maxBeamSizeText;\n this.flyoverBracketNumber = _maxInfo.flyoverBracketNumber;\n this.flyoverBracketNumberCutOut =\n _maxInfo.flyoverBracketNumberCutOut;\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumber =\n this.flyoverBracketNumber;\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumberCutOut =\n this.flyoverBracketNumberCutOut;\n this.fasciaBracketNumber = _maxInfo.fasciaBracketNumber;\n this.fasciaBracketNumberCutOut =\n _maxInfo.fasciaBracketNumberCutOut;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumber =\n this.fasciaBracketNumber;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumberCutOut =\n this.fasciaBracketNumberCutOut;\n if (_structureType == 3) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.fasciaBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.fasciaBracketNumber\n );\n } else {\n //Fascia\n this.patiosManager.loadBracket(this.fasciaBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n }\n }\n if (_structureType == 1 || _structureType == 2) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.flyoverBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.flyoverBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n }\n }\n\n this.isVisibleOpenModal = false;\n this.isSaveAs = type;\n this.statusText =\n type === 1 ? STATUS_TEXT.COPY : STATUS_TEXT.REVISE;\n this.message.info(\"Operation completed successfully!\");\n // set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n });\n } else {\n this.message.error(data.data.error);\n }\n this.isOpening = false;\n },\n (error) => {\n this.isOpening = false;\n console.log(\"error :\", error);\n }\n );\n }\n onOpenFiles(type: number): void {\n const _diff = this.compareObject();\n if (_.isEmpty(_diff) || this.currentBuildingInfo.isOpen) {\n if (!this.currentBuildingInfo.files) {\n this.message.warning(\"File does not exist.\");\n return;\n }\n let _url = \"\";\n if (type === 1) {\n _url = `${environment.uploadUrl}/${this.currentBuildingInfo.files.engineeringFile}`;\n } else {\n _url = `${environment.uploadUrl}/${this.currentBuildingInfo.files.quotationFile}`;\n }\n const _link = document.createElement(\"a\");\n _link.href = _url;\n _link.target = \"_blank\";\n\n document.body.appendChild(_link);\n _link.click();\n _link.remove();\n } else {\n this.message.warning(\"You have to save before to print\");\n }\n }\n onUpdateJobFiles(info): void {\n this.jobService\n .updateJobFiles(info.id, info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = {\n ...this.currentBuildingInfo,\n files: info.files,\n };\n this.currentStep = 3;\n this.isVisible = false;\n this.isUploading = false;\n this.message.success(data.message);\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n }\n onUpload(): void {\n const _depositPer = this.currentQuoteInfo.quoteInfo.depositPer || 0;\n const _stage1Per = this.currentQuoteInfo.quoteInfo.stage1Per || 0;\n const _stage2Per = this.currentQuoteInfo.quoteInfo.stage2Per || 0;\n if (_depositPer + _stage1Per + _stage2Per > 100) {\n this.message.error(\"% Deposit + % Stage 1 + % Stage 2 > 100%\");\n return;\n }\n this.isUploading = true;\n this.currentQuoteInfo.clientInfo.jobNo =\n this.currentQuoteInfo.clientInfo.jobNo.toUpperCase();\n const info = {\n ...this.currentBuildingInfo,\n isSaveAs: this.isSaveAs,\n clientInfo: {\n ...this.currentQuoteInfo.clientInfo,\n },\n quoteInfo: {\n ...this.currentQuoteInfo.quoteInfo,\n },\n };\n this.currentStep = 3;\n if (this.isSaveAs > 0) {\n this.currentBuildingInfo._id = null;\n }\n if (this.currentBuildingInfo._id === null) {\n // New\n this.jobService\n .createJob(info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = { ...data.data.item };\n this.currentQuoteInfo = {\n quoteInfo: { ...this.currentBuildingInfo.quoteInfo },\n clientInfo: { ...this.currentBuildingInfo.clientInfo },\n };\n let _maxSpan = _.toNumber(\n this.maxThickness.replace(\"max (capacity)\", \"\")\n );\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n _maxSpan = this.maxSpan;\n }\n const _info = {\n ...data.data.jobInfo,\n maxSpan: _maxSpan,\n listBay: data.data.item.buildingInfo.listBay,\n };\n const _jobInfo = {\n ..._info,\n uploadFolder: environment.uploadFolder,\n pathLogo: `${environment.mediaFolder}/${data.data.jobInfo.pathLogo}`,\n pathPDF:\n data.data.jobInfo.pathPDF !== \"\"\n ? `${environment.mediaFolder}/${data.data.jobInfo.pathPDF}`\n : \"\",\n };\n this.statusText = STATUS_TEXT.SAVE;\n this.isSaveAs = 0;\n //set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n if (this.sltPanelDirectionShow.currentValue) {\n this.sltPanelDirectionShow.setValue(false);\n setTimeout(() => {\n this.printingManager.print(_jobInfo);\n }, 1000);\n } else {\n this.printingManager.print(_jobInfo);\n }\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n } else {\n // Edit\n this.jobService\n .UpdateJob(this.currentBuildingInfo._id, info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = { ...data.data.item };\n this.currentQuoteInfo = {\n quoteInfo: { ...this.currentBuildingInfo.quoteInfo },\n clientInfo: { ...this.currentBuildingInfo.clientInfo },\n };\n const _maxSpan = _.toNumber(\n this.maxThickness.replace(\"max (capacity)\", \"\")\n );\n const _info = {\n ...data.data.jobInfo,\n maxSpan: _maxSpan,\n listBay: data.data.item.buildingInfo.listBay,\n };\n const _jobInfo = {\n ..._info,\n uploadFolder: environment.uploadFolder,\n pathLogo: `${environment.mediaFolder}/${data.data.jobInfo.pathLogo}`,\n pathPDF:\n data.data.jobInfo.pathPDF !== \"\"\n ? `${environment.mediaFolder}/${data.data.jobInfo.pathPDF}`\n : \"\",\n };\n this.isSaveAs = 0;\n //set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n if (this.sltPanelDirectionShow.currentValue) {\n this.sltPanelDirectionShow.setValue(false);\n setTimeout(() => {\n this.printingManager.print(_jobInfo);\n }, 1000);\n } else {\n this.printingManager.print(_jobInfo);\n }\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n }\n }\n print2D() {\n // this.sldBuildingHeight.setMax(4000);\n this.printingManager.printTest();\n\n // this.sltColumnType.setSelected(\"2\");\n\n //this.sldNoOfBay.setValue(2);\n //console.log(this.dialogEditBay.totalBaySize, this.sldExistingLength.currentValue + this.sldExistingLength2.currentValue *2 + this.existingWallManager.geo_existingWallW1.width*2 + 200);\n }\n getPosts(_groups: any) {\n let _posts = [];\n _posts = _groups.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n );\n const _patios = _groups.filter(\n (x) => x.userData.category === GEOMETRY_CATEGORY.PATIOS\n );\n _patios.map((value) => {\n _posts.push(\n ...value.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n return value;\n });\n const listPosts = [];\n _posts.reduce(function (res, value) {\n if (!res[value.scale.y]) {\n res[value.scale.y] = {\n length: value.scale.y,\n qty: 0,\n };\n listPosts.push(res[value.scale.y]);\n }\n res[value.scale.y].qty += 1;\n return res;\n }, {});\n return listPosts;\n }\n\n public bindBuildingInfo(): any {\n const groups = this.scene.children.filter(\n (x) =>\n (x.userData.category === GEOMETRY_CATEGORY.PATIOS &&\n x.children.length > 0) ||\n x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST ||\n x.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n x.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL ||\n x.userData.type === GEOMETRY_TYPE.ROOF_PANEL ||\n x.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET ||\n x.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT ||\n x.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n x.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING ||\n x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n const listPosts = this.getPosts(groups);\n let cutoutCondition =\n this.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.sltExistingType.currentValue != BUILDING_SIDE.NONE &&\n this.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n let elementArray = {\n extFlyoverBrackets: [],\n flyoverBrackets: [],\n flyoverBracketCutOuts: [],\n fasciaBrackets: [],\n fasciaBracketCutouts: [],\n };\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n elementArray = this.utils.getInfoFromGeometry(\n this,\n groups,\n this.geometryManager,\n cutoutCondition,\n rakeCutCondition\n );\n } else {\n elementArray = this.utils.getInfoFromGeometryGableRoof(\n this,\n groups,\n this.geometryManager,\n cutoutCondition,\n rakeCutCondition\n );\n }\n\n const _bottomColourValue = this.sltColourRoof.items.find(\n (f) => f.id == this.sltColourRoof.currentValue\n )?.bottomValue;\n\n //Bottom Colour\n\n const _structureType = _.toNumber(this.sltStructureType.currentValue);\n const _existingType = _.toNumber(this.sltExistingType.currentValue);\n\n const _buildingInfo = {\n patiosRoofType: this.patiosRoofType,\n isFBRoof: this.isFBRoof,\n listPosts,\n existingType: {\n value: _existingType,\n text: this.sltExistingType.currentText,\n },\n existingLength: this.sldExistingLength.currentValue,\n existingLength2: this.sldExistingLength2.currentValue,\n existingWidth1: this.sldExistingWidth1.currentValue,\n existingWidth2: this.sldExistingWidth2.currentValue,\n existingRoofPitch: _.toNumber(this.sltExistingRoofPitch.currentValue),\n fasciaDepth: this.sldFasciaDepth.currentValue,\n eaveHeight: this.sldExistingWallHeight.currentValue,\n eaveWidth: this.sldEaveWidth.currentValue,\n wallType: {\n value: _.toNumber(this.sltWallType.currentValue),\n text: this.sltWallType.currentText,\n },\n existingRoofType: {\n value: _.toNumber(this.sltExistingRoofType.currentValue),\n text: this.sltExistingRoofType.currentText,\n },\n flyoverBracketHeight: this.sldFlyOverBracketHeight.currentValue,\n extFlyoverBracketNumber: elementArray.extFlyoverBrackets, // _extFlyoverBrackets,\n flyoverBracketNumber: elementArray.flyoverBrackets, // _flyoverBrackets,\n flyoverBracketNumberCutOut: elementArray.flyoverBracketCutOuts, // _flyoverBracketsCutOut,\n fasciaBracketHeight: _.toNumber(\n this.sltFasciaUpstandBrackets.currentValue\n ),\n fasciaBracketNumber: elementArray.fasciaBrackets,\n fasciaBracketNumberCutOut: elementArray.fasciaBracketCutouts,\n // -------------\n backFascia: this.sltUpFasciaUpstandBracket.currentValue,\n rightToLeft: this.sltPanelDirection.currentValue,\n structureType: {\n value: _structureType,\n text: this.sltStructureType.currentText,\n },\n windClass: {\n value: _.toNumber(this.sltWindClass.currentValue),\n text: this.sltWindClass.currentText,\n },\n span: this.sldSpan.currentValue,\n multiSpan: this.sldMultiSpan.currentValue,\n buildingHeight: this.sldBuildingHeight.currentValue,\n frontOverhang: this.sldFrontOverhang.currentValue,\n backOverhang: this.sldBackOverhang.currentValue,\n baySize: this.sldBaySize.currentValue,\n noOfBay: this.sldNoOfBay.currentValue,\n roofPitch: _.toNumber(this.sltRoofPitch.currentValue),\n leftOverhang: this.sldLeftOverhang.currentValue,\n rightOverhang: this.sldRightOverhang.currentValue,\n roofOverallLength: this.sldRoofOverallLength.currentValue,\n roofOverallWidth: this.sldRoofOverallWidth.currentValue,\n minHeight: this.sldMinHeight.currentValue,\n isRapidSetCement: this.chkRapidSetCement.currentValue,\n hasHouseBeam: this.chkHasHouseBeam.currentValue,\n isDripBarge: this.sltDripBarge.currentValue,\n cutOut: {\n value: _.toNumber(this.sltCutOut.currentValue),\n text: this.sltCutOut.currentText,\n },\n //--------RakeCut\n leftCutType: {\n value: _.toNumber(this.sltLeftCutType.currentValue),\n text: this.sltLeftCutType.currentText,\n },\n rightCutType: {\n value: _.toNumber(this.sltRightCutType.currentValue),\n text: this.sltRightCutType.currentText,\n },\n leftCutVertical: this.sldLeftCutVertical.currentValue,\n leftCutHorizontal: this.sldLeftCutHorizontal.currentValue,\n rightCutVertical: this.sldRightCutVertical.currentValue,\n rightCutHorizontal: this.sldRightCutHorizontal.currentValue,\n //--------\n listBay: this.dialogEditBay.listBay,\n // -----------------------------\n roofSheetingType: {\n value: _.toNumber(this.sltRoofSheetingType.currentValue),\n text: this.sltRoofSheetingType.currentText,\n },\n thickness: {\n value: _.toNumber(this.sltRoofThickness.currentValue),\n text: this.sltRoofThickness.currentText,\n },\n flatBottom: {\n value: _.toNumber(this.sltFlatBottom.currentValue),\n text: this.sltFlatBottom.currentText,\n },\n bargeType: {\n value: _.toNumber(this.sltBargeType.currentValue),\n text: this.sltBargeType.currentText,\n },\n receiverType: {\n value: _.toNumber(this.sltReceiverType.currentValue),\n text: this.sltReceiverType.currentText,\n },\n zFlashingType: {\n value: _.toNumber(this.sltZFlashingType.currentValue),\n text: this.sltZFlashingType.currentText,\n },\n downpipeType: {\n value: _.toNumber(this.sltDownpipeType.currentValue),\n text: this.sltDownpipeType.currentText,\n },\n gutterType: {\n value: _.toNumber(this.sltGutterType.currentValue),\n text: this.sltGutterType.currentText,\n },\n beamType: {\n value: _.toNumber(this.sltBeamType.currentValue),\n text: this.sltBeamType.currentText,\n },\n columnType: {\n value: _.toNumber(this.sltColumnType.currentValue),\n text: this.sltColumnType.currentText,\n },\n baseFixingType: {\n value: _.toNumber(this.sltBaseFixingType.currentValue),\n text: this.sltBaseFixingType.currentText,\n },\n beamSize: {\n value: _.toNumber(this.sltBeamSize.currentValue),\n text: this.sltBeamSize.currentText,\n },\n houseBeamSize: {\n value: _.toNumber(this.sltHouseBeamSize.currentValue),\n text: this.sltHouseBeamSize.currentText,\n },\n // ------------------------\n colourBottomRoof: {\n value: _.toNumber(this.sltColourRoof.currentValue),\n text: _bottomColourValue,\n },\n colourRoof: {\n value: _.toNumber(this.sltColourRoof.currentValue),\n text: this.sltColourRoof.currentText,\n },\n colourBarge: {\n value: _.toNumber(this.sltColourBarge.currentValue),\n text: this.sltColourBarge.currentText,\n },\n colourGutter: {\n value: _.toNumber(this.sltColourGutter.currentValue),\n text: this.sltColourGutter.currentText,\n },\n colourZFlashing: {\n value: _.toNumber(this.sltColourZFlashing.currentValue),\n text: this.sltColourZFlashing.currentText,\n },\n colourPost: {\n value: _.toNumber(this.sltColourPost.currentValue),\n text: this.sltColourPost.currentText,\n },\n colourBeam: {\n value: _.toNumber(this.sltColourBeam.currentValue),\n text: this.sltColourBeam.currentText,\n },\n colourBracket: {\n value: _.toNumber(this.sltColourBracket.currentValue),\n text: this.sltColourBracket.currentText,\n },\n colourFasciaBracket: {\n value: _.toNumber(this.sltColourFasciaBracket.currentValue),\n text: this.sltColourFasciaBracket.currentText,\n },\n colourDownpipe: {\n value: _.toNumber(this.sltColourDownpipe.currentValue),\n text: this.sltColourDownpipe.currentText,\n },\n userData: elementArray,\n roofHeight: this.roofHeight,\n panelType: this.panelType,\n };\n return _buildingInfo;\n }\n onCancel(): void {\n this.isVisible = false;\n this.isVisibleOpenModal = false;\n this.isSaveAs = 0;\n }\n\n public onShowAddCostClick(): void {\n if (!this.currentBuildingInfo.isOpen) {\n const _costList = this.currentQuoteInfo.quoteInfo.costList\n ? [...this.currentQuoteInfo.quoteInfo.costList]\n : [];\n if (_costList.length === 0) {\n _costList.push({ index: 1, description: \"\", value: 0 });\n }\n this.dialogAddCost.show(true, _costList);\n }\n }\n\n compareObject(): any {\n const _temp = this.bindBuildingInfo();\n delete _temp.userData;\n delete _temp.roofHeight;\n const _old = _.clone(this.oldBuildingInfo);\n const diff = _.omitBy(_temp, function (v, k) {\n const _value = _.get(_old, k);\n const _equal = _.isEqual(v, _value);\n return _equal;\n });\n return diff;\n }\n onViewBOM(): void {\n const _diff = this.compareObject();\n if (\n (this.currentBuildingInfo._id !== null && _.isEmpty(_diff)) ||\n this.currentBuildingInfo.isOpen\n ) {\n this.dialogBOM.show(\n true,\n this.currentBuildingInfo._id,\n this.currentBuildingInfo.clientInfo.jobNo,\n this.isAdmin,\n this.currentUser\n );\n } else {\n this.message.warning(\"You have to save before to print BOM\");\n }\n }\n\n onViewBOMTest(): void {\n this.dialogBOM.showTest(\n true,\n this.currentUser,\n this.currentBuildingInfo.BOMInfo,\n this.currentBuildingInfo.additionalBOM,\n this.currentBuildingInfo.quoteInfo\n );\n }\n\n public onAddBOM(price) {\n this.currentBuildingInfo.additionalBOM.push(price);\n this.onResetIdx();\n this.onCalcPrice();\n }\n public onDeleteBOM(data) {\n this.currentBuildingInfo.additionalBOM =\n this.currentBuildingInfo.additionalBOM.filter((f) => f.idx !== data.idx);\n this.onResetIdx();\n this.onCalcPrice();\n }\n\n onResetIdx() {\n const maxIdx = _.maxBy(this.currentBuildingInfo.BOMInfo, \"idx\");\n const _maxIdx = maxIdx.idx + 1;\n this.currentBuildingInfo.additionalBOM =\n this.currentBuildingInfo.additionalBOM.map((m, index) => {\n return { ...m, idx: _maxIdx + index };\n });\n }\n\n onSearch(): void {\n this.isSearching = true;\n const info = {\n userId: this.currentUser.user._id,\n jobNo: this.jobNoSearch.toUpperCase(),\n cusName: this.cusNameSearch,\n };\n this.jobService\n .getJobByUserId(info)\n .pipe(first())\n .subscribe(\n (data) => {\n this.dataOPEN = data.data.list;\n this.isSearching = false;\n },\n (error) => {\n console.log(\"error :\", error);\n this.isSearching = false;\n }\n );\n }\n onOpenById(id: any): void {\n this.isSearching = true;\n this.jobService\n .getById(id)\n .pipe(first())\n .subscribe(\n (data) => {\n this.currentBuildingInfo = { ...data.data.list, isOpen: true };\n if (!this.currentBuildingInfo.quoteInfo.costList) {\n this.currentBuildingInfo.quoteInfo.costList = [];\n }\n if (!this.currentBuildingInfo.additionalBOM) {\n this.currentBuildingInfo.additionalBOM = [];\n }\n if (\n this.currentBuildingInfo.quoteInfo.costList.length === 0 &&\n this.currentBuildingInfo.quoteInfo.addCostInstall > 0\n ) {\n this.currentBuildingInfo.quoteInfo.costList.push({\n index: 1,\n description: \"\",\n value: this.currentBuildingInfo.quoteInfo.addCostInstall,\n });\n }\n this.currentQuoteInfo = {\n clientInfo: { ...data.data.list.clientInfo },\n quoteInfo: { ...data.data.list.quoteInfo },\n };\n this.currentQuoteInfo.quoteInfo.costList = [\n ...this.currentBuildingInfo.quoteInfo.costList,\n ];\n const _structureType =\n data.data.list.buildingInfo.structureType.value;\n this.flyoverBracketNumber =\n data.data.list.buildingInfo.flyoverBracketNumber;\n this.flyoverBracketNumberCutOut =\n data.data.list.buildingInfo.flyoverBracketNumberCutOut;\n this.fasciaBracketNumber =\n data.data.list.buildingInfo.fasciaBracketNumber || 0;\n this.fasciaBracketNumberCutOut =\n data.data.list.buildingInfo.fasciaBracketNumberCutOut || 0;\n this.uiManager\n .loadFromObject(data.data.list.buildingInfo)\n .then(() => {\n if (_structureType === 1 || _structureType === 2) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.flyoverBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.flyoverBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n }\n }\n if (_structureType == 3) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.fasciaBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.fasciaBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.fasciaBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n }\n }\n this.isVisibleOpenModal = false;\n this.statusText = STATUS_TEXT.COPY;\n this.isSearching = false;\n // set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n });\n },\n (error) => {\n console.log(\"error :\", error);\n this.isSearching = false;\n }\n );\n }\n\n onOpenPropertyClick(): void {\n this.isVisibleProperty = !this.isVisibleProperty;\n setTimeout(() => {\n this.resizeEventHandle();\n }, 300);\n }\n onRoofSheetingTypeChanged(): void {\n this.sltBargeType.setSelected(this.sltRoofSheetingType.currentValue);\n this.sltReceiverType.setSelected(this.sltRoofSheetingType.currentValue);\n this.sltZFlashingType.setSelected(this.sltRoofSheetingType.currentValue);\n }\n\n private initObject() {\n this.isAdmin =\n this.currentUser.user.roles === this.objects.roles.admin ? true : false;\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.maxSpan = this.env.span.max;\n }\n this.maxBaySize = this.env.baySize.max;\n this.maxBaySizeText = `${this.env.baySize.max} max`;\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) => f.beamType == 0\n );\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) => f.beamType == 0\n );\n this.thicknessList = [...this.objects.thicknessList];\n this.baseFixingTypeList = [...this.objects.baseFixingTypeList];\n const _template = TEMPLATE.find(\n (f) =>\n f.type === (this.existingHouseType === -1 ? 1 : this.existingHouseType)\n );\n // Old Job\n this.currentBuildingInfo = {\n _id: null,\n userId: this.currentUser.user._id,\n isOpen: false,\n buildingInfo: {\n ..._template,\n patiosRoofType: this.patiosRoofType,\n isFBRoof: this.isFBRoof,\n existingRoofPitch: this.env.existingRoofPitch.default,\n fasciaDepth: this.env.fasciaDepth.default,\n eaveHeight: this.env.eaveHeight.default,\n eaveWidth: this.env.eaveWidth.default,\n flyoverBracketHeight: this.env.flyOverBracketHeight.default,\n fasciaBracketHeight: this.env.fasciaUpstandBrackets.default,\n backFascia: false,\n hasHouseBeam: false,\n multiSpan: this.env.multiSpan.default,\n buildingHeight: this.env.height.default,\n frontOverhang: this.env.frontOverhang.default,\n backOverhang: this.env.backOverhang.default,\n roofOverallLength: this.env.baySize.default,\n roofPitch: 2,\n leftOverhang: this.env.leftOverhang.default,\n rightOverhang: this.env.rightOverhang.default,\n //RakeCut\n leftCutType: {\n value: 0,\n },\n rightCutType: {\n value: 0,\n },\n leftCutVertical: this.env.rakeCutVertical.default,\n leftCutHorizontal: this.env.rakeCutHorizontal.default,\n rightCutVertical: this.env.rakeCutVertical.default,\n rightCutHorizontal: this.env.rakeCutHorizontal.default,\n //\n rightToLeft: false,\n roofOverallWidth:\n this.env.span.default +\n this.env.frontOverhang.default +\n this.env.backOverhang.default,\n minHeight: 0,\n colourDownpipe: {\n value: 14214630,\n },\n colourBracket: {\n value: 15000277,\n },\n colourFasciaBracket: {\n value: 15000277,\n },\n colourBeam: {\n value: 15000277,\n },\n colourPost: {\n value: 15000277,\n },\n colourZFlashing: {\n value: 15000277,\n },\n colourGutter: {\n value: 15000277,\n },\n colourBarge: {\n value: 15000277,\n },\n colourRoof: {\n value: 15000277,\n },\n beamSize: {\n value: 1,\n },\n houseBeamSize: {\n value: 1,\n },\n baseFixingType: {\n value: 0,\n },\n columnType: {\n value: 0,\n },\n beamType: {\n value: 0,\n },\n gutterType: {\n value: 0,\n },\n downpipeType: {\n value: 0,\n },\n zFlashingType: {\n value: 0,\n },\n receiverType: {\n value: 0,\n },\n bargeType: {\n value: 0,\n },\n flatBottom: {\n value: 15000277,\n },\n thickness: {\n value: 1,\n },\n roofSheetingType: {\n value: 0,\n },\n windClass: {\n value: 0,\n },\n structureType: {\n value: 3,\n },\n wallType: {\n value: 0,\n },\n roofType: {\n value: 0,\n },\n panelType: this.panelType,\n },\n clientInfo: {\n jobNo: \"\",\n cusName: \"\",\n address: \"\",\n suburb: \"\",\n state: \"\",\n postcode: \"\",\n email: \"\",\n phone: \"\",\n supplyType: \"supply_install\",\n date: new Date(),\n },\n quoteInfo: {\n nett: 0,\n total0: 0,\n totalPrice: 0,\n discountPer: 0,\n discount: 0,\n depositPer: 0,\n stage1Per: 0,\n stage2Per: 0,\n deposit: 0,\n stage1: 0,\n stage2: 0,\n finalPayment: 0,\n addCostInstall: 0,\n userNote: \"\",\n note: \"\",\n gst: 0,\n fasciaInstall: 0,\n flyOverInstall: 0,\n installMaterial: 0,\n supplyOnlyKits: 0,\n perPostInstall: 0,\n addCost: 0,\n costList: [],\n customText: null,\n },\n additionalBOM: [],\n };\n // Current Job\n this.currentQuoteInfo = { ...this.currentBuildingInfo };\n // this.dataBOM = { quoteInfo: { ...this.currentBuildingInfo.quoteInfo } };\n }\n onApplyToAll(): void {\n this.sltColourBarge.setSelected(this.sltColourRoof.currentValue);\n this.sltColourZFlashing.setSelected(this.sltColourRoof.currentValue);\n this.sltColourGutter.setSelected(this.sltColourRoof.currentValue);\n }\n\n public setPatiosWidth(totalWidth: number) {\n let realWidth = totalWidth;\n if (\n UI.structureType == CONNECTION_TYPE.EXISTING &&\n UI.existingType == BUILDING_SIDE.BOTH &&\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.isFBRoof\n ) {\n realWidth =\n totalWidth -\n UI.overhangLeft -\n UI.overhangRight -\n OFFSET_GUTTER_TO_WALL * 2;\n }\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND &&\n UI.existingType == BUILDING_SIDE.BOTH &&\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.isFBRoof\n ) {\n realWidth = Math.ceil(totalWidth - 2 * FASCIA_BRACKET_FIT);\n }\n let baySize = realWidth;\n let noOfBay = 1;\n if (realWidth > CONFIG.baySize.max) {\n noOfBay = Math.ceil(realWidth / CONFIG.baySize.max);\n baySize = Math.ceil(realWidth / noOfBay);\n }\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.isFBRoof &&\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n this.sldSpan.setValueAndHandleEvent(realWidth, true);\n }\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF ||\n (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.isFBRoof)\n ) {\n this.sldBaySize.setValue(baySize);\n this.sldNoOfBay.setValue(noOfBay);\n }\n }\n public onBtnRakeCutLeftClick(e) {\n HomeComponent.ins.sltLeftCutType.setSelected(0);\n }\n public onBtnRakeCutRightClick(e) {\n HomeComponent.ins.sltRightCutType.setSelected(0);\n }\n public onBtnCutoutClick(e) {\n HomeComponent.ins.sltCutOut.setSelected(0);\n }\n public onsltUpFasciaUpstandBracketChange(e) {\n if (UI.upstandBraketType == 0 && UI.isUpFasciaUpstandardBracket) {\n HomeComponent.ins.sltFasciaUpstandBrackets.setSelected(150);\n HomeComponent.ins.patiosManager.load();\n }\n }\n\n onChangeToInsulatedPanel(): void {\n this.router.navigateByUrl(\"/\");\n }\n\n onShowThumbnailClick(data): void {\n this._albums.length = 0;\n var _url = `${environment.uploadUrl}/${data.files.thumbnailFile}`;\n const album: Album = {\n src: _url,\n caption: `${data?.clientInfo?.cusName} [#${data?.clientInfo?.jobNo}]`,\n thumb: _url,\n };\n\n this._albums.push(album);\n this._lightbox.open(this._albums, 0);\n }\n}\n","\n\n\n \n \n \n New\n \n \n \n \n \n \n\n \n \n \n \n
\n \n
\n

Patios Roof Type:

\n
\n
\n \n \n \n \n \n \n \n
\n
\n
\n\n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n
\n
\n
\n

EXISTING BUILDING

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

FLY OVER

\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n

BACK FLY OVER

\n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n

TO FASCIA

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

FASCIA UPSTAND BRACKET

\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n

BACK FASCIA

\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n 0\"\n >\n \n Back\n \n \n
\n
\n \n \n Open\n \n
\n
\n

Job No.:

\n
\n
\n \n
\n
\n
\n

Client Name:

\n
\n
\n \n
\n
\n
\n \n \n Search\n \n \n
\n
\n \n \n \n \n Quote No.\n Quote Date\n Client Name\n User Name\n Prod.\n Total Price\n Action\n \n \n \n \n {{ data.clientInfo.jobNo }}\n {{ data.clientInfo.date | date : \"dd/MM/yyyy\" }}\n {{ data.clientInfo.cusName }}\n {{ data.userId.fullName }}\n \n {{\n data?.buildingInfo?.panelType\n }}\n \n \n {{\n data?.buildingInfo?.panelType\n }}\n \n \n {{ data.quoteInfo.totalPrice | currency }}\n \n \n \n
\n Switch to Insulated\n
\n \n \n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n \n
\n \n \n \n \n \n
\n \n
\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n

Job No.

\n
\n
\n \n
\n
\n
\n

Date

\n
\n
\n \n \n
\n
\n \n
\n
\n

Client Name

\n
\n
\n \n
\n
\n
\n

Site Address

\n
\n
\n \n
\n
\n \n
\n
\n

Suburb

\n
\n
\n \n
\n
\n
\n

State

\n
\n
\n \n
\n
\n \n
\n
\n

Postcode

\n
\n
\n \n
\n
\n
\n

Email Address

\n
\n
\n \n
\n
\n \n
\n
\n

Phone

\n
\n
\n \n
\n
\n
\n

Supply Type

\n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n \n \n
\n Note\n \n
\n
\n Price\n \n \n
\n Nett\n
\n
\n {{ currentQuoteInfo.quoteInfo.nett | currency }}\n
\n
\n \n \n
\n Off Fascia Install\n
\n
\n {{\n currentQuoteInfo.quoteInfo.fasciaInstall | currency\n }}\n
\n \n \n \n
\n Fly Over Install\n
\n
\n {{\n currentQuoteInfo.quoteInfo.flyOverInstall | currency\n }}\n
\n \n \n \n
\n Install Mark up on material\n
\n
\n {{\n currentQuoteInfo.quoteInfo.installMaterial | currency\n }}\n
\n \n \n \n
\n Per post install\n
\n
\n {{\n currentQuoteInfo.quoteInfo.perPostInstall | currency\n }}\n
\n \n \n \n
\n Std Additional Costs\n
\n
\n {{ currentQuoteInfo.quoteInfo.addCost | currency }}\n
\n \n \n \n
\n Mark up on Supply Kits\n
\n
\n {{\n currentQuoteInfo.quoteInfo.supplyOnlyKits | currency\n }}\n
\n \n \n
\n
\n Additional Cost Install\n
\n
\n \n \n \n Add More\n \n \n {{ addCostInstallDes }}\n
\n
\n {{\n currentQuoteInfo.quoteInfo.addCostInstall | currency\n }}\n
\n
\n \n
\n
\n GST\n
\n
\n {{ currentQuoteInfo.quoteInfo.gst | currency }}\n
\n
\n \n
\n
\n Total Price\n
\n \n
\n {{ currentQuoteInfo.quoteInfo.totalPrice | currency }}\n
\n
\n \n
\n
\n

\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ currentQuoteInfo.quoteInfo.deposit | currency }}\n
\n
\n \n
\n
\n

\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ currentQuoteInfo.quoteInfo.stage1 | currency }}\n
\n
\n \n
\n
\n

\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ currentQuoteInfo.quoteInfo.stage2 | currency }}\n
\n
\n \n
\n
\n Final Payment\n
\n
\n \n
\n
\n {{\n currentQuoteInfo.quoteInfo.finalPayment | currency\n }}\n
\n
\n \n \n
\n Discount\n
\n
\n \n \n \n
\n
\n \n
\n
\n \n \n \n 0\"\n >{{ currentQuoteInfo.quoteInfo.discount | currency }}\n
\n \n \n \n\n \n \n \n
\n
\n

Uploading, Please wait...

\n
\n
\n \n
\n
\n 0 && currentStep < 3\"\n >\n \n Previous\n \n \n Next Step\n \n \n 0)\n \"\n >\n \n {{ isUploading ? \"Uploading...\" : \"Save & Upload\" }}\n \n
\n
\n 0)\n \"\n >More Information\n 0)\n \"\n nzCheckedChildren=\"Show\"\n nzUnCheckedChildren=\"Hide\"\n class=\"margin-right-5\"\n >\n
\n
\n\n\n\n
\n
\n
\n \n Existing House Detail\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0 &&\n sldExistingLength2Visible\n ? ''\n : 'none'\n \"\n >\n \n \n \n 0 &&\n sldExistingWidth2Visible\n ? ''\n : 'none'\n \"\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Existing House
- Roof Type:\n \n
- Type:\n \n
- Length (L1):\n \n
- Width (W1):\n \n
- Length (L2):\n \n
- Width (W2):\n \n
Pitch:\n \n
Fascia depth:\n \n
Eave Height:\n \n \n
Eave Width:\n \n
Wall Type:\n \n
Cutout:\n \n
\n
\n
\n \n Patios Information\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Connection Type:\n \n
Superior Flyover Bracket:\n \n \n \n
Fascia Upstand Brackets:\n \n \n
Up Fascia Upstandard Bracket:\n \n \n \n
Wind Class:\n \n
Span (S):\n \n \n
\n {{ maxSpanText }}\n
\n
Multi Span (S2):\n \n
Patios Height (H):\n \n
Front Overhang (O):\n \n
Back Overhang (O2):\n \n
Bay Size - Nominal (B):\n \n
\n {{ maxBaySizeText }}\n
\n
No Of Bay:\n \n
Roof Pitch:\n \n
\n {{\n patiosRoofType === \"flat\"\n ? \"Beam Left Overhang:\"\n : \"Left Overhang:\"\n }}\n \n \n
\n {{\n patiosRoofType === \"flat\"\n ? \"Beam Right Overhang:\"\n : \"Right Overhang:\"\n }}\n \n \n
Roof Overall Length:\n \n \n \n \n \n
\n {{ roofPercent }}\n
\n \n
Roof Overall Width:\n \n {{\n sldRoofOverallWidth.currentValue\n }}\n
Min. Height Under Beam:\n \n {{ sldMinHeight.currentValue }}\n
Rake Cut
- Left Cut\n \n \n
+ Vertical\n \n
+ Horizontal\n \n
- Right Cut\n \n \n
+ Vertical\n \n
+ Horizontal\n \n
\n
\n
\n \n Material Detail\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Roof Sheeting Type:\n \n \n
Thickness:\n \n \n
\n {{ maxThickness }}\n
\n
Flat Bottom Colour:\n \n \n
Barge Type:\n \n \n
Drip Barge:\n \n
Receiver Type:\n \n \n
Z Flashing Type:\n \n \n
Downpipe Type:\n \n \n
Gutter Type:\n \n \n
Beam Type:\n \n \n
Beam Size:\n \n \n
\n {{ maxBeamSizeText }}\n
\n
\n House Beam Size:\n \n \n
Column Type:\n \n \n
Base Fixing Type:\n \n \n
\n Rapid Set Cement:\n (5 bags per post)\n \n \n \n
\n \n
\n \n Color Selections\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Roof:\n \n \n \n
Barge:\n \n \n
Gutter:\n \n \n
Z Flashing:\n \n \n
Post:\n \n \n
Beam:\n \n \n
Flyover Bracket:\n \n \n
Fascia Upstand Bracket:\n \n \n
Downpipe:\n \n \n
\n \n Apply To All\n \n
\n \n \n \n\n\n \n\n\n
\n
\n
\n
\n \n
Options
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
- Panel Direction
- Panel Layout\n \n
- Beam Layout\n \n
- Edit Bay\n \n
\n
\n
\n
\n
\n
\n

\n Total Price:\n {{\n currentBuildingInfo.quoteInfo.totalPrice | currency\n }}\n

\n
\n
\n \n \n \n \n \n
\n \n
\n
\n SPC Software:\n {{ version }}\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n \n
\n","export * from './home.component';","import { Injectable } from \"@angular/core\";\nimport { BUILDING_SIDE, CONNECTION_TYPE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG, FASCIA_BRACKET_FIT, FIT_FLYOVER_BRAKET_ON_ROOF, OBJECT_TYPE } from \"src/app/app.constants\";\nimport { Vector3 } from \"three\";\nimport { BaseManager } from \"src/app-ribspan/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app-ribspan/core/ui\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport ArrowControl from \"src/app-ribspan/models/ArrowControl.model\";\nimport { MaterialManager } from \"../material.manager\";\nimport { UIControl } from \"src/app-ribspan/models/uicontrol.model\";\nimport { PATIOS_ROOF_TYPE } from \"src/app/app.config\";\nimport _ from \"lodash\"\nimport { Util } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\n\n@Injectable({ providedIn: 'root' })\nexport class CutBeamManager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE,\n UI.Controls.SPAN,\n UI.Controls.MULTI_SPAN,\n UI.Controls.OVERHANG_FRONT,\n UI.Controls.BAYS,\n UI.Controls.OVERHANG_RIGHT,\n UI.Controls.EAVE_WIDTH,\n UI.Controls.STRUCTURE_TYPE,\n UI.Controls.CUTOUT,\n UI.Controls.PATIOS_ROOF_PITCH,\n UI.Controls.FASCIA_DEPTH,\n UI.Controls.EXISTING_ROOF_PITCH,\n UI.Controls.FLYOVER_BRAKET_HEIGHT,\n UI.Controls.FASCIA_UPSTAND_BRAKET,\n UI.Controls.EXISTING_WALL_HEIGHT,\n UI.Controls.ROOF_SHEETING_TYPE,\n UI.Controls.ROOF_THICKNESS\n ]\n \n userData = undefined;\n offset = 200;\n addControlOptions = undefined;\n private utils: Util;\n\n constructor(private selMgr: SelectionManager){\n super()\n this.utils = new Util();\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.CUT_BEAM }\n this.addControlOptions = {\n container: this.container,\n userData: { type: OBJECT_TYPE.CUT_BEAM }\n }\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.container.children = [];\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n let offsetX = - UI.totalBayLength / 2;\n\n if (UI.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF && HomeComponent.ins.isFBRoof) {\n offsetX = UI.span / 2;\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX += UI.eaveWidth\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX -= UI.eaveWidth\n }\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n if(UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX += UI.eaveWidth + FASCIA_BRACKET_FIT\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX -= UI.eaveWidth + FASCIA_BRACKET_FIT\n }\n }\n let diff = UI.existingLength1 - UI.span;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (diff / 2 + UI.existingLength2)\n } else {\n offsetX -= (diff / 2)\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (- diff / 2 - UI.existingLength2)\n } else {\n offsetX -= (- diff / 2)\n }\n }\n\n offsetZ = - UI.existingWidth1 / 2;\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n offsetZ += UI.eaveWidth\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n offsetZ += UI.eaveWidth + FASCIA_BRACKET_FIT\n } else if(\n UI.structureType == CONNECTION_TYPE.FLY_OVER\n || UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n offsetZ -= 65\n }\n\n let offsetY = EXISTING_BUILDING_CONFIG.FIT_FROM_TOP_TO_CUTBEAM;\n if(UI.structureType == CONNECTION_TYPE.FLY_OVER) {\n offsetY += UI.eaveHeight + 150 + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n } else if(UI.structureType == CONNECTION_TYPE.EXISTING) {\n offsetY += UI.height\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType + 150\n }\n\n for (let i = 0; i < UI.listBay.length; i++) {\n offsetZ += UI.listBay[i].value\n if (i == UI.listBay.length - 1) {\n return\n }\n\n if (UI.listBay[i].isCut) {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_EXIT_CUTBEAM;\n } else {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_CUTBEAM;\n }\n\n new UIControl(\n [0.08,0.08,0.08], \n [offsetX + this.offset, offsetY, offsetZ], \n {\n ...this.addControlOptions,\n userData: {\n type: OBJECT_TYPE.CUT_BEAM,\n bayIndex: i\n }\n }\n );\n }\n } else {\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n offsetZ += UI.eaveWidth\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n offsetZ += UI.eaveWidth + FASCIA_BRACKET_FIT\n }\n\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT && !HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()) {\n offsetX += UI.eaveWidth\n } else if (UI.existingType == BUILDING_SIDE.RIGHT && !HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()) {\n offsetX -= UI.eaveWidth\n }\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n if(UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX += UI.eaveWidth + FASCIA_BRACKET_FIT\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX -= UI.eaveWidth + FASCIA_BRACKET_FIT\n }\n }\n let diff = UI.existingLength1 - UI.totalBayLength;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (diff / 2 + UI.existingLength2)\n } else {\n offsetX -= (diff / 2)\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (- diff / 2 - UI.existingLength2)\n } else {\n offsetX -= (- diff / 2)\n }\n }\n\n if(UI.structureType == CONNECTION_TYPE.FREE_STANDING && UI.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF) {\n offsetZ = (UI.span + UI.multiSpan) / 2\n }\n\n let offsetY = EXISTING_BUILDING_CONFIG.FIT_FROM_TOP_TO_CUTBEAM;\n if(UI.patiosRoofType == PATIOS_ROOF_TYPE.FLAT_ROOF) {\n if(UI.structureType == CONNECTION_TYPE.EXISTING) {\n offsetY += UI.height - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FLY_OVER) {\n offsetY += UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER) {\n offsetY += UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n offsetY += UI.eaveHeight - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType + 100 - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FREE_STANDING) {\n offsetY += UI.height - 100 - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n }\n } else {\n if(UI.structureType == CONNECTION_TYPE.FLY_OVER) {\n offsetY += UI.eaveHeight + 150 + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType + 150\n } else if(UI.structureType == CONNECTION_TYPE.FREE_STANDING) {\n offsetY += UI.eaveHeight\n }\n }\n\n\n for (let i = 0; i < UI.listBay.length; i++) {\n offsetX += UI.listBay[i].value\n if (i == UI.listBay.length - 1) {\n return\n }\n \n if (UI.listBay[i].isCut) {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_EXIT_CUTBEAM;\n } else {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_CUTBEAM;\n }\n \n new UIControl(\n [0.08,0.08,0.08], \n [offsetX, offsetY, offsetZ + this.offset], \n {\n ...this.addControlOptions,\n userData: {\n type: OBJECT_TYPE.CUT_BEAM,\n bayIndex: i\n }\n }\n );\n }\n }\n }\n\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n \n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { OBJECT_TYPE } from \"src/app/app.constants\";\nimport { Vector3 } from \"three\";\nimport { BaseManager } from \"src/app-ribspan/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app-ribspan/core/ui\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport ClickControl from \"src/app-ribspan/models/ClickControl.model\";\nimport { PATIOS_ROOF_TYPE } from \"src/app/app.config\";\n\n@Injectable({ providedIn: 'root' })\nexport class CutOutManager extends BaseManager {\n controls = [\n 'sldEaveWidth',\n 'sldExistingWallHeight',\n 'sldFasciaDepth',\n 'sldBaySize',\n 'sldExistingLength',\n 'sldExistingLength2',\n 'sldExistingWidth1',\n 'sldExistingWidth2',\n 'sltExistingType',\n 'sltStructureType',\n 'sltWindClass',\n 'sltWallType',\n 'sltExistingRoofType',\n 'sldMultiSpan',\n 'sldBuildingHeight',\n 'sldFrontOverhang',\n 'sldBackOverhang',\n 'sldLeftOverhang',\n 'sldRightOverhang',\n 'sltRoofPitch',\n 'sldFlyOverBracketHeight',\n 'sldNoOfBay',\n 'dialogEditBay',\n 'sltExistingRoofPitch',\n 'sldRoofOverallLength',\n 'sldRoofOverallWidth',\n 'sldMinHeight',\n 'sltLeftCutType',\n 'sltRightCutType',\n 'sldLeftCutVertical',\n 'sldLeftCutHorizontal',\n 'sldRightCutVertical',\n 'sldRightCutHorizontal',\n 'sltFlatBottom',\n 'sltZFlashingType',\n 'sltRoofSheetingType',\n 'sltBaseFixingType',\n 'sltRoofThickness',\n 'sltBargeType',\n 'sltDownpipeType',\n 'sltGutterType',\n 'sltBeamType',\n 'sltBeamSize',\n 'sltReceiverType',\n 'sltColumnType',\n 'sltColourRoof',\n 'sltColourBarge',\n 'sltColourGutter',\n 'sltColourZFlashing',\n 'sltColourPost',\n 'sltColourBeam',\n 'sltColourBracket',\n 'sltColourFasciaBracket',\n 'sltColourDownpipe',\n 'sltFasciaUpstandBrackets',\n ]\n \n userData = undefined;\n offset = 200;\n startX = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.CLICK_CONTROL_CUTOUT }\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF){\n return\n }\n\n let cutoutCondition =\n HomeComponent.ins.sltExistingType.currentValue != 0 &&\n HomeComponent.ins.patiosManager.cutoutCondition &&\n HomeComponent.ins.sldExistingWidth1.currentValue > 0 &&\n HomeComponent.ins.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n let offsetZ = UI.span + UI.multiSpan + UI.overhangFront - UI.existingWidth1 / 2 - (UI.span + UI.multiSpan + UI.overhangFront - UI.existingWidth1) / 2 ;\n if(UI.cutOutType == 0){\n if(UI.existingType == 1 || UI.existingType == 3){\n new ClickControl(\n this.container, \n { \n pos: new Vector3(- UI.existingLength1 / 2 - this.offset, 0, offsetZ),\n userData: {...this.userData, left: true},\n rotation: new Vector3(Math.PI / 2, 0, Math.PI)\n }\n );\n }\n if(UI.existingType == 2 || UI.existingType == 3){\n new ClickControl(\n this.container, \n { \n pos: new Vector3( UI.existingLength1 / 2 + this.offset, 0, offsetZ),\n userData: {...this.userData, right: true},\n rotation: new Vector3(Math.PI / 2, 0, 0)\n }\n );\n }\n }\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { OBJECT_TYPE } from \"src/app/app.constants\";\nimport { Vector3 } from \"three\";\nimport { BaseManager } from \"src/app-ribspan/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app-ribspan/core/ui\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport ArrowControl from \"src/app-ribspan/models/ArrowControl.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class EditLength2Manager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE\n ]\n \n userData = undefined;\n offset = 400;\n startX = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.UI_CONTROL_LENGTH2 }\n this.selMgr.addEventListener( 'dragstart', ( event ) => {\n this.startX = event.object.position.x;\n });\n this.selMgr.addEventListener ( 'drag', this.onDrag.bind(this), this.container)\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n if(UI.existingLength2){\n return\n }\n if( (UI.existingType == 1 || UI.existingType == 3) && UI.existingWidth1 > 620){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3(- UI.existingLength1 / 2 - this.offset, 0, UI.existingWidth1 / 2),\n userData: {...this.userData, left: true},\n rotation: new Vector3(Math.PI / 2, 0, 0)\n }\n );\n }\n if( (UI.existingType == 2 || UI.existingType == 3) && UI.existingWidth1 > 620){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3( UI.existingLength1 / 2 + this.offset, 0, UI.existingWidth1 / 2),\n userData: {...this.userData, right: true},\n rotation: new Vector3(Math.PI / 2, 0, Math.PI)\n }\n );\n }\n }\n\n onDrag(event){\n if(event.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_LENGTH2){\n event.object.position.y = 0;\n if(event.object?.userData?.left){\n event.object.position.z = UI.existingWidth1 / 2;\n if(event.object.position.x > - UI.existingLength1 / 2 - this.offset){\n event.object.position.x = - UI.existingLength1 / 2 - this.offset;\n return\n }\n }\n if(event.object?.userData?.right){\n event.object.position.z = UI.existingWidth1 / 2;\n if(event.object.position.x < UI.existingLength1 / 2 + this.offset){\n event.object.position.x = UI.existingLength1 / 2 + this.offset;\n return\n }\n }\n let distance = Math.floor(event.object.position.x - UI.existingLength1 / 2 - this.offset);\n if(event.object?.userData?.left){\n distance = Math.floor(- UI.existingLength1 / 2 - this.offset - event.object.position.x);\n }\n \n if (distance > HomeComponent.ins.sldExistingLength2.maxValue){\n distance = HomeComponent.ins.sldExistingLength2.maxValue\n } else if (distance < HomeComponent.ins.sldExistingLength2.minValue){\n distance = HomeComponent.ins.sldExistingLength2.minValue\n }\n HomeComponent.ins.sldExistingLength2.setValue(distance);\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { OBJECT_TYPE } from \"src/app/app.constants\";\nimport { BaseManager } from \"src/app-ribspan/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app-ribspan/core/ui\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport { MaterialManager } from \"../material.manager\";\nimport { DeleteControl } from \"src/app-ribspan/models/DeleteControl.model\";\n@Injectable({ providedIn: 'root' })\nexport class EditWallManager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE\n ]\n \n addControlOptions = undefined;\n offset = 1000;\n offsetY = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.addControlOptions = {\n container: this.container,\n userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH1 }\n }\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_DELETE;\n if(UI.existingType == 1 || UI.existingType == 3){\n if(UI.existingWidth1){\n let x = - UI.existingLength1 / 2 - this.offset - 200;\n if(UI.existingLength2){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - 200;\n }\n if(UI.existingWidth2 && UI.existingWidth2 >= 600){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset - 200;\n } else if(UI.existingWidth2 && UI.existingWidth2 < 600){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset / 2 - 200;\n } \n let z = 0;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1, left: true }});\n }\n if(UI.existingLength2){\n let x = - UI.existingLength1 / 2 - UI.existingLength2 / 2;\n let z = - UI.existingWidth1 / 2 - this.offset;\n new DeleteControl([0.06,0.06,0.06], [ x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2, left: true }});\n }\n if(UI.existingWidth2){\n let x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset / 2 - 200;\n if(UI.existingWidth2 > 600){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset - 200;\n }\n let z = UI.existingWidth1 / 2 + UI.existingWidth2 / 2;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2, left: true }});\n }\n }\n if(UI.existingType == 2 || UI.existingType == 3){\n if(UI.existingWidth1){\n let x = UI.existingLength1 / 2 + this.offset + 200;\n if(UI.existingLength2){\n x = UI.existingLength1 / 2 + UI.existingLength2 + 200;\n }\n if(UI.existingWidth2){\n x = UI.existingLength1 / 2 + UI.existingLength2 + this.offset + 200;\n }\n let z = 0;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1, right: true }});\n }\n if(UI.existingLength2){\n let x = UI.existingLength1 / 2 + UI.existingLength2 / 2;\n let z = - UI.existingWidth1 / 2 - this.offset;\n new DeleteControl([0.06,0.06,0.06], [ x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2, right: true }});\n }\n if(UI.existingWidth2){\n let x = UI.existingLength1 / 2 + UI.existingLength2 + this.offset + 200;\n let z = UI.existingWidth1 / 2 + UI.existingWidth2 / 2;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2, right: true }});\n }\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { OBJECT_TYPE } from \"src/app/app.constants\";\nimport { Vector3 } from \"three\";\nimport { BaseManager } from \"src/app-ribspan/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app-ribspan/core/ui\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport ArrowControl from \"src/app-ribspan/models/ArrowControl.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class EditWidth2Manager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE\n ]\n \n userData = undefined;\n offset = 400;\n startX = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.UI_CONTROL_WIDTH2 }\n this.selMgr.addEventListener( 'dragstart', ( event ) => {\n this.startX = event.object.position.x;\n });\n this.selMgr.addEventListener ( 'drag', this.onDrag.bind(this), this.container)\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n if(UI.existingWidth2){\n return\n }\n if( (UI.existingType == 1 || UI.existingType == 3) && UI.existingLength2 >= 1200){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3(- UI.existingLength1 / 2 - UI.existingLength2, 0, UI.existingWidth1 / 2 + this.offset),\n userData: {...this.userData, left: true},\n rotation: new Vector3(Math.PI / 2, 0, - Math.PI / 2)\n }\n );\n }\n if( (UI.existingType == 2 || UI.existingType == 3) && UI.existingLength2 >= 1200){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3( UI.existingLength1 / 2 + UI.existingLength2, 0, UI.existingWidth1 / 2 + this.offset),\n userData: {...this.userData, right: true},\n rotation: new Vector3(Math.PI / 2, 0, - Math.PI / 2)\n }\n );\n }\n }\n\n onDrag(event){\n if(event.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_WIDTH2){\n event.object.position.y = 0;\n if(event.object?.userData?.left){\n event.object.position.x = - UI.existingLength1 / 2 - UI.existingLength2;\n if(event.object.position.z < UI.existingWidth1 / 2 + this.offset){\n event.object.position.z = UI.existingWidth1 / 2 + this.offset;\n return\n }\n }\n if(event.object?.userData?.right){\n event.object.position.x = UI.existingLength1 / 2 + UI.existingLength2;\n if(event.object.position.z < UI.existingWidth1 / 2 + this.offset){\n event.object.position.z = UI.existingWidth1 / 2 + this.offset;\n return\n }\n }\n let distance = Math.floor(event.object.position.z - UI.existingWidth1 / 2 - this.offset);\n \n if (distance > HomeComponent.ins.sldExistingWidth2.maxValue){\n distance = HomeComponent.ins.sldExistingWidth2.maxValue\n } else if (distance < HomeComponent.ins.sldExistingWidth2.minValue){\n distance = HomeComponent.ins.sldExistingWidth2.minValue\n }\n HomeComponent.ins.sldExistingWidth2.setValue(distance);\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport HighLightBox from \"src/app-ribspan/models/HighlightBox\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"../ui\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport default class UIRakecutManager {\n box1: HighLightBox\n updateFnc = this.update.bind(this)\n constructor(private selMgr: SelectionManager){\n\n }\n public init(){\n // HomeComponent.ins.sldBuildingHeight.addAction(this.updateFnc)\n // HomeComponent.ins.sltRoofPitch.addAction(this.updateFnc)\n \n // this.box1 = new HighLightBox(HomeComponent.ins.scene, {\n // x: -(UI.totalBayLength / 2 + UI.overhangLeft), \n // y: UI.height - UI.frontHeight, \n // z: UI.span + UI.multiSpan, \n // selectionManager: this.selMgr\n // })\n }\n\n update(){\n this.box1.position.set(-(UI.totalBayLength / 2 + UI.overhangLeft), UI.height, UI.span + UI.multiSpan)\n }\n}","// import { AppComponent } from \"src/app/app.component\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n RAKECUT_TYPE,\n EXISTING_BUILDING_CONFIG as CONST,\n MIN_INTERNAL_BEAM_LENGTH,\n} from \"src/app/app.constants\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Color,\n Float32BufferAttribute,\n Geometry,\n Group,\n Line3,\n LineSegments,\n Matrix4,\n Mesh,\n Plane,\n PlaneHelper,\n Vector3,\n} from \"three\";\nimport { PatiosBackFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"src/app/app.config\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"src/app-ribspan/containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndPurlinManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosBackFlyOverManager;\n private downpipeGroup: Group;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n public geo_superiorHouseBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_houseBeamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n public extraOffsetZ: number;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private frontPostHeight: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, backFlyOverManager: PatiosBackFlyOverManager) {\n this.APP = app;\n this.MANAGER = backFlyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = backFlyOverManager.patiosGroup;\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight = this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight / 2, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_superiorHouseBeam = this.geometryManager.getHouseBeam();\n this.geo_superiorHouseBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorHouseBeam.length / 2,\n this.geo_superiorHouseBeam.height / 2,\n this.geo_superiorHouseBeam.width / 2\n );\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_houseBeamEndCap = this.geometryManager.getHouseBeamEndCap();\n this.geo_houseBeamEndCap.geometry.translate(\n 0,\n this.geo_houseBeamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n\n //test\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.downpipeGroup.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n this.cutoutExistingBothLength =\n (UI.totalBayLength - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n this.addBeamAngelRakecut();\n this.addBeamStepRakecut();\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n this.addSuperiorBeam({ cutout: true });\n }\n if (UI.multiSpan > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n this.addGround();\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let offsetX = -UI.totalBayLength / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n //this.addPostOrBracket(offsetX, { back: true, first, last});\n this.addPostOrBracket(offsetX, {\n front: true,\n first,\n last,\n left: first,\n right: last,\n });\n\n if (UI.multiSpan > 0) {\n this.addPostOrBracket(offsetX, {\n multiSpan: true,\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n offsetX = -UI.totalBayLength / 2;\n first = true;\n last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPostAngleRakecut(offsetX + fitX, {\n first,\n last,\n left: first,\n right: last,\n });\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n this.addPostStepRakecut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public getCutoutRoofLengthToGenerateCutoutRafterBeam() {\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let beamLength =\n UI.existingLength2 -\n this.APP.existingWallManager.geo_existingWallW1.width;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n } else {\n beamLength -= extraWallWidth;\n }\n\n beamLength += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if (UI.existingWidth2 > 0) {\n } else {\n beamLength -= extraWallWidth;\n }\n\n beamLength += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n beamLength = UI.existingLength2 - extraWallWidth;\n\n if (UI.existingWidth2 > 0) {\n beamLength = UI.existingLength2;\n }\n }\n\n return beamLength;\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n this.geo_bracket.width\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n this.geo_bracket.width;\n }\n\n return fitX;\n }\n public addEndRafterBeam(info: any) {\n const { numOfInternalRafter, numOfSpanBeam, numOfMultiSpanBeam } = info;\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n );\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n\n const fitIfNotWidth2 =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n\n let endMainLeftX = -UI.totalBayLength / 2 + fitX;\n let endMainRightX = UI.totalBayLength / 2 + fitX;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n }\n }\n\n // Add end rafter for two end side\n // Left side\n this.addRafterSuperiorBeam(endMainLeftX, {\n span: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n multiSpan: true,\n first: true,\n last: false,\n });\n }\n\n // Right side\n this.addRafterSuperiorBeam(endMainRightX, {\n span: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n multiSpan: true,\n first: false,\n last: true,\n });\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor,\n { rakeCutLeft: true, first: true, last: false }\n );\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor,\n { rakeCutRight: true, first: false, last: true }\n );\n }\n\n this.addInternalRafterBeam(\n numOfInternalRafter,\n numOfSpanBeam,\n numOfMultiSpanBeam\n );\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Add rafter beam for cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n\n endMainRightX = UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n }\n }\n\n // Add rafter beam for rake cut step\n }\n private addInternalRafterBeam(\n numOfRafter: number,\n numOfSpanBeam: number,\n numOfMultiSpanBeam: number\n ) {\n let fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n\n const fitIfNotWidth2 =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let offsetX = -UI.totalBayLength / 2 + fitX;\n let mainRoofLength = UI.totalBayLength;\n let endCutoutLeft = -UI.totalBayLength / 2 + fitX;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n mainRoofLength =\n UI.totalBayLength -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n offsetX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n mainRoofLength =\n UI.totalBayLength -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n mainRoofLength =\n UI.totalBayLength -\n 2 * UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : 2 * fitIfNotWidth2);\n offsetX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n }\n }\n\n const mainRoofLeft = offsetX;\n const mainRoofRight = offsetX + mainRoofLength;\n let listRafterPos = [];\n const rafterSpacing = UI.totalBayLength / (numOfRafter + 1);\n const maxBeamOverhang = this.utils.getMaximumBeamOverhang();\n for (let i = 0; i < numOfRafter; i++) {\n const offsetXRafter = endCutoutLeft + (i + 1) * rafterSpacing;\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (\n offsetXRafter > mainRoofLeft - maxBeamOverhang &&\n offsetXRafter < mainRoofLeft + maxBeamOverhang\n ) {\n continue;\n }\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (\n offsetXRafter > mainRoofRight - maxBeamOverhang &&\n offsetXRafter < mainRoofRight + maxBeamOverhang\n ) {\n continue;\n }\n }\n listRafterPos.push({\n offsetX: offsetXRafter,\n isMainRoof:\n offsetXRafter >= mainRoofLeft && offsetXRafter <= mainRoofRight,\n });\n }\n\n listRafterPos = this.utils.reSeperateRafterPosition(\n listRafterPos,\n offsetX,\n offsetX + mainRoofLength,\n endCutoutLeft,\n endCutoutLeft + UI.totalBayLength\n );\n\n listRafterPos.forEach((el) => {\n if (el.isMainRoof) {\n this.addRafterSuperiorBeam(el.offsetX, {\n span: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n multiSpan: true,\n first: false,\n last: false,\n });\n }\n } else {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForSpan: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForMultiSpan: true,\n first: false,\n last: false,\n });\n }\n }\n });\n\n // Add internal beam in here\n this.addInternalBeam(listRafterPos, numOfSpanBeam, numOfMultiSpanBeam);\n }\n private addInternalBeam(\n listRafterPos,\n numOfSpanBeam: number = 0,\n numOfMultiSpanBeam: number = 0\n ) {\n const startZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n if (UI.span > 0) {\n const internalBeamSpacing = UI.span / (numOfSpanBeam + 1);\n for (let i = 0; i < numOfSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + internalBeamSpacing * (i + 1)\n );\n }\n }\n if (UI.multiSpan > 0) {\n const internalBeamSpacing = UI.multiSpan / (numOfMultiSpanBeam + 1);\n for (let i = 0; i < numOfMultiSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + UI.span + internalBeamSpacing * (i + 1)\n );\n }\n }\n }\n public addInternalSuperiorBeam(listRafterPos, offsetZ: number) {\n let fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n const fitIfNotWidth2 =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n\n let endMainLeftX = -UI.totalBayLength / 2 + fitX;\n let endMainRightX = UI.totalBayLength / 2 + fitX;\n let endCutoutLeft = -UI.totalBayLength / 2 + fitX;\n let endCutoutRight = UI.totalBayLength / 2 + fitX;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n }\n }\n\n // Main roof\n const beamWidth = this.geo_superiorBeam.width;\n const mainRafter = listRafterPos.filter((el) => el.isMainRoof);\n\n for (let i = 0; i <= mainRafter.length; i++) {\n let startX = endMainLeftX;\n if (i > 0) {\n startX = mainRafter[i - 1].offsetX;\n }\n let endX = endMainRightX;\n if (i < mainRafter.length) {\n endX = mainRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == mainRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutLeftRafter = listRafterPos.filter(\n (el) =>\n !el.isMainRoof && el.offsetX < endCutoutLeft + cutoutRoofLength\n );\n\n if (offsetZ > UI.existingWidth1 / 2 - this.extraOffsetZ) {\n for (let i = 0; i <= cutoutLeftRafter.length; i++) {\n let startX = endCutoutLeft;\n if (i > 0) {\n startX = cutoutLeftRafter[i - 1].offsetX;\n }\n let endX = endCutoutLeft + cutoutRoofLength;\n if (i < cutoutLeftRafter.length) {\n endX = cutoutLeftRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutLeftRafter.length) {\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutRightRafter = listRafterPos.filter(\n (el) =>\n !el.isMainRoof && el.offsetX > endCutoutRight - cutoutRoofLength\n );\n\n if (\n offsetZ >\n UI.existingWidth1 / 2 - this.extraOffsetZ + beamWidth * 2\n ) {\n for (let i = 0; i <= cutoutRightRafter.length; i++) {\n let startX = endCutoutRight - cutoutRoofLength;\n if (i > 0) {\n startX = cutoutRightRafter[i - 1].offsetX;\n }\n let endX = endCutoutRight;\n if (i < cutoutRightRafter.length) {\n endX = cutoutRightRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += 0;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutRightRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n }\n }\n public addInternalBeamFromStartToEnd(startX, endX, offsetZ) {\n const { fromX, toX, visible } = this.cutInternalBeamWithRakeCut(\n startX,\n endX,\n offsetZ\n );\n\n if (!visible) {\n return;\n }\n\n // Only add internal beam when beam length is greater than 200\n if (Math.abs(toX - fromX) < MIN_INTERNAL_BEAM_LENGTH) {\n return;\n }\n\n const beamWidth = this.geo_RafterBeam.width;\n const beamHeight = this.geo_superiorBeam.height;\n let scaleX = Math.abs(toX - fromX) / this.geo_superiorBeam.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const offsetY =\n UI.eaveHeight +\n this.getBracketHeight(\n offsetZ + UI.existingWidth1 / 2 + this.extraOffsetZ - beamWidth / 2\n );\n\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n mesh.position.set(fromX, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capL.position.set(\n fromX + this.geo_beamEndCap.length / 2 - 2,\n -this.geo_beamEndCap.height + beamHeight,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capR.position.set(\n toX - this.geo_beamEndCap.length / 2 + 2,\n -this.geo_beamEndCap.height + beamHeight,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n beamGroup.position.set(0, offsetY, offsetZ - beamWidth / 2);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n private cutInternalBeamWithRakeCut(startX, endX, offsetZ) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const fromX = Math.min(startX, endX);\n const toX = Math.max(startX, endX);\n const beamWidth = this.geo_superiorBeam.width;\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n const offsetZFrontBeam =\n UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ + beamWidth / 2),\n new Vector3(fromX, 0, offsetZ + beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ + beamWidth / 2),\n new Vector3(toX, 0, offsetZ + beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ + beamWidth / 2),\n new Vector3(toX, 0, offsetZ + beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ + beamWidth / 2),\n new Vector3(fromX, 0, offsetZ + beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n return {\n fromX,\n toX,\n visible: true,\n };\n }\n /**\n *\n * @param offsetX : Position x of rafter beam\n */\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n const beamWidth = this.geo_superiorBeam.width;\n const beamHeight = this.geo_RafterBeam.height;\n const beamGeoLength = this.geo_RafterBeam.length;\n let mesh;\n let beamLength =\n (UI.span -\n (UI.multiSpan\n ? this.geo_superiorBeam.width * 1.5\n : this.geo_superiorBeam.width * 2)) /\n this.utils.cos(UI.patiosPitch);\n if (userDataPos.multiSpan) {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.cutOutForSpan) {\n if (\n UI.multiSpan == 0 &&\n UI.span - UI.existingWidth1 - 2 * beamWidth <= 0\n ) {\n return;\n } else if (\n UI.multiSpan > 0 &&\n UI.span - UI.existingWidth1 - 1.5 * beamWidth <= 0\n ) {\n return;\n }\n\n if (UI.multiSpan == 0) {\n beamLength =\n (UI.span - beamWidth * 2 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n } else {\n beamLength =\n (UI.span - beamWidth * 1.5 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n }\n } else if (userDataPos.cutOutForMultiSpan) {\n if (UI.span + UI.multiSpan - UI.existingWidth1 - 2 * beamWidth <= 0) {\n return;\n }\n\n if (UI.existingWidth1 > UI.span) {\n beamLength =\n (UI.span + UI.multiSpan - beamWidth * 2 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n } else {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n }\n } else if (userDataPos.rakeCutLeft) {\n beamLength =\n (UI.rakeCutLeftVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.rakeCutRight) {\n beamLength =\n (UI.rakeCutRightVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n }\n\n let offsetZ = 0;\n let offsetY = 0;\n\n // Scene position z move back\n // The plane be translated\n let shouldCutByRakeCut = true;\n if (userDataPos.span || userDataPos.cutOutForSpan) {\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n (UI.span - (UI.multiSpan ? beamWidth / 2 : beamWidth)) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n UI.span -\n (UI.multiSpan ? beamWidth / 2 : beamWidth) -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n } else if (\n userDataPos.multiSpan ||\n userDataPos.cutOutForMultiSpan ||\n userDataPos.rakeCutLeft ||\n userDataPos.rakeCutRight\n ) {\n if (userDataPos.rakeCutLeft || userDataPos.rakeCutRight) {\n shouldCutByRakeCut = false;\n }\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n (UI.span + UI.multiSpan - beamWidth) * this.utils.tan(UI.patiosPitch);\n offsetZ =\n UI.span +\n UI.multiSpan -\n beamWidth -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n }\n\n let offsetXRafter = offsetX;\n if (userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width;\n } else if (!userDataPos.first && !userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width / 2;\n }\n\n if (shouldCutByRakeCut) {\n const { newStartZ, newLength, fitYForNewStartZPoint } =\n this.cutRafterBeamWithRakeCut(offsetZ, offsetXRafter, beamLength);\n if (!_.isNil(newStartZ)) {\n offsetZ = newStartZ;\n }\n if (!_.isNil(newLength)) {\n beamLength = newLength;\n }\n if (!_.isNil(fitYForNewStartZPoint)) {\n offsetY -= fitYForNewStartZPoint;\n }\n }\n\n const fitBeamWidthToCut = beamHeight * this.utils.tan(UI.patiosPitch);\n let scaleX = (beamLength + fitBeamWidthToCut) / beamGeoLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let material = this.getRafterBeamMaterial(userDataPos, offsetZ, beamLength);\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(-fitBeamWidthToCut, 0, 0);\n mesh.scale.setX(scaleX);\n\n let { capL, capR } = this.getBeamEndCapForRafterBeam(0, beamLength);\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n\n beamGroup.position.set(offsetXRafter, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n beamGroup.rotateZ(this.utils.degreesToRadians(-UI.patiosPitch));\n\n this.scene.add(beamGroup);\n }\n private cutRafterBeamWithRakeCut(offsetZ, offsetX, beamLength) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const beamWidth = this.geo_superiorBeam.width;\n let startZ = offsetZ;\n let endZ = offsetZ - beamLength * this.utils.cos(UI.patiosPitch);\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n const offsetZFrontBeam =\n UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX, 0, startZ),\n new Vector3(offsetX, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + 2, 0, startZ),\n new Vector3(offsetX + 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth, 0, startZ),\n new Vector3(offsetX + beamWidth, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth - 2, 0, startZ),\n new Vector3(offsetX + beamWidth - 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n return { newStartZ: null, newLength: null, fitYForNewStartZPoint: null };\n }\n private getRafterBeamMaterial(userDataPos, offsetZ, beamLength) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n const beamWidth = this.geo_superiorBeam.width;\n const braketWidth = this.geo_bracket.width;\n\n let cutFrontZ = offsetZ + this.extraOffsetZ - braketWidth;\n let cutBackZ =\n offsetZ +\n this.extraOffsetZ -\n braketWidth -\n beamLength * this.utils.cos(UI.patiosPitch);\n\n if (cutFrontZ != 0 || cutBackZ != 0) {\n let nBottom = new Vector3(0, 0, -1).normalize();\n let pBottom = new Vector3(0, 0, cutFrontZ);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, cutBackZ);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n }\n\n return material;\n }\n private getBeamEndCapForRafterBeam(offsetXL, offsetXR) {\n let capL;\n let capR;\n let matEndCap = this.getRafterBeamEndCapMaterial();\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n let higherBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(\n offsetXR + 2,\n -this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch),\n this.geo_rafterBeamEndCap.width / 2\n );\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: higherBraketName,\n };\n\n return {\n capL,\n capR,\n };\n }\n private getRafterBeamEndCapMaterial() {\n const matEndCap = UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone();\n let heightPlane =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height;\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(0, heightPlane, 0);\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightRealBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom = matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n -UI.existingWidth1 / 2 - this.extraOffsetZ + this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n -UI.existingWidth1 / 2 - this.extraOffsetZ + this.scene.position.z\n )\n );\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n return matEndCap;\n }\n private getBraketMaterial(height: number) {\n if (height > HomeComponent.ins.sldFlyOverBracketHeight.maxValue) {\n return MaterialManager.Instance().BRACKET_WARNING;\n } else {\n return MaterialManager.Instance().BRACKET;\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n public houseBeamHeight() {\n return this.geo_superiorBeam.height - this.geo_superiorHouseBeam.height;\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n\n //objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n\n let beamGroups = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n if (planView) {\n this.utils.getPlanVerticesOfBeam(c as Mesh, lsGeometries, [planView]);\n }\n\n let box = new BoxHelper(objCloned);\n c.updateWorldMatrix(true, true);\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n ),\n });\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n private addGround() {\n let offsetZ =\n UI.existingWidth1 / 2 +\n this.extraOffsetZ +\n this.APP.sldBackOverhang.currentValue;\n let width = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(0, 0, -offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (UI.existingType == 1) {\n base.position.setX(offsetX);\n }\n if (UI.existingType == 2) {\n base.position.setX(-offsetX);\n }\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n postOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n if (UI.multiSpan > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n }\n\n this.frontPostHeight = UI.eaveHeight + this.getBracketHeight(UI.span);\n scalePostY = this.frontPostHeight / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span + UI.multiSpan) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n let exceedMoveBackLimit = false;\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutLeftVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n postOffsetX -= UI.overhangLeft;\n bracketOffsetX -= UI.overhangLeft;\n postOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n }\n\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n postOffsetX += UI.overhangRight;\n bracketOffsetX += UI.overhangRight;\n postOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutRightVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n }\n\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n //End rakecut\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(\n scaleBracketY * this.geometryManager.FLY_OVER_BRACKET.S65x3.height\n )\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (\n meshBracket.userData.position.left &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n meshBracket.userData.position.right &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n if (UI.existingType == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (UI.existingType == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n public addPostOrBracketBack(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -UI.totalBayLength / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = UI.totalBayLength / (this.numberOfBracketBack - 1);\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n offsetX += UI.existingLength2;\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2) /\n (this.numberOfBracketBack - 1);\n } else {\n offsetX += UI.existingLength2 - extraWalWidth;\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2 + extraWalWidth) /\n (this.numberOfBracketBack - 1);\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2 + extraWalWidth) /\n (this.numberOfBracketBack - 1);\n if (UI.existingWidth2 > 0) {\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2) /\n (this.numberOfBracketBack - 1);\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX += this.cutoutExistingBothLength - extraWalWidth;\n bracketDistance =\n (this.APP.sldExistingLength.currentValue + extraWalWidth * 2) /\n (this.numberOfBracketBack - 1);\n }\n }\n\n for (let i = 0; i < this.numberOfBracketBack; i++) {\n if (i == this.numberOfBracketBack - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (UI.braketHeight + this.houseBeamHeight()) / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(scaleBracketY * this.geo_bracket.height)\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (i == 0 && (UI.existingType == 1 || UI.existingType == 3)) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0) / 2\n );\n } else if (last && (UI.existingType == 2 || UI.existingType == 3)) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -UI.totalBayLength / 2;\n let offsetXR = UI.totalBayLength / 2;\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let bracketDistance =\n (UI.existingLength2 - extraWalWidth) / (this.numberOfBracketCutout - 1);\n if (UI.existingWidth2 > 0) {\n bracketDistance = UI.existingLength2 / (this.numberOfBracketCutout - 1);\n }\n\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL - this.geo_bracket.width;\n\n if (first) {\n } else if (last) {\n // Move to dodge internal rafter beam\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(\n scaleBracketY * this.geometryManager.FLY_OVER_BRACKET.S65x3.height\n )\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (UI.existingType == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n first = true;\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n // Dodge internal rafter beam\n // bracketOffsetX -= this.geo_bracket.width;\n // postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(\n scaleBracketY * this.geometryManager.FLY_OVER_BRACKET.S65x3.height\n )\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (UI.existingType == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n public addPostAngleRakecut(offsetX: number, userDataPos: any) {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n //let height = (this.APP.sldBuildingHeight.currentValue - this.getHeightByRoofPitch(true) - (this.beamInfo.height));\n let postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n let bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n let scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n let scaleBracketY =\n this.getBracketHeight(UI.span + UI.multiSpan) / this.geo_bracket.height;\n let offsetY = UI.eaveHeight;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.first) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(scaleBracketY * this.geo_bracket.height)\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.last) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorPost.width,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(scaleBracketY * this.geo_bracket.height)\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorBeam.width,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n }\n private addPostStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n let offsetXL = -UI.totalBayLength / 2 + fitX;\n let offsetXR = UI.totalBayLength / 2 - this.geo_superiorPost.width + fitX;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ -\n this.geo_superiorPost.width;\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let posts: Array = [];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postFront.position.set(offsetXL, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postBack.position.set(offsetXL, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n posts.push(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postFront.position.set(offsetXR, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postBack.position.set(offsetXR, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n //this.scene.add(postBack);\n posts.push(postBack);\n }\n\n for (let post of posts) {\n let boxPost = new Box3().setFromObject(post);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n let height =\n post.scale.y * this.geo_superiorPost.height - UI.eaveHeight;\n let scaleY = height / this.geo_bracket.height;\n\n let bracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(height)\n );\n bracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n bracket.position.set(post.position.x, UI.eaveHeight, post.position.z);\n bracket.scale.setY(scaleY);\n this.scene.add(bracket);\n } else {\n this.scene.add(post);\n }\n }\n }\n public addSuperiorBeam(userDataPos: any) {\n let offsetZ = 0;\n let offsetY = 0;\n let offsetX = -UI.totalBayLength / 2 - UI.overhangLeft;\n\n const beamWidth = this.geo_superiorBeam.width;\n const offsetFitYWhenRoofUpstand =\n beamWidth * this.utils.tan(UI.patiosPitch);\n let beamLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n UI.eaveHeight +\n this.getBracketHeight(UI.span) -\n offsetFitYWhenRoofUpstand;\n offsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (UI.multiSpan > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.houseBeamHeight();\n offsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n offsetX += UI.existingLength2;\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n } else {\n offsetX += UI.existingLength2 - extraWallWidth;\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2 +\n extraWallWidth;\n }\n\n offsetX += UI.overhangLeft;\n beamLength -= UI.overhangLeft;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2 +\n extraWallWidth;\n if (UI.existingWidth2 > 0) {\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n }\n\n //offsetX -= UI.overhangRight;\n beamLength -= UI.overhangRight;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX +=\n (UI.totalBayLength -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n beamLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2;\n }\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY =\n UI.eaveHeight +\n this.getBracketHeight(UI.span + UI.multiSpan) -\n offsetFitYWhenRoofUpstand;\n offsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorBeam.width -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.cutout) {\n offsetY =\n UI.eaveHeight +\n this.getBracketHeight(UI.existingWidth1) +\n this.houseBeamHeight() -\n offsetFitYWhenRoofUpstand;\n offsetZ = UI.existingWidth1 / 2 - this.extraOffsetZ;\n beamLength =\n UI.existingLength2 -\n this.APP.existingWallManager.geo_existingWallW1.width;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.existingWidth2 > 0) {\n // beamLength += extraWallWidth;\n } else {\n beamLength -= extraWallWidth;\n }\n\n beamLength +=\n UI.overhangLeft +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n offsetX =\n UI.totalBayLength / 2 +\n UI.overhangRight -\n UI.existingLength2 -\n CONST.EAVE_OFFSET_BACK +\n extraWallWidth;\n if (UI.existingWidth2 > 0) {\n // beamLength += extraWallWidth;\n offsetX =\n UI.totalBayLength / 2 +\n UI.overhangRight -\n UI.existingLength2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK +\n extraWallWidth;\n } else {\n offsetX =\n UI.totalBayLength / 2 +\n UI.overhangRight -\n UI.existingLength2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n extraWallWidth;\n beamLength -= extraWallWidth;\n }\n\n offsetX -=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n beamLength +=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n beamLength = UI.existingLength2 - extraWallWidth;\n\n if (UI.existingWidth2 > 0) {\n beamLength = UI.existingLength2;\n }\n }\n }\n\n //rake cut\n if (\n (UI.multiSpan <= 0 && userDataPos.front) ||\n (UI.multiSpan > 0 && userDataPos.multiSpan)\n ) {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetX += this.beamLeftCutSizeInfo.l;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetX += UI.rakeCutLeftHor;\n beamLength -= UI.rakeCutLeftHor;\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n beamLength -= UI.rakeCutRightHor;\n }\n }\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n offsetX += fitX;\n if (userDataPos.front || userDataPos.multiSpan) {\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoHouseBeamJoint\n );\n } else {\n this.cutStandardBeamToEqualLengthBeam(\n userDataPos.back || userDataPos.cutout\n ? this.geo_superiorHouseBeam\n : this.geo_superiorBeam,\n userDataPos.back || userDataPos.cutout\n ? this.geo_houseBeamEndCap\n : this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n userDataPos.back || userDataPos.cutout\n ? this.geoHouseBeamJoint\n : this.geoBeamJoint\n );\n }\n\n //Add one more beam cutout right\n if (userDataPos.cutout && UI.existingType == 3) {\n offsetX = UI.totalBayLength / 2 - beamLength;\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorHouseBeam,\n this.geo_houseBeamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoHouseBeamJoint\n );\n }\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo\n ) {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2 + fitX;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngelRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n const beamWidth = this.geo_superiorBeam.width;\n let offsetZ =\n UI.multiSpan + UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - beamWidth,\n UI.patiosPitch,\n 1\n );\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamLeftCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamLeftCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n -UI.totalBayLength / 2 - UI.overhangLeft + this.beamLeftCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(-rotX, rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamRightCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamRightCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n UI.totalBayLength / 2 + UI.overhangRight - this.beamRightCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(-rotX, -rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n\n const beamWidth = this.geo_superiorBeam.width;\n\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - beamWidth,\n UI.patiosPitch,\n 1\n );\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack - beamWidth,\n UI.patiosPitch,\n 1\n );\n }\n\n let beamLength = UI.rakeCutLeftHor + this.geo_superiorPost.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutLeft.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n beamLength + this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n offsetXL += fitX;\n beamGroup.position.set(offsetXL, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack - beamWidth,\n UI.patiosPitch,\n 1\n );\n }\n\n let beamLength = UI.rakeCutRightHor + this.geo_superiorPost.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutRight.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -(beamLength + this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -(this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n offsetXR += fitX;\n beamGroup.position.set(offsetXR, offsetY, offsetZ);\n //beamGroup.rotateY(Math.PI);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n\n this.scene.add(beamGroup);\n }\n }\n public getBracketHeight(offset): number {\n return (\n this.utils.tan(UI.patiosPitch) * offset +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n this.MANAGER.loadRafterBeamAndInternalBeam(\n this.MANAGER.rafterBeamAndInternalBeamInfo\n );\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, MeshBasicMaterial, Line3, Points, PointsMaterial, BufferGeometry } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from 'src/app/core/models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosBackFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { FIT_DIMENSION, FIT_DIMENSION_FAR, BUILDING_SIDE, PANEL_DIRECTION, RAKECUT_TYPE, FIT_FLYOVER_BRAKET_ON_ROOF } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosBackFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosFlyOverBraketHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, manager: PatiosBackFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI / 2, Math.PI, -Math.PI / 2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosFlyOverBraketHeightDim = new Group();\n this.dimensionPatiosFlyOverBraketHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFlyOverBraketHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n );\n\n loader.load(environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n resolve();\n })\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosFlyOverBraketHeightDim.children = this.dimensionPatiosFlyOverBraketHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n // this.dimensionPatiosPlanBottom.remove(...this.dimensionPatiosPlanBottom.children);\n // this.dimensionPatiosPlanRight.remove(...this.dimensionPatiosPlanRight.children);\n // this.dimensionPatiosPlanLeft.remove(...this.dimensionPatiosPlanLeft.children);\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.remove(...this.dimensionPatiosFrontBottom.children);\n this.dimensionPatiosFrontRight.remove(...this.dimensionPatiosFrontRight.children);\n this.dimensionPatiosLeftBottom.remove(...this.dimensionPatiosLeftBottom.children);\n this.dimensionPatiosLeftRight.remove(...this.dimensionPatiosLeftRight.children);\n this.dimensionPatiosLeftLeft.remove(...this.dimensionPatiosLeftLeft.children);\n this.dimensionPatiosRightBottom.remove(...this.dimensionPatiosRightBottom.children);\n this.dimensionPatiosRightLeft.remove(...this.dimensionPatiosRightLeft.children);\n this.dimensionPatiosRightRight.remove(...this.dimensionPatiosRightRight.children);\n this.dimensionPlanMiddle.remove(...this.dimensionPlanMiddle.children);\n this.dimensionPlanMidleLeft.remove(...this.dimensionPlanMidleLeft.children);\n\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionFlyOverBraketHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n \n //this.getOutlines();\n\n this.APP.dimensionManager.draw();\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height\n }\n private drawDimensionFlyOverBraketHeightDim(){\n const bracketHeight =(UI.braketHeight + this.MANAGER.columnAndPurlinManager.houseBeamHeight())\n const offsetZBackPos = - UI.existingWidth1 / 2 - this.MANAGER.columnAndPurlinManager.extraOffsetZ - FIT_DIMENSION_FAR;\n\n this.dimensionPatiosFlyOverBraketHeightDim.position.set(0, UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfExistingRoof() - FIT_FLYOVER_BRAKET_ON_ROOF + bracketHeight / 2, offsetZBackPos);\n\n let textStr = this.utils.getDimensionValue(bracketHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: bracketHeight,\n container: this.dimensionPatiosFlyOverBraketHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n textRotation: new Vector3(Math.PI, 0, 0),\n labelType: DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosFlyOverBraketHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionLowerHeightDim(){\n const frontPostHeight = UI.eaveHeight +\n this.MANAGER.columnAndPurlinManager.getBracketHeight(UI.span + UI.multiSpan)\n const offsetZFrontPos = UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.MANAGER.columnAndPurlinManager.extraOffsetZ + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, frontPostHeight / 2, offsetZFrontPos);\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, 0) };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n text.position.set(-200, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n }\n else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2 - this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, -1000);\n let hand1 = new Vector3(-50, 0, -950);\n let hand2 = new Vector3(50, 0, -950);\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + ' degree';\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, Math.PI / 2, 0) };\n text.position.setZ(-500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n }\n private drawDimensionPatiosPlanBottom() {\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance3 - this.APP.sldExistingWidth1.currentValue/2;\n //if(this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue){\n // offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2;\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // offsetZ += 500;\n // }\n //}\n\n //let offsetZ = this.box.max.z + this.dimensionDistance2;\n\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n //this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n // let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n // cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n // cap2.position.setX(offsetX);\n // this.dimensionPatiosPlanBottom.add(cap2);\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true } }\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = -this.APP.dialogEditBay.totalBaySize/2 + this.APP.sldLeftCutHorizontal.currentValue/2 - this.APP.sldLeftOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL)\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = this.APP.dialogEditBay.totalBaySize/2 - this.APP.sldRightCutHorizontal.currentValue/2 + this.APP.sldRightOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500-200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL)\n }\n \n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n\n //let _dimensionDistane = this.dimensionDistance2;\n //if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // if(this.APP.sldExistingWidth1.currentValue > 0){\n // _dimensionDistane = this.dimensionDistance;\n // }\n //}\n\n //let offsetDimensionX = this.getOffsetLeft(this.dimensionPatiosPlanRight) + this.dimensionDistance2; //this.box.max.x + this.dimensionDistance2;\n //let offsetDimensionX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n //}\n\n //if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n let offsetX = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2 \n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let extraDistance = 0;\n //----Rake cut\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ = dimLength/2 + UI.multiSpan / 2 + this.APP.sldFrontOverhang.currentValue - this.APP.sldRightCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3( 0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL)\n }\n //----End rake cut\n\n\n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n //this.dimensionPatiosPlanRight.position.set(this.MANAGER.boundingBox.max.x + this.dimensionDistance2, 0, offsetDimensionZ);\n // let offsetDimensionX = this.getOffsetLeft(this.dimensionPatiosPlanRight);\n //this.dimensionPatiosPlanRight.position.set(0, 0, offsetDimensionZ);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT, extraDistance);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n \n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n const dimLength = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue))\n\n let offsetLength = dimLength / 2;\n let scaleLength = dimLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(dimLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, -Math.PI / 2) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n //reposition the dimension\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n let dimOffsetY = (UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue))) / 2;\n dimension.position.set(dimBox.max.x + extraDistance, dimOffsetY, 0);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n \n dimension.position.setX(dimBox.min.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.dimensionPatiosLeftRight.position.y;\n dimension.position.setY(dimOffsetY);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0));\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0));\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft() {\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n \n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n \n return textCover\n }\n\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n \n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n\n private calulateBoundingBox(){\n //this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n // let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n // planRightBox.min.x = patiosBox.max.x;\n // planRightBox.max.x = patiosBox.max.x + 500;\n // planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n // let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n // let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n // planBottomBox.min.z = patiosBox.max.z;\n // planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n // planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n // if(planRightBox.intersectsBox(objBox)){\n // intersectBox = true;\n // planRightBox.translate(new Vector3(100,0,0))\n // }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n // if(planBottomBox.intersectsBox(objBox)){\n // intersectBox = true;\n // planBottomBox.translate(new Vector3(0,0,100))\n // }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x };\n }\n}\n","import { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { Box3, Group, Vector3 } from \"three\";\nimport { HomeComponent as AppComponent } from \"src/app-ribspan/containers/home/home.component\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport {\n PatiosManager,\n RafterBeamAndInternalBeamInfo,\n} from \"../patios.manager\";\nimport { ColumnAndPurlinManager } from \"./column-and-purlin.manager\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { RoofManager } from \"./roof.manager\";\n\nexport class PatiosBackFlyOverManager implements PatiosManager {\n public columnAndPurlinManager: ColumnAndPurlinManager;\n private roofManager: RoofManager;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n //private existingTypeChangedEventtHandle: any;\n public dimesionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n public rafterBeamAndInternalBeamInfo: RafterBeamAndInternalBeamInfo = {\n numOfInternalRafter: 0,\n numOfSpanBeam: 0,\n numOfMultiSpanBeam: 0,\n };\n\n patiosWidth: number;\n patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n private APP: AppComponent;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.columnAndPurlinManager = new ColumnAndPurlinManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.columnAndPurlinManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.columnAndPurlinManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndPurlinManager.numberOfBracketBack = bracketQuantity;\n this.columnAndPurlinManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndPurlinManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndPurlinManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {}\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void {\n this.rafterBeamAndInternalBeamInfo = info;\n this.columnAndPurlinManager.addEndRafterBeam(info);\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndPurlinManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n\n public destroy(): void {\n this.columnAndPurlinManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndPurlinManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndPurlinManager.load(),\n ]).then(() => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n //test\n // this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPRE'));\n // let boxHelper = new Box3Helper(this.boundingBox);\n // boxHelper.userData = { type: 'BOX_HELPRE' };\n // this.APP.scene.add(boxHelper);\n this.loadRafterBeamAndInternalBeam(this.rafterBeamAndInternalBeamInfo);\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n RIBSPAN_PANEL_WIDTH,\n RIBSPAN_BARGE_FIT,\n FIT_FLYOVER_BRAKET_ON_ROOF\n} from \"src/app/app.constants\";\nimport HighLightBox from \"src/app-ribspan/models/HighlightBox\";\nimport {\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n MeshLambertMaterial,\n Object3D,\n Plane,\n Vector3,\n} from \"three\";\nimport { CSG } from \"three-csg-ts\";\nimport { PatiosBackFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { HomeComponent as AppComponent } from \"src/app-ribspan/containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosBackFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingFront: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n //private geo_roofPanelBargeCappingBack: BufferGeometry;\n private geo_gutterFront: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n\n private roofGroup: Group;\n\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n private geo_downPipe: GeometryInfo;\n\n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private cutoutExistingBothLength: number;\n\n constructor(app: AppComponent, backFlyOverManager: PatiosBackFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = backFlyOverManager;\n this.scene = new Group();\n backFlyOverManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.geo_RoofPanel = this.geometryManager.getRoofRibspanPanel();\n this.geo_RoofPanel.geometry.translate(-this.geo_RoofPanel.width / 2, this.geo_RoofPanel.height / 2, -this.geo_RoofPanel.length / 2);\n this.geo_RoofPanel.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_roofPanelBargeCappingLeft.width / 2 - 3,\n this.geo_roofPanelBargeCappingLeft.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_roofPanelBargeCappingLeft.length / 2\n );\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingRight.geometry.translate(\n -this.geo_roofPanelBargeCappingLeft.width / 2 + 3,\n this.geo_roofPanelBargeCappingLeft.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_roofPanelBargeCappingLeft.length / 2\n );\n\n this.geo_roofPanelBargeCappingFront = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingFront.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.geo_roofPanelBargeCappingLeft.length / 2,\n this.geo_roofPanelBargeCappingLeft.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_roofPanelBargeCappingLeft.width / 2\n );\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_bargeRakecutLeft.width / 2,\n this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_bargeRakecutLeft.length / 2\n );\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry.translate(\n -this.geo_bargeRakecutRight.width / 2,\n this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_bargeRakecutRight.length / 2\n );\n\n //Gutter\n this.geo_gutterFront = this.geometryManager.getGutter();\n this.geo_gutterFront.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_gutterFront.length / 2,\n -20,\n this.geo_gutterFront.width / 2\n );\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_bargeCutoutLeftHor.length / 2,\n this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_bargeCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_bargeCutoutRightHor.length / 2,\n this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_bargeCutoutRightHor.width / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE\n )\n );\n\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"RAKECUT\")\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"HELPER\")\n );\n\n this.extraOffsetZ = this.APP.existingWallManager.geo_existingWallL1.width + this.APP.eaveManager.backOverhang;\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.roofLength =\n UI.span +\n UI.multiSpan +\n UI.overhangFront;\n this.cutoutExistingBothLength =\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2;\n\n this.addRoof();\n this.addCutout();\n this.addAngelRakeCut();\n this.addStepRakecut();\n if (UI.rakeCutLeftType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft),\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT },\n });\n }\n if (UI.rakeCutRightType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT },\n });\n }\n\n let offsetLeft =\n this.totalBaySize / 2 +\n UI.overhangLeft -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n UI.overhangRight +\n this.MANAGER.patiosGroup.position.x;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [\n clipingPlaneLeft,\n clipingPlaneRight,\n ];\n let width =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight;\n this.roofWidth = width;\n this.roofLength =\n UI.span +\n UI.multiSpan +\n UI.overhangBack +\n UI.overhangFront;\n let roofSheetingCount = Math.ceil(width / RIBSPAN_PANEL_WIDTH);\n let offsetX = -(\n this.totalBaySize / 2 +\n UI.overhangLeft\n );\n\n //panel direction\n let panelDirectionOfset = 1;\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n offsetX =\n this.totalBaySize / 2 +\n UI.overhangRight -\n RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n } else if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT\n ) {\n offsetX = -(\n this.totalBaySize / 2 +\n UI.overhangLeft\n );\n }\n\n if (\n UI.cutOutType == 1 &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n for (let index = 0; index < roofSheetingCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n this.addRoofSheeting(offsetX, [this.csg_cutoutLeft]);\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else if (\n UI.cutOutType == 1 &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n for (let index = 0; index < roofSheetingCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n this.addRoofSheeting(offsetX, [this.csg_cutoutRight]);\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else if (\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n this.addRoofSheeting(offsetX, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else {\n for (let index = 0; index < roofSheetingCount; index++) {\n this.addRoofSheeting(offsetX, []);\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBargeCapping();\n this.addBargeAngelRakecut();\n this.addBargeStepRakecut();\n this.addGutter();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private getHeightByRoofPitch(userDataPos: any): number {\n if (userDataPos.isSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n UI.span\n );\n } else if (userDataPos.isMultiSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (UI.span + UI.multiSpan)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.roofLength\n );\n }\n }\n public getOutLines(): Printing2DGeometry {\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n UI.overhangLeft -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n UI.overhangRight +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views,\n });\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false) return;\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n UI.overhangLeft -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n UI.overhangRight +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().MESH_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public showPanelOutLineTest() {\n // if(this.APP.sltPanelDirectionShow.currentValue == false)\n // return;\n\n //console.log('show layout');\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n UI.overhangLeft -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n UI.overhangRight +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n let flag = false;\n\n //for (let i = 0; i < objs.length-1; i+=2)\n //for(let o of objs)\n {\n // let o1 = objs[i];\n // let o2 = objs[i+1];\n\n // o1.material = objs[i].material.clone();\n // o2.material = objs[i+1].material.clone();\n\n // if(flag){\n // o1.material.color = new Color('gray');\n // o2.material.color = new Color('gray');\n // }\n // else{\n // o1.material.color = new Color('white');\n // o2.material.color = new Color('white');\n // }\n\n // flag = !flag;\n\n let o = objs[7];\n //let newGeo = BufferGeometryUtils.toTrianglesDrawMode(new BufferGeometry().fromGeometry((o as Mesh).geometry), TrianglesDrawMode);\n\n let tmpGeo = (o as Mesh).geometry as Geometry;\n tmpGeo.computeFaceNormals();\n tmpGeo.mergeVertices();\n tmpGeo.computeVertexNormals();\n //let simpifiedGeo = this.modifier.modify(tmpGeo, Math.floor(tmpGeo.vertices.length * 0.9));\n\n // let simplified = o.clone() as Mesh;\n // simplified.material = (simplified.material as MeshPhongMaterial).clone();\n // simplified.material.flatShading = true;\n\n //const count = Math.floor( newGeo.attributes['position'].count * 0.9 ); // number of vertices to remove\n //newGeo = this.modifier.modify( newGeo, count );\n\n // var rs = ((o as Mesh).geometry as Geometry).mergeVertices();\n // console.log('result merge vertice', rs);\n\n //let newMesh = new Mesh(simpifiedGeo);\n\n //let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(newMesh, 90);\n\n //o.updateWorldMatrix(true, true);\n //outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n // if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n // outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n // outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n // }\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n // this.APP.scene.add( line );\n\n // const wireframe = new WireframeGeometry( simpifiedGeo );\n // let line2 = new LineSegments( wireframe );\n // line2.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n // line2.material.depthTest = false;\n // line2.material.opacity = 0.25;\n // line2.material.transparent = true;\n\n // o.updateMatrixWorld();\n // line2.applyMatrix4(o.matrixWorld);\n\n // line2.translateY(1000);\n\n // this.APP.scene.add(line2);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n return simplifiedGeo;\n }\n public addRoof() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PATIOS,\n };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(\n UI.existingWidth1 / 2 +\n UI.overhangBack +\n this.extraOffsetZ\n );\n\n this.roofGroup.position.setY(offsetY);\n this.roofGroup.position.setZ(offsetZ);\n this.roofGroup.rotateX(\n this.utils.degreesToRadians(-this.APP.sltRoofPitch.currentValue)\n );\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(-offsetX);\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(offsetX);\n }\n\n this.scene.add(this.roofGroup);\n }\n public addRoofSheeting(offsetX: number, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n const panelLength = (UI.span +\n UI.overhangFront +\n UI.overhangBack +\n UI.multiSpan) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue)\n const startZOfPanel = UI.span +\n UI.overhangFront +\n UI.overhangBack +\n UI.multiSpan\n\n let scaleZ =\n panelLength /\n this.geo_RoofPanel.length;\n \n let offsetY = 0;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL,\n views: views,\n };\n let cutoutCondition =\n UI.cutOutType == 1 &&\n UI.existingType != 0 &&\n UI.existingLength2 > 0;\n let rakeCutCondition =\n UI.rakeCutLeftType != RAKECUT_TYPE.NONE ||\n UI.rakeCutRightType != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z - (panelLength - startZOfPanel)\n );\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (UI.rakeCutRightType != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n let buferGeo = new BufferGeometry().fromGeometry((meshResult as Mesh).geometry as Geometry);\n this.utils.changeGeoColor(buferGeo, new Vector3(0, 1, 0), UI.roofColor.toString());\n let newGeo = new Geometry().fromBufferGeometry(buferGeo);\n (meshResult as Mesh).geometry = newGeo;\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n\n addBargeCappingCutRight() {\n //right\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetRight =\n this.totalBaySize / 2 +\n UI.overhangRight -\n UI.existingLength2;\n let scaleZ =\n (UI.existingWidth1 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 20) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_roofPanelBargeCappingLeft.length;\n let mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(offsetRight);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //back\n let offsetLeft = offsetRight + UI.existingLength2;\n let scaleX =\n UI.existingLength2 /\n this.geo_roofPanelBargeCappingFront.length;\n let offsetZ =\n UI.existingWidth1 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 10;\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingFront.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(offsetLeft);\n mesh.position.setZ(offsetZ);\n mesh.rotateY(Math.PI);\n mesh.scale.setX(scaleX);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n addBargeCappingCutLeft() {\n //left\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n UI.overhangLeft -\n UI.existingLength2;\n let scaleZ =\n (UI.existingWidth1 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 50) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_roofPanelBargeCappingLeft.length;\n let mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(-offsetLeft);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //back\n let scaleX =\n UI.existingLength2 /\n this.geo_roofPanelBargeCappingFront.length;\n let offsetZ =\n UI.existingWidth1 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 10;\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingFront.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(-offsetLeft);\n mesh.position.setZ(offsetZ);\n mesh.rotateY(Math.PI);\n mesh.scale.setX(scaleX);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n private addBargeCapping() {\n let mesh: Mesh;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXF = -(\n this.totalBaySize / 2 +\n UI.overhangLeft\n );\n let offsetXL1 =\n -(this.totalBaySize / 2 + UI.overhangLeft) +\n UI.existingLength2 -\n extraWallWidth;\n let offsetXL2 = -(\n this.totalBaySize / 2 +\n UI.overhangLeft\n );\n\n let offsetXR1 =\n this.totalBaySize / 2 +\n UI.overhangRight -\n UI.existingLength2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n 100;\n let offsetXR2 =\n this.totalBaySize / 2 + UI.overhangRight;\n\n let offsetZL = 0;\n let offsetZR = 0;\n let offsetZFront =\n (UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.overhangBack) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let bargeFrontLength = this.roofWidth;\n\n let scaleCutoutVer =\n this.utils.getHypotenuseByCos(\n UI.existingWidth1 +\n this.geo_roofPanelBargeCappingLeft.width,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n //let scaleCutoutHor = (UI.existingLength2 - extraWallWidth) / this.geo_bargeCutoutLeftHor.length;\n\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let offsetY = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //cutout\n if (\n UI.cutOutType == 1 &&\n UI.existingLength2 > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n bargeLeftLength -= UI.existingWidth1;\n offsetZL += this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n\n let bargeCutoutHorLength =\n UI.existingLength2 +\n UI.overhangLeft -\n extraWallWidth;\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetXL1 += extraWallWidth;\n //scaleCutoutHor = (UI.existingLength2 ) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength += extraWallWidth;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXL1 =\n -this.APP.sldExistingLength.currentValue / 2 -\n this.APP.existingWallManager.geo_existingWallW1.width -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n //scaleCutoutHor = ((this.roofWidth - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2 - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n offsetXL1 +=\n UI.overhangLeft -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n\n //scaleCutoutHor = bargeCutoutHorLength/this.geo_bargeCutoutLeftHor.length;\n\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout Ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n UI.cutOutType == 1 &&\n UI.existingLength2 > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n bargeRightLength -= UI.existingWidth1;\n let bargeCutoutHorLength =\n UI.existingLength2 +\n UI.overhangRight -\n extraWallWidth;\n offsetZR += this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetXR1 -= extraWallWidth;\n //scaleCutoutHor = (UI.existingLength2 ) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength += extraWallWidth;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXR1 =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n //scaleCutoutHor = ((this.roofWidth - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2 - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n offsetXR1 -=\n UI.overhangRight -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n UI.cutOutType == 1 &&\n UI.existingLength2 > 0 &&\n this.MANAGER.cutoutCondition &&\n this.APP.sltExistingType.currentValue == 3\n ) {\n }\n\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n offsetXF += UI.rakeCutLeftHor;\n bargeLeftLength -= UI.rakeCutLeftVer;\n bargeFrontLength -= UI.rakeCutLeftHor;\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n bargeRightLength -= UI.rakeCutRightVer;\n bargeFrontLength -= UI.rakeCutRightHor;\n }\n\n let scaleXF = bargeFrontLength / this.geo_roofPanelBargeCappingFront.length;\n let scaleZLeft =\n this.utils.getHypotenuseByCos(\n bargeLeftLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight =\n this.utils.getHypotenuseByCos(\n bargeRightLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n\n //right\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //front\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingFront.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXF, 0, offsetZFront + 2);\n mesh.scale.setX(scaleXF);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n private addBargeAngelRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ =\n (UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.overhangBack) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(UI.rakeCutLeftVer, 2) +\n Math.pow(UI.rakeCutLeftHor, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n UI.rakeCutLeftHor /\n UI.rakeCutLeftVer\n );\n\n let offsetX =\n -this.totalBaySize / 2 -\n UI.overhangLeft +\n UI.rakeCutLeftHor;\n let mesh = new Mesh(\n this.geo_bargeRakecutLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(UI.rakeCutRightVer, 2) +\n Math.pow(UI.rakeCutRightHor, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n UI.rakeCutRightHor /\n UI.rakeCutRightVer\n );\n\n let offsetX =\n this.totalBaySize / 2 +\n UI.overhangRight -\n UI.rakeCutRightHor;\n let mesh = new Mesh(\n this.geo_bargeRakecutRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(-rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n }\n private addBargeStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n UI.overhangLeft;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n UI.overhangRight;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.overhangBack -\n UI.rakeCutLeftVer,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (UI.rakeCutLeftVer +\n this.geo_roofPanelBargeCappingLeft.width) /\n this.geo_roofPanelBargeCappingLeft.length;\n let scaleX =\n UI.rakeCutLeftHor /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL + UI.rakeCutLeftHor,\n 0,\n offsetZ - this.geo_roofPanelBargeCappingLeft.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(-offsetXL, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.overhangBack -\n UI.rakeCutRightVer,\n UI.patiosPitch\n );\n let scaleZ =\n (UI.rakeCutRightVer +\n this.geo_roofPanelBargeCappingLeft.width) /\n this.geo_roofPanelBargeCappingLeft.length;\n let scaleX =\n UI.rakeCutRightHor /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR - UI.rakeCutRightHor,\n 0,\n offsetZ - this.geo_roofPanelBargeCappingLeft.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(offsetXR, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n }\n public addGutter() {\n let offsetX = -(\n this.totalBaySize / 2 +\n UI.overhangLeft\n );\n let offsetZ = -100;\n let offsetY = 0;\n let gutterLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n //cutout\n if (\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += UI.existingLength2;\n gutterLength -= UI.existingLength2;\n } else {\n offsetX += UI.existingLength2 - extraWallWidth;\n gutterLength -=\n UI.existingLength2 - extraWallWidth;\n }\n offsetX += UI.overhangLeft;\n gutterLength -= UI.overhangLeft;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n gutterLength -= UI.existingLength2;\n } else {\n gutterLength -=\n UI.existingLength2 - extraWallWidth;\n }\n //offsetX -= UI.overhangRight;\n gutterLength -= UI.overhangRight;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX +=\n this.cutoutExistingBothLength -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n gutterLength =\n this.APP.sldExistingLength.currentValue + extraWallWidth * 2;\n }\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //back\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterFront,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n\n this.addDownPipe(gutterGroup, gutterLength);\n\n this.roofGroup.add(gutterGroup);\n }\n private addDownPipe(gutterGroup: Group, gutterLength: number) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(100, -190, this.geo_downPipe.width / 2 + 20);\n\n gutterGroup.add(meshPipe);\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n\n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n public getRoofOffsetY() {\n return (\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geometryManager.getBeam().height -\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n UI.overhangBack\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n public onColorChanged() {\n if(this.utils && this.geo_RoofPanel.geometry){\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private addCutout() {\n if (UI.cutOutType == 1) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTOUT\")\n );\n\n let offsetX =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 100;\n let offsetY = 0;\n let offsetZ = UI.existingWidth1 / 2 - UI.existingWallW1.width - this.APP.eaveManager.backOverhang - UI.overhangBack;\n\n let scaleX = (UI.existingLength2 + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ =\n (UI.existingWidth1 +\n UI.overhangBack +\n 5000) /\n 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n // if(this.APP.sltExistingType.currentValue == 3){\n // offsetX -= 100;\n // }\n\n if (\n this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutLeft = new Mesh(\n this.geo_cutoutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutRight = new Mesh(\n this.geo_cutoutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n private addAngelRakeCut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n UI.overhangLeft +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n UI.overhangRight +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100;\n\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront -\n this.extraOffsetZ -\n UI.existingWidth1 / 2;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n UI.rakeCutLeftHor /\n UI.rakeCutLeftVer\n );\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL,\n offsetY,\n offsetZ - UI.rakeCutLeftVer\n );\n this.mesh_rakecutLeft.scale.set(5, 5, 5);\n this.mesh_rakecutLeft.rotateY(angle);\n\n // this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n UI.rakeCutRightHor /\n UI.rakeCutRightVer\n );\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR,\n offsetY,\n offsetZ - UI.rakeCutRightVer\n );\n this.mesh_rakecutRight.scale.set(5, 5, 5);\n this.mesh_rakecutRight.rotateY(-angle);\n\n // this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n private addStepRakecut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n UI.overhangLeft +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n UI.overhangRight +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100; //this.APP.sldExistingWallHeight.currentValue;\n\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront -\n this.extraOffsetZ -\n UI.existingWidth1 / 2;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + UI.rakeCutLeftHor,\n offsetY,\n offsetZ - UI.rakeCutLeftVer\n );\n this.mesh_rakecutLeft.scale.set(5, 5, 5);\n\n // this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR - UI.rakeCutRightHor,\n offsetY,\n offsetZ - UI.rakeCutRightVer\n );\n this.mesh_rakecutRight.scale.set(5, 5, 5);\n\n // this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (UI.cutOutType == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { debounce, debounceTime, map, takeLast } from \"rxjs/operators\";\nimport { Group, Material, Object3D } from \"three\";\nimport { GeometryManager } from \"src/app-ribspan/core/geometry.manager\";\nimport { MaterialManager } from \"src/app-ribspan/core/material.manager\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport { registerEvents } from \"./ui.manager\";\nexport interface IManager {\n init: () => Promise\n optimize: () => Promise\n load: () => Promise\n onUIChange: () => void\n // calculate: () => Promise\n}\nexport class BaseManager implements IManager {\n controls = []\n controlsReload = []\n\n onUIChangePtr = this.onUIChange.bind(this)\n onGeometryChangePtr = this.onGeometryChange.bind(this)\n\n APP: HomeComponent\n geometryManager: GeometryManager;\n materialMgr = MaterialManager.Instance()\n container: Group = undefined\n subject: Subject\n \n constructor() {\n this.geometryManager = GeometryManager.Instance();\n\n this.subject = new Subject()\n this.subject.pipe(debounceTime(500)).subscribe(() => { \n console.log('subject debounce run')\n this.optimize().then(() => {this.load()}).then(()=>{\n HomeComponent.ins.renderStatic();\n })\n })\n }\n\n init(): Promise {\n this.APP = HomeComponent.ins\n\n return new Promise(resolve => {\n this.container = new Group()\n HomeComponent.ins.scene.add(this.container)\n registerEvents(this.controls, this.onUIChangePtr)\n registerEvents(this.controlsReload, this.onGeometryChangePtr)\n resolve()\n })\n }\n\n load(): Promise {\n return new Promise((resolve) => {\n this.container.children = []\n\n resolve()\n })\n }\n optimize(): Promise { return Promise.resolve() }\n // calculate(): Promise{ return Promise.resolve() }\n onUIChange(): void {\n this.load()\n }\n onGeometryChange(): void {\n this.subject.next()\n }\n\n\n registerEvents(controls, handler){\n controls.forEach(ctrl => {\n ctrl.addAction(handler)\n });\n }\n}","import { Box3, BoxBufferGeometry, FontLoader, Geometry, Group, Line, Line3, Material, Matrix4, Mesh, Object3D, Scene, TextBufferGeometry, TextGeometryParameters, Vector3 } from \"three\";\nimport { environment as env } from '../../environments/environment';\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE, PATIOS_ROOF_TYPE } from 'src/app/app.config';\nimport { BUILDING_SIDE, CONNECTION_TYPE, EXISTING_BUILDING_CONFIG } from 'src/app/app.constants';\nimport { HomeComponent as AppComponent, HomeComponent } from 'src/app-ribspan/containers/home/home.component';\nimport Dimension, { AddDimensionOptions } from 'src/app-ribspan/models/Dimension';\nimport { GeometryManager } from './geometry.manager';\nimport { MaterialManager } from './material.manager';\nimport { GeometryInfo, LineType, Print2DText, Printing2DGeometry, Printing2DLine, ViewType } from 'src/app/core/models';\nimport { UI } from \"./ui\";\nimport { Util } from \"./utils\";\n\n// declare var KIEU_GABLE = {\n// NONE: -1,\n// FRONT: 0,\n// BACK: 1,\n// BOTH: 2\n// }\n\nexport class DimensionManager {\n private scene: Scene;\n private material: Material;\n private APP: AppComponent;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private materialManager: MaterialManager;\n\n private dimensionPlanLeft: Object3D;\n private dimensionPlanTop: Object3D;\n private dimensionFrontLeft: Object3D;\n private dimensionFrontTop: Object3D;\n private dimensionLeftLeft: Object3D;\n private dimensionLeftTop: Object3D;\n\n private dimensionEaveHeight: Object3D;\n \n private dimensionRightTop: Object3D;\n private dimensionRightRight: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n private startPos: Vector3;\n\n private font: any;\n private isReady = false;\n private textParameter: TextGeometryParameters;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n\n private static instance: DimensionManager;\n static Instance(): DimensionManager{\n if (!DimensionManager.instance) {\n DimensionManager.instance = new DimensionManager();\n }\n return DimensionManager.instance;\n }\n\n private constructor() {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise{\n this.APP = app;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n\n this.dimensionPlanTop = new Group();\n this.dimensionPlanTop.rotation.set(Math.PI/2,Math.PI,0);\n this.dimensionPlanTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.scene.add(this.dimensionPlanTop);\n\n this.dimensionPlanLeft = new Group();\n this.dimensionPlanLeft.rotation.set(-Math.PI/2, 0, -Math.PI/2);\n this.dimensionPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION, position: { planLeft: true } };\n this.scene.add(this.dimensionPlanLeft);\n\n this.dimensionEaveHeight = new Group();\n this.dimensionEaveHeight.rotation.set(0, -Math.PI/2, Math.PI/2);\n this.dimensionEaveHeight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.scene.add(this.dimensionEaveHeight);\n\n this.dimensionRightTop = new Group(); \n this.dimensionRightTop.rotation.set(0,-Math.PI/2,0);\n this.dimensionRightTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionRightTop.visible = false;\n this.scene.add(this.dimensionRightTop);\n\n this.dimensionRightRight = new Group();\n this.dimensionRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionRightRight.visible = false;\n this.scene.add(this.dimensionRightRight);\n\n this.dimensionLeftTop = new Group(); \n this.dimensionLeftTop.rotation.set(0,-Math.PI/2,0);\n this.dimensionLeftTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionLeftTop.visible = false;\n this.scene.add(this.dimensionLeftTop);\n\n this.dimensionLeftLeft = new Group();\n this.dimensionLeftLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionLeftLeft.visible = false;\n this.scene.add(this.dimensionLeftLeft);\n\n this.dimensionFrontTop = new Group();\n this.dimensionFrontTop.rotation.set(0,Math.PI,0);\n this.dimensionFrontTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionFrontTop.visible = false;\n this.scene.add(this.dimensionFrontTop);\n\n this.dimensionFrontLeft = new Group();\n this.dimensionFrontLeft.rotation.set(0,0,Math.PI/2);\n this.dimensionFrontLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionFrontLeft.visible = false;\n this.scene.add(this.dimensionFrontLeft);\n\n //test\n // [\n // this.dimensionPlanTop,\n // this.dimensionPlanLeft,\n // this.dimensionRightTop,\n // this.dimensionRightRight,\n // this.dimensionLeftTop,\n // this.dimensionLeftLeft,\n // this.dimensionFrontTop,\n // this.dimensionFrontLeft\n // ].forEach(d => {d.visible = true});\n\n // app.sldSpan.addAction(this.onUIChanged.bind(this));\n // app.sldMultiSpan.addAction(this.onUIChanged.bind(this));\n // app.sldFrontOverhang.addAction(this.onUIChanged.bind(this));\n // app.sldExistingWidth1.addAction(this.onUIChanged.bind(this));\n // app.sldExistingWidth2.addAction(this.onUIChanged.bind(this));\n // app.sldExistingLength.addAction(this.onUIChanged.bind(this));\n // app.sldExistingLength2.addAction(this.onUIChanged.bind(this));\n // app.sltExistingType.addAction(this.onUIChanged.bind(this));\n // app.sldExistingWallHeight.addAction(this.onUIChanged.bind(this));\n // app.dialogEditBay.addAction(this.onUIChanged.bind(this));\n // app.sltStructureType.addAction(this.onUIChanged.bind(this));\n // app.sldLeftOverhang.addAction(this.onUIChanged.bind(this));\n // app.sldRightOverhang.addAction(this.onUIChanged.bind(this));\n\n return new Promise((resolve, reject) => {\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n var loader = new FontLoader();\n loader.load( env.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this)\n }\n\n this.isReady = true;\n this.draw(); \n\n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPlanTop);\n this.scene.remove(this.dimensionPlanLeft);\n this.scene.remove(this.dimensionRightTop);\n this.scene.remove(this.dimensionRightRight);\n this.scene.remove(this.dimensionLeftTop);\n this.scene.remove(this.dimensionLeftLeft);\n this.scene.remove(this.dimensionFrontTop);\n this.scene.remove(this.dimensionFrontLeft);\n this.scene.remove(this.dimensionEaveHeight);\n }\n \n public draw(){\n if (!this.isReady) {\n return;\n }\n\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter( el =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_1\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2\n );\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter( el =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_1\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_2\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH\n );\n this.dimensionEaveHeight.children = this.dimensionEaveHeight.children.filter( el =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM\n );\n this.dimensionFrontTop.children = [];\n this.dimensionFrontLeft.children = [];\n this.dimensionLeftTop.children = [];\n this.dimensionLeftLeft.children = [];\n this.dimensionRightTop.children = [];\n this.dimensionRightRight.children = [];\n\n this.scene.remove(...this.scene.children.filter(c => c.userData.type == GEOMETRY_TYPE.DIRECTION_TEXT));\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n \n this.addText(\"LEFT\", {position: {trai: true}});\n this.addText(\"RIGHT\", {position: {phai: true}});\n this.addText(\"FRONT\", {position: {truoc: true}});\n this.addText(\"BACK\", {position: {sau: true}});\n\n if(UI.structureType == CONNECTION_TYPE.FREE_STANDING){\n this.dimensionPlanTop.children = [];\n this.dimensionPlanLeft.children = [];\n this.dimensionEaveHeight.children = [];\n return;\n }\n\n this.drawDimensionPlanTop({length1: true}); \n if(this.APP.sldExistingLength2.currentValue > 0){\n this.drawDimensionPlanTop({length2: true});\n } else {\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter(el => el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2)\n }\n \n this.drawDimensionPlanLeft({eaveWidth: true});\n //WIDTH 1 AND WIDTH 2 IN LEFT\n if(this.APP.sltExistingType.currentValue != 0 && this.APP.sltExistingType.currentValue != 4){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n this.drawDimensionPlanLeft({width1: true});\n } else {\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter(el => \n el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_1\n )\n }\n if(this.APP.sldExistingWidth2.currentValue > 0){\n this.drawDimensionPlanLeft({width2: true});\n } else {\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter(el => \n el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_2\n )\n }\n } else {\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter(el => \n el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_1\n && el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_2\n )\n }\n\n this.drawDimensionEaveHeight();\n \n this.drawDimensionFrontTop();\n this.drawDimensionFrontLeft();\n\n this.drawDimensionLeftTop();\n this.drawDimensionLeftLeft();\n \n this.drawDimensionRightTop();\n this.drawDimensionRightRight();\n\n let offset = this.calulateBoundingBox();\n this.dimensionPlanLeft.position.setX(offset.left);\n\n //this.getOutlines();\n }\n\n private drawDimensionPlanTop(userDataPos){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance;\n this.dimensionPlanTop.position.setZ(-offsetZ);\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n if(userDataPos.length1){\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let scaleX = this.APP.sldExistingLength.currentValue/this.lineGeo.length;\n\n // NO delete\n //if(this.APP.sltExistingType.currentValue == 1 && this.APP.sldExistingWidth1.currentValue > 0){\n // cap1.position.setX(-offsetX);\n \n // offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.existingWallManager.geo_existingWallW1.width;\n // cap2.position.setX(offsetX);\n \n // scaleX = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width)/this.lineGeo.length;\n // line.scale.setX(scaleX);\n // line.position.setX(this.APP.existingWallManager.geo_existingWallW1.width/2);\n //}\n //else if(this.APP.sltExistingType.currentValue == 2 && this.APP.sldExistingWidth1.currentValue > 0){\n // cap1.position.setX(offsetX);\n \n // offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.existingWallManager.geo_existingWallW1.width;\n // cap2.position.setX(-offsetX);\n \n // scaleX = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width)/this.lineGeo.length;\n // line.scale.setX(scaleX);\n // line.position.setX(-this.APP.existingWallManager.geo_existingWallW1.width/2);\n //}\n //else if(this.APP.sltExistingType.currentValue == 3 && this.APP.sldExistingWidth1.currentValue > 0){\n // offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.existingWallManager.geo_existingWallW1.width;\n // cap1.position.setX(offsetX);\n // cap2.position.setX(-offsetX);\n \n // scaleX = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width*2)/this.lineGeo.length;\n // line.scale.setX(scaleX);\n //}\n \n let textStr = this.utils.getDimensionValue(this.APP.sldExistingLength.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: this.APP.sldExistingLength.currentValue,\n container: this.dimensionPlanTop,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.LENGTH_1,\n hasTextClone: true,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false\n }\n let dim = this.dimensionPlanTop.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_1) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n else if(userDataPos.length2){\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue;\n let textOffsetX = this.APP.sldExistingLength2.currentValue/2 + this.APP.sldExistingLength.currentValue/2;\n let scaleX = this.APP.sldExistingLength2.currentValue/this.lineGeo.length;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingLength2.currentValue);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n let options : AddDimensionOptions = {... this.options,\n container: this.dimensionPlanTop,\n views: views,\n textPos: new Vector3( textOffsetX, -200, 0),\n linePos: new Vector3( textOffsetX, 0, 0),\n lineLength: this.APP.sldExistingLength2.currentValue,\n labelType: DIMENSION_LABEL_TYPE.LENGTH_2,\n hasTextClone: true,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n side: BUILDING_SIDE.LEFT\n }\n let dim = this.dimensionPlanTop.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side == BUILDING_SIDE.LEFT) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n } else {\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter(el => el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2 || (el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side !== BUILDING_SIDE.LEFT))\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n let options : AddDimensionOptions = {... this.options,\n container: this.dimensionPlanTop,\n views: views,\n textPos: new Vector3( -textOffsetX, -200, 0),\n linePos: new Vector3( -textOffsetX, 0, 0),\n lineLength: this.APP.sldExistingLength2.currentValue,\n labelType: DIMENSION_LABEL_TYPE.LENGTH_2,\n hasTextClone: true,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n side: BUILDING_SIDE.RIGHT\n }\n let dim = this.dimensionPlanTop.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side == BUILDING_SIDE.RIGHT) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n } else {\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter(el => el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2 || (el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side !== BUILDING_SIDE.RIGHT))\n }\n }\n }\n onDimDrag(event){\n if(event.object.userData?.dimType == DIMENSION_LABEL_TYPE.LENGTH_1){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < - HomeComponent.ins.sldExistingLength.maxValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingLength.maxValue / 2\n } else if (event.object.position.x > HomeComponent.ins.sldExistingLength.maxValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingLength.maxValue / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < HomeComponent.ins.sldExistingLength.minValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingLength.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - HomeComponent.ins.sldExistingLength.minValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingLength.minValue / 2\n }\n }\n\n let distance = HomeComponent.ins.sldExistingLength.currentValue;\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue + 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue - 2 * (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue - 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue + 2 * (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingLength.minValue){\n distance = HomeComponent.ins.sldExistingLength.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingLength.maxValue){\n distance = HomeComponent.ins.sldExistingLength.maxValue\n }\n if(HomeComponent.ins.sldExistingLength._isDisable){\n HomeComponent.ins.sldExistingLength.setValue(UI.existingLength1);\n } else {\n HomeComponent.ins.sldExistingLength.setValue(distance);\n }\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.LENGTH_2 ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if(this.startPos.x < 0){\n if (event.object.position.x < - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.maxValue){\n event.object.position.x = - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.maxValue\n } \n if (event.object.position.x > - UI.existingLength1 / 2){\n event.object.position.x = - UI.existingLength1 / 2\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.minValue){\n event.object.position.x = - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.minValue\n }\n }\n if(event.object.userData?.left){\n if(event.object.position.x < - UI.existingLength1 / 2){\n event.object.position.x = - UI.existingLength1 / 2\n }\n }\n }\n if(this.startPos.x > 0){\n if (event.object.position.x > UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.maxValue){\n event.object.position.x = UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.maxValue\n } \n if (event.object.position.x < UI.existingLength1 / 2){\n event.object.position.x = UI.existingLength1 / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.minValue){\n event.object.position.x = UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.minValue\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > UI.existingLength1 / 2){\n event.object.position.x = UI.existingLength1 / 2\n }\n }\n }\n let distance = HomeComponent.ins.sldExistingLength2.currentValue;\n if(this.startPos.x < 0){\n // RIGHT\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (pos.x - this.startPos.x);\n } else if (obj.position.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (- pos.x + this.startPos.x);\n }\n }\n } else if(this.startPos.x > 0){\n // LEFT\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (- pos.x + this.startPos.x);\n }\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingLength2.minValue){\n distance = HomeComponent.ins.sldExistingLength2.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingLength2.maxValue){\n distance = HomeComponent.ins.sldExistingLength2.maxValue\n }\n HomeComponent.ins.sldExistingLength2.setValue(distance);\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.WIDTH_1 ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < - HomeComponent.ins.sldExistingWidth1.maxValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWidth1.maxValue / 2\n } else if (event.object.position.x > HomeComponent.ins.sldExistingWidth1.maxValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWidth1.maxValue / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < HomeComponent.ins.sldExistingWidth1.minValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWidth1.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - HomeComponent.ins.sldExistingWidth1.minValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWidth1.minValue / 2\n }\n }\n let distance = HomeComponent.ins.sldExistingWidth1.currentValue;\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue + 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue - 2 * (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue - 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue + 2 * (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingWidth1.minValue){\n distance = HomeComponent.ins.sldExistingWidth1.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingWidth1.maxValue){\n distance = HomeComponent.ins.sldExistingWidth1.maxValue\n }\n HomeComponent.ins.sldExistingWidth1.setValue(distance);\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.WIDTH_2 ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < UI.existingWidth1 / 2){\n event.object.position.x = UI.existingWidth1 / 2\n } else if (event.object.position.x > UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.maxValue){\n event.object.position.x = UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.maxValue\n }\n if(event.object.userData?.left){\n if(event.object.position.x < UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.minValue / 2){\n event.object.position.x = UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > UI.existingWidth1 / 2){\n event.object.position.x = UI.existingWidth1 / 2\n }\n }\n let distance = HomeComponent.ins.sldExistingWidth2.currentValue;\n if(obj.userData?.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue + (pos.x - this.startPos.x);\n } else if (obj.position.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue + (- pos.x + this.startPos.x);\n }\n }\n console.log('posx', pos.x, this.startPos.x,distance)\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingWidth2.minValue){\n distance = HomeComponent.ins.sldExistingWidth2.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingWidth2.maxValue){\n distance = HomeComponent.ins.sldExistingWidth2.maxValue\n }\n HomeComponent.ins.sldExistingWidth2.setValue(distance);\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < - HomeComponent.ins.sldExistingWallHeight.maxValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWallHeight.maxValue / 2\n } else if (event.object.position.x > HomeComponent.ins.sldExistingWallHeight.maxValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWallHeight.maxValue / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < HomeComponent.ins.sldExistingWallHeight.minValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWallHeight.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - HomeComponent.ins.sldExistingWallHeight.minValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWallHeight.minValue / 2\n }\n }\n let distance = HomeComponent.ins.sldExistingWallHeight.currentValue;\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue + (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue + (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingWallHeight.minValue){\n distance = HomeComponent.ins.sldExistingWallHeight.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingWallHeight.maxValue){\n distance = HomeComponent.ins.sldExistingWallHeight.maxValue\n }\n HomeComponent.ins.sldExistingWallHeight.setValue(distance);\n }\n this.startPos = event.object.position.clone()\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n }\n private drawDimensionEaveHeight() {\n let _dimensionDistane = this.dimensionDistance2;\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.RIGHT){\n _dimensionDistane = this.dimensionDistance;\n }\n\n let dimensionOffsetX = this.box.min.x - this.dimensionDistance2;\n if (UI.structureType == CONNECTION_TYPE.FASCIA || UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n if (UI.existingType == 2) {\n dimensionOffsetX -= UI.eaveWidth;\n }\n }\n this.dimensionEaveHeight.position.set(dimensionOffsetX, UI.eaveHeight / 2, -UI.existingWidth1 / 2);\n\n let textStr = this.utils.getDimensionValue(UI.eaveHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: UI.eaveHeight,\n container: this.dimensionEaveHeight,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: true\n }\n let dimBay = this.dimensionEaveHeight.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n private drawDimensionPlanLeft(userDataPos){\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n _dimensionDistane = this.dimensionDistance;\n }\n\n //let dimensionOffsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue + _dimensionDistane;\n let dimensionOffsetX = this.box.min.x - this.dimensionDistance2;\n\n if (this.APP.sltStructureType.currentValue == 3 || this.APP.sltStructureType.currentValue == 5) {\n if (this.APP.sltExistingType.currentValue == 2) {\n dimensionOffsetX -= this.APP.sldEaveWidth.currentValue;\n }\n }\n\n //if(this.APP.sltExistingType.currentValue == 2){\n // dimensionOffsetX -= this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPlanLeft.position.setX(dimensionOffsetX);\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n if(userDataPos.eaveWidth){\n\n let textStr = this.utils.getDimensionValue(this.APP.sldEaveWidth.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: this.APP.sldEaveWidth.currentValue,\n container: this.dimensionPlanLeft,\n views: views,\n textPos: this.APP.sltExistingType.currentValue == 0 ? new Vector3(this.APP.sldEaveWidth.currentValue/2, - 200, 0) : new Vector3( - this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue/2, 200, 0),\n linePos: this.APP.sltExistingType.currentValue == 0 ? new Vector3(this.APP.sldEaveWidth.currentValue/2, 0, 0) : new Vector3( - this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue/2, 400, 0),\n labelType: DIMENSION_LABEL_TYPE.EAVE_WIDTH,\n hasTextClone: false,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: this.APP.sldEaveWidth.currentValue.toString(), views: views, rotation: new Vector3(0,Math.PI/2,0) },\n allowDrag: false,\n visible: false\n }\n let dim = this.dimensionPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n\n if(userDataPos.width1){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n let scaleZ = this.APP.sldExistingWidth1.currentValue/this.lineGeo.length;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingWidth1.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: this.APP.sldExistingWidth1.currentValue,\n container: this.dimensionPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.WIDTH_1,\n hasTextClone: false,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: this.APP.sldExistingWidth1.currentValue.toString(), views: views, rotation: new Vector3(0,Math.PI/2,0) }\n }\n let dim = this.dimensionPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_1) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n if(userDataPos.width2){\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingWidth2.currentValue);\n let options : AddDimensionOptions = {... this.options,\n container: this.dimensionPlanLeft,\n views: views,\n textPos: new Vector3( this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue/2, -200, 0),\n linePos: new Vector3( this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue/2, 0, 0),\n lineLength: this.APP.sldExistingWidth2.currentValue,\n labelType: DIMENSION_LABEL_TYPE.WIDTH_2,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false\n }\n let dim = this.dimensionPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_2) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n }\n private drawDimensionFrontLeft(){\n // if(this.APP.sltExistingType.currentValue == 0){\n // return;\n // }\n\n let dimensionOffsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue + this.dimensionDistance2;\n\n if(this.APP.sltExistingType.currentValue == 2){\n dimensionOffsetX -= this.APP.sldExistingLength2.currentValue;\n }\n \n this.dimensionFrontLeft.position.set(-dimensionOffsetX,this.APP.sldExistingWallHeight.currentValue/2,0);\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue/2;\n let scaleY = this.APP.sldExistingWallHeight.currentValue/this.lineGeo.length;\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n if(this.APP.sltExistingType.currentValue == 0)\n views = null;\n \n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleY);\n\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingWallHeight.currentValue);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, rotation: new Vector3(0,0,Math.PI/2), views: views };\n text.position.setY(200);\n \n this.dimensionFrontLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionFrontTop(){ \n if(this.APP.sltExistingType.currentValue == 0){\n return;\n }\n \n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue + EXISTING_BUILDING_CONFIG.EXTRA_BRACKET_HEIGHT + this.dimensionDistance2;\n \n if (this.APP.sltStructureType.currentValue == 0 || this.APP.sltStructureType.currentValue == 3 || this.APP.sltStructureType.currentValue == 5) {\n if (this.APP.sldExistingWidth1.currentValue == 0) {\n offsetY = this.APP.sldBuildingHeight.currentValue + this.dimensionDistance2;\n }\n }\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.EXISTING){\n offsetY = UI.existingWallHeight + this.dimensionDistance2\n }\n }\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FREE_STANDING){\n offsetY = this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 + this.dimensionDistance2\n }\n }\n\n this.dimensionFrontTop.position.setY(offsetY);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPlanTop.children.forEach( dimGroup => {\n dimGroup.children.forEach(c => {\n let clone = c.clone();\n clone.visible = false;\n clone.userData['views'] = views;\n \n if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, Math.PI, 0);\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionFrontTop.add(clone);\n })\n })\n }\n private drawDimensionLeftTop() {\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue + EXISTING_BUILDING_CONFIG.EXTRA_BRACKET_HEIGHT + this.dimensionDistance2\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.EXISTING){\n offsetY = UI.existingWallHeight + this.dimensionDistance2\n }\n }\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FREE_STANDING){\n offsetY = this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 + this.dimensionDistance2\n }\n }\n this.dimensionLeftTop.position.setY(offsetY);\n //this.dimensionTopLeft.position.setY(-1000);\n\n let views = [];\n\n \n this.dimensionPlanLeft.children.forEach( dimGroup => {\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n } else if(dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n views = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n } else {\n views = [];\n }\n dimGroup.children.forEach(c => {\n let clone = c.clone();\n clone.userData['views'] = views;\n \n if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible && dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n clone.position.setY(c.position.y + 400);\n } else if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionLeftTop.add(clone);\n })\n })\n }\n private drawDimensionRightTop(){\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue + EXISTING_BUILDING_CONFIG.EXTRA_BRACKET_HEIGHT + this.dimensionDistance2\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.EXISTING){\n offsetY = UI.existingWallHeight + this.dimensionDistance2\n }\n }\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FREE_STANDING){\n offsetY = this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 + this.dimensionDistance2\n }\n }\n this.dimensionRightTop.position.setY(offsetY);\n //this.dimensionTopRight.position.setY(-1000);\n let views = [];\n\n this.dimensionPlanLeft.children.forEach( dimGroup => {\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n } else if(dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n } else {\n views = [];\n }\n dimGroup.children.forEach(c => {\n let clone = c.clone();\n clone.userData['views'] = views;\n if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible && dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n clone.position.setY(c.position.y + 400);\n clone.rotation.set(0, Math.PI, 0);\n clone.visible = false;\n } else if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, Math.PI, 0);\n clone.visible = false;\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionRightTop.add(clone);\n })\n })\n }\n private drawDimensionLeftLeft(){\n let dimenstionOffsetY = this.APP.sldExistingWallHeight.currentValue/2;\n let dimenstionOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2 + 500;\n\n this.dimensionLeftLeft.position.set(0,dimenstionOffsetY,-dimenstionOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionFrontLeft.children.forEach(c => {\n let clone = c.clone();\n //clone.visible = false;\n clone.userData['views'] = views;\n\n if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, 0,-Math.PI);\n clone.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n clone.userData['rotation'] = new Vector3(Math.PI/2,0,0)\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n\n this.dimensionLeftLeft.add(clone);\n })\n }\n private drawDimensionRightRight(){\n let dimenstionOffsetY = this.APP.sldExistingWallHeight.currentValue/2;\n let dimenstionOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2 + 500;\n\n this.dimensionRightRight.position.set(0,dimenstionOffsetY,-dimenstionOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionFrontLeft.children.forEach(c => {\n let clone = c.clone();\n clone.userData['views'] = views;\n if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n \n clone.userData['rotation'] = new Vector3(-Math.PI/2,0,0)\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, Math.PI,-Math.PI);\n //clone.visible = false;\n \n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionRightRight.add(clone);\n })\n }\n\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER__'));\n let existingHouseObjs = this.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n let existingHouseBox = this.APP.utils.getObjectsBoundingBox(existingHouseObjs);\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPlanLeft);\n planLeftBox.min.x = existingHouseBox.min.x - 500;\n planLeftBox.max.x = existingHouseBox.min.x;\n planLeftBox.max.y = 10000;\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER__'};\n // this.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planFrontBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n let patiosBox = this.APP.patiosManager.boundingBox;\n if(patiosBox && planLeftBox.max.x > patiosBox.min.x){\n planLeftBox.translate(new Vector3(patiosBox.min.x - planLeftBox.max.x - 100, 0, 0));\n }\n\n let dimPatiosLeft = this.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.left);\n if(dimPatiosLeft && planLeftBox.max.x > dimPatiosLeft.position.x){\n planLeftBox.translate(new Vector3(dimPatiosLeft.position.x - planLeftBox.max.x, 0, 0));\n }\n \n return { left: planLeftBox.min.x };\n }\n\n private addText(text: string, userData: any){\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldExistingWidth1.currentValue + this.dimensionDistance;\n //let offsetX = this.totalBaySize/2 \n //+ this.APP.sldExistingLength2.currentValue \n //+ this.APP.sldLeftOverhang.currentValue \n //+ this.APP.sldRightOverhang.currentValue \n //+ this.textDistance;\n\n\n\n let textMesh: Mesh;\n\n let parameter = {\n font: this.font,\n size: 500,\n height: 5,\n curveSegments: 12\n };\n\n if(userData.position.trai){\n var geometry = new TextBufferGeometry( text, parameter).center().rotateY(-Math.PI/2).rotateZ(-Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setX(this.box.min.x - this.textDistance);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n else if(userData.position.phai){\n var geometry = new TextBufferGeometry( text, parameter).center().rotateY(Math.PI/2).rotateZ(Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setX(this.box.max.x + this.textDistance);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n else if(userData.position.truoc){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.textDistance;\n let totalSpanSize = this.APP.sldSpan.currentValue \n + this.APP.sldMultiSpan.currentValue \n + this.APP.sldBackOverhang.currentValue \n + this.APP.sldFrontOverhang.currentValue\n + this.textDistance;\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n totalSpanSize = this.totalBaySize + this.textDistance;\n }\n \n if(this.APP.sldExistingWidth1.currentValue/2 < totalSpanSize){\n offsetZ = totalSpanSize;\n }\n\n var geometry = new TextBufferGeometry( text, parameter).center().rotateX(-Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setZ(offsetZ);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n else if(userData.position.sau){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.textDistance;\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF){\n offsetZ = (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue ) / 2 + this.APP.sldFrontOverhang.currentValue + this.textDistance;\n }\n\n var geometry = new TextBufferGeometry( text, parameter).center().rotateY(Math.PI).rotateX(Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setZ(-offsetZ);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n \n this.listText.push(textMesh);\n this.scene.add(textMesh);\n }\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPlanTop.children, \n ...this.dimensionPlanLeft.children, \n ...this.dimensionFrontTop.children,\n ...this.dimensionFrontLeft.children,\n ...this.dimensionLeftLeft.children,\n ...this.dimensionLeftTop.children,\n ...this.dimensionRightTop.children,\n ...this.dimensionRightRight.children\n ]){\n if(!dim.userData.views){\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + 10);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n private onUIChanged(preVal: number, curVal: number): void{\n this.draw();\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Material, Geometry } from \"three\";\nimport { Util } from \"./utils\";\nimport { CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { HomeComponent as AppComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry } from 'src/app/core/models';\n\nexport class EaveManager {\n private scene: Scene;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_eaveWidth1: BufferGeometry;\n private geo_eaveWidth2: BufferGeometry;\n private geo_eaveLength1: GeometryInfo;\n\n public backOverhang = 100;\n\n //private matW1: Material;\n //private clippingPlaneW1: Plane;\n\n public listEave: Object3D[];\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.listEave = [];\n }\n\n public init(app: AppComponent): Promise{\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.material = MaterialManager.Instance().EAVE.clone();\n //this.matW1 = MaterialManager.Instance().EAVE.clone();\n\n app.sldBaySize.addAction(this.uiChanged.bind(this));\n app.sldSpan.addAction(this.uiChanged.bind(this));\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldEaveWidth.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n \n let scaleX = CONFIG.eaveWidth.default/this.geometryManager.EAVE.EAVE.width;\n let scaleZ = CONFIG.span.default/this.geometryManager.EAVE.EAVE.length;\n \n let translateX = this.geometryManager.EAVE.EAVE.width/2;\n let translateY = this.geometryManager.EAVE.EAVE.height/2;\n let translateZ = this.geometryManager.EAVE.EAVE.length/2;\n\n \n this.geo_eaveWidth1 = this.geometryManager.EAVE.EAVE.geometry\n .clone()\n .translate(translateX,translateY,translateZ)\n\n this.geo_eaveWidth2 = this.geometryManager.EAVE.EAVE.geometry\n .clone()\n .translate(translateX,translateY,translateZ)\n \n\n let _scaleX = CONFIG.baySize.default/this.geometryManager.EAVE.EAVE.length;\n let _scaleZ = CONFIG.eaveWidth.default/this.geometryManager.EAVE.EAVE.width;\n\n this.geo_eaveLength1 = new GeometryInfo();\n this.geo_eaveLength1.geometry = this.geometryManager.EAVE.EAVE.geometry\n .clone()\n .rotateY(Math.PI/2)\n .translate(0,translateY,translateX)\n \n // this.geo_eaveLength1.length = env.baySize.default;\n // this.geo_eaveLength1.width = env.eaveWidth.default;\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.EAVE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'EAVE_OUTLINE'));\n this.listEave = [];\n\n // if(this.APP.sldExistingLength2.currentValue == 0){\n // this.clippingPlaneW1 = new Plane(new Vector3(0,0,-1), this.APP.sldExistingWidth1.currentValue/2);\n // this.matW1.clippingPlanes = [this.clippingPlaneW1];\n // }\n // else{\n // this.matW1.clippingPlanes = [];\n // }\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n\n this.addEave({length1: true});\n if(this.APP.sldExistingLength2.currentValue > 0){\n this.addEave({length2: true});\n }\n if(this.APP.sldExistingWidth1.currentValue > 0){\n this.addEave({width1: true});\n }\n if(this.APP.sldExistingWidth2.currentValue > 0){\n this.addEave({width2: true});\n }\n\n //this.getOutLines();\n\n resolve();\n });\n }\n\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.EAVE );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMesh((o as Mesh), 10);\n outlineGeo.translate(o.position.x, o.position.y + 5000, o.position.z);\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"EAVE_OUTLINE\"};\n // this.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n }\n \n public addEave(userDataPos: any){\n let mesh: Mesh;\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n \n let backOverhangL1 = this.APP.existingWallManager.geo_existingWallL1.width + this.backOverhang;\n let backOverhangL2 = this.APP.existingWallManager.geo_existingWallL2.width + this.backOverhang;\n let backOverhangW1 = this.APP.existingWallManager.geo_existingWallW1.width + this.backOverhang;\n let backOverhangW2 = this.APP.existingWallManager.geo_existingWallW2.width + this.backOverhang;\n \n if(userDataPos.length1){\n //let mat = new MeshPhongMaterial({ transparent: true, opacity: 0.8});\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + backOverhangL1;\n let scaleX = this.APP.sldExistingLength.currentValue/this.geometryManager.EAVE.EAVE.length;\n let scaleZ = (this.APP.sldEaveWidth.currentValue + backOverhangL1)/this.geometryManager.EAVE.EAVE.width;\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n mesh = new Mesh(this.geo_eaveLength1.geometry, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ);\n mesh.scale.set(scaleX,1,scaleZ);\n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n else if(userDataPos.length2){\n let views = [\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS });\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 - backOverhangL2;\n let scaleX = this.APP.sldExistingLength2.currentValue/this.geometryManager.EAVE.EAVE.length;\n let scaleZ = (this.APP.sldEaveWidth.currentValue + backOverhangL2)/this.geometryManager.EAVE.EAVE.width;\n \n mesh = new Mesh(this.geo_eaveLength1.geometry, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(-offsetX - this.APP.sldExistingLength2.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ);\n mesh.scale.set(scaleX,1,scaleZ);\n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 - backOverhangL2;\n let scaleX = this.APP.sldExistingLength2.currentValue/this.geometryManager.EAVE.EAVE.length;\n let scaleZ = (this.APP.sldEaveWidth.currentValue + backOverhangL2)/this.geometryManager.EAVE.EAVE.width;\n \n mesh = new Mesh(this.geo_eaveLength1.geometry, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(offsetX + this.APP.sldExistingLength2.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ);\n mesh.scale.set(scaleX,1,scaleZ);\n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n }\n else if(userDataPos.width1){\n //let mat = new MeshPhongMaterial({color: new Color('blue'), transparent: true, opacity: 0.8});\n let offsetX = this.APP.sldExistingLength.currentValue/2 + backOverhangW1;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + backOverhangL1;\n let scaleX = (this.APP.sldEaveWidth.currentValue + backOverhangW1)/this.geometryManager.EAVE.EAVE.width;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + backOverhangL1)/this.geometryManager.EAVE.EAVE.length;\n\n if(this.APP.sldExistingLength2.currentValue <= 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue + backOverhangL1)/this.geometryManager.EAVE.EAVE.length;\n if(scaleZ <= 0)\n scaleZ = 0.01;\n }\n\n let views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(-offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ);\n mesh.scale.set(scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ);\n mesh.scale.set(-scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n }\n else if(userDataPos.width2){\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue + backOverhangW2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 - backOverhangL2;\n let scaleX = (this.APP.sldEaveWidth.currentValue + backOverhangW2)/this.geometryManager.EAVE.EAVE.width;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + backOverhangL2)/this.geometryManager.EAVE.EAVE.length;\n\n let views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth2, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.set(-offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth2, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(-scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n }\n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Material, Plane, MeshPhongMaterial, Geometry, Box3 } from \"three\";\nimport { Util } from \"./utils\";\nimport { CONFIG as env, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { HomeComponent as AppComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { Printing2DLine, ViewType, LineType, Printing2DGeometry } from 'src/app/core/models';\n\nexport class ExistingRoofManager {\n private scene: Scene;\n private APP: AppComponent;\n\n private material: Material;\n private materialL1: MeshPhongMaterial;\n private materialL2L: MeshPhongMaterial;\n private materialL2R: MeshPhongMaterial;\n private materialW1L: MeshPhongMaterial;\n private materialW1R: MeshPhongMaterial;\n private materialW2L: MeshPhongMaterial;\n private materialW2R: MeshPhongMaterial;\n\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_existingWallL: BufferGeometry;\n private geo_existingWallW: BufferGeometry;\n\n // private geo_clipingW1BL: Geometry;\n // private geo_clipingW1BR: Geometry;\n // private geo_clipingW1FL: Geometry;\n // private geo_clipingW1FR: Geometry;\n\n // private geo_clipingL1L: Geometry;\n // private geo_clipingL1R: Geometry;\n\n // private geo_clipingL2LL: Geometry;\n // private geo_clipingL2RL: Geometry;\n // private geo_clipingL2LR: Geometry;\n // private geo_clipingL2RR: Geometry;\n\n // private geo_clipingW2BL: Geometry;\n // private geo_clipingW2BR: Geometry;\n\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise{\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.materialL1 = MaterialManager.Instance().EXISTING_ROOF.clone();\n \n this.materialL2L = MaterialManager.Instance().EXISTING_ROOF.clone();\n this.materialL2R = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n this.materialW1L = MaterialManager.Instance().EXISTING_ROOF.clone();\n this.materialW1R = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n this.materialW2L = MaterialManager.Instance().EXISTING_ROOF.clone();\n this.materialW2R = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n this.material = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldEaveWidth.addAction(this.uiChanged.bind(this));\n app.sldFasciaDepth.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n app.sltExistingRoofPitch.addAction(this.uiChanged.bind(this));\n app.sltExistingRoofType.addAction(this.uiReloadChange.bind(this))\n\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n let translateWidth = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/2 - 60;\n let translateHeight = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height/2;\n\n this.geo_existingWallL = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.geometry\n .clone()\n .translate(0,translateHeight,-translateWidth)\n //.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n this.geo_existingWallW = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.geometry\n .clone()\n .translate(0,translateHeight,-translateWidth)\n .rotateY(Math.PI/2)\n //.rotateZ(-this.utils.degreesToRadians(22.5));\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == \"HELPER\"));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == \"OUTLINE\"));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.EXISTING_ROOF));\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n\n //----cliping geo-----\n let clipingWidth = 5000;\n let clipingLength = 10000;\n let clipingHeight = 10000;\n \n \n \n // let mat = MaterialManager.Instance().DEFAULT.clone();\n // mat.opacity = 0.7;\n // mat.transparent = true;\n // let mesh = new Mesh(this.geo_clipingW1BL, mat);\n // mesh.userData = { type: 'HELPER' };\n // this.APP.scene.add(mesh);\n\n //----\n\n this.materialL1.clippingPlanes = [];\n this.materialW1L.clippingPlanes = [];\n this.materialW1R.clippingPlanes = [];\n\n this.materialW2L.clippingPlanes = [];\n this.materialW2R.clippingPlanes = [];\n\n this.materialL2L.clippingPlanes = [];\n this.materialL2R.clippingPlanes = [];\n\n // this.geo_clipingW1BL = null;\n // this.geo_clipingW1BR = null;\n // this.geo_clipingW1FL = null;\n // this.geo_clipingW1FR = null;\n\n // this.geo_clipingL1L = null;\n // this.geo_clipingL1R = null;\n\n // this.geo_clipingL2LL = null;\n // this.geo_clipingL2RL = null;\n // this.geo_clipingL2LR = null;\n // this.geo_clipingL2RR = null;\n\n // this.geo_clipingW2BL = null;\n // this.geo_clipingW2BR = null;\n\n\n // if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n // if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n // this.geo_clipingL1L = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingL1L.translate(0,0,clipingLength/2);\n // this.geo_clipingL1L.rotateY(-(Math.PI/4));\n // this.geo_clipingL1L.translate(-this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n\n // this.geo_clipingW1BL = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingW1BL.translate(0,0,-clipingLength/2);\n // this.geo_clipingW1BL.rotateY(-(Math.PI/4));\n // this.geo_clipingW1BL.translate(-this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n\n // // let mat = MaterialManager.Instance().DEFAULT.clone();\n // // mat.opacity = 0.7;\n // // mat.transparent = true;\n // // let mesh = new Mesh(this.geo_clipingL1L, mat);\n // // mesh.userData = { type: 'HELPER' };\n // // this.APP.scene.add(mesh);\n // }\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // this.geo_clipingL1R = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingL1R.translate(0,0,clipingLength/2);\n // this.geo_clipingL1R.rotateY(Math.PI/4);\n // this.geo_clipingL1R.translate(this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n\n // this.geo_clipingW1BR = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingW1BR.translate(0,0,-clipingLength/2);\n // this.geo_clipingW1BR.rotateY(Math.PI/4);\n // this.geo_clipingW1BR.translate(this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n // }\n // }\n\n\n\n this.addExistingRoof({length1: true});\n \n if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n let dis = this.getClipingPlaneDistance();\n let planeL1L = new Plane( new Vector3(1,0,-1).normalize(), dis );\n let planeW1L = new Plane( new Vector3(-1,0,1).normalize(), -dis );\n\n let planeL1R = new Plane( new Vector3(-1,0,-1).normalize(), dis );\n let planeW1R = new Plane( new Vector3(1,0,1).normalize(), -dis );\n\n \n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n this.materialL1.clippingPlanes.push(planeL1L);\n this.materialW1L.clippingPlanes.push(planeW1L);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n this.materialL1.clippingPlanes.push(planeL1R);\n this.materialW1R.clippingPlanes.push(planeW1R);\n }\n\n this.addExistingRoof({width1: true});\n }\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n let dis = this.getClipingPlaneDistance();\n let planeW2L = new Plane( new Vector3(-1,0,1).normalize(), -dis );\n let planeL2L = new Plane( new Vector3(1,0,-1).normalize(), dis );\n\n let planeW2R = new Plane( new Vector3(1,0,1).normalize(), -dis );\n let planeL2R = new Plane( new Vector3(-1,0,-1).normalize(), dis );\n \n var p1 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, -this.APP.sldExistingWidth1.currentValue/2);\n var p2 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, this.APP.sldExistingWidth1.currentValue/2);\n var p3 = new Vector3(-(this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue), 0, this.APP.sldExistingWidth1.currentValue/2);\n \n var v = new Vector3().subVectors(p2,p1);\n var v2 = new Vector3().subVectors(p3,p2);\n var v2p = v2.clone().multiplyScalar(-1);\n\n planeW2L.translate(v).translate(v2);\n planeW2R.translate(v).translate(v2p);\n planeL2L.translate(v).translate(v2);\n planeL2R.translate(v).translate(v2p);\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n this.materialW2L.clippingPlanes.push(planeW2L);\n this.materialL2L.clippingPlanes.push(planeL2L);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n this.materialW2R.clippingPlanes.push(planeW2R);\n this.materialL2R.clippingPlanes.push(planeL2R);\n }\n\n this.addExistingRoof({width2: true});\n }\n if(this.APP.sldExistingLength2.currentValue >= this.APP.sldEaveWidth.currentValue + 500){\n let dis = this.getClipingPlaneDistance();\n let planeW1L = new Plane( new Vector3(1,0,-1).normalize(), dis );\n let planeL2L = new Plane( new Vector3(-1,0,1).normalize(), -dis );\n\n let planeW1R = new Plane( new Vector3(-1,0,-1).normalize(), dis );\n let planeL2R = new Plane( new Vector3(1,0,1).normalize(), -dis );\n \n var p1 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, -this.APP.sldExistingWidth1.currentValue/2);\n var p2 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, this.APP.sldExistingWidth1.currentValue/2);\n var v = p2.sub(p1);\n\n planeW1L.translate(v);\n planeW1R.translate(v);\n planeL2L.translate(v);\n planeL2R.translate(v);\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n this.materialW1L.clippingPlanes.push(planeW1L);\n this.materialL2L.clippingPlanes.push(planeL2L);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n this.materialW1R.clippingPlanes.push(planeW1R);\n this.materialL2R.clippingPlanes.push(planeL2R);\n }\n\n this.addExistingRoof({length2: true});\n }\n\n //this.getOutLines();\n\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.EXISTING_ROOF );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0,5000,0);\n\n let views = [];\n\n if(o.userData.position.length1){ \n for(let plane of this.materialL1.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n );\n }\n if(o.userData.position.length2){\n if(o.userData.position.left){\n for(let plane of this.materialL2L.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n if(o.userData.position.right){\n for(let plane of this.materialL2R.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS })\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n );\n }\n if(o.userData.position.width1){\n if(o.userData.position.left){\n for(let plane of this.materialW1L.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n if(o.userData.position.right){\n for(let plane of this.materialW1R.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n );\n }\n if(o.userData.position.width2){\n if(o.userData.position.left){\n for(let plane of this.materialW2L.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n if(o.userData.position.right){\n for(let plane of this.materialW2R.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n );\n }\n \n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1]-5000, vertices[i+2]));\n }\n return simplifiedGeo;\n }\n\n private getClipingPlaneDistance(): number{\n let AC, BC;\n AC = BC = this.APP.sldExistingWidth1.currentValue/2;\n let CD = this.APP.sldExistingLength.currentValue/2;\n let angle = 45;\n\n let BD = BC - CD;\n let CE = AC * this.utils.sin(angle);\n\n let DG = (BD*CE)/BC;\n\n //let n: Vector3 = new Vector3(1,0,-1).normalize();\n // let clipingPlane = new Plane( n, -DG );\n // let helper = new PlaneHelper(clipingPlane, 10000, 0xffff00);\n // helper.userData = { type: 'HELPER' }\n // this.scene.add(helper);\n\n return -DG;\n } \n \n public addExistingRoof(userDataPos: any) {\n let mesh: Mesh;\n let extraLength = 2500;\n if(userDataPos.width1){\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = 0;\n //let scaleZ = (this.APP.sldExistingWidth1.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.W1;\n tt.repeat.set((this.APP.sldExistingWidth1.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n this.materialW1L.map = tt;\n this.materialW1R.map = tt;\n\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n // offsetZ = this.APP.sldEaveWidth.currentValue/2;\n // }\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW1L);\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n \n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n \n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n\n if(this.APP.sldExistingLength2.currentValue > 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue/2 - extra/2);\n mesh.scale.set(1,1,scaleZ);\n }\n \n\n //------clip-----\n // if(this.geo_clipingW1BL){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1BL);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1L);\n // }\n // if(this.geo_clipingW1FL){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1FL);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1L);\n // }\n //--------------\n\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW1R);\n mesh.rotateY(Math.PI);\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n\n if(this.APP.sldExistingLength2.currentValue > 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue/2 - extra/2);\n mesh.scale.set(1,1,scaleZ);\n }\n \n\n //------clip-----\n // if(this.geo_clipingW1BR){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1BR);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1R);\n // }\n // if(this.geo_clipingW1FR){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1FR);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1R);\n // }\n //--------------\n\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n this.scene.add(mesh);\n }\n }\n if(userDataPos.width2){\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue/2;\n //let scaleZ = (this.APP.sldExistingWidth2.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.W2;\n tt.repeat.set((this.APP.sldExistingWidth2.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n this.materialW2L.map = tt;\n this.materialW2R.map = tt;\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW2L);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n \n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW2R);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n mesh.rotateY(Math.PI);\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n \n this.scene.add(mesh);\n }\n }\n else if(userDataPos.length1){\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.L1;\n tt.repeat.set((this.APP.sldExistingLength.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n this.materialL1.map = tt;\n\n \n \n mesh = new Mesh(this.geo_existingWallL, this.materialL1);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: userDataPos };\n mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n\n let offsetX = 0;\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.z - box.min.z;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n //let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n let scaleX = (this.APP.sldExistingLength.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n if(this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue){\n if(this.APP.sltExistingType.currentValue == 1){\n offsetX = -extra/2;\n }\n else if(this.APP.sltExistingType.currentValue == 2){\n offsetX = extra/2;\n }\n else{\n //offsetX = -extra/2;\n scaleX = (this.APP.sldExistingLength.currentValue + extra*2)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n }\n else{\n extra = 0;\n scaleX = (this.APP.sldExistingLength.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 ;\n\n\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ + this.APP.sldEaveWidth.currentValue);\n mesh.scale.setX(scaleX);\n \n\n //------clip-----\n // if(this.geo_clipingL1L){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingL1L);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialL1);\n // console.log(\"cut LEFT\");\n // }\n // if(this.geo_clipingL1R){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingL1R);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialL1);\n // console.log(\"cut RIHGT\");\n // }\n //--------------\n\n \n \n this.scene.add(mesh);\n }\n else if(userDataPos.length2){\n // let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.L2;\n // tt.repeat.set((this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n // this.materialL2L.map = tt;\n // this.materialL2R.map = tt;\n\n // let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2;\n // let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n // let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n\n // //let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n // if(this.APP.sldExistingWidth2.currentValue <= this.APP.sldEaveWidth.currentValue){\n // // if(this.APP.sltExistingType.currentValue == 1){\n // // offsetX -= extraLength;\n // // }\n // // else if(this.APP.sltExistingType.currentValue == 2){\n // // offsetX -= extraLength;\n // // }\n // offsetX -= extraLength;\n // }\n\n // if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n // mesh = new Mesh(this.geo_existingWallL, this.materialL2L);\n // mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n // mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue/2 - extraLength/2);\n // mesh.position.setY(offsetY);\n // mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n // mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n // let box = new Box3().setFromObject(mesh);\n // let width = box.max.x - box.min.x;\n // let scaleX = (this.APP.sldExistingLength2.currentValue + width)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n // mesh.scale.setX(scaleX);\n // this.scene.add(mesh);\n // }\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // mesh = new Mesh(this.geo_existingWallL, this.materialL2R);\n // mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n // mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue/2 + extraLength/2);\n // mesh.position.setY(offsetY);\n // mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n // mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n // let box = new Box3().setFromObject(mesh);\n // let width = box.max.x - box.min.x;\n // let scaleX = (this.APP.sldExistingLength2.currentValue + width)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n // mesh.scale.setX(scaleX);\n // this.scene.add(mesh);\n // }\n\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.L2;\n tt.repeat.set((this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n this.materialL2L.map = tt;\n this.materialL2R.map = tt;\n\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n\n //let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n if(this.APP.sldExistingWidth2.currentValue <= this.APP.sldEaveWidth.currentValue){\n // if(this.APP.sltExistingType.currentValue == 1){\n // offsetX -= extraLength;\n // }\n // else if(this.APP.sltExistingType.currentValue == 2){\n // offsetX -= extraLength;\n // }\n //offsetX -= extraLength;\n }\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallL, this.materialL2L);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n let box = new Box3().setFromObject(mesh);\n let width = box.max.z - box.min.z;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n \n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue/2 - extra/2);\n scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n mesh.scale.setX(scaleX);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallL, this.materialL2R);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n let box = new Box3().setFromObject(mesh);\n let width = box.max.z - box.min.z;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue/2 + extra/2);\n scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n mesh.scale.setX(scaleX);\n this.scene.add(mesh);\n }\n }\n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n public uiReloadChange(preVal: number, curVal): void {\n this.optimize().then(() => { this.load() });\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, MeshPhongMaterial, DoubleSide, Geometry, LineSegments, Group } from \"three\";\nimport { Util } from \"./utils\";\nimport { HomeComponent as AppComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry, Printing2DGeometryType } from 'src/app/core/models';\nimport { CONFIG as env, GEOMETRY_TYPE } from 'src/app/app.config';\nimport HighLightBox from \"src/app-ribspan/models/HighlightBox\";\nimport { BUILDING_SIDE } from \"src/app/app.constants\";\nimport { UI } from \"./ui\";\n\nexport class ExistingWallManager {\n private scene: Scene;\n private container: Group;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n public geo_existingWallW1: GeometryInfo;\n public geo_existingWallL1: GeometryInfo;\n public geo_existingWallL2: GeometryInfo;\n public geo_existingWallW2: GeometryInfo;\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise {\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.container = new Group();\n this.scene.add(this.container);\n this.material = MaterialManager.Instance().DEFAULT.clone();\n\n // app.sldBaySize.addAction(this.changeLength.bind(this));\n // app.sldSpan.addAction(this.changeSpan.bind(this));\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n \n resolve();\n });\n }\n public optimize() : Promise {\n return new Promise((resolve, reject) => {\n\n let scaleX = env.baySize.default / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n let scaleY = env.eaveHeight.default / this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n let scaleZ = env.span.default / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n\n let translateWidth = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width / 2;\n let translateHeight = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height / 2;\n let translateLength = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length / 2;\n\n this.geo_existingWallW1 = new GeometryInfo();\n this.geo_existingWallW1.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .rotateY(Math.PI / 2)\n .translate(0, translateHeight, 0);\n this.geo_existingWallW1.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallW1.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallW1.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n this.geo_existingWallW2 = new GeometryInfo();\n this.geo_existingWallW2.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .rotateY(Math.PI / 2)\n .translate(0, translateHeight, translateLength);\n this.geo_existingWallW2.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallW2.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallW2.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n this.geo_existingWallL1 = new GeometryInfo();\n this.geo_existingWallL1.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .translate(0, translateHeight, translateWidth);\n this.geo_existingWallL1.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallL1.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallL1.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n //front\n this.geo_existingWallL2 = new GeometryInfo();\n this.geo_existingWallL2.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .translate(-translateLength, translateHeight, -translateWidth);\n this.geo_existingWallL2.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallL2.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallL2.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.container.children = [];\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.EXISTING_WALL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == \"EXISTING_WALL_OUTLINE\"));\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n \n this.addEaveWall({length1: true});\n if (this.APP.sldExistingLength2.currentValue > 0) {\n this.addEaveWall({length2: true});\n }\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n this.addEaveWall({width1: true});\n }\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.addEaveWall({width2: true});\n }\n \n new HighLightBox(this.container, {\n min: {\n x: - UI.existingLength1 / 2 - 150 - (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 + 75, \n },\n max: {\n x: - UI.existingLength1 / 2 + 150 - (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: UI.eaveHeight + 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 - 225,\n },\n userData: { wallSide: BUILDING_SIDE.LEFT }\n })\n \n new HighLightBox(this.container, {\n min: {\n x: UI.existingLength1 / 2 + 150 + (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 + 75, \n },\n max: {\n x: UI.existingLength1 / 2 - 150 + (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: UI.eaveHeight + 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 - 225,\n },\n userData: { wallSide: BUILDING_SIDE.RIGHT }\n })\n \n //this.getOutLines();\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.EXISTING_WALL );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMesh((o as Mesh), 10);\n outlineGeo.translate(o.position.x, o.position.y + 5000, o.position.z);\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"EXISTING_WALL_OUTLINE\"};\n // this.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n }\n public addEaveWall(userDataPos: any) {\n let mesh: Mesh;\n let scaleY = this.APP.sldExistingWallHeight.currentValue / this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n if (userDataPos.width1) {\n let tt = MaterialManager.Instance().EXISTING_WALL_W1_TEXTURE;\n tt.repeat.set(this.APP.sldExistingWidth1.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width / 2;\n let offsetZ = this.geo_existingWallW1.width/2;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.geo_existingWallW1.width) / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n\n let views = [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n ]\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW1.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, left: true}, views: [...views, { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(-offsetX);\n mesh.position.setZ(-offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW1.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, right: true}, views: [...views, { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(offsetX);\n mesh.position.setZ(-offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n } else if (userDataPos.length1) {\n let tt = MaterialManager.Instance().EXISTING_WALL_L1_TEXTURE;\n tt.repeat.set(this.APP.sldExistingLength.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width; //this.APP.sldSpan.currentValue/2;\n let scaleX = this.APP.sldExistingLength.currentValue / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n\n let views = [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ]\n\n mesh = new Mesh(this.geo_existingWallL1.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: userDataPos, views: views };\n mesh.position.setZ(-offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setX(scaleX);\n\n this.scene.add(mesh);\n } else if (userDataPos.length2) {\n let tt = MaterialManager.Instance().EXISTING_WALL_L2_TEXTURE;\n tt.repeat.set(this.APP.sldExistingLength2.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2;\n let scaleX = (this.APP.sldExistingLength2.currentValue - this.geometryManager.EXISTING_WALL.EXISTING_WALL.width) / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n if (scaleX == 0)\n scaleX = 0.1;\n\n let views = [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_existingWallL2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, left: true}, views: views };\n mesh.position.setX(-offsetX);\n mesh.scale.setY(scaleY);\n mesh.position.setZ(offsetZ);\n mesh.scale.setX(scaleX);\n this.scene.add(mesh);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_existingWallL2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, right: true}, views: views };\n mesh.position.setX(offsetX);\n mesh.scale.setY(scaleY);\n mesh.position.setZ(offsetZ);\n mesh.scale.setX(-scaleX);\n this.scene.add(mesh);\n }\n\n //mesh.visible = !(this.APP.sldExistingLength2.currentValue == 0);\n } else if (userDataPos.width2) {\n let tt = MaterialManager.Instance().EXISTING_WALL_W2_TEXTURE;\n tt.repeat.set(this.APP.sldExistingWidth2.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.APP.sldExistingLength2.currentValue + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width/2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 - this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + this.geo_existingWallL2.width) / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n if (scaleZ == 0)\n scaleZ = 0.1;\n\n let views = [ \n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, left: true}, views: [...views, { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(-offsetX);\n mesh.position.setZ(offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, right: true}, views: [...views, { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(offsetX);\n mesh.position.setZ(offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n\n //mesh.visible = !(this.APP.sldExistingWidth2.currentValue == 0);\n }\n //this.scene.add(mesh);\n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n}\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"src/app-ribspan/containers/home/home.component\";\nimport Dimension, {\n AddDimensionOptions,\n} from \"src/app-ribspan/models/Dimension\";\nimport {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport {\n FIT_DIMENSION,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { ExistingBuildingManager } from \".\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n public MANAGER: ExistingBuildingManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n private geometryManager: GeometryManager;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any;\n private textParameter: any;\n\n private isReady = false;\n\n private box: Box3;\n\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, manager: ExistingBuildingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPatiosLowerHeightDim,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n this.isReady = true;\n this.draw();\n\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPatiosLowerHeightDim,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosLowerHeightDim.children =\n this.dimensionPatiosLowerHeightDim.children.filter(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay\n .map((b) => b.value)\n .reduce((sum, current) => sum + current);\n // for (let b of this.APP.dialogEditBay.listBay) {\n // this.totalBaySize += b.value;\n // }\n\n this.box = this.utils.getSceneBox();\n // let boxHelper = new Box3Helper(this.MANAGER.boundingBox);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.scene.add(boxHelper);\n this.drawDimensionLowerHeightDim();\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // //let existingHouseDimBox = new Box3().setFromObject(existingHouseDimLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim() {\n const frontPostHeight = this.utils.getHeightByAngle(\n UI.height - this.MANAGER.postAndBeamManager.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n const offsetZFrontPos = UI.span + UI.multiSpan + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(\n 0,\n frontPostHeight / 2,\n offsetZFrontPos\n );\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [],\n },\n allowDrag: false,\n };\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0; //this.totalBaySize / 2;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n text.position.set(-200, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n } else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + \" degree\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, Math.PI / 2, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n\n //console.log(dim);\n }\n\n private drawDimensionPatiosPlanBottom() {\n //let offsetX = -(this.totalBaySize + this.APP.sldLeftOverhang.currentValue*2 + this.APP.sldRightOverhang.currentValue)/2;\n let offsetX = -this.totalBaySize / 2;\n let offsetZ = this.box.max.z + this.dimensionDistance2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue / 2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2;\n //}\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n },\n };\n let dimBay = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n -this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftCutHorizontal.currentValue / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldRightCutHorizontal.currentValue / 2 +\n this.APP.sldRightOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500 - 200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n );\n }\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldLeftOverhang.currentValue,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldRightOverhang.currentValue,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue / 2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n //let offsetDimensionX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + _dimensionDistane;\n //if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n // if (this.APP.sldExistingLength.currentValue > )\n //}\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n\n //}\n\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // offsetDimensionX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimSpan = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n let offsetX =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(\n this.APP.sldMultiSpan.currentValue\n );\n\n let optionsMul: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n 0,\n 0\n ),\n textPos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n -200,\n 0\n ),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimMul = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) as Dimension;\n if (!dimMul) {\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN\n );\n }\n\n let extraDistance = 0;\n\n //----Rake cut\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ =\n dimLength / 2 +\n UI.overhangFront +\n UI.multiSpan / 2 -\n UI.rakeCutRightVer / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3(0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n );\n }\n //----End rake cut\n\n let offsetRight =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2; // + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n this.APP.sldFrontOverhang.currentValue,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n this.APP.sldBackOverhang.currentValue,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT,\n extraDistance\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n let dimOffsetX = this.box.max.x;\n //let dimOffsetX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height / 2;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // dimOffsetX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z; //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2;\n //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n\n this.APP.sldEaveWidth,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n // patiosBox = this.APP.utils.getObjectsBoundingBox(\n // this.MANAGER.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n\n // let patiosBoxHelper = new Box3Helper(patiosBox);\n // patiosBoxHelper.userData = {type: location};\n // this.scene.add(patiosBoxHelper);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n // for(let i = 0; i < 100; i++){\n // let intersectBox = false;\n // for(let o of objs){\n // let objBox = this.APP.utils.getObjectBoundingBox(o);\n // if(dimBox.intersectsBox(objBox)){\n // intersectBox = true;\n // dimBox.translate(new Vector3(100,0,0))\n // }\n // }\n\n // if(!intersectBox)\n // break;\n // }\n\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n dimBox.translate(new Vector3(objBox.max.x - dimBox.min.x, 0, 0));\n }\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z);\n }\n }\n}\n","import { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport {\n PatiosManager,\n RafterBeamAndInternalBeamInfo,\n} from \"../patios.manager\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport { Group, Box3, Box3Helper, BoxHelper, Vector3 } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { environment } from \"src/environments/environment\";\n\nexport class ExistingBuildingManager implements PatiosManager {\n private APP: AppComponent;\n patiosGroup: Group;\n public boundingBox: Box3;\n public postAndBeamManager: PostAndBeamManager;\n private roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n public rafterBeamAndInternalBeamInfo: RafterBeamAndInternalBeamInfo = {\n numOfInternalRafter: 0,\n numOfSpanBeam: 0,\n numOfMultiSpanBeam: 0,\n };\n\n private updateEventHandle: any;\n private controlsToRegisterEvent: Array;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public patiosLength: number;\n public patiosWidth: number;\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {}\n loadBracketCutout(bracketQuantity: number): void {}\n loadSideGableBracket(bracketQuantity: number): void {}\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void {\n this.rafterBeamAndInternalBeamInfo = info;\n this.postAndBeamManager.addEndRafterBeam(info);\n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sldBuildingHeight,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n //let cutoutCondition = this.cutoutCondition.map(x => x.currentValue).reduce((a,b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.sltExistingType.currentValue == 1) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n -diff / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 + this.APP.sldLeftOverhang.currentValue\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n diff / 2 -\n this.APP.sldRightOverhang.currentValue +\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 - this.APP.sldRightOverhang.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n this.loadRafterBeamAndInternalBeam(this.rafterBeamAndInternalBeamInfo);\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if(!environment.production){\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n Vector3,\n BufferGeometry,\n BoxHelper,\n Geometry,\n LineSegments,\n BoxBufferGeometry,\n Group,\n Object3D,\n Matrix4,\n Line,\n Points,\n PointsMaterial,\n Box3,\n Box3Helper,\n Line3,\n Color,\n Plane,\n PlaneHelper,\n} from \"three\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n MIN_INTERNAL_BEAM_LENGTH,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport {\n GeometryInfo,\n Printing2DGeometryType,\n Printing2DLine,\n Printing2DGeometry,\n Print2DView,\n ViewType,\n LineType,\n} from \"src/app/core/models\";\nimport { ExistingBuildingManager } from \".\";\nimport { group } from \"console\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private frontPostHeight: number;\n private totalBaySize: number;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private MANAGER: ExistingBuildingManager;\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n constructor(app: AppComponent, existingManager: ExistingBuildingManager) {\n this.APP = app;\n this.MANAGER = existingManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = existingManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n this.MANAGER.loadRafterBeamAndInternalBeam(\n this.MANAGER.rafterBeamAndInternalBeamInfo\n );\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiCHangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltCutOut,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n ];\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, env.height.default / this.postInfo.height, 1);\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = UI.totalBayLength;\n this.roofWidth = UI.overhangLeft + UI.overhangRight + this.totalBaySize;\n this.enableCutout = this.MANAGER.cutoutCondition;\n this.addBeam({ isMultiSpan: false });\n this.addBeam({ isMultiSpan: true });\n this.addBeamAngleRakecut(BUILDING_SIDE.LEFT);\n this.addBeamAngleRakecut(BUILDING_SIDE.RIGHT);\n this.addBeamStepRakecut();\n this.addGround();\n //let offsetX = -this.roofWidth / 2 + UI.overhangLeft + (this.postInfo.width / 2);\n let offsetX = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let offsetXOrigin = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n // if (this.APP.sltCutOut.currentValue == 1 && (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3)) {\n // offsetX -= this.APP.sldExistingLength2.currentValue;\n // }\n // else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 2) {\n // //offsetX -= this.APP.sldExistingLength2.currentValue;\n // }\n\n let idx = 0;\n this.addPost(offsetX, { isMultiSpan: false, left: true });\n this.addPost(offsetX, { isMultiSpan: true, left: true });\n\n this.APP.dialogEditBay.listBay.forEach((m) => {\n offsetX += m.value;\n // if (this.APP.sltCutOut.currentValue == 1 && (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 2)) {\n // offsetX += this.APP.sldExistingLength2.currentValue;\n // }\n // else if(this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 3){\n // offsetX += this.APP.sldExistingLength2.currentValue * 2;\n // }\n\n if (idx === this.APP.dialogEditBay.listBay.length - 1) {\n offsetX -= this.postInfo.width;\n this.addPost(offsetX, { isMultiSpan: false, right: true });\n this.addPost(offsetX, { isMultiSpan: true, right: true });\n this.addPostAngleRakecut(offsetXOrigin, { left: true });\n this.addPostAngleRakecut(offsetX, { right: true });\n } else {\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: false,\n });\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: true,\n });\n }\n idx++;\n });\n\n this.addPostStepRakecut();\n this.addDownPipe();\n this.addDownPipeStepRakecut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addEndRafterBeam(info: any) {\n const { numOfInternalRafter, numOfSpanBeam, numOfMultiSpanBeam } = info;\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n );\n\n let endMainLeftX = -UI.totalBayLength / 2;\n let endMainRightX = UI.totalBayLength / 2;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2 + UI.existingLength2;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2 - UI.existingLength2;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2 + UI.existingLength2;\n endMainRightX = UI.totalBayLength / 2 - UI.existingLength2;\n }\n }\n\n // Add end rafter for two end side\n // Left side\n this.addRafterSuperiorBeam(endMainLeftX, {\n span: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n multiSpan: true,\n first: true,\n last: false,\n });\n }\n\n // Right side\n this.addRafterSuperiorBeam(endMainRightX, {\n span: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n multiSpan: true,\n first: false,\n last: true,\n });\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(-UI.totalBayLength / 2 + UI.rakeCutLeftHor, {\n rakeCutLeft: true,\n first: true,\n last: false,\n });\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(UI.totalBayLength / 2 - UI.rakeCutRightHor, {\n rakeCutRight: true,\n first: false,\n last: true,\n });\n }\n\n this.addInternalRafterBeam(\n numOfInternalRafter,\n numOfSpanBeam,\n numOfMultiSpanBeam\n );\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Add rafter beam for cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n\n endMainRightX = UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n }\n }\n }\n private addInternalRafterBeam(\n numOfRafter: number,\n numOfSpanBeam: number,\n numOfMultiSpanBeam: number\n ) {\n let offsetX = -UI.totalBayLength / 2;\n let mainRoofLength = UI.totalBayLength;\n let endCutoutLeft = -UI.totalBayLength / 2;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n mainRoofLength = UI.totalBayLength - UI.existingLength2;\n offsetX = -UI.totalBayLength / 2 + UI.existingLength2;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n mainRoofLength = UI.totalBayLength - UI.existingLength2;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n mainRoofLength = UI.totalBayLength - 2 * UI.existingLength2;\n offsetX = -UI.totalBayLength / 2 + UI.existingLength2;\n }\n }\n\n const mainRoofLeft = offsetX;\n const mainRoofRight = offsetX + mainRoofLength;\n let listRafterPos = [];\n const rafterSpacing = UI.totalBayLength / (numOfRafter + 1);\n const maxBeamOverhang = this.utils.getMaximumBeamOverhang();\n for (let i = 0; i < numOfRafter; i++) {\n const offsetXRafter = endCutoutLeft + (i + 1) * rafterSpacing;\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (\n offsetXRafter > mainRoofLeft - maxBeamOverhang &&\n offsetXRafter < mainRoofLeft + maxBeamOverhang\n ) {\n continue;\n }\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (\n offsetXRafter > mainRoofRight - maxBeamOverhang &&\n offsetXRafter < mainRoofRight + maxBeamOverhang\n ) {\n continue;\n }\n }\n listRafterPos.push({\n offsetX: offsetXRafter,\n isMainRoof:\n offsetXRafter >= mainRoofLeft && offsetXRafter <= mainRoofRight,\n });\n }\n\n listRafterPos = this.utils.reSeperateRafterPosition(\n listRafterPos,\n offsetX,\n offsetX + mainRoofLength,\n endCutoutLeft,\n endCutoutLeft + UI.totalBayLength\n );\n\n listRafterPos.forEach((el) => {\n if (el.isMainRoof) {\n this.addRafterSuperiorBeam(el.offsetX, {\n span: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n multiSpan: true,\n first: false,\n last: false,\n });\n }\n } else {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForSpan: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForMultiSpan: true,\n first: false,\n last: false,\n });\n }\n }\n });\n\n // // Add internal beam in here\n this.addInternalBeam(listRafterPos, numOfSpanBeam, numOfMultiSpanBeam);\n }\n private addInternalBeam(\n listRafterPos,\n numOfSpanBeam: number = 0,\n numOfMultiSpanBeam: number = 0\n ) {\n const startZ = -UI.existingWidth1 / 2;\n if (UI.span > 0) {\n const internalBeamSpacing = UI.span / (numOfSpanBeam + 1);\n for (let i = 0; i < numOfSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + internalBeamSpacing * (i + 1)\n );\n }\n }\n if (UI.multiSpan > 0) {\n const internalBeamSpacing = UI.multiSpan / (numOfMultiSpanBeam + 1);\n for (let i = 0; i < numOfMultiSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + UI.span + internalBeamSpacing * (i + 1)\n );\n }\n }\n }\n public addInternalSuperiorBeam(listRafterPos, offsetZ: number) {\n let endMainLeftX = -UI.totalBayLength / 2;\n let endMainRightX = UI.totalBayLength / 2;\n let endCutoutLeft = -UI.totalBayLength / 2;\n let endCutoutRight = UI.totalBayLength / 2;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2 + UI.existingLength2;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2 - UI.existingLength2;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2 + UI.existingLength2;\n endMainRightX = UI.totalBayLength / 2 - UI.existingLength2;\n }\n }\n\n // Main roof\n const beamWidth = this.beamInfo.width;\n const mainRafter = listRafterPos.filter((el) => el.isMainRoof);\n\n for (let i = 0; i <= mainRafter.length; i++) {\n let startX = endMainLeftX;\n if (i > 0) {\n startX = mainRafter[i - 1].offsetX;\n }\n let endX = endMainRightX;\n if (i < mainRafter.length) {\n endX = mainRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == mainRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutLeftRafter = listRafterPos.filter(\n (el) =>\n !el.isMainRoof && el.offsetX < endCutoutLeft + cutoutRoofLength\n );\n\n if (offsetZ > UI.existingWidth1 / 2 + beamWidth * 2) {\n for (let i = 0; i <= cutoutLeftRafter.length; i++) {\n let startX = endCutoutLeft;\n if (i > 0) {\n startX = cutoutLeftRafter[i - 1].offsetX;\n }\n let endX = endCutoutLeft + cutoutRoofLength;\n if (i < cutoutLeftRafter.length) {\n endX = cutoutLeftRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutLeftRafter.length) {\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutRightRafter = listRafterPos.filter(\n (el) =>\n !el.isMainRoof && el.offsetX > endCutoutRight - cutoutRoofLength\n );\n\n if (offsetZ > UI.existingWidth1 / 2 + beamWidth * 2) {\n for (let i = 0; i <= cutoutRightRafter.length; i++) {\n let startX = endCutoutRight - cutoutRoofLength;\n if (i > 0) {\n startX = cutoutRightRafter[i - 1].offsetX;\n }\n let endX = endCutoutRight;\n if (i < cutoutRightRafter.length) {\n endX = cutoutRightRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += 0;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutRightRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n }\n }\n public addInternalBeamFromStartToEnd(startX, endX, offsetZ) {\n const { fromX, toX, visible } = this.cutInternalBeamWithRakeCut(\n startX,\n endX,\n offsetZ\n );\n\n if (!visible) {\n return;\n }\n\n // Only add internal beam when beam length is greater than 200\n if (Math.abs(toX - fromX) < MIN_INTERNAL_BEAM_LENGTH) {\n return;\n }\n\n const beamWidth = this.beamInfo.width;\n const beamHeight = this.beamInfo.height;\n let scaleX = Math.abs(toX - fromX) / this.beamInfo.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n // hard code 2.5 beam width. I can't find the correct offset\n const offsetY =\n UI.height -\n (offsetZ + UI.existingWidth1 / 2) * this.utils.tan(UI.patiosPitch);\n\n let mesh = new Mesh(\n this.beamInfo.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n mesh.position.set(fromX, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capL.position.set(\n fromX + this.geo_beamEndCap.length / 2 - 2,\n -this.geo_beamEndCap.height + beamHeight,\n 0\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capR.position.set(\n toX - this.geo_beamEndCap.length / 2 + 2,\n -this.geo_beamEndCap.height + beamHeight,\n 0\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n beamGroup.position.set(0, offsetY, offsetZ - beamWidth);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n private cutInternalBeamWithRakeCut(startX, endX, offsetZ) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const fromX = Math.min(startX, endX);\n const toX = Math.max(startX, endX);\n const beamWidth = this.beamInfo.width;\n const offsetZFrontBeam = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ - beamWidth / 2),\n new Vector3(fromX, 0, offsetZ - beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ - beamWidth / 2),\n new Vector3(toX, 0, offsetZ - beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ - beamWidth / 2),\n new Vector3(toX, 0, offsetZ - beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ - beamWidth / 2),\n new Vector3(fromX, 0, offsetZ - beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n return {\n fromX,\n toX,\n visible: true,\n };\n }\n public getCutoutRoofLengthToGenerateCutoutRafterBeam() {\n return UI.existingLength2;\n }\n /**\n *\n * @param offsetX : Position x of rafter beam\n */\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n const beamWidth = this.beamInfo.width;\n const beamHeight = this.geo_RafterBeam.height;\n const beamGeoLength = this.geo_RafterBeam.length;\n let mesh;\n let cutSpanFitBeamLength = 0;\n if (+UI.upstandBraketType !== 0) {\n cutSpanFitBeamLength = UI.multiSpan ? beamWidth * 1.5 : beamWidth * 2;\n } else {\n cutSpanFitBeamLength = UI.multiSpan ? beamWidth * 0.5 : beamWidth * 1;\n }\n let beamLength =\n (UI.span - cutSpanFitBeamLength) / this.utils.cos(UI.patiosPitch);\n if (userDataPos.multiSpan) {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.cutOutForSpan) {\n if (\n UI.multiSpan == 0 &&\n UI.span - UI.existingWidth1 - 2 * beamWidth <= 0\n ) {\n return;\n } else if (\n UI.multiSpan > 0 &&\n UI.span - UI.existingWidth1 - 1.5 * beamWidth <= 0\n ) {\n return;\n }\n\n beamLength =\n (UI.span - cutSpanFitBeamLength - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.cutOutForMultiSpan) {\n if (UI.span + UI.multiSpan - UI.existingWidth1 - 2 * beamWidth <= 0) {\n return;\n }\n\n if (UI.existingWidth1 > UI.span) {\n beamLength =\n (UI.span + UI.multiSpan - beamWidth * 2 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n } else {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n }\n } else if (userDataPos.rakeCutLeft) {\n beamLength =\n (UI.rakeCutLeftVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.rakeCutRight) {\n beamLength =\n (UI.rakeCutRightVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n }\n\n let offsetZ = 0;\n let offsetY = 0;\n\n // Scene position z move back\n // The plane be translated\n let shouldCutByRakeCut = true;\n if (userDataPos.span || userDataPos.cutOutForSpan) {\n offsetY = UI.height - this.getOffsetHeightForRafterBeamByRoofPitch(true);\n offsetZ =\n UI.span -\n (UI.multiSpan > 0 ? beamWidth / 2 : beamWidth) -\n UI.existingWidth1 / 2;\n } else if (\n userDataPos.multiSpan ||\n userDataPos.cutOutForMultiSpan ||\n userDataPos.rakeCutLeft ||\n userDataPos.rakeCutRight\n ) {\n if (userDataPos.rakeCutLeft || userDataPos.rakeCutRight) {\n shouldCutByRakeCut = false;\n }\n offsetY = UI.height - this.getOffsetHeightForRafterBeamByRoofPitch(false);\n offsetZ = UI.span + UI.multiSpan - beamWidth - UI.existingWidth1 / 2;\n }\n\n let offsetXRafter = offsetX;\n if (userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width;\n } else if (!userDataPos.first && !userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width / 2;\n }\n\n if (shouldCutByRakeCut) {\n const { newStartZ, newLength, fitYForNewStartZPoint } =\n this.cutRafterBeamWithRakeCut(offsetZ, offsetXRafter, beamLength);\n if (!_.isNil(newStartZ)) {\n offsetZ = newStartZ;\n }\n if (!_.isNil(newLength)) {\n beamLength = newLength;\n }\n if (!_.isNil(fitYForNewStartZPoint)) {\n offsetY += fitYForNewStartZPoint;\n }\n }\n\n const fitBeamWidthToCut = beamHeight * this.utils.tan(UI.patiosPitch);\n let scaleX = (beamLength + fitBeamWidthToCut) / beamGeoLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let material = this.getRafterBeamMaterial(userDataPos, offsetZ, beamLength);\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(-fitBeamWidthToCut, 0, 0);\n mesh.scale.setX(scaleX);\n\n let { capL, capR } = this.getBeamEndCapForRafterBeam(0, beamLength);\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n\n beamGroup.position.set(offsetXRafter, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n\n this.scene.add(beamGroup);\n }\n private getRafterBeamMaterial(userDataPos, offsetZ, beamLength) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let cutFrontZ = offsetZ;\n let cutBackZ = offsetZ - beamLength * this.utils.cos(UI.patiosPitch);\n\n if (cutFrontZ != 0 || cutBackZ != 0) {\n let nBottom = new Vector3(0, 0, -1).normalize();\n let pBottom = new Vector3(0, 0, cutFrontZ);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, cutBackZ);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n }\n\n return material;\n }\n private getBeamEndCapForRafterBeam(offsetXL, offsetXR) {\n let capL;\n let capR;\n let matEndCap = this.getRafterBeamEndCapMaterial();\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n let higherBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(\n offsetXR + 2,\n -this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch),\n this.geo_rafterBeamEndCap.width / 2\n );\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: higherBraketName,\n };\n\n return {\n capL,\n capR,\n };\n }\n private getRafterBeamEndCapMaterial() {\n const matEndCap = UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone();\n let heightPlane = UI.height;\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(0, heightPlane, 0);\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom = UI.height - this.beamInfo.height;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightRealBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom = matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(0, 0, -UI.existingWidth1 / 2 - this.scene.position.z)\n );\n planeBottom.translate(\n new Vector3(0, 0, -UI.existingWidth1 / 2 - this.scene.position.z)\n );\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n return matEndCap;\n }\n private cutRafterBeamWithRakeCut(offsetZ, offsetX, beamLength) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const beamWidth = this.beamInfo.width;\n let startZ = offsetZ;\n let endZ = offsetZ - beamLength * this.utils.cos(UI.patiosPitch);\n const offsetZFrontBeam = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX, 0, startZ),\n new Vector3(offsetX, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + 2, 0, startZ),\n new Vector3(offsetX + 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth, 0, startZ),\n new Vector3(offsetX + beamWidth, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth - 2, 0, startZ),\n new Vector3(offsetX + beamWidth - 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n return { newStartZ: null, newLength: null, fitYForNewStartZPoint: null };\n }\n private addDownPipeStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetX = -this.totalBaySize / 2 + 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutLeftVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutLeftVer;\n\n this.downpipeStepRakeCutGroupLeft.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupLeft.add(meshPipe);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetX = this.totalBaySize / 2 - 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutRightVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutRightVer;\n\n this.downpipeStepRakeCutGroupRight.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupRight.add(meshPipe);\n }\n }\n private addDownPipe() {\n let offsetZ = UI.span + UI.multiSpan + 100 - UI.existingWidth1 / 2;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n\n //Rakecut\n //Downpipe will be in left\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX = -this.totalBaySize / 2 + this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX = -this.totalBaySize / 2 + UI.rakeCutLeftHor + 50;\n }\n }\n //Downpipe will be in right\n else {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX = this.totalBaySize / 2 - this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetX = this.totalBaySize / 2 - UI.rakeCutRightHor - 50;\n }\n }\n\n let pipeLength = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n );\n\n this.downpipeGroup = this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n 0,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n pipeLength,\n true\n );\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n if (planView) {\n this.utils.getPlanVerticesOfBeam(c as Mesh, lsGeometries, [planView]);\n }\n\n let box = new BoxHelper(objCloned);\n c.updateWorldMatrix(true, true);\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n ),\n });\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addGround() {\n let offsetX = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetZ = -UI.existingWidth1 / 2;\n let width = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n public addPost(offsetX: number, userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n\n const _existingType = +this.APP.sltExistingType.currentValue;\n\n let _flag = false;\n if (userDataPos.left && UI.overhangLeft > 0) {\n _flag = true;\n } else if (userDataPos.right && UI.overhangRight > 0) {\n _flag = true;\n }\n\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (_existingType === 1 || _existingType === 3) &&\n userDataPos.left &&\n UI.existingWidth1 >= UI.span\n ) {\n return;\n }\n if (\n (_existingType === 2 || _existingType === 3) &&\n userDataPos.right &&\n UI.existingWidth1 >= UI.span\n ) {\n return;\n }\n } else if (!_flag) {\n if (\n (_existingType === 1 || _existingType === 3) &&\n userDataPos.left &&\n UI.existingWidth1 >= UI.span + UI.multiSpan\n ) {\n return;\n }\n if (\n (_existingType === 2 || _existingType === 3) &&\n userDataPos.right &&\n UI.existingWidth1 >= UI.span + UI.multiSpan\n ) {\n return;\n }\n }\n let views: Print2DView[] = [];\n\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let offsetZ = -UI.existingWidth1 / 2;\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n // offsetZ += this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n let scaleY = 0;\n let length = 0;\n\n if (userDataPos.isMultiSpan) {\n length =\n UI.height - this.getHeightByRoofPitch(false) - this.beamInfo.height;\n scaleY = length / this.postInfo.height;\n } else {\n length =\n UI.height - this.getHeightByRoofPitch(true) - this.beamInfo.height;\n scaleY = length / this.postInfo.height;\n }\n this.frontPostHeight = length;\n // scaleY -= this.geometryManager.SUPERIOR_BEAM.S65x160.height;\n\n let exceedMoveBackLimit = false;\n\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n //Add new post for rake cut\n // if(userDataPos.left && (UI.multiSpan <= 0 || (UI.multiSpan > 0 && userDataPos.isMultiSpan))){\n // let postLeft = new Mesh(this.postInfo.geometry, MaterialManager.Instance().POST);\n // postLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.SUPERIOR_POST, position: userDataPos, views: views };\n // postLeft.position.set(offsetX + this.APP.sldRakeCutHorizontal.currentValue, 0, offsetZ);\n // postLeft.scale.setY(scaleY);\n // this.scene.add(postLeft);\n // }\n\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX -= UI.overhangLeft;\n offsetZ -= this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n }\n }\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX += UI.overhangRight;\n offsetZ -= this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n }\n }\n }\n //End rakecut\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n public addPostAngleRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let height =\n UI.height - this.getHeightByRoofPitch(true) - this.beamInfo.height;\n let offsetZ =\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan - this.beamInfo.width / 2;\n\n let scaleY = height / this.postInfo.height;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.left) {\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(offsetX + this.beamLeftCutSizeInfo.l, 0, offsetZ);\n postLeft.scale.setY(scaleY);\n\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postLeft);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.right) {\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postRight.position.set(\n offsetX - this.beamRightCutSizeInfo.l,\n 0,\n offsetZ\n );\n postRight.scale.setY(scaleY);\n\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postRight);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postRight);\n }\n }\n }\n }\n private addPostStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2 + this.postInfo.width;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.postInfo.width / 2;\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n let scaleYB = scaleYF;\n let offsetZB = offsetZF;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(offsetXL, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(offsetXL - this.postInfo.width / 2, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 - this.postInfo.width;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.postInfo.width / 2;\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n let scaleYB = scaleYF;\n let offsetZB = offsetZF;\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(offsetXR, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(offsetXR + this.postInfo.width / 2, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n }\n public addBeam(userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n //const mesh = new Mesh(this.beamInfo.geometry, MaterialManager.Instance().BEAM);\n\n let offsetZ = -UI.existingWidth1 / 2;\n let offsetY = 0;\n let scaleX = this.roofWidth / this.beamInfo.length;\n let beamLength = this.roofWidth;\n\n if (userDataPos.isMultiSpan) {\n offsetY = UI.height - this.getHeightByRoofPitch(false);\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetY = UI.height - this.getHeightByRoofPitch(true);\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetXR = this.totalBaySize / 2 + UI.overhangRight;\n\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n //Cutout - in case of multi span & apply only the back beam\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.enableCutout &&\n !userDataPos.isMultiSpan\n ) {\n if (UI.span <= UI.existingWidth1) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n scaleX =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.beamInfo.length;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n scaleX =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.beamInfo.length;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n scaleX =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue * 2) /\n this.beamInfo.length;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2;\n }\n }\n }\n\n //rake cut - apply only the front beam\n if (UI.multiSpan <= 0 || (UI.multiSpan > 0 && userDataPos.isMultiSpan)) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.beamLeftCutSizeInfo.l;\n scaleX =\n (this.roofWidth - this.beamLeftCutSizeInfo.l) / this.beamInfo.length;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetXL += UI.rakeCutLeftHor;\n scaleX = (this.roofWidth - UI.rakeCutLeftHor) / this.beamInfo.length;\n beamLength -= UI.rakeCutLeftHor;\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetXR -= this.beamRightCutSizeInfo.l;\n scaleX =\n (this.roofWidth - this.beamRightCutSizeInfo.l) / this.beamInfo.length;\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetXR -= UI.rakeCutRightHor;\n scaleX = (this.roofWidth - UI.rakeCutRightHor) / this.beamInfo.length;\n beamLength -= UI.rakeCutRightHor;\n }\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngleRakecut(cutSide: BUILDING_SIDE) {\n if (\n cutSide == BUILDING_SIDE.LEFT &&\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n if (\n cutSide == BUILDING_SIDE.RIGHT &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let beamSizeInfo = this.utils.getBeamRakeCutInfo(this.APP, cutSide);\n\n let offsetX = -this.totalBaySize / 2 - UI.overhangLeft + beamSizeInfo.l;\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n\n let offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n let beamLength = beamSizeInfo.m;\n let scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n\n //beam lenght can not go behind existing wall\n if (\n cutSide == BUILDING_SIDE.LEFT &&\n UI.rakeCutLeftVer + beamSizeInfo.k_ > this.MANAGER.patiosLength\n ) {\n beamLength -= beamSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n } else if (\n cutSide == BUILDING_SIDE.RIGHT &&\n UI.rakeCutRightVer + beamSizeInfo.k_ > this.MANAGER.patiosLength\n ) {\n beamLength -= beamSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n }\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let rotYL = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n let rotYR = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n const mesh = new Mesh(\n this.beamRakecutInfoLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(0, rotYL, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(cutSide, matrix);\n }\n\n beamGroup.rotation.set(rotX, rotYL, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n offsetX = this.totalBaySize / 2 + UI.overhangRight - beamSizeInfo.l;\n const mesh = new Mesh(\n this.beamRakecutInfoRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(0, -rotYR, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(cutSide, matrix);\n }\n\n beamGroup.rotation.set(rotX, -rotYR, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n let offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n\n let beamLength = UI.rakeCutLeftHor + this.beamInfo.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft;\n }\n\n let beamGroup;\n\n if (UI.beamType == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n let offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n let beamLength = UI.rakeCutRightHor + +this.beamInfo.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + +this.beamInfo.width;\n }\n\n let beamGroup;\n\n if (UI.beamType == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n }\n private addPostForBeamAngelRakecut(\n cutSide: BUILDING_SIDE,\n beamMatrix: Matrix4\n ) {\n let inf = this.utils.getBeamRakeCutInfo(this.APP, cutSide);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n let p1 = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(inf.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(1, 0, 0).multiplyScalar(inf.l)\n );\n let angle = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n\n let ver = (Math.cos(angle) * inf.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n -UI.totalBayLength / 2 + UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(p3, dir.multiplyScalar(inf.m / 2));\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postLeft.position.set(pMid2.x, 0, pMid2.z);\n //postLeft.rotation.set(0,this.utils.degreesToRadians(UI.patiosPitch),0);\n //postLeft.applyMatrix4(beamMatrix);\n //postLeft.position.setY(-height/2);\n postLeft.scale.setY(scaleY);\n this.scene.add(postLeft);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n let p1 = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(inf.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(-1, 0, 0).multiplyScalar(inf.l)\n );\n let angle = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n\n let ver = (Math.cos(angle) * inf.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(p3, dir.multiplyScalar(inf.m / 2));\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postRight.position.set(pMid2.x, 0, pMid2.z);\n postRight.scale.setY(scaleY);\n this.scene.add(postRight);\n }\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n return this.utils.tan(UI.patiosPitch) * UI.span;\n } else {\n return this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n }\n }\n private getOffsetHeightForRafterBeamByRoofPitch(isSpan: boolean): number {\n const beamWidth = this.beamInfo.width;\n if (isSpan) {\n const spanLength =\n UI.span - (UI.multiSpan > 0 ? beamWidth / 2 : beamWidth);\n return this.utils.tan(UI.patiosPitch) * spanLength;\n } else {\n const totalSpanLength = UI.span + UI.multiSpan - beamWidth;\n return this.utils.tan(UI.patiosPitch) * totalSpanLength;\n }\n }\n}\n","import { Mesh, Vector3, Material, Plane, Geometry, BufferGeometry, Group, BoxBufferGeometry, MeshLambertMaterial, BoxHelper, Matrix4, PlaneHelper, Points, PointsMaterial, Color, PlaneBufferGeometry, DoubleSide, Object3D, LineSegments } from 'three';\nimport { Util } from '../utils';\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RAKECUT_TYPE, RIBSPAN_PANEL_WIDTH, RIBSPAN_BARGE_FIT, RIBSPAN_RECEIVER_CHANNEL_FIT } from 'src/app/app.constants';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Print2DView, ViewType, LineType } from 'src/app/core/models';\nimport { ExistingBuildingManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport HighLightBox from 'src/app-ribspan/models/HighlightBox';\nimport { UI } from '../ui';\nimport SelectionManager from '../selection.manager';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: ExistingBuildingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private roofInfo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private receiverCutoutRightVer2: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutLeftVer2: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n private roofGroup: Group;\n\n private eventHandleId: any;\n\n // Var\n private roofLengthPlus: number;\n private roofWidth: number;\n private roofLength: number;\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n\n constructor(app: AppComponent, existingManager: ExistingBuildingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = existingManager;\n this.scene = new Group();\n existingManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofRibspanPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2, this.roofInfo.height / 2, -this.roofInfo.length / 2);\n this.roofInfo.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n // Barge capping - left\n this.bargeLeftInfo = this.geometryManager.getRibspanBarge();\n this.bargeLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(this.bargeLeftInfo.width / 2 - 3, this.bargeLeftInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeLeftInfo.length / 2);\n\n // Barge capping - right\n this.bargeRightInfo = this.geometryManager.getRibspanBarge();\n this.bargeRightInfo.geometry\n .translate(-this.bargeLeftInfo.width / 2 + 3, this.bargeLeftInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeLeftInfo.length / 2);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutRightHor.length / 2, this.receiverCutoutRightHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightHor.width / 2);\n\n \n //Vertical Barge cutout left 2\n this.receiverCutoutLeftVer2 = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftVer2.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer2.width / 2, this.receiverCutoutLeftVer2.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftVer2.length / 2);\n\n //Vertical cutout right 2\n this.receiverCutoutRightVer2 = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightVer2.geometry\n .translate(-this.receiverCutoutRightVer2.width / 2, this.receiverCutoutRightVer2.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightVer2.length / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getRibspanReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 + 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.geo_receiverChanel.width / 2);\n\n // Gutter\n let gtExtraOffsetY = 0;\n if (this.APP.sltGutterType.currentValue == 1 || this.APP.sltGutterType.currentValue == 2) {\n gtExtraOffsetY = 20;\n }\n\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL \n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS\n || x.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n || x.userData.type === GEOMETRY_TYPE.HIGHLIGHT_BOX));\n\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.roofLength = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n const _roofLength = Math.pow(this.roofLength, 2) + Math.pow(this.getHeightByRoofPitch({ isMultiSpan: true }), 2);\n this.roofLengthPlus = Math.sqrt(_roofLength);\n this.roofWidth = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n\n this.addRoofGroup();\n this.addCutout();\n if(UI.rakeCutLeftType == 0){\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft), \n y: 0, \n z: UI.span + UI.multiSpan + UI.overhangFront, \n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300, \n y: 0, \n z: UI.span + UI.multiSpan + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT }\n })\n }\n if(UI.rakeCutRightType == 0){\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300, \n y: 0, \n z: UI.span + UI.multiSpan + UI.overhangFront, \n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT }\n })\n }\n\n //Add angle rakecut\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE){\n this.addAngleRakeCut(BUILDING_SIDE.LEFT);\n }\n if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n this.addAngleRakeCut(BUILDING_SIDE.RIGHT);\n }\n\n //Add step rakecut\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP){\n this.addStepRakecut(BUILDING_SIDE.LEFT);\n }\n if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP){\n this.addStepRakecut(BUILDING_SIDE.RIGHT);\n }\n \n\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n\n let roofPanelCount = Math.ceil(this.roofWidth / RIBSPAN_PANEL_WIDTH);\n this.enableCutout = this.MANAGER.cutoutCondition;\n\n //clipping plane\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR);\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n\n //panel direction\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetXL = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = true;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n this.addRoof(offsetXL, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + RIBSPAN_PANEL_WIDTH;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n this.addRoof(offsetXL, [this.csg_cutoutRight] );\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.enableCutout) {\n let totalPanelLength = 0;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n this.addRoof(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoof(offsetXL, []);\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBarge();\n this.addBargeStepRakecut();\n this.addGutter();\n this.addGutterAngelRakecut();\n this.addGutterStepRakecut();\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n //this.getOutLines();\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n \n public addRoofGroup() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n //let offsetX = -this.APP.sldLeftOverhang.currentValue;\n let offsetY = this.APP.sldBuildingHeight.currentValue;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2;\n\n this.roofGroup.position.set(0, offsetY, offsetZ);\n this.roofGroup.rotation.set(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n\n this.scene.add(this.roofGroup);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroup.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS);\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroup.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n}\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoof(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n let scaleZ = this.roofLengthPlus / this.roofInfo.length;\n const offsetY = 0;\n let offsetZ = 0;\n mesh.position.set(offsetX, offsetY, offsetZ);\n //mesh.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL, views: views };\n \n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n \n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n //cho no cung he toa do => cai nay khong delay\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroup.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if(cutoutCondition){\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n if(rakeCutCondition){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n\n let buferGeo = new BufferGeometry().fromGeometry((meshResult as Mesh).geometry as Geometry);\n this.utils.changeGeoColor(buferGeo, new Vector3(0, 1, 0), UI.roofColor.toString());\n let newGeo = new Geometry().fromBufferGeometry(buferGeo);\n (meshResult as Mesh).geometry = newGeo;\n\n this.roofGroup.add(meshResult);\n }\n else {\n this.roofGroup.add(mesh);\n }\n }\n private addAngleRakeCut(cutSide: BUILDING_SIDE) {\n let offsetXL = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = -100;\n\n let offsetZ = this.MANAGER.patiosLength - this.APP.sldExistingWidth1.currentValue / 2;\n\n let angle;\n\n if(cutSide == BUILDING_SIDE.LEFT){\n angle = Math.atan(this.APP.sldLeftCutHorizontal.currentValue / this.APP.sldLeftCutVertical.currentValue);\n }\n else if(cutSide == BUILDING_SIDE.RIGHT){\n angle = Math.atan(this.APP.sldRightCutHorizontal.currentValue / this.APP.sldRightCutVertical.currentValue);\n }\n \n const _offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n //- this.APP.sldExistingWidth1.currentValue/2\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let _rotY;\n if(cutSide == BUILDING_SIDE.LEFT){\n _rotY = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n }\n else if(cutSide == BUILDING_SIDE.RIGHT){\n _rotY = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n }\n let _angle = (Math.PI - _rotY)/2;\n\n let hypotenuse = Math.sqrt(Math.pow(this.MANAGER.patiosLength, 2) + Math.pow(this.MANAGER.patiosWidth, 2));\n let scaleLength = hypotenuse/1000;\n let scaleWidth = this.MANAGER.patiosLength * this.MANAGER.patiosWidth / hypotenuse/1000;\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n this.mesh_rakecutLeft = new Mesh(this.geo_rakecutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutLeft.position.set(offsetXL + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ - this.APP.sldLeftCutVertical.currentValue);\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutLeft.rotateY(angle);\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n //cut gutter csg\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n this.meshCutGutterLeft1 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterLeft1.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterLeft1.position.set(offsetXL + this.APP.sldLeftCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterLeft1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft1.rotation.set(0,_angle,0);\n this.meshCutGutterLeft1.updateMatrix();\n this.csgCutGutterLeft1 = CSG.fromMesh(this.meshCutGutterLeft1);\n //this.APP.scene.add(this.meshCutGutterLeft1);\n\n this.meshCutGutterLeft2 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterLeft2.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterLeft2.position.set(offsetXL + this.APP.sldLeftCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterLeft2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft2.rotation.set(0,_angle + Math.PI,0);\n this.meshCutGutterLeft2.updateMatrix();\n this.csgCutGutterLeft2 = CSG.fromMesh(this.meshCutGutterLeft2);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n this.mesh_rakecutRight = new Mesh(this.geo_rakecutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutRight.position.set(offsetXR + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ - this.APP.sldRightCutVertical.currentValue);\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutRight.rotateY(-angle);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n\n\n //cut gutter\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n this.meshCutGutterRight1 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterRight1.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterRight1.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterRight1.rotation.set(0,-_angle,0);\n this.meshCutGutterRight1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight1.updateMatrix();\n this.csgCutGutterRight1 = CSG.fromMesh(this.meshCutGutterRight1);\n\n this.meshCutGutterRight2 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterRight2.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterRight2.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterRight2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight2.rotation.set(0,-(_angle + Math.PI),0);\n this.meshCutGutterRight2.updateMatrix();\n this.csgCutGutterRight2 = CSG.fromMesh(this.meshCutGutterRight2);\n //this.APP.scene.add(this.meshCutGutterRight2);\n }\n }\n private addStepRakecut(cutSide: BUILDING_SIDE) {\n let offsetXL = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let offsetY = -100;//this.APP.sldExistingWallHeight.currentValue;\n // let offsetY = this.utils.getHeightByAngle(\n // this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue, \n // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, \n // this.APP.sltRoofPitch.currentValue, \n // 1\n // );\n\n let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue - this.APP.sldExistingWidth1.currentValue / 2;\n \n\n if (cutSide == BUILDING_SIDE.LEFT) {\n let scaleLength = (this.APP.sldLeftCutVertical.currentValue + 100)/1000;\n let scaleWidth = (this.APP.sldLeftCutHorizontal.currentValue + 100)/1000;\n\n this.mesh_rakecutLeft = new Mesh(this.geo_rakecutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutLeft.position.set(offsetXL + this.APP.sldLeftCutHorizontal.currentValue, offsetY, offsetZ - this.APP.sldLeftCutVertical.currentValue);\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n let scaleLength = (this.APP.sldRightCutVertical.currentValue + 100)/1000;\n let scaleWidth = (this.APP.sldRightCutHorizontal.currentValue + 100)/1000;\n\n this.mesh_rakecutRight = new Mesh(this.geo_rakecutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutRight.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, offsetY, offsetZ - this.APP.sldRightCutVertical.currentValue);\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n\n private addBarge() {\n let mesh: Mesh;\n\n let offsetXB = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue;\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZLeft = 0;\n let offsetZRight = 0;\n\n let scaleXB = this.roofWidth / this.geo_receiverChanel.length;\n let scaleCutoutVer = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue + this.receiverCutoutLeftHor.width, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n let scaleCutoutHor = this.APP.sldExistingLength2.currentValue / this.receiverCutoutLeftHor.length;\n let scaleZLeft = this.roofLength / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLength;\n let scaleZRight = this.roofLength / this.bargeRightInfo.length;\n let bargeRightLength = this.roofLength;\n\n let offsetY = 0\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //cutout\n if (this.APP.sltCutOut.currentValue == 1\n && this.APP.sldExistingLength2.currentValue > 0\n && this.enableCutout\n && (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3)) {\n scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue) / this.geo_receiverChanel.length;\n scaleZLeft = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n bargeLeftLength = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n \n offsetXB += this.APP.sldExistingLength2.currentValue;\n offsetZLeft += this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n mesh = new Mesh(this.receiverCutoutLeftHor.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n\n //cutout Ver\n mesh = new Mesh(this.receiverCutoutLeftVer.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltCutOut.currentValue == 1\n && this.APP.sldExistingLength2.currentValue > 0\n && this.enableCutout\n && (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3)) {\n scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue) / this.geo_receiverChanel.length;\n scaleZRight = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue) / this.bargeRightInfo.length;\n bargeRightLength = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n offsetZRight += this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n mesh = new Mesh(this.receiverCutoutRightHor.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n\n //cutout ver\n mesh = new Mesh(this.receiverCutoutRightVer.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltCutOut.currentValue == 1\n && this.APP.sldExistingLength2.currentValue > 0\n && this.enableCutout\n && (this.APP.sltExistingType.currentValue == 3)) {\n scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue * 2) / this.geo_receiverChanel.length;\n }\n\n //Rake cut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue\n }\n\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue\n }\n\n scaleZLeft = bargeLeftLength/this.bargeLeftInfo.length;\n scaleZRight = bargeRightLength/this.bargeRightInfo.length;\n\n //left\n if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3)\n && ((this.APP.sldExistingWidth2.currentValue == 0 && this.APP.sldExistingWidth1.currentValue > scaleZLeft * this.receiverCutoutLeftVer2.length \n || this.APP.sldExistingWidth2.currentValue > 0 && this.APP.sldExistingWidth2.currentValue > scaleZLeft * this.receiverCutoutLeftVer2.length))) {\n mesh = new Mesh(this.receiverCutoutLeftVer2.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXL2, offsetY, offsetZLeft);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n } else {\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZLeft);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n }\n \n\n //right\n if ((this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3)\n && ((this.APP.sldExistingWidth2.currentValue == 0 && this.APP.sldExistingWidth1.currentValue > scaleZRight * this.receiverCutoutRightVer2.length \n || this.APP.sldExistingWidth2.currentValue > 0 && this.APP.sldExistingWidth2.currentValue > scaleZRight * this.receiverCutoutRightVer2.length))) {\n mesh = new Mesh(this.receiverCutoutRightVer2.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXR2, offsetY, offsetZRight);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n } else {\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZRight);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n }\n\n\n // back\n mesh = new Mesh(this.geo_receiverChanel.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXB, offsetY, 0);\n mesh.scale.setX(scaleXB);\n //FIXED: BARGE -> RECEIVER_CHANCEL\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n }\n private addBargeStepRakecut() {\n if(!(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP || this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP)){\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let offsetXL = this.APP.dialogEditBay.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue;\n let offsetXR = this.APP.dialogEditBay.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetZL = this.utils.getHypotenuseByCos(this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldLeftCutVertical.currentValue, this.APP.sltRoofPitch.currentValue);\n let offsetZR = this.utils.getHypotenuseByCos(this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldRightCutVertical.currentValue, this.APP.sltRoofPitch.currentValue);\n let scaleZL = (this.APP.sldLeftCutVertical.currentValue) / this.bargeLeftInfo.length;\n let scaleZR = (this.APP.sldRightCutVertical.currentValue) / this.bargeRightInfo.length;\n //let scaleX = (this.APP.sldRakeCutHorizontal.currentValue) / this.bargeLeftInfo.length;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n bargeVer.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n bargeVer.position.set(-offsetXL + this.APP.sldLeftCutHorizontal.currentValue, 0, offsetZL);\n bargeVer.scale.set(1, 1, scaleZL);\n\n // let bargeHor = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(-offsetXL, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n bargeVer.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n bargeVer.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, 0, offsetZR);\n bargeVer.scale.set(1, 1, scaleZR);\n\n // let bargeHor = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(offsetXR, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n }\n public addGutter() {\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const offsetY = 0;\n\n let gutterLength = this.roofWidth;\n let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXL += (this.APP.sldLeftCutHorizontal.currentValue - exLength);\n gutterLength -= (this.APP.sldLeftCutHorizontal.currentValue - exLength);\n }\n else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n\n if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n gutterLength -= (this.APP.sldRightCutHorizontal.currentValue - exLength);\n }\n else if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP){\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n \n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n let gutterMesh = new Mesh(this.gutterInfo.geometry, MaterialManager.Instance().GUTTER);\n gutterMesh.scale.setX(gutterLength/this.gutterInfo.length);\n gutterMesh.updateMatrix();\n let matrixBefore = gutterMesh.matrix.clone();\n\n gutterMesh.position.set(offsetXL, offsetY, offsetZ);\n gutterMesh.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n gutterMesh.updateMatrix();\n\n let meshClipped = CSG.toMesh(CSG.fromMesh(gutterMesh).subtract(this.csgCutGutterLeft1), gutterMesh.matrix);\n meshClipped = CSG.toMesh(CSG.fromMesh(meshClipped).subtract(this.csgCutGutterRight1), gutterMesh.matrix);\n meshClipped.applyMatrix4(new Matrix4().getInverse(gutterMesh.matrix));\n meshClipped.applyMatrix4(matrixBefore);\n meshClipped.material = gutterMesh.material;\n meshClipped.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n\n let gutterGroup = this.utils.createGutterGroupWithMesh(meshClipped, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, false, false);\n\n this.roofGroup.add(gutterGroup);\n }\n else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE){\n {\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, false, true, this.csgCutGutterLeft1, this.roofGroup);\n\n this.roofGroup.add(gutterGroup);\n }\n \n }\n else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n {\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, false, this.csgCutGutterRight1, this.roofGroup);\n\n this.roofGroup.add(gutterGroup);\n }\n }\n else{\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, true);\n this.roofGroup.add(gutterGroup);\n }\n }\n \n public addGutterAngelRakecut(){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE){\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let exLength = 300\n let rc_offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let rc_offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const rc_offsetZL = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldLeftCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetZR = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldRightCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetY = 0;\n\n\n let rc_rotYL = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n let rc_lengthL = exLength + Math.sqrt(Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) + Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2));\n let rc_rotYR = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n let rc_lengthR = exLength + Math.sqrt(Math.pow(this.APP.sldRightCutVertical.currentValue, 2) + Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2));\n\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n let gutterRakecutGroupLeft = this.utils.createGutterGroup(this.gutterRakecutLeftInfo, this.geo_gutterCap,\n rc_lengthL, new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL), new Vector3(0, -rc_rotYL, 0), views, 1, true, false,\n this.csgCutGutterLeft2, this.roofGroup);\n let gutterRakecutGroupRight = this.utils.createGutterGroup(this.gutterRakecutRightInfo, this.geo_gutterCap,\n rc_lengthR, new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR), new Vector3(0, rc_rotYR, 0), views, 1, true, false,\n this.csgCutGutterRight2, this.roofGroup);\n\n this.roofGroup.add(gutterRakecutGroupLeft, gutterRakecutGroupRight);\n }\n else{\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(this.gutterRakecutLeftInfo, this.geo_gutterCap,\n rc_lengthL, new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL), new Vector3(0, -rc_rotYL, 0), views, 1, true, false,\n this.csgCutGutterLeft2, this.roofGroup);\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(this.gutterRakecutRightInfo, this.geo_gutterCap,\n rc_lengthR, new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR), new Vector3(0, rc_rotYR, 0), views, 1, true, false,\n this.csgCutGutterRight2, this.roofGroup);\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n }\n }\n public addGutterStepRakecut() {\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP){\n return;\n }\n\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const offsetZL = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldLeftCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetZR = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldRightCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetY = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //Step rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldLeftCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap, gutterLength, \n new Vector3(offsetXL, offsetY, offsetZL),\n new Vector3(0, 0, 0),\n views, 1, true, true);\n \n this.roofGroup.add(gutterHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldRightCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap, gutterLength, \n new Vector3(offsetXR - this.APP.sldRightCutHorizontal.currentValue, offsetY, offsetZR),\n new Vector3(0, 0, 0),\n views, 1, true, true);\n \n this.roofGroup.add(gutterHor);\n }\n }\n\n private getHeightByRoofPitch(userDataPos: any): number {\n if (userDataPos.isSpan) {\n return this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.APP.sldSpan.currentValue;\n } else if (userDataPos.isMultiSpan) {\n return this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n } else {\n return this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.roofLength;\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n public onColorChanged() {\n if(this.utils && this.roofInfo.geometry){\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltReceiverType\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n}\n\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, Plane, Geometry, LineSegments } from \"three\";\nimport { Util } from \"./utils\";\nimport { HomeComponent as AppComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry, Printing2DGeometryType } from 'src/app/core/models';\nimport { GEOMETRY_TYPE } from 'src/app/app.config';\n\nexport class FasciaManager {\n private scene: Scene;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_fasciaW1: BufferGeometry;\n private geo_fasciaW2: BufferGeometry;\n private geo_fasciaL1: BufferGeometry;\n\n // private matW1: Material;\n // private clippingPlaneW1: Plane;\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise{\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.material = MaterialManager.Instance().FASCIA.clone();\n //this.matW1 = MaterialManager.Instance().EAVE.clone();\n\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldEaveWidth.addAction(this.uiChanged.bind(this));\n app.sldFasciaDepth.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n let translateWidth = this.geometryManager.FASCIA.FASCIA.width/2;\n let translateHeight = this.geometryManager.FASCIA.FASCIA.height/2;\n let translateLength = this.geometryManager.FASCIA.FASCIA.length/2;\n \n this.geo_fasciaW1 = this.geometryManager.FASCIA.FASCIA.geometry\n .clone()\n .translate(translateWidth,translateHeight,translateLength);\n\n this.geo_fasciaL1 = this.geometryManager.FASCIA.FASCIA.geometry\n .clone()\n .rotateY(Math.PI/2)\n .translate(0,translateHeight,-translateWidth)\n \n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.FASCIA));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'FASCIA_OUTLINE'));\n\n // if(this.APP.sldExistingLength2.currentValue == 0){\n // this.clippingPlaneW1 = new Plane(new Vector3(0,0,-1), this.APP.sldExistingWidth1.currentValue/2);\n // this.matW1.clippingPlanes = [this.clippingPlaneW1];\n // }\n // else{\n // this.matW1.clippingPlanes = [];\n // }\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n\n this.addFascia({length1: true});\n if(this.APP.sldExistingLength2.currentValue > 0){\n this.addFascia({length2: true});\n }\n if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n this.addFascia({width1: true});\n }\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n this.addFascia({width2: true});\n }\n\n //this.getOutLines();\n resolve();\n });\n }\n\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.FASCIA );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMesh((o as Mesh), 10);\n outlineGeo.translate(o.position.x, o.position.y + 5000, o.position.z);\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"FASCIA_OUTLINE\"};\n // this.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000 , vertices[i+2]));\n }\n return simplifiedGeo;\n }\n \n public addFascia(userDataPos: any){\n let mesh: Mesh;\n \n let offsetX = this.APP.sldExistingLength.currentValue/2 - this.APP.sldEaveWidth.currentValue;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n let scaleX = this.APP.sldExistingLength.currentValue/this.geometryManager.FASCIA.FASCIA.length;\n let scaleY = this.APP.sldFasciaDepth.currentValue/this.geometryManager.FASCIA.FASCIA.height;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.geometryManager.FASCIA.FASCIA.width)/this.geometryManager.FASCIA.FASCIA.length;\n \n\n if(userDataPos.width1){\n if(this.APP.sldExistingLength2.currentValue <= 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue - this.APP.sldEaveWidth.currentValue + this.geometryManager.FASCIA.FASCIA.width)/this.geometryManager.FASCIA.FASCIA.length;\n if(scaleZ <= 0)\n scaleZ = 0.01;\n }\n\n let views = [ \n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(-offsetX-this.geometryManager.FASCIA.FASCIA.width);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ + this.APP.sldEaveWidth.currentValue - this.geometryManager.FASCIA.FASCIA.width);\n mesh.scale.set(1,scaleY,scaleZ);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ + this.APP.sldEaveWidth.currentValue - this.geometryManager.FASCIA.FASCIA.width);\n mesh.scale.set(1,scaleY,scaleZ);\n this.scene.add(mesh);\n }\n }\n else if(userDataPos.width2){\n let _offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue - this.APP.sldEaveWidth.currentValue;\n let _offsetY = this.APP.sldExistingWallHeight.currentValue + this.geometryManager.EAVE.EAVE.height;\n let _offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue - this.geometryManager.FASCIA.FASCIA.width;\n \n let _scaleY = this.APP.sldFasciaDepth.currentValue/this.geometryManager.FASCIA.FASCIA.height;\n let _scaleZ = (this.APP.sldExistingWidth2.currentValue - this.APP.sldEaveWidth.currentValue + this.geometryManager.FASCIA.FASCIA.width)/this.geometryManager.FASCIA.FASCIA.length;\n\n let views = [ \n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.set(-(_offsetX + this.geometryManager.FASCIA.FASCIA.width), _offsetY, _offsetZ);\n mesh.scale.set(1,_scaleY,_scaleZ);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.set(_offsetX, _offsetY, _offsetZ);\n mesh.scale.set(1,_scaleY,_scaleZ);\n this.scene.add(mesh);\n }\n }\n else if(userDataPos.length1){\n let offsetX = 0;\n if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n if(this.APP.sltExistingType.currentValue == 1){\n offsetX = this.APP.sldEaveWidth.currentValue/2;\n scaleX = (this.APP.sldExistingLength.currentValue - this.APP.sldEaveWidth.currentValue)/this.geometryManager.FASCIA.FASCIA.length;\n }\n else if(this.APP.sltExistingType.currentValue == 2){\n offsetX = -this.APP.sldEaveWidth.currentValue/2;\n scaleX = (this.APP.sldExistingLength.currentValue - this.APP.sldEaveWidth.currentValue)/this.geometryManager.FASCIA.FASCIA.length;\n }\n else if(this.APP.sltExistingType.currentValue == 3){\n offsetX = 0;\n scaleX = (this.APP.sldExistingLength.currentValue - this.APP.sldEaveWidth.currentValue*2)/this.geometryManager.FASCIA.FASCIA.length;\n }\n }\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_fasciaL1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ+this.APP.sldEaveWidth.currentValue);\n mesh.scale.set(scaleX,scaleY,1);\n this.scene.add(mesh);\n }\n else if(userDataPos.length2){\n let _offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2 - this.APP.sldEaveWidth.currentValue/2;\n let _offsetY = this.APP.sldExistingWallHeight.currentValue + this.geometryManager.EAVE.EAVE.height;\n let _offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue;\n let _scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.FASCIA.FASCIA.length;\n let _scaleY = this.APP.sldFasciaDepth.currentValue/this.geometryManager.FASCIA.FASCIA.height;\n\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n _offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2 - this.APP.sldEaveWidth.currentValue;\n _scaleX = this.APP.sldExistingLength2.currentValue/this.geometryManager.FASCIA.FASCIA.length;\n }\n\n let views = [ \n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_fasciaL1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(-_offsetX);\n mesh.position.setY(_offsetY);\n mesh.position.setZ(_offsetZ);\n mesh.scale.set(_scaleX,_scaleY,1);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_fasciaL1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(_offsetX);\n mesh.position.setY(_offsetY);\n mesh.position.setZ(_offsetZ);\n mesh.scale.set(_scaleX,_scaleY,1);\n this.scene.add(mesh);\n }\n }\n \n \n \n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n}\n","import {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport {\n FIT_DIMENSION,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport Dimension, {\n AddDimensionOptions,\n} from \"src/app-ribspan/models/Dimension\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { FasciaManager } from \".\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: FasciaManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any;\n private textParameter: any;\n private isReady = false;\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n private geometryManager: GeometryManager;\n private offsetBraketZ: number = 0;\n\n constructor(app: AppComponent, manager: FasciaManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n\n this.isReady = true;\n this.draw();\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosLowerHeightDim.children =\n this.dimensionPatiosLowerHeightDim.children.filter(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.offsetBraketZ = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetBraketZ =\n this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n }\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n this.drawDimensionLowerHeightDim();\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if (existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left) {\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim() {\n let offsetYBraket = 0;\n if (+UI.upstandBraketType !== 0) {\n offsetYBraket =\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n this.MANAGER.postAndBeamManager.geoBraket_1.width *\n this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n offsetYBraket -=\n this.MANAGER.postAndBeamManager.beamInfo.width *\n this.utils.tan(UI.patiosPitch);\n }\n\n const frontPostHeight =\n UI.eaveHeight -\n this.getHeightByRoofPitch(true) -\n this.MANAGER.postAndBeamManager.beamInfo.height +\n offsetYBraket;\n\n const offsetZFrontPos =\n UI.span + UI.multiSpan + UI.eaveWidth + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(\n 0,\n frontPostHeight / 2,\n offsetZFrontPos\n );\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [],\n },\n allowDrag: false,\n };\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * UI.span;\n } else {\n return this.utils.tan(UI.patiosPitch) * UI.span;\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n } else {\n return this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n }\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n text.position.set(-100, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n } else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n if (UI.isUpFasciaUpstandardBracket) {\n origin = new Vector3(0, 0, 1000);\n head = new Vector3(0, 0, 0);\n hand1 = new Vector3(-50, 0, 50);\n hand2 = new Vector3(50, 0, 50);\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + \" degree\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, Math.PI / 2, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 + this.APP.sldEaveWidth.currentValue - this.APP.sldExistingWidth1.currentValue / 2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2;\n //}\n\n let offsetZ =\n this.box.max.z +\n this.dimensionDistance2 +\n this.APP.sldEaveWidth.currentValue;\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n },\n };\n let dimBay = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n offsetX += b.value;\n }\n\n //rakecut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n -this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftCutHorizontal.currentValue / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldRightCutHorizontal.currentValue / 2 +\n this.APP.sldRightOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500 - 200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n );\n }\n //End rakecut\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldLeftOverhang.currentValue,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldRightOverhang.currentValue,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.offsetBraketZ;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n //let offsetDimensionX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // offsetDimensionX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimSpan = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n // let offsetX = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n\n // let scaleLength = this.APP.sldMultiSpan.currentValue / this.lineGeo.length;\n dimLength += this.APP.sldMultiSpan.currentValue;\n let textStr = this.utils.getDimensionValue(\n this.APP.sldMultiSpan.currentValue\n );\n let optionsMul: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n 0,\n 0\n ),\n textPos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n -200,\n 0\n ),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimMul = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) as Dimension;\n if (!dimMul) {\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN\n );\n }\n\n let extraDistance = 0;\n\n //----Rake cut\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ =\n dimLength / 2 +\n UI.multiSpan / 2 +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3(0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n );\n }\n //----End rake cut\n\n let offsetRight =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2; // + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n this.APP.sldFrontOverhang.currentValue,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n this.APP.sldBackOverhang.currentValue,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT,\n extraDistance\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n let dimOffsetX =\n this.totalBaySize / 2 +\n this.APP.patiosManager.patiosGroup.position.x +\n _dimensionDistane;\n let dimOffsetY = height / 2;\n if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n dimOffsetX =\n this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n }\n\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n if (UI.isUpFasciaUpstandardBracket) {\n dimOffsetY +=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n // dimOffsetY -= (this.MANAGER.roofManager.geoBraket_2.height / 4 + this.MANAGER.roofManager.geoBraket_1.width) * this.utils.tan(UI.patiosPitch) + this.MANAGER.roofManager.geoBraket_2.height / 4 * this.utils.tan(UI.patiosPitch);\n } else {\n dimOffsetY -=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n }\n dimOffsetY += this.MANAGER.postAndBeamManager.beamInfo.height;\n\n dimOffsetY += +UI.upstandBraketType;\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = +dimOffsetY.toFixed(0);\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n // let dimOffsetY = this.utils.getHeightByAngle(this.APP.sldExistingWallHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n if (UI.isUpFasciaUpstandardBracket) {\n dimOffsetY +=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n // dimOffsetY -= (this.MANAGER.roofManager.geoBraket_2.height / 4 + this.MANAGER.roofManager.geoBraket_1.width) * this.utils.tan(UI.patiosPitch) + this.MANAGER.roofManager.geoBraket_2.height / 4 * this.utils.tan(UI.patiosPitch);\n } else {\n dimOffsetY -=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n }\n dimOffsetY += +UI.upstandBraketType;\n dimOffsetY += this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z; //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.APP.sldEaveWidth.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue / 2;\n //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport { Box3, Group, Vector3 } from \"three\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { HomeComponent as AppComponent, HomeComponent } from \"../../containers/home/home.component\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport { PatiosManager, RafterBeamAndInternalBeamInfo } from \"../patios.manager\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { UI } from \"../ui\";\n\nexport class FasciaManager implements PatiosManager {\n public patiosGroup: Group;\n public boundingBox: Box3;\n private APP: AppComponent;\n public postAndBeamManager: PostAndBeamManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n public rafterBeamAndInternalBeamInfo: RafterBeamAndInternalBeamInfo = {\n numOfInternalRafter: 0,\n numOfSpanBeam: 0,\n numOfMultiSpanBeam: 0,\n }\n private updateEventHandle: any;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private controlsToRegisterEvent: Array;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [\n this.APP.sldEaveWidth,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n ]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraket(bracketQuantity);\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraketCutOut(bracketQuantity);\n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void{\n this.rafterBeamAndInternalBeamInfo = info\n this.postAndBeamManager.addEndRafterBeam(info)\n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.btnTurnOnPanel\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number): void {\n let diff = UI.existingLength1 - UI.totalBayLength;\n\n this.patiosWidth = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n this.patiosLength = UI.span + UI.multiSpan + UI.overhangFront;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n const shouldSnap = HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.cutoutCondition) {\n this.patiosGroup.position.setX( -diff / 2 - UI.existingLength2 + (shouldSnap ? 0 : UI.eaveWidth));\n } else {\n this.patiosGroup.position.setX(-diff / 2 + UI.eaveWidth);\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n const shouldSnap = HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.cutoutCondition) {\n this.patiosGroup.position.setX(diff / 2 + UI.existingLength2 - (shouldSnap ? 0 : UI.eaveWidth));\n } else {\n this.patiosGroup.position.setX(diff / 2 - UI.eaveWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n this.loadRafterBeamAndInternalBeam(this.rafterBeamAndInternalBeamInfo)\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, this.APP.sldEaveWidth.currentValue));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n box.translate(new Vector3(this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n box.translate(new Vector3(-this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n return box;\n }\n}\n","import _ from \"lodash\";\nimport UpstandBraket, {\n UpstandBraketOptions,\n} from \"src/app-ribspan/models/UpstandBraket.model\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n Line3,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n PlaneHelper,\n Vector3,\n} from \"three\";\nimport { FasciaManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n RAKECUT_TYPE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n MIN_INTERNAL_BEAM_LENGTH,\n EXISTING_BUILDING_CONFIG,\n} from \"src/app/app.constants\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: FasciaManager;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n public postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private existingTypeLeftX: number;\n private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private frontPostHeight: number;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n public geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geoBraketExtL_2: GeometryInfo;\n private geoBraketExtR_2: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private geoHouseBeam: GeometryInfo;\n private geoHouseBeamEndCap: GeometryInfo;\n\n private offsetYBraket = 0;\n private offsetBraketZ = 0;\n\n public shouldSnapRoofToExistingWhenCutout: boolean = false;\n\n k: number;\n k_: number;\n j: number;\n l: number;\n m: number;\n v: number;\n\n constructor(app: AppComponent, fasciaManager: FasciaManager) {\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = fasciaManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n this.MANAGER.loadRafterBeamAndInternalBeam(\n this.MANAGER.rafterBeamAndInternalBeamInfo\n );\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, scalePostHeight, 1);\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBraketExtL_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtL_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateY(-Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtL_2.geometry.translate(\n -this.geoBraketExtL_2.height / 2,\n this.geoBraketExtL_2.length / 2,\n this.geoBraketExtL_2.height / 3 - this.geoBraket_1.width / 2\n );\n //Right\n this.geoBraketExtR_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtR_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateY(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtR_2.geometry.translate(\n this.geoBraketExtR_2.height / 2,\n this.geoBraketExtR_2.length / 2,\n this.geoBraketExtR_2.height / 3 - this.geoBraket_1.width / 2\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoHouseBeam = this.geometryManager.getHouseBeam();\n this.geoHouseBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geoHouseBeam.length / 2,\n -this.geoHouseBeam.height / 2,\n 0\n );\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry.translate(\n 0,\n -this.geoBeamEndCap.height / 2,\n 0\n );\n\n this.geoHouseBeamEndCap = this.geometryManager.getHouseBeamEndCap();\n this.geoHouseBeamEndCap.geometry.translate(\n 0,\n -this.geoHouseBeamEndCap.height / 2,\n 0\n );\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofWidth = UI.overhangLeft + UI.overhangRight + this.totalBaySize;\n this.existingType = +this.APP.sltExistingType.currentValue;\n this.existingTypeLeftX = 0;\n this.existingTypeRightX = 0;\n if (this.existingType === 1 || this.existingType === 3) {\n this.existingTypeLeftX = UI.eaveWidth;\n }\n if (this.existingType === 2 || this.existingType === 3) {\n this.existingTypeRightX = UI.eaveWidth;\n }\n this.offsetYBraket = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetYBraket =\n +UI.upstandBraketType +\n this.geoBeam.height +\n this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n this.offsetYBraket -=\n this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n this.offsetBraketZ = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetBraketZ = this.geoBraket_2.height / 4;\n }\n\n this.shouldSnapRoofToExistingWhenCutout =\n AppComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout();\n\n this.addBeam({ isMultiSpan: false });\n this.addBeam({ isMultiSpan: true });\n this.addBeamAngelRakecut();\n this.addBeamStepRakecut();\n this.addGround();\n let offsetX = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let offsetXOrigin = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let idx = 0;\n this.addPost(offsetX, { isMultiSpan: false, left: true });\n this.addUpstandBraketExt({ isMultiSpan: false, left: true });\n this.addPost(offsetX, { isMultiSpan: true, left: true });\n this.addUpstandBraketExt({ isMultiSpan: true, left: true });\n\n this.APP.dialogEditBay.listBay.map((m) => {\n offsetX += m.value;\n if (idx === this.APP.dialogEditBay.listBay.length - 1) {\n offsetX -= this.postInfo.width;\n this.addPost(offsetX, { isMultiSpan: false, right: true });\n this.addUpstandBraketExt({ isMultiSpan: false, right: true });\n this.addPost(offsetX, { isMultiSpan: true, right: true });\n this.addUpstandBraketExt({ isMultiSpan: true, right: true });\n this.addPostAngelRakecut(offsetX, { right: true });\n this.addPostAngelRakecut(offsetXOrigin, { left: true });\n } else {\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: false,\n });\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: true,\n });\n }\n idx++;\n });\n\n this.addDownPipe();\n this.addDownPipeStepRakecut();\n this.addPostStepRakecut();\n this.addUpstandBeam();\n this.addUpstandBraket();\n this.addUpstandBraketCutOut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addEndRafterBeam(info: any) {\n const { numOfInternalRafter, numOfSpanBeam, numOfMultiSpanBeam } = info;\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n );\n\n let endMainLeftX = -UI.totalBayLength / 2;\n let endMainRightX = UI.totalBayLength / 2;\n let cutOutLength = UI.existingLength2;\n if (this.shouldSnapRoofToExistingWhenCutout) {\n cutOutLength = UI.existingLength2 + UI.eaveWidth;\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2 + cutOutLength;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2 - cutOutLength;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2 + cutOutLength;\n endMainRightX = UI.totalBayLength / 2 - cutOutLength;\n }\n }\n\n // Add end rafter for two end side\n // Left side\n this.addRafterSuperiorBeam(endMainLeftX, {\n span: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n multiSpan: true,\n first: true,\n last: false,\n });\n }\n\n // Right side\n this.addRafterSuperiorBeam(endMainRightX, {\n span: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n multiSpan: true,\n first: false,\n last: true,\n });\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(-UI.totalBayLength / 2 + UI.rakeCutLeftHor, {\n rakeCutLeft: true,\n first: true,\n last: false,\n });\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(UI.totalBayLength / 2 - UI.rakeCutRightHor, {\n rakeCutRight: true,\n first: false,\n last: true,\n });\n }\n\n this.addInternalRafterBeam(\n numOfInternalRafter,\n numOfSpanBeam,\n numOfMultiSpanBeam\n );\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Add rafter beam for cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n\n endMainRightX = UI.totalBayLength / 2;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n }\n }\n }\n private addInternalRafterBeam(\n numOfRafter: number,\n numOfSpanBeam: number,\n numOfMultiSpanBeam: number\n ) {\n let offsetX = -UI.totalBayLength / 2;\n let mainRoofLength = UI.totalBayLength;\n let endCutoutLeft = -UI.totalBayLength / 2;\n let cutOutLength = UI.existingLength2;\n if (this.shouldSnapRoofToExistingWhenCutout) {\n cutOutLength = UI.existingLength2 + UI.eaveWidth;\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n mainRoofLength = UI.totalBayLength - cutOutLength;\n offsetX = -UI.totalBayLength / 2 + cutOutLength;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n mainRoofLength = UI.totalBayLength - cutOutLength;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n mainRoofLength = UI.totalBayLength - 2 * cutOutLength;\n offsetX = -UI.totalBayLength / 2 + cutOutLength;\n }\n }\n\n const mainRoofLeft = offsetX;\n const mainRoofRight = offsetX + mainRoofLength;\n let listRafterPos = [];\n const rafterSpacing = UI.totalBayLength / (numOfRafter + 1);\n const maxBeamOverhang = this.utils.getMaximumBeamOverhang();\n for (let i = 0; i < numOfRafter; i++) {\n const offsetXRafter = endCutoutLeft + (i + 1) * rafterSpacing;\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (\n offsetXRafter > mainRoofLeft - maxBeamOverhang &&\n offsetXRafter < mainRoofLeft + maxBeamOverhang\n ) {\n continue;\n }\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (\n offsetXRafter > mainRoofRight - maxBeamOverhang &&\n offsetXRafter < mainRoofRight + maxBeamOverhang\n ) {\n continue;\n }\n }\n listRafterPos.push({\n offsetX: offsetXRafter,\n isMainRoof:\n offsetXRafter >= mainRoofLeft && offsetXRafter <= mainRoofRight,\n });\n }\n\n listRafterPos = this.utils.reSeperateRafterPosition(\n listRafterPos,\n offsetX,\n offsetX + mainRoofLength,\n endCutoutLeft,\n endCutoutLeft + UI.totalBayLength\n );\n\n listRafterPos.forEach((el) => {\n if (el.isMainRoof) {\n this.addRafterSuperiorBeam(el.offsetX, {\n span: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n multiSpan: true,\n first: false,\n last: false,\n });\n }\n } else {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForSpan: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForMultiSpan: true,\n first: false,\n last: false,\n });\n }\n }\n });\n\n // // Add internal beam in here\n this.addInternalBeam(listRafterPos, numOfSpanBeam, numOfMultiSpanBeam);\n }\n private addInternalBeam(\n listRafterPos,\n numOfSpanBeam: number = 0,\n numOfMultiSpanBeam: number = 0\n ) {\n const startZ = this.getOffsetFromExistingBuildingToBackBeam();\n if (UI.span > 0) {\n const internalBeamSpacing = UI.span / (numOfSpanBeam + 1);\n for (let i = 0; i < numOfSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + internalBeamSpacing * (i + 1)\n );\n }\n }\n if (UI.multiSpan > 0) {\n const internalBeamSpacing = UI.multiSpan / (numOfMultiSpanBeam + 1);\n for (let i = 0; i < numOfMultiSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + UI.span + internalBeamSpacing * (i + 1)\n );\n }\n }\n }\n public addInternalSuperiorBeam(listRafterPos, offsetZ: number) {\n let endMainLeftX = -UI.totalBayLength / 2;\n let endMainRightX = UI.totalBayLength / 2;\n let endCutoutLeft = -UI.totalBayLength / 2;\n let endCutoutRight = UI.totalBayLength / 2;\n let cutOutLength = UI.existingLength2;\n if (this.shouldSnapRoofToExistingWhenCutout) {\n cutOutLength = UI.existingLength2 + UI.eaveWidth;\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endCutoutLeft = -UI.totalBayLength / 2;\n endMainLeftX = -UI.totalBayLength / 2 + cutOutLength;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2 - cutOutLength;\n endCutoutRight = UI.totalBayLength / 2;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endCutoutLeft = -UI.totalBayLength / 2;\n endCutoutRight = UI.totalBayLength / 2;\n endMainLeftX = -UI.totalBayLength / 2 + cutOutLength;\n endMainRightX = UI.totalBayLength / 2 - cutOutLength;\n }\n }\n\n // Main roof\n const beamWidth = this.beamInfo.width;\n const mainRafter = listRafterPos.filter((el) => el.isMainRoof);\n\n for (let i = 0; i <= mainRafter.length; i++) {\n let startX = endMainLeftX;\n if (i > 0) {\n startX = mainRafter[i - 1].offsetX;\n }\n let endX = endMainRightX;\n if (i < mainRafter.length) {\n endX = mainRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == mainRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n let cutoutBackZ = UI.existingWidth1 / 2 + UI.eaveWidth;\n if (this.shouldSnapRoofToExistingWhenCutout) {\n cutoutBackZ = UI.existingWidth1 / 2;\n }\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutLeftRafter = listRafterPos.filter(\n (el) =>\n !el.isMainRoof && el.offsetX < endCutoutLeft + cutoutRoofLength\n );\n\n if (offsetZ > cutoutBackZ + this.offsetBraketZ + beamWidth * 2) {\n for (let i = 0; i <= cutoutLeftRafter.length; i++) {\n let startX = endCutoutLeft;\n if (i > 0) {\n startX = cutoutLeftRafter[i - 1].offsetX;\n }\n let endX = endCutoutLeft + cutoutRoofLength;\n if (i < cutoutLeftRafter.length) {\n endX = cutoutLeftRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutLeftRafter.length) {\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutRightRafter = listRafterPos.filter(\n (el) =>\n !el.isMainRoof && el.offsetX > endCutoutRight - cutoutRoofLength\n );\n\n if (offsetZ > cutoutBackZ + this.offsetBraketZ + beamWidth * 2) {\n for (let i = 0; i <= cutoutRightRafter.length; i++) {\n let startX = endCutoutRight - cutoutRoofLength;\n if (i > 0) {\n startX = cutoutRightRafter[i - 1].offsetX;\n }\n let endX = endCutoutRight;\n if (i < cutoutRightRafter.length) {\n endX = cutoutRightRafter[i].offsetX;\n }\n\n if (i == 0) {\n startX += 0;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutRightRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n }\n }\n public addInternalBeamFromStartToEnd(startX, endX, offsetZ) {\n const { fromX, toX, visible } = this.cutInternalBeamWithRakeCut(\n startX,\n endX,\n offsetZ\n );\n\n if (!visible) {\n return;\n }\n\n // Only add internal beam when beam length is greater than 200\n if (Math.abs(toX - fromX) < MIN_INTERNAL_BEAM_LENGTH) {\n return;\n }\n\n const beamWidth = this.beamInfo.width;\n const beamHeight = this.beamInfo.height;\n let scaleX = Math.abs(toX - fromX) / this.beamInfo.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n // hard code 2.5 beam width. I can't find the correct offset\n const fitBeamYWhenUpStand = UI.isUpFasciaUpstandardBracket\n ? 2.5 * beamWidth * this.utils.tan(UI.patiosPitch)\n : 0;\n const offsetY =\n UI.eaveHeight -\n fitBeamYWhenUpStand +\n this.offsetYBraket +\n (UI.isUpFasciaUpstandardBracket ? 1 : -1) *\n ((offsetZ -\n this.getOffsetFromExistingBuildingToBackBeam() +\n beamWidth) *\n this.utils.tan(UI.patiosPitch));\n\n let mesh = new Mesh(\n this.beamInfo.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n mesh.position.set(fromX, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capL.position.set(\n fromX + this.geo_beamEndCap.length / 2 - 2,\n -this.geo_beamEndCap.height + beamHeight,\n 0\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capR.position.set(\n toX - this.geo_beamEndCap.length / 2 + 2,\n -this.geo_beamEndCap.height + beamHeight,\n 0\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n beamGroup.position.set(0, offsetY, offsetZ - beamWidth);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n public getCutoutRoofLengthToGenerateCutoutRafterBeam() {\n if (this.shouldSnapRoofToExistingWhenCutout) {\n return UI.existingLength2 + UI.eaveWidth;\n } else {\n return UI.existingLength2;\n }\n }\n public getOffsetFromExistingBuildingToBackBeam() {\n return this.offsetBraketZ + UI.eaveWidth - UI.existingWidth1 / 2;\n }\n /**\n *\n * @param offsetX : Position x of rafter beam\n */\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n const beamWidth = this.beamInfo.width;\n const beamHeight = this.geo_RafterBeam.height;\n const beamGeoLength = this.geo_RafterBeam.length;\n let mesh;\n let cutSpanFitBeamLength = 0;\n if (+UI.upstandBraketType !== 0) {\n cutSpanFitBeamLength = UI.multiSpan ? beamWidth * 1.5 : beamWidth * 2;\n } else {\n cutSpanFitBeamLength = UI.multiSpan ? beamWidth * 0.5 : beamWidth * 1;\n }\n let beamLength =\n (UI.span - cutSpanFitBeamLength) / this.utils.cos(UI.patiosPitch);\n let cutoutWidth = UI.existingWidth1;\n if (this.shouldSnapRoofToExistingWhenCutout) {\n cutoutWidth = UI.existingWidth1 - UI.eaveWidth;\n }\n if (userDataPos.multiSpan) {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.cutOutForSpan) {\n if (UI.multiSpan == 0 && UI.span - cutoutWidth - 2 * beamWidth <= 0) {\n return;\n } else if (\n UI.multiSpan > 0 &&\n UI.span - cutoutWidth - 1.5 * beamWidth <= 0\n ) {\n return;\n }\n\n beamLength =\n (UI.span - cutSpanFitBeamLength - cutoutWidth) /\n this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.cutOutForMultiSpan) {\n if (UI.span + UI.multiSpan - cutoutWidth - 2 * beamWidth <= 0) {\n return;\n }\n\n if (cutoutWidth > UI.span) {\n beamLength =\n (UI.span + UI.multiSpan - beamWidth * 2 - cutoutWidth) /\n this.utils.cos(UI.patiosPitch);\n } else {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n }\n } else if (userDataPos.rakeCutLeft) {\n beamLength =\n (UI.rakeCutLeftVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.rakeCutRight) {\n beamLength =\n (UI.rakeCutRightVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n }\n\n let offsetZ = 0;\n let offsetY = 0;\n\n // Scene position z move back\n // The plane be translated\n let shouldCutByRakeCut = true;\n if (userDataPos.span || userDataPos.cutOutForSpan) {\n offsetY =\n UI.eaveHeight -\n this.getOffsetHeightForRafterBeamByRoofPitch(true) +\n this.offsetYBraket;\n offsetZ =\n UI.span -\n (UI.multiSpan > 0 ? beamWidth / 2 : beamWidth) +\n this.getOffsetFromExistingBuildingToBackBeam();\n } else if (\n userDataPos.multiSpan ||\n userDataPos.cutOutForMultiSpan ||\n userDataPos.rakeCutLeft ||\n userDataPos.rakeCutRight\n ) {\n if (userDataPos.rakeCutLeft || userDataPos.rakeCutRight) {\n shouldCutByRakeCut = false;\n }\n offsetY =\n UI.eaveHeight -\n this.getOffsetHeightForRafterBeamByRoofPitch(false) +\n this.offsetYBraket;\n offsetZ =\n UI.span +\n UI.multiSpan -\n beamWidth +\n this.getOffsetFromExistingBuildingToBackBeam();\n }\n\n let offsetXRafter = offsetX;\n if (userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width;\n } else if (!userDataPos.first && !userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width / 2;\n }\n\n if (shouldCutByRakeCut) {\n const { newStartZ, newLength, fitYForNewStartZPoint } =\n this.cutRafterBeamWithRakeCut(offsetZ, offsetXRafter, beamLength);\n if (!_.isNil(newStartZ)) {\n offsetZ = newStartZ;\n }\n if (!_.isNil(newLength)) {\n beamLength = newLength;\n }\n if (!_.isNil(fitYForNewStartZPoint)) {\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY -= fitYForNewStartZPoint;\n } else {\n offsetY += fitYForNewStartZPoint;\n }\n }\n }\n\n const fitBeamWidthToCut = beamHeight * this.utils.tan(UI.patiosPitch);\n let scaleX = (beamLength + fitBeamWidthToCut) / beamGeoLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let material = this.getRafterBeamMaterial(userDataPos, offsetZ, beamLength);\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(\n UI.isUpFasciaUpstandardBracket ? 0 : -fitBeamWidthToCut,\n 0,\n 0\n );\n mesh.scale.setX(scaleX);\n\n let { capL, capR } = this.getBeamEndCapForRafterBeam(0, beamLength);\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n\n beamGroup.position.set(offsetXRafter, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n beamGroup.rotateZ(\n UI.isUpFasciaUpstandardBracket\n ? -this.utils.degreesToRadians(UI.patiosPitch)\n : this.utils.degreesToRadians(UI.patiosPitch)\n );\n\n this.scene.add(beamGroup);\n }\n private getBeamEndCapForRafterBeam(offsetXL, offsetXR) {\n let capL;\n let capR;\n let matEndCap = this.getRafterBeamEndCapMaterial();\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n let higherBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n UI.isUpFasciaUpstandardBracket\n ? -this.utils.degreesToRadians(UI.patiosPitch)\n : this.utils.degreesToRadians(UI.patiosPitch)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(\n offsetXR + 2,\n -this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch),\n this.geo_rafterBeamEndCap.width / 2\n );\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n UI.isUpFasciaUpstandardBracket\n ? this.utils.degreesToRadians(UI.patiosPitch)\n : -this.utils.degreesToRadians(UI.patiosPitch)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: higherBraketName,\n };\n\n return {\n capL,\n capR,\n };\n }\n private getRafterBeamEndCapMaterial() {\n const matEndCap = UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone();\n let heightPlane = UI.eaveHeight + this.offsetYBraket;\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(0, heightPlane, 0);\n let matrixRotateTop = new Matrix4().makeRotationX(\n UI.isUpFasciaUpstandardBracket\n ? -this.utils.degreesToRadians(UI.patiosPitch)\n : this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.eaveHeight + this.offsetYBraket - this.beamInfo.height;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightRealBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n UI.isUpFasciaUpstandardBracket\n ? -this.utils.degreesToRadians(UI.patiosPitch)\n : this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom = matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n this.getOffsetFromExistingBuildingToBackBeam() - this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n this.getOffsetFromExistingBuildingToBackBeam() - this.scene.position.z\n )\n );\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n return matEndCap;\n }\n private getRafterBeamMaterial(userDataPos, offsetZ, beamLength) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let cutFrontZ = offsetZ;\n let cutBackZ = offsetZ - beamLength * this.utils.cos(UI.patiosPitch);\n\n if (cutFrontZ != 0 || cutBackZ != 0) {\n let nBottom = new Vector3(0, 0, -1).normalize();\n let pBottom = new Vector3(0, 0, cutFrontZ);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, cutBackZ);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n }\n\n return material;\n }\n private cutInternalBeamWithRakeCut(startX, endX, offsetZ) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const fromX = Math.min(startX, endX);\n const toX = Math.max(startX, endX);\n const beamWidth = this.beamInfo.width;\n const offsetZFrontBeam =\n UI.span + UI.multiSpan + this.getOffsetFromExistingBuildingToBackBeam();\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ - beamWidth / 2),\n new Vector3(fromX, 0, offsetZ - beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ - beamWidth / 2),\n new Vector3(toX, 0, offsetZ - beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ - beamWidth / 2),\n new Vector3(toX, 0, offsetZ - beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ - beamWidth / 2),\n new Vector3(fromX, 0, offsetZ - beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n return {\n fromX,\n toX,\n visible: true,\n };\n }\n private cutRafterBeamWithRakeCut(offsetZ, offsetX, beamLength) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const beamWidth = this.beamInfo.width;\n let startZ = offsetZ;\n let endZ = offsetZ - beamLength * this.utils.cos(UI.patiosPitch);\n const offsetZFrontBeam =\n UI.span + UI.multiSpan + this.getOffsetFromExistingBuildingToBackBeam();\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX, 0, startZ),\n new Vector3(offsetX, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + 2, 0, startZ),\n new Vector3(offsetX + 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth, 0, startZ),\n new Vector3(offsetX + beamWidth, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth - 2, 0, startZ),\n new Vector3(offsetX + beamWidth - 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n return { newStartZ: null, newLength: null, fitYForNewStartZPoint: null };\n }\n private houseBeamHeight() {\n return this.geoBeam.height - this.geoHouseBeam.height;\n }\n\n public addUpstandBeam() {\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let pos = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + this.offsetYBraket + this.houseBeamHeight(),\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2\n );\n let totalLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n pos.setX(pos.x + UI.existingLength2);\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n }\n }\n let views: Print2DView[];\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n this.cutStandardBeamToEqualLengthBeam(\n this.geoHouseBeam,\n this.geoHouseBeamEndCap,\n totalLength,\n pos,\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n this.geoHouseBeamJoint\n );\n // Beam cutout\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n let offsetHeightCutout = +this.offsetYBraket + this.houseBeamHeight();\n if (UI.isUpFasciaUpstandardBracket) {\n offsetHeightCutout +=\n UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n } else {\n offsetHeightCutout -=\n UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n }\n\n if (offsetHeightCutout < 0) {\n return;\n }\n if (UI.existingType == 1 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.geoHouseBeam,\n this.geoHouseBeamEndCap,\n UI.existingLength2,\n new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n this.geoHouseBeamJoint\n );\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.geoHouseBeam,\n this.geoHouseBeamEndCap,\n UI.existingLength2,\n new Vector3(\n UI.totalBayLength / 2 - UI.existingLength2 + UI.overhangRight,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n this.geoHouseBeamJoint\n );\n }\n }\n }\n\n public addUpstandBraket(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET\n )\n );\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = UI.upstandBraketType + this.houseBeamHeight();\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n let distance = 1000;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n\n if (UI.existingType == 0) {\n let startX =\n -bayMainLength / 2 > -UI.existingLength1 / 2\n ? -bayMainLength / 2\n : -UI.existingLength1 / 2;\n let endX =\n bayMainLength / 2 < UI.existingLength1 / 2\n ? bayMainLength / 2\n : UI.existingLength1 / 2;\n distance = (endX - startX) / (numOfBraket - 1);\n offsetX = startX;\n } else if (UI.existingType == 1) {\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n distance =\n (UI.existingLength1 - UI.eaveWidth - _bracketOffsetXExt) /\n (numOfBraket - 1);\n }\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX =\n -bayMainLength / 2 + UI.existingLength2 / 2 + _bracketOffsetXExt;\n }\n } else if (UI.existingType == 2) {\n offsetX = -bayMainLength / 2;\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n offsetX =\n -bayMainLength / 2 +\n (bayMainLength - UI.existingLength1 + UI.eaveWidth);\n distance =\n (UI.existingLength1 - _bracketOffsetXExt - UI.eaveWidth) /\n (numOfBraket - 1);\n }\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n } else if (UI.existingType == 3) {\n distance = (bayMainLength - _bracketOffsetXExt * 2) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n }\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetX;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth - UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetX += distance;\n }\n }\n\n public addUpstandBraketCutOut(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n )\n );\n if (HomeComponent.ins.sltCutOut._isDisable || UI.cutOutType == 0) {\n return;\n }\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = UI.upstandBraketType + this.houseBeamHeight();\n\n if (UI.isUpFasciaUpstandardBracket) {\n height += UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n } else {\n height -= UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n }\n\n if (height < 0) {\n return;\n }\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n if (UI.existingType == 1 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangLeft : 0;\n let distance =\n (UI.existingLength2 - UI.eaveWidth - UI.overhangLeft + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ = -UI.totalBayLength / 2 - _offsetZ + _bracketOffsetXExt;\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangRight : 0;\n let distance =\n (UI.existingLength2 - (UI.overhangRight + UI.eaveWidth) + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ =\n UI.totalBayLength / 2 -\n UI.existingLength2 +\n UI.eaveWidth +\n UI.overhangRight -\n _bracketOffsetXExt;\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n }\n private addDownPipe() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth +\n 100 -\n UI.existingWidth1 / 2 +\n this.offsetBraketZ;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n //Rakecut\n //Downpipe will be in left\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX = -this.totalBaySize / 2 + this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX = -this.totalBaySize / 2 + UI.rakeCutLeftHor + UI.overhangFront;\n }\n }\n //Downpipe will be in right\n else {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX = this.totalBaySize / 2 - this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetX = this.totalBaySize / 2 - UI.rakeCutRightHor - UI.overhangFront;\n }\n }\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n\n this.downpipeGroup = this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n 0,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n true\n );\n }\n private addDownPipeStepRakecut() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetX = -this.totalBaySize / 2 + 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutLeftVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30 +\n this.offsetYBraket;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.eaveWidth +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutLeftVer +\n this.offsetBraketZ;\n\n this.downpipeStepRakeCutGroupLeft.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupLeft.add(meshPipe);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetX = this.totalBaySize / 2 - 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutRightVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30 +\n this.offsetYBraket;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.eaveWidth +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutRightVer +\n this.offsetBraketZ;\n\n this.downpipeStepRakeCutGroupRight.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupRight.add(meshPipe);\n }\n }\n private addGround() {\n let offsetX = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetZ = -UI.existingWidth1 / 2 - UI.overhangBack;\n let width = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue +\n UI.eaveWidth;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ + this.offsetBraketZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private getRoofHeight() {\n const _height = this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n );\n return UI.eaveHeight - _height;\n }\n private updateUI() {\n this.APP.roofHeight = this.getRoofHeight();\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n if (planView) {\n this.utils.getPlanVerticesOfBeam(c as Mesh, lsGeometries, [planView]);\n }\n\n let box = new BoxHelper(objCloned);\n c.updateWorldMatrix(true, true);\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n ),\n });\n }\n }\n\n let braketGroup = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n );\n\n for (let g of braketGroup) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n g.children[1] as Mesh,\n 60\n );\n g.children[1].updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(g.children[1].matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: simplifiedGeo.vertices,\n views: g.userData.views,\n });\n\n g.children[0].updateMatrix();\n let objCloned = g.children[0].clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(g.children[0].matrix));\n\n let box = new BoxHelper(objCloned);\n\n g.children[0].updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(g.children[0].matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo1 = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo1.vertices,\n views: g.userData.views,\n });\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n public addPost(offsetX: number, userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n // // let _flag = false;\n // if (userDataPos.left && UI.overhangLeft > 0 && this.APP.sltExistingType.currentValue == 1) {\n // // _flag = true;\n // return;\n // } else if (userDataPos.right && UI.overhangRight > 0 && this.APP.sltExistingType.currentValue == 2) {\n // // _flag = true;\n // return;\n // }\n const condition = UI.span + UI.eaveWidth;\n if (!userDataPos.isMultiSpan) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n } else {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n }\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let offsetZ = -UI.existingWidth1 / 2 + UI.eaveWidth;\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n let scaleY = 0;\n let length = 0;\n if (userDataPos.isMultiSpan) {\n length =\n UI.eaveHeight -\n this.getHeightByRoofPitch(false) -\n this.beamInfo.height +\n this.offsetYBraket;\n scaleY = length / this.postInfo.height;\n } else {\n length =\n UI.eaveHeight -\n this.getHeightByRoofPitch(true) -\n this.beamInfo.height +\n this.offsetYBraket;\n scaleY = length / this.postInfo.height;\n }\n this.frontPostHeight = length;\n\n //in case of multi span & apply to back post only\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (\n UI.span + UI.eaveWidth > UI.existingWidth1 &&\n UI.span + UI.eaveWidth < UI.existingWidth1 + UI.eaveWidth\n ) {\n if (this.APP.sltExistingType.currentValue == 1 && userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == 2 &&\n userDataPos.right\n ) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n if (userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n }\n if (userDataPos.right) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n }\n }\n }\n }\n\n let exceedMoveBackLimit = false;\n\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX -= UI.overhangLeft;\n offsetZ -= this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n console.log(\n \"EXCEED_LIMIT LEFT\",\n UI.rakeCutLeftVer,\n this.beamLeftCutSizeInfo.k_,\n this.MANAGER.patiosLength\n );\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n }\n }\n }\n\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX += UI.overhangRight;\n offsetZ -= this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n console.log(\n \"EXCEED_LIMIT RIGHT\",\n UI.rakeCutRightVer,\n this.beamLeftCutSizeInfo.k_,\n this.MANAGER.patiosLength\n );\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n }\n }\n }\n //End rakecut\n\n if (exceedMoveBackLimit) {\n //console.log(\"EXCEED_LIMIT\");\n return;\n }\n\n mesh.position.set(offsetX, 0, offsetZ + this.offsetBraketZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n\n private addUpstandBraketExt(userDataPos: any) {\n if (\n UI.upstandBraketType == 0 ||\n UI.listBay.length == 0 ||\n UI.existingType == 0 ||\n (userDataPos.isMultiSpan && UI.multiSpan == 0)\n ) {\n return;\n }\n if (\n (this.existingType == 1 && userDataPos.right) ||\n (this.existingType == 2 && userDataPos.left)\n ) {\n return;\n }\n let _flag = false;\n\n const condition = UI.span + UI.eaveWidth;\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n } else if (!_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n }\n if (!_flag) {\n return;\n }\n // if (userDataPos.left && UI.overhangLeft > 0 || userDataPos.right && UI.overhangRight > 0)\n // return;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5; // + this.geoBraket_1.width / 4;\n let height = 0;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n const _cond1 =\n UI.existingWidth1 < condition &&\n UI.existingWidth1 + UI.existingWidth2 > condition;\n const _cond2 =\n userDataPos.isMultiSpan &&\n UI.existingWidth1 < condition + UI.multiSpan &&\n UI.existingWidth1 + UI.existingWidth2 > condition + UI.multiSpan;\n\n if (UI.existingType == 1) {\n offsetX = -bayMainLength / 2;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -bayMainLength / 2 + UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX -= UI.existingLength2;\n }\n offsetX += _bracketOffsetXExt;\n } else if (UI.existingType == 2) {\n offsetX = bayMainLength / 2 - this.geoBraket_1.width;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX += UI.existingLength2;\n }\n offsetX -= _bracketOffsetXExt;\n } else if (UI.existingType == 3) {\n offsetX =\n (-bayMainLength / 2) * (userDataPos.left ? 1 : -1) -\n (userDataPos.right ? this.geoBraket_1.width : 0);\n if ((!userDataPos.isMultiSpan && _cond1) || _cond2) {\n offsetX -=\n UI.existingLength2 * (userDataPos.left ? 1 : -1) +\n (userDataPos.right ? this.geoBraket_1.width : 0);\n }\n offsetX += _bracketOffsetXExt * (userDataPos.left ? 1 : -1);\n }\n let offsetZ =\n -UI.existingWidth1 / 2 +\n UI.eaveWidth -\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width / 2);\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n if (userDataPos.isMultiSpan) {\n height = this.offsetYBraket - this.getHeightByRoofPitch(false);\n } else {\n height = this.offsetYBraket - this.getHeightByRoofPitch(true);\n }\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2:\n UI.existingType == 2 ? this.geoBraketExtR_2 : this.geoBraketExtL_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n if (UI.existingType == 1) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtL_2 };\n } else if (UI.existingType == 2) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtR_2 };\n } else {\n optionBrakets = {\n ...optionBrakets,\n geoBraket_2: userDataPos.right\n ? this.geoBraketExtR_2\n : this.geoBraketExtL_2,\n };\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n offsetX,\n UI.existingWallHeight,\n offsetZ + this.offsetBraketZ\n ),\n userData: { type: GEOMETRY_TYPE.UPSTAND_BRAKET_EXT },\n });\n }\n\n public addPostAngelRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let height =\n UI.eaveHeight -\n this.getHeightByRoofPitch(false) -\n this.beamInfo.height +\n this.offsetYBraket;\n\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth -\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2;\n\n let scaleY = height / this.postInfo.height;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.left) {\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n 0,\n offsetZ + this.offsetBraketZ\n );\n postLeft.scale.setY(scaleY);\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postLeft);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.right) {\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postRight.position.set(\n offsetX - this.beamRightCutSizeInfo.l,\n 0,\n offsetZ + this.offsetBraketZ\n );\n postRight.scale.setY(scaleY);\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postRight);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postRight);\n }\n }\n }\n }\n private addPostStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n let offsetZF =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth -\n UI.existingWidth1 / 2 -\n this.postInfo.width / 2;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2;\n\n let scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n\n let scaleYB = scaleYF;\n\n let offsetZB = offsetZF;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(offsetXL, 0, offsetZF + this.offsetBraketZ);\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(\n offsetXL - this.postInfo.width / 2,\n 0,\n offsetZB + this.offsetBraketZ\n );\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 - this.postInfo.width;\n\n let scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n\n let scaleYB = scaleYF;\n\n let offsetZB = offsetZF;\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(offsetXR, 0, offsetZF + this.offsetBraketZ);\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(\n offsetXR + this.postInfo.width / 2,\n 0,\n offsetZB + this.offsetBraketZ\n );\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n }\n public addBeam(userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ = -UI.existingWidth1 / 2 + UI.eaveWidth;\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetXR = this.totalBaySize / 2 + UI.overhangRight;\n\n let beamLength = this.roofWidth;\n const beamWidth = this.beamInfo.width;\n const fitYForBackFasciaRoof = UI.isUpFasciaUpstandardBracket\n ? beamWidth * this.utils.tan(UI.patiosPitch)\n : 0;\n\n if (userDataPos.isMultiSpan) {\n offsetY =\n UI.eaveHeight -\n this.getHeightByRoofPitch(false) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetY =\n UI.eaveHeight -\n this.getHeightByRoofPitch(true) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n //Cutout\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.span + UI.eaveWidth <= UI.existingWidth1) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + UI.eaveWidth;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + UI.eaveWidth;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2; // + UI.eaveWidth;\n }\n } else if (\n UI.span + UI.eaveWidth > UI.existingWidth1 &&\n UI.span + UI.eaveWidth < UI.existingWidth1 + UI.eaveWidth\n ) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2;\n }\n }\n }\n\n //rake cut - apply only the front beam\n if (UI.multiSpan <= 0 || (UI.multiSpan > 0 && userDataPos.isMultiSpan)) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.beamLeftCutSizeInfo.l;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetXL += UI.rakeCutLeftHor;\n beamLength -= UI.rakeCutLeftHor;\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetXR -= this.beamRightCutSizeInfo.l;\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetXR -= UI.rakeCutRightHor;\n beamLength -= UI.rakeCutRightHor;\n }\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngelRakecut() {\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.NONE &&\n UI.rakeCutRightType == RAKECUT_TYPE.NONE\n ) {\n return;\n }\n\n let offsetZ = UI.span + UI.multiSpan + UI.eaveWidth - UI.existingWidth1 / 2;\n\n const beamWidth = this.beamInfo.width;\n const fitYForBackFasciaRoof = UI.isUpFasciaUpstandardBracket\n ? beamWidth * this.utils.tan(UI.patiosPitch)\n : 0;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n }\n\n let offsetXStart = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n if (UI.isUpFasciaUpstandardBracket) {\n rotX = -rotX;\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let offsetX =\n -this.totalBaySize / 2 - UI.overhangLeft + this.beamLeftCutSizeInfo.l;\n let beamLength = this.beamLeftCutSizeInfo.m;\n let scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n let rotYL = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamLeftCutSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n }\n\n let offsetXEnd = beamLength;\n\n const mesh = new Mesh(\n this.beamRakecutInfoLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ + this.offsetBraketZ);\n beamGroup.rotation.set(0, rotYL, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(BUILDING_SIDE.LEFT, matrix);\n }\n\n beamGroup.rotation.set(rotX, rotYL, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n //let beamSizeInfo = this.getBeamRakeCutInfo(BUILDING_SIDE.RIGHT);\n let offsetX =\n this.totalBaySize / 2 + UI.overhangRight - this.beamRightCutSizeInfo.l;\n let beamLength = this.beamRightCutSizeInfo.m;\n let scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n let rotYR = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamRightCutSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoRight.length;\n }\n\n let offsetXEnd = beamLength;\n\n const mesh = new Mesh(\n this.beamRakecutInfoRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ + this.offsetBraketZ);\n beamGroup.rotation.set(0, -rotYR, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(BUILDING_SIDE.RIGHT, matrix);\n }\n\n beamGroup.rotation.set(rotX, -rotYR, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const beamWidth = this.beamInfo.width;\n const fitYForBackFasciaRoof = UI.isUpFasciaUpstandardBracket\n ? beamWidth * this.utils.tan(UI.patiosPitch)\n : 0;\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetZ =\n UI.span + UI.multiSpan + UI.eaveWidth - UI.existingWidth1 / 2;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n }\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n }\n }\n\n let beamLength = UI.rakeCutLeftHor + this.postInfo.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft;\n }\n\n let beamGroup;\n\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ =\n UI.span + UI.multiSpan + UI.eaveWidth - UI.existingWidth1 / 2;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n }\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket -\n fitYForBackFasciaRoof;\n }\n }\n let beamLength = UI.rakeCutRightHor + this.postInfo.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.postInfo.width;\n }\n\n let beamGroup;\n\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n }\n private getOffsetHeightForRafterBeamByRoofPitch(isSpan: boolean): number {\n const beamWidth = this.beamInfo.width;\n if (isSpan) {\n const spanLength =\n UI.span - (UI.multiSpan > 0 ? beamWidth / 2 : beamWidth);\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * spanLength;\n } else {\n return this.utils.tan(UI.patiosPitch) * spanLength;\n }\n } else {\n const totalSpanLength = UI.span + UI.multiSpan - beamWidth;\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * totalSpanLength;\n } else {\n return this.utils.tan(UI.patiosPitch) * totalSpanLength;\n }\n }\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * UI.span;\n } else {\n return this.utils.tan(UI.patiosPitch) * UI.span;\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n } else {\n return this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n }\n }\n }\n private addPostForBeamAngelRakecut(\n cutSide: BUILDING_SIDE,\n beamMatrix: Matrix4\n ) {\n //let inf = this.getBeamRakeCutInfo(cutSide);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n let p1 = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(this.beamLeftCutSizeInfo.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(1, 0, 0).multiplyScalar(this.beamLeftCutSizeInfo.l)\n );\n let angle = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n\n let ver = (Math.cos(angle) * this.beamLeftCutSizeInfo.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n -UI.totalBayLength / 2 + UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(\n p3,\n dir.multiplyScalar(this.beamLeftCutSizeInfo.m / 2)\n );\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postLeft.position.set(pMid2.x, 0, pMid2.z);\n //postLeft.rotation.set(0,this.utils.degreesToRadians(UI.patiosPitch),0);\n //postLeft.applyMatrix4(beamMatrix);\n //postLeft.position.setY(-height/2);\n postLeft.scale.setY(scaleY);\n this.scene.add(postLeft);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n let p1 = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(this.beamRightCutSizeInfo.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(-1, 0, 0).multiplyScalar(this.beamRightCutSizeInfo.l)\n );\n let angle = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n\n let ver = (Math.cos(angle) * this.beamRightCutSizeInfo.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(\n p3,\n dir.multiplyScalar(this.beamRightCutSizeInfo.m / 2)\n );\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postRight.position.set(pMid2.x, 0, pMid2.z);\n postRight.scale.setY(scaleY);\n this.scene.add(postRight);\n }\n }\n}\n","import {\n BoxBufferGeometry,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n MeshLambertMaterial,\n Object3D,\n Plane,\n Vector3,\n} from \"three\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG as CONST,\n EXISTING_BUILDING_CONFIG,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n RIBSPAN_PANEL_WIDTH,\n RIBSPAN_RECEIVER_CHANNEL_FIT,\n RIBSPAN_BARGE_FIT,\n CONNECTION_TYPE,\n} from \"src/app/app.constants\";\nimport { Util } from \"../utils\";\n// import { AppComponent } from '../../app.component';\nimport HighLightBox from \"src/app-ribspan/models/HighlightBox\";\nimport { CSG } from \"three-csg-ts\";\nimport { FasciaManager } from \".\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: FasciaManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private roofInfo: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private bargeFrontInfo: GeometryInfo;\n private bargeBackInfo: GeometryInfo;\n private geoReceiveChannelLeftInfo: GeometryInfo;\n private geoReceiveChannelRightInfo: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n // Var\n private roofLength: number;\n private roofLengthPlus: number;\n private roofWidth: number;\n //private existingTypeLeftX: number;\n //private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofGroup: Group;\n private cutoutExistingBothLength: number;\n\n private offsetBraketZ: number = 0;\n\n public shouldSnapRoofToExistingWhenCutout: boolean = false;\n\n constructor(app: AppComponent, fasciaManager: FasciaManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.scene = new Group();\n fasciaManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n public onColorChanged() {\n if(this.utils && this.roofInfo.geometry){\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofRibspanPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2, this.roofInfo.height / 2, -this.roofInfo.length / 2);\n this.roofInfo.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(\n -this.zFlashingRakecutRightGeo.length,\n 0,\n 0\n );\n\n // Barge capping\n this.bargeLeftInfo = this.geometryManager.getRibspanBarge();\n this.bargeLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(\n this.bargeLeftInfo.width / 2 - 3,\n this.bargeLeftInfo.height / 2 - RIBSPAN_BARGE_FIT,\n this.bargeLeftInfo.length / 2\n );\n\n this.geoReceiveChannelLeftInfo = this.geometryManager.getRibspanReceiverChannel();\n this.geoReceiveChannelLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(\n this.geoReceiveChannelLeftInfo.width / 2,\n this.geoReceiveChannelLeftInfo.height / 2- RIBSPAN_BARGE_FIT,\n this.geoReceiveChannelLeftInfo.length / 2\n );\n\n this.bargeRightInfo = this.geometryManager.getRibspanBarge();\n this.bargeRightInfo.geometry.translate(\n -this.bargeRightInfo.width / 2 + 3,\n this.bargeRightInfo.height / 2 - RIBSPAN_BARGE_FIT,\n this.bargeRightInfo.length / 2\n );\n\n this.geoReceiveChannelRightInfo = this.geometryManager.getRibspanReceiverChannel();\n this.geoReceiveChannelRightInfo.geometry\n .translate(\n - this.geoReceiveChannelRightInfo.width / 2,\n this.geoReceiveChannelRightInfo.height / 2 - RIBSPAN_BARGE_FIT,\n this.geoReceiveChannelRightInfo.length / 2\n );\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.receiverCutoutLeftHor.length / 2,\n this.receiverCutoutLeftHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT,\n this.receiverCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.receiverCutoutLeftHor.length / 2,\n this.receiverCutoutLeftHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT,\n this.receiverCutoutLeftHor.width / 2\n );\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(\n this.receiverCutoutLeftVer.width / 2,\n this.receiverCutoutLeftVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT,\n this.receiverCutoutLeftVer.length / 2\n );\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightVer.geometry.translate(\n -this.receiverCutoutRightVer.width / 2,\n this.receiverCutoutRightVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT,\n this.receiverCutoutRightVer.length / 2\n );\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getRibspanReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_receiverChanel.length / 2,\n this.geo_receiverChanel.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT,\n this.geo_receiverChanel.width / 2\n );\n\n // Gutter\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.gutterRakecutLeftInfo.length / 2,\n -20,\n this.gutterRakecutLeftInfo.width / 2\n );\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n -this.gutterRakecutRightInfo.length / 2,\n -20,\n this.gutterRakecutRightInfo.width / 2\n );\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(800, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n this.bargeFrontInfo = this.geometryManager.getRibspanBarge();\n this.bargeFrontInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.bargeFrontInfo.length / 2,\n this.bargeFrontInfo.height / 2 - RIBSPAN_BARGE_FIT,\n -this.bargeFrontInfo.width / 2\n );\n\n this.bargeBackInfo = this.geometryManager.getRibspanBarge();\n this.bargeBackInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.bargeBackInfo.length / 2,\n this.bargeBackInfo.height / 2 - RIBSPAN_BARGE_FIT,\n this.bargeBackInfo.width / 2 - 3\n );\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_bargeRakecutLeft.width / 2,\n this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_bargeRakecutLeft.length / 2\n );\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry.translate(\n -this.geo_bargeRakecutRight.width / 2,\n this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_bargeRakecutRight.length / 2\n );\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_bargeRakecutLeft.width / 2,\n this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_bargeRakecutLeft.length / 2\n );\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry.translate(\n -this.geo_bargeRakecutRight.width / 2,\n this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT,\n -this.geo_bargeRakecutRight.length / 2\n );\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_bargeCutoutLeftHor.length / 2,\n this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_bargeCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_bargeCutoutRightHor.length / 2,\n this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_bargeCutoutRightHor.width / 2\n );\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE\n )\n );\n //test\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"RAKECUT\")\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n const _roofLength =\n Math.pow(this.roofLength, 2) +\n Math.pow(this.getHeightByRoofPitch({ isMultiSpan: true }), 2);\n this.roofLengthPlus = Math.sqrt(_roofLength); // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n this.roofWidth =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.cutoutExistingBothLength =\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2;\n\n this.shouldSnapRoofToExistingWhenCutout = AppComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()\n\n this.offsetBraketZ = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetBraketZ = this.geoBraket_2.height / 4;\n }\n this.addRoofGroup();\n this.addCutout();\n this.addAngelRakeCut();\n this.addStepRakecut();\n\n if (UI.rakeCutLeftType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft),\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT },\n });\n }\n\n if (UI.rakeCutRightType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT },\n });\n }\n\n this.existingType = +this.APP.sltExistingType.currentValue;\n\n let offsetXR =\n this.totalBaySize / 2 +\n this.MANAGER.patiosGroup.position.x +\n this.APP.sldRightOverhang.currentValue;\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR); // (this.APP.sldBaySize.currentValue / 2) + this.APP.sldRightOverhang.currentValue );\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [\n clipingPlaneLeft,\n clipingPlane,\n ];\n const roofPanelCount = Math.ceil(this.roofWidth / RIBSPAN_PANEL_WIDTH);\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n //panel direction\n let panelDirectionOfset = 1;\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n offsetXL =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n } else if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT\n ) {\n offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n }\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = true;\n\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver =\n totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoof(offsetXL, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver =\n totalPanelLength >=\n this.roofWidth -\n this.APP.sldExistingLength2.currentValue +\n RIBSPAN_PANEL_WIDTH;\n cuted =\n totalPanelLength >=\n this.roofWidth - this.APP.sldExistingLength2.currentValue &&\n !isOver;\n\n this.addRoof(offsetXL, [this.csg_cutoutRight]);\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver =\n totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 =\n totalPanelLength >=\n this.roofWidth -\n this.APP.sldExistingLength2.currentValue +\n RIBSPAN_PANEL_WIDTH;\n let flag =\n totalPanelLength >=\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoof(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoof(offsetXL, []);\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBarge();\n this.addBargeStepRakecut();\n this.addBargeAngelRakecut();\n this.addGutter();\n this.addGutterAngelRakeCut();\n this.addGutterStepRakeCut();\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTOUT\")\n );\n\n let offsetX =\n this.APP.sldExistingLength.currentValue / 2 -\n this.APP.sldEaveWidth.currentValue;\n let offsetY = 0;\n let offsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n UI.eaveWidth -\n UI.overhangBack +\n this.offsetBraketZ;\n \n // To fascia, move roof snap to existing wall\n if(this.shouldSnapRoofToExistingWhenCutout) {\n offsetZ = UI.existingWidth1 / 2 - UI.overhangBack + this.offsetBraketZ;\n }\n\n // Apply pitch to offsetZ, because we cut panel before rotate roof\n offsetZ = offsetZ / this.utils.cos(UI.patiosPitch)\n\n //extra length to prevent lack when cut\n let extra = 5000;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + extra) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + extra) / 1000;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue + UI.overhangBack + extra) /\n 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n this.mesh_CutoutLeft = new Mesh(\n this.geo_cutoutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutLeft.position.set(\n -offsetX - this.APP.sldLeftOverhang.currentValue,\n offsetY,\n offsetZ\n );\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n this.mesh_CutoutRight = new Mesh(\n this.geo_cutoutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutRight.position.set(\n offsetX + this.APP.sldRightOverhang.currentValue,\n offsetY,\n offsetZ\n );\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n private addAngelRakeCut() {\n let offsetXL =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = -100;\n\n let offsetZ =\n this.MANAGER.patiosLength +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.offsetBraketZ;\n const _offsetZ =\n (this.MANAGER.patiosLength +\n UI.overhangBack -\n //- this.APP.sldExistingWidth1.currentValue/2\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let hypotenuse = Math.sqrt(\n Math.pow(this.MANAGER.patiosLength, 2) +\n Math.pow(this.MANAGER.patiosWidth, 2)\n );\n let scaleLength = hypotenuse / 1000;\n let scaleWidth =\n (this.MANAGER.patiosLength * this.MANAGER.patiosWidth) /\n hypotenuse /\n 1000;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n let _rotY = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let _angle = (Math.PI - _rotY) / 2;\n\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutLeft.rotateY(angle);\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n //cut gutter csg\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterLeft1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft1.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft1.rotation.set(0, _angle, 0);\n this.meshCutGutterLeft1.updateMatrix();\n this.csgCutGutterLeft1 = CSG.fromMesh(this.meshCutGutterLeft1);\n //this.APP.scene.add(this.meshCutGutterLeft1);\n\n this.meshCutGutterLeft2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft2.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft2.rotation.set(0, _angle + Math.PI, 0);\n this.meshCutGutterLeft2.updateMatrix();\n this.csgCutGutterLeft2 = CSG.fromMesh(this.meshCutGutterLeft2);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n\n let _rotY = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let _angle = (Math.PI - _rotY) / 2;\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutRight.rotateY(-angle);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n\n //cut gutter\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterRight1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight1.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight1.rotation.set(0, -_angle, 0);\n this.meshCutGutterRight1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight1.updateMatrix();\n this.csgCutGutterRight1 = CSG.fromMesh(this.meshCutGutterRight1);\n\n this.meshCutGutterRight2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight2.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight2.rotation.set(0, -(_angle + Math.PI), 0);\n this.meshCutGutterRight2.updateMatrix();\n this.csgCutGutterRight2 = CSG.fromMesh(this.meshCutGutterRight2);\n //this.APP.scene.add(this.meshCutGutterRight2);\n }\n }\n private addStepRakecut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100; //this.APP.sldExistingWallHeight.currentValue;\n // let offsetY = this.utils.getHeightByAngle(\n // this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue,\n // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n // this.APP.sltRoofPitch.currentValue,\n // 1\n // );\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.offsetBraketZ;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleLength = (this.APP.sldLeftCutVertical.currentValue + 100) / 1000;\n let scaleWidth =\n (this.APP.sldLeftCutHorizontal.currentValue + 100) / 1000;\n\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleLength =\n (this.APP.sldRightCutVertical.currentValue + 100) / 1000;\n let scaleWidth =\n (this.APP.sldRightCutHorizontal.currentValue + 100) / 1000;\n\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n public addRoofGroup() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PATIOS,\n };\n\n let offsetX = 0;\n // if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n // if (this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX = this.APP.sldEaveWidth.currentValue;\n // }\n // }\n let height = 0;\n if (+UI.upstandBraketType !== 0) {\n height =\n +UI.upstandBraketType +\n this.geoBeam.height +\n this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n height -= this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n let offsetY =\n UI.eaveHeight + height + UI.overhangBack * this.utils.tan(UI.patiosPitch);\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n UI.eaveHeight +\n height -\n UI.overhangBack * this.utils.tan(UI.patiosPitch);\n }\n\n let offsetZ =\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n UI.overhangBack;\n\n this.roofGroup.position.set(offsetX, offsetY, offsetZ + this.offsetBraketZ);\n if (UI.isUpFasciaUpstandardBracket) {\n this.roofGroup.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n } else {\n this.roofGroup.rotation.set(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n }\n\n this.scene.add(this.roofGroup);\n }\n public getOutLines(): Printing2DGeometry {\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"ROOF_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false) return;\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().MESH_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n return simplifiedGeo;\n }\n public addRoof(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n const mesh: Mesh = new Mesh(\n this.roofInfo.geometry,\n MaterialManager.Instance().ROOF\n );\n\n let offsetSheet = 0;\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n offsetSheet = 13;\n } else {\n offsetSheet = 5;\n }\n\n //if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX += this.APP.sldEaveWidth.currentValue;\n //}\n\n let scaleZ = this.roofLengthPlus / this.roofInfo.length;\n const offsetY = 0;\n let offsetZ = 0;\n\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && over && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - this.APP.sldExistingWidth1.currentValue) / this.roofInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL,\n views: views,\n length: scaleZ,\n };\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n\n let buferGeo = new BufferGeometry().fromGeometry((meshResult as Mesh).geometry as Geometry);\n this.utils.changeGeoColor(buferGeo, new Vector3(0, 1, 0), UI.roofColor.toString());\n let newGeo = new Geometry().fromBufferGeometry(buferGeo);\n (meshResult as Mesh).geometry = newGeo;\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n private addBarge() {\n if (UI.isUpFasciaUpstandardBracket) {\n let mesh: Mesh;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXF = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue;\n let offsetXL2 = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXR1 =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n let offsetXR2 =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetZL = 0;\n let offsetZR = 0;\n let offsetZFront =\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let bargeFrontLength = this.roofWidth;\n let scaleCutoutVer =\n this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue + this.bargeLeftInfo.width,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n let offsetY = 0;\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n //cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeLeftLength -= this.APP.sldExistingWidth1.currentValue;\n offsetZL += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - this.geoBraket_1.width / 10,\n UI.patiosPitch\n );\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(\n UI.existingLength2 / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n //cutout Ver\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeRightLength -= this.APP.sldExistingWidth1.currentValue;\n offsetZR += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(\n UI.existingLength2 / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n // cutout ver\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n offsetXF += this.APP.sldLeftCutHorizontal.currentValue;\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n bargeFrontLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n bargeFrontLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n let scaleXF = bargeFrontLength / this.bargeFrontInfo.length;\n let scaleZLeft =\n this.utils.getHypotenuseByCos(\n bargeLeftLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeLeftInfo.length;\n let scaleZRight =\n this.utils.getHypotenuseByCos(\n bargeRightLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeRightInfo.length;\n //left\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n //right\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n //front\n mesh = new Mesh(\n this.bargeFrontInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXF, 0, offsetZFront + 2);\n mesh.scale.setX(scaleXF);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n } else {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n let mesh: Mesh;\n let offsetXB = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXL1 = -(UI.totalBayLength / 2 + UI.overhangLeft) + UI.existingLength2 + (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth;\n let offsetXL2 = -( UI.totalBayLength / 2 + UI.overhangLeft);\n let offsetXR1 = this.totalBaySize / 2 + UI.overhangRight - UI.existingLength2 - (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth;\n let offsetXR2 = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZL = 0;\n let offsetZR = 0;\n const offsetY = 0;\n let scaleXB = this.roofWidth / this.geo_receiverChanel.length;\n let scaleZLeft = this.roofLengthPlus / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLengthPlus;\n let scaleZRight = this.roofLengthPlus / this.bargeRightInfo.length;\n let bargeRightLength = this.roofLengthPlus;\n\n let bargeCutOutVerLength = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue + this.bargeLeftInfo.width,\n this.APP.sltRoofPitch.currentValue\n )\n if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n if(this.shouldSnapRoofToExistingWhenCutout) {\n bargeCutOutVerLength = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth + this.geo_receiverChanel.width,\n this.APP.sltRoofPitch.currentValue\n )\n } else {\n bargeCutOutVerLength = this.utils.getHypotenuseByCos(\n UI.existingWidth1 + this.geo_receiverChanel.width,\n this.APP.sltRoofPitch.currentValue\n )\n }\n }\n let scaleCutoutVer = bargeCutOutVerLength / this.bargeLeftInfo.length;\n let scaleCutoutHor =\n this.APP.sldExistingLength2.currentValue /\n this.geo_bargeCutoutLeftHor.length;\n //cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n scaleXB =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.geo_receiverChanel.length;\n scaleZLeft =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeLeftInfo.length;\n bargeLeftLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n offsetXB += this.APP.sldExistingLength2.currentValue;\n if(this.shouldSnapRoofToExistingWhenCutout) {\n bargeLeftLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1 + UI.eaveWidth,\n this.APP.sltRoofPitch.currentValue\n );\n offsetZL += this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth,\n this.APP.sltRoofPitch.currentValue\n );\n } else {\n offsetZL += this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n }\n\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n if(this.shouldSnapRoofToExistingWhenCutout) {\n offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n }\n \n // If normal fascia, the back barge is receive chanel\n if (UI.structureType == CONNECTION_TYPE.FASCIA) {\n const receiveChanelLength = scaleCutoutHor * this.geo_bargeCutoutLeftHor.length + (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth\n const receiveChanelScale = receiveChanelLength / this.geo_receiverChanel.length\n mesh = new Mesh(\n this.geo_receiverChanel.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.position.set(offsetXL1 - receiveChanelLength, offsetY, offsetZ);\n mesh.scale.setX(receiveChanelScale);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n \n }\n \n this.roofGroup.add(mesh);\n\n // Cutout vertical (Left of existing length 1)\n if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n mesh = new Mesh(\n this.geoReceiveChannelLeftInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n scaleXB =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.geo_receiverChanel.length;\n scaleZRight =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeRightInfo.length;\n bargeRightLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1,\n UI.patiosPitch\n );\n \n if(this.shouldSnapRoofToExistingWhenCutout) {\n bargeRightLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1 + UI.eaveWidth,\n UI.patiosPitch\n );\n offsetZR += this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth,\n UI.patiosPitch\n );\n } else {\n offsetZR += this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n UI.patiosPitch\n );\n }\n\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n if(this.shouldSnapRoofToExistingWhenCutout) {\n offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n }\n\n if (UI.structureType == CONNECTION_TYPE.FASCIA) {\n const receiveChanelLength = scaleCutoutHor * this.geo_bargeCutoutLeftHor.length + (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth\n const receiveChanelScale = receiveChanelLength / this.geo_receiverChanel.length\n mesh = new Mesh(\n this.geo_receiverChanel.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.scale.setX(receiveChanelScale);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n \n } else {\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n this.roofGroup.add(mesh);\n \n //cutout ver\n \n if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n mesh = new Mesh(\n this.geoReceiveChannelRightInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n this.roofGroup.add(mesh);\n }\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n this.APP.sltExistingType.currentValue == 3\n ) {\n scaleXB =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue * 2) /\n this.geo_receiverChanel.length;\n }\n //Rake cut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n }\n scaleZLeft = bargeLeftLength / this.bargeLeftInfo.length;\n scaleZRight = bargeRightLength / this.bargeRightInfo.length;\n\n // Left barge (Left side of existing length 1 and existing length 2)\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA \n && (UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.BOTH)\n && this.shouldSnapRoofToExistingWhenCutout\n && UI.existingWidth2 > 0\n ) {\n mesh = new Mesh(\n this.geoReceiveChannelLeftInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n this.roofGroup.add(mesh);\n\n // Right barge (Right side of existing length 1 and existing length 2)\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA \n && (UI.existingType == BUILDING_SIDE.RIGHT || UI.existingType == BUILDING_SIDE.BOTH)\n && this.shouldSnapRoofToExistingWhenCutout\n && UI.existingWidth2 > 0\n ) {\n mesh = new Mesh(\n this.geoReceiveChannelRightInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n this.roofGroup.add(mesh);\n if(this.shouldSnapRoofToExistingWhenCutout) {\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.RIGHT) {\n scaleXB -= UI.eaveWidth / this.geo_receiverChanel.length;\n } else if(UI.existingType == BUILDING_SIDE.BOTH) {\n scaleXB -= 2 * UI.eaveWidth / this.geo_receiverChanel.length;\n }\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.BOTH) {\n offsetXB += UI.eaveWidth;\n }\n }\n if (UI.upstandBraketType == 0) {\n mesh = new Mesh(\n this.geo_receiverChanel.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.position.set(offsetXB, offsetY, 0);\n mesh.scale.setX(scaleXB);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n this.roofGroup.add(mesh);\n } else {\n mesh = new Mesh(\n this.bargeBackInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXB, offsetY, 0);\n mesh.scale.setX(scaleXB);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n }\n }\n private addBargeStepRakecut() {\n if (UI.isUpFasciaUpstandardBracket) {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (this.APP.sldLeftCutVertical.currentValue +\n this.bargeLeftInfo.width) /\n this.bargeLeftInfo.length;\n let scaleX =\n this.APP.sldLeftCutHorizontal.currentValue /\n this.bargeLeftInfo.length;\n\n let bargeVer = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZ - this.bargeLeftInfo.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(-offsetXL, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (this.APP.sldRightCutVertical.currentValue +\n this.bargeRightInfo.width) /\n this.bargeRightInfo.length;\n let scaleX =\n this.APP.sldRightCutHorizontal.currentValue /\n this.bargeRightInfo.length;\n\n let bargeVer = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n offsetZ - this.bargeRightInfo.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(offsetXR, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n } else {\n if (\n !(\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n )\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let offsetZL = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let offsetZR = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n UI.overhangBack +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZL =\n this.APP.sldLeftCutVertical.currentValue / this.bargeLeftInfo.length;\n let scaleZR =\n this.APP.sldRightCutVertical.currentValue / this.bargeRightInfo.length;\n //let scaleX = (this.APP.sldRakeCutHorizontal.currentValue) / this.bargeLeftInfo.length;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZL\n );\n bargeVer.scale.set(1, 1, scaleZL);\n\n // let bargeHor = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(-offsetXL, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n offsetZR\n );\n bargeVer.scale.set(1, 1, scaleZR);\n\n // let bargeHor = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(offsetXR, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n }\n }\n private addBargeAngelRakecut() {\n if (!UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n\n let offsetX =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldLeftCutHorizontal.currentValue;\n let mesh = new Mesh(\n this.geo_bargeRakecutLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n\n let offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldRightCutHorizontal.currentValue;\n let mesh = new Mesh(\n this.geo_bargeRakecutRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(-rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n }\n public addGutter() {\n if (UI.isUpFasciaUpstandardBracket) {\n let offsetX = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ = 0;\n let offsetY = 0;\n let gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n //cutout\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n gutterLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n gutterLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n offsetX =\n UI.totalBayLength / 2 + UI.overhangRight - UI.existingLength2;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetX = UI.existingLength1 / 2 - UI.eaveWidth;\n gutterLength = UI.existingLength1 - 2 * UI.eaveWidth;\n }\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //Add gutter back\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n Math.PI,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n this.roofGroup.add(gutterGroup);\n this.addDownPipe(gutterGroup, gutterLength);\n } else {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const offsetY = 0;\n\n let gutterLength = this.roofWidth;\n let exLength = 300; //Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue - exLength;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterMesh = new Mesh(\n this.gutterInfo.geometry,\n MaterialManager.Instance().GUTTER\n );\n gutterMesh.scale.setX(gutterLength / this.gutterInfo.length);\n gutterMesh.updateMatrix();\n let matrixBefore = gutterMesh.matrix.clone();\n\n gutterMesh.position.set(offsetXL, offsetY, offsetZ);\n gutterMesh.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n gutterMesh.updateMatrix();\n\n let meshClipped = CSG.toMesh(\n CSG.fromMesh(gutterMesh).subtract(this.csgCutGutterLeft1),\n gutterMesh.matrix\n );\n meshClipped = CSG.toMesh(\n CSG.fromMesh(meshClipped).subtract(this.csgCutGutterRight1),\n gutterMesh.matrix\n );\n meshClipped.applyMatrix4(new Matrix4().getInverse(gutterMesh.matrix));\n meshClipped.applyMatrix4(matrixBefore);\n meshClipped.material = gutterMesh.material;\n meshClipped.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n\n let gutterGroup = this.utils.createGutterGroupWithMesh(\n meshClipped,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n false\n );\n\n this.roofGroup.add(gutterGroup);\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n {\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n true,\n this.csgCutGutterLeft1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n }\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n {\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n }\n } else {\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n this.roofGroup.add(gutterGroup);\n }\n }\n }\n private addDownPipe(gutterGroup: Group, gutterLength: number) {\n let meshPipe = new Mesh(\n this.MANAGER.postAndBeamManager.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(\n 100 / this.MANAGER.postAndBeamManager.geo_downPipe.height\n );\n meshPipe.position.set(\n gutterLength - 100,\n -190,\n this.MANAGER.postAndBeamManager.geo_downPipe.width / 2 + 20\n );\n\n gutterGroup.add(meshPipe);\n }\n private addGutterAngelRakeCut() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let exLength = 300;\n let rc_offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let rc_offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const rc_offsetZL =\n (UI.overhangFront +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetZR =\n (UI.overhangFront +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetY = 0;\n\n let rc_rotYL = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let rc_lengthL =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let rc_rotYR = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let rc_lengthR =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterRakecutGroupLeft = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n let gutterRakecutGroupRight = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroupLeft, gutterRakecutGroupRight);\n } else {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n }\n }\n private addGutterStepRakeCut() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const offsetZL =\n (this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetZR =\n (this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetY = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //Step rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldLeftCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZL),\n new Vector3(0, 0, 0),\n views,\n 1,\n true,\n true\n );\n\n this.roofGroup.add(gutterHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldRightCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZR\n ),\n new Vector3(0, 0, 0),\n views,\n 1,\n true,\n true\n );\n\n this.roofGroup.add(gutterHor);\n }\n }\n\n private getHeightByRoofPitch(userDataPos: any): number {\n if (userDataPos.isSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else if (userDataPos.isMultiSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.roofLength\n );\n }\n }\n}\n","import {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n MIN_INTERNAL_BEAM_LENGTH,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n Line3,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n PlaneHelper,\n Vector3,\n} from \"three\";\nimport { PatiosFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"src/app/app.config\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosFlyOverManager;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n public geo_superiorHouseBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_houseBeamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n public extraOffsetZ: number;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private frontPostHeight: number;\n //private extraBracketHeight = 250;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private deferHandle;\n private deferTimeout = CONST.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketsBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, flyOverManager: PatiosFlyOverManager) {\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = flyOverManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_superiorHouseBeam = this.geometryManager.getHouseBeam();\n this.geo_superiorHouseBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorHouseBeam.length / 2,\n this.geo_superiorHouseBeam.height / 2,\n this.geo_superiorHouseBeam.width / 2\n );\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_houseBeamEndCap = this.geometryManager.getHouseBeamEndCap();\n this.geo_houseBeamEndCap.geometry.translate(\n 0,\n this.geo_houseBeamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData.position.back\n )\n );\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE));\n this.scene.remove(\n ...this.scene.children.filter((x) => x.userData.type == \"BOXHELPER\")\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.cutoutExistingBothLength =\n (UI.totalBayLength - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n this.addBeamAngleRakecut();\n this.addBeamStepRakecut();\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n this.addSuperiorBeam({ cutout: true });\n }\n if (UI.multiSpan > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n this.addGround();\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let offsetX = -UI.totalBayLength / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == UI.listBay.length) {\n last = true;\n }\n this.addPostOrBracket(offsetX, {\n front: true,\n first,\n last,\n left: first,\n right: last,\n });\n\n if (UI.multiSpan > 0) {\n this.addPostOrBracket(offsetX, {\n multiSpan: true,\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < UI.listBay.length) {\n let b = UI.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n offsetX = -UI.totalBayLength / 2;\n first = true;\n last = false;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == UI.listBay.length) {\n last = true;\n }\n if (first || last) {\n this.addPostAngleRakecut(offsetX + fitX, {\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < UI.listBay.length) {\n let b = UI.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n this.addPostStepRakecut();\n this.addDownPipe();\n this.addDownPipeStepRakecut();\n this.updateUI();\n this.showBeamOutline();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n return fitX;\n }\n public addEndRafterBeam(info: any) {\n const {\n numOfInternalRafter,\n numOfSpanBeam,\n numOfMultiSpanBeam,\n } = info;\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n );\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n\n const fitIfNotWidth2 =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n\n let endMainLeftX = -UI.totalBayLength / 2 + fitX;\n let endMainRightX = UI.totalBayLength / 2 + fitX;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n }\n }\n\n // Add end rafter for two end side\n // Left side\n this.addRafterSuperiorBeam(endMainLeftX, {\n span: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n multiSpan: true,\n first: true,\n last: false,\n });\n }\n\n // Right side\n this.addRafterSuperiorBeam(endMainRightX, {\n span: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n multiSpan: true,\n first: false,\n last: true,\n });\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor,\n { rakeCutLeft: true, first: true, last: false }\n );\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n this.addRafterSuperiorBeam(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor,\n { rakeCutRight: true, first: false, last: true }\n );\n }\n\n this.addInternalRafterBeam(\n numOfInternalRafter,\n numOfSpanBeam,\n numOfMultiSpanBeam\n );\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Add rafter beam for cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX = -UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX = UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX = -UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForSpan: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainLeftX, {\n cutOutForMultiSpan: true,\n first: true,\n last: false,\n });\n }\n\n endMainRightX = UI.totalBayLength / 2 + fitX;\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForSpan: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(endMainRightX, {\n cutOutForMultiSpan: true,\n first: false,\n last: true,\n });\n }\n }\n }\n\n // Add rafter beam for rake cut step\n }\n private addInternalRafterBeam(\n numOfRafter: number,\n numOfSpanBeam: number,\n numOfMultiSpanBeam: number\n ) {\n let fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n\n const fitIfNotWidth2 =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let offsetX = -UI.totalBayLength / 2 + fitX;\n let mainRoofLength = UI.totalBayLength;\n let endCutoutLeft = -UI.totalBayLength / 2 + fitX;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n mainRoofLength =\n UI.totalBayLength -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n offsetX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n mainRoofLength =\n UI.totalBayLength -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n mainRoofLength =\n UI.totalBayLength -\n 2 * UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : 2 * fitIfNotWidth2);\n offsetX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n }\n }\n\n const mainRoofLeft = offsetX;\n const mainRoofRight = offsetX + mainRoofLength;\n let listRafterPos = []\n const rafterSpacing = UI.totalBayLength / (numOfRafter + 1);\n const maxBeamOverhang = this.utils.getMaximumBeamOverhang()\n for(let i = 0; i < numOfRafter; i++) {\n const offsetXRafter = endCutoutLeft + (i + 1) * rafterSpacing\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.BOTH) {\n if(offsetXRafter > mainRoofLeft - maxBeamOverhang && offsetXRafter < mainRoofLeft + maxBeamOverhang) {\n continue\n }\n }\n if(UI.existingType == BUILDING_SIDE.RIGHT || UI.existingType == BUILDING_SIDE.BOTH) {\n if(offsetXRafter > mainRoofRight - maxBeamOverhang && offsetXRafter < mainRoofRight + maxBeamOverhang) {\n continue\n }\n }\n listRafterPos.push({\n offsetX: offsetXRafter,\n isMainRoof: offsetXRafter >= mainRoofLeft && offsetXRafter <= mainRoofRight\n })\n }\n\n listRafterPos = this.utils.reSeperateRafterPosition(listRafterPos, offsetX, offsetX + mainRoofLength, endCutoutLeft, endCutoutLeft + UI.totalBayLength )\n\n listRafterPos.forEach(el => {\n if(el.isMainRoof) {\n this.addRafterSuperiorBeam(el.offsetX, {\n span: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n multiSpan: true,\n first: false,\n last: false,\n });\n }\n } else {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForSpan: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n cutOutForMultiSpan: true,\n first: false,\n last: false,\n });\n }\n }\n })\n\n // // Add internal beam in here\n this.addInternalBeam(\n listRafterPos,\n numOfSpanBeam,\n numOfMultiSpanBeam\n );\n }\n private addInternalBeam(\n listRafterPos,\n numOfSpanBeam: number = 0,\n numOfMultiSpanBeam: number = 0\n ) {\n const startZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n if (UI.span > 0) {\n const internalBeamSpacing = UI.span / (numOfSpanBeam + 1);\n for (let i = 0; i < numOfSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + internalBeamSpacing * (i + 1)\n );\n }\n }\n if (UI.multiSpan > 0) {\n const internalBeamSpacing = UI.multiSpan / (numOfMultiSpanBeam + 1);\n for (let i = 0; i < numOfMultiSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n listRafterPos,\n startZ + UI.span + internalBeamSpacing * (i + 1)\n );\n }\n }\n }\n public addInternalSuperiorBeam(\n listRafterPos,\n offsetZ: number\n ) {\n let fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n const fitIfNotWidth2 =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n\n let endMainLeftX = -UI.totalBayLength / 2 + fitX;\n let endMainRightX = UI.totalBayLength / 2 + fitX;\n let endCutoutLeft = -UI.totalBayLength / 2 + fitX;\n let endCutoutRight = UI.totalBayLength / 2 + fitX;\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n // Enable cut out\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n endMainLeftX =\n -UI.totalBayLength / 2 +\n fitX +\n UI.existingLength2 -\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n endMainRightX =\n UI.totalBayLength / 2 +\n fitX -\n UI.existingLength2 +\n (UI.existingWidth2 > 0 ? 0 : fitIfNotWidth2);\n }\n }\n\n // Main roof\n const beamWidth = this.geo_superiorBeam.width;\n const mainRafter = listRafterPos.filter(el => el.isMainRoof)\n\n for (let i = 0; i <= mainRafter.length; i++) {\n let startX = endMainLeftX;\n if(i > 0) {\n startX = mainRafter[i - 1].offsetX\n }\n let endX = endMainRightX;\n if(i < mainRafter.length) {\n endX = mainRafter[i].offsetX\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == mainRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutLeftRafter = listRafterPos.filter(el => !el.isMainRoof && el.offsetX < endCutoutLeft + cutoutRoofLength)\n\n if (offsetZ > UI.existingWidth1 / 2 - this.extraOffsetZ) {\n for (let i = 0; i <= cutoutLeftRafter.length; i++) {\n let startX = endCutoutLeft;\n if(i > 0) {\n startX = cutoutLeftRafter[i - 1].offsetX\n }\n let endX = endCutoutLeft + cutoutRoofLength;\n if(i < cutoutLeftRafter.length) {\n endX = cutoutLeftRafter[i].offsetX\n }\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutLeftRafter.length) {\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n const cutoutRoofLength =\n this.getCutoutRoofLengthToGenerateCutoutRafterBeam();\n const cutoutRightRafter = listRafterPos.filter(el => !el.isMainRoof && el.offsetX > endCutoutRight - cutoutRoofLength)\n\n if (\n offsetZ >\n UI.existingWidth1 / 2 - this.extraOffsetZ + beamWidth * 2\n ) {\n for (let i = 0; i <= cutoutRightRafter.length; i++) {\n let startX = endCutoutRight - cutoutRoofLength;\n if(i > 0) {\n startX = cutoutRightRafter[i - 1].offsetX\n }\n let endX = endCutoutRight;\n if(i < cutoutRightRafter.length) {\n endX = cutoutRightRafter[i].offsetX\n }\n\n if (i == 0) {\n startX += 0;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == cutoutRightRafter.length) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n this.addInternalBeamFromStartToEnd(startX, endX, offsetZ);\n }\n }\n }\n }\n }\n public addInternalBeamFromStartToEnd(startX, endX, offsetZ) {\n const { fromX, toX, visible } = this.cutInternalBeamWithRakeCut(\n startX,\n endX,\n offsetZ\n );\n\n if (!visible) {\n return;\n }\n\n // Only add internal beam when beam length is greater than 200\n if (Math.abs(toX - fromX) < MIN_INTERNAL_BEAM_LENGTH) {\n return;\n }\n\n const beamWidth = this.geo_RafterBeam.width;\n const beamHeight = this.geo_superiorBeam.height;\n let scaleX = Math.abs(toX - fromX) / this.geo_superiorBeam.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const offsetY =\n UI.eaveHeight +\n this.getBracketHeight(\n offsetZ + UI.existingWidth1 / 2 + this.extraOffsetZ + beamWidth / 2\n );\n\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n mesh.position.set(fromX, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow ? MaterialManager.Instance().BRACKET_WARNING.clone() : MaterialManager.Instance().BEAM.clone()\n );\n capL.position.set(\n fromX + this.geo_beamEndCap.length / 2 - 2,\n -this.geo_beamEndCap.height + beamHeight,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow ? MaterialManager.Instance().BRACKET_WARNING.clone() : MaterialManager.Instance().BEAM.clone()\n );\n capR.position.set(\n toX - this.geo_beamEndCap.length / 2 + 2,\n -this.geo_beamEndCap.height + beamHeight,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n beamGroup.position.set(0, offsetY, offsetZ - beamWidth / 2);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n private cutInternalBeamWithRakeCut(startX, endX, offsetZ) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const fromX = Math.min(startX, endX);\n const toX = Math.max(startX, endX);\n const beamWidth = this.geo_superiorBeam.width;\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n const offsetZFrontBeam =\n UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ + beamWidth / 2),\n new Vector3(fromX, 0, offsetZ + beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ + beamWidth / 2),\n new Vector3(toX, 0, offsetZ + beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX: intersection.x,\n toX,\n visible: true,\n };\n } else {\n if (intersection.x > fromX && intersection.x > toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(fromX, 0, offsetZ + beamWidth / 2),\n new Vector3(toX, 0, offsetZ + beamWidth / 2)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n const rakeCutLine = new Line3(startRakeCut, endRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(toX, 0, offsetZ + beamWidth / 2),\n new Vector3(fromX, 0, offsetZ + beamWidth / 2)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const rakeCutLine = new Line3(endRakeCut, startRakeCut);\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n rakeCutLine,\n true\n );\n\n if (intersection) {\n if (\n this.utils.isPositive(beamLine.start, beamLine.end, intersection) &&\n this.utils.isPositive(\n rakeCutLine.start,\n rakeCutLine.end,\n intersection\n ) &&\n intersection.x >= fromX &&\n intersection.x <= toX\n ) {\n return {\n fromX,\n toX: intersection.x,\n visible: true,\n };\n } else {\n if (intersection.x < fromX && intersection.x < toX) {\n return {\n fromX,\n toX,\n visible: false,\n };\n }\n }\n }\n }\n\n return {\n fromX,\n toX,\n visible: true,\n };\n }\n\n public getCutoutRoofLengthToGenerateCutoutRafterBeam() {\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let beamLength =\n UI.existingLength2 -\n this.APP.existingWallManager.geo_existingWallW1.width;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n } else {\n beamLength -= extraWallWidth;\n }\n\n beamLength += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if (UI.existingWidth2 > 0) {\n } else {\n beamLength -= extraWallWidth;\n }\n\n beamLength += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n beamLength = UI.existingLength2 - extraWallWidth;\n\n if (UI.existingWidth2 > 0) {\n beamLength = UI.existingLength2;\n }\n }\n\n return beamLength;\n }\n /**\n *\n * @param offsetX : Position x of rafter beam\n */\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n const beamWidth = this.geo_superiorBeam.width;\n const beamHeight = this.geo_RafterBeam.height;\n const beamGeoLength = this.geo_RafterBeam.length;\n let mesh;\n let beamLength =\n (UI.span -\n (UI.multiSpan\n ? this.geo_superiorBeam.width * 1.5\n : this.geo_superiorBeam.width * 2)) /\n this.utils.cos(UI.patiosPitch);\n if (userDataPos.multiSpan) {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.cutOutForSpan) {\n if (\n UI.multiSpan == 0 &&\n UI.span - UI.existingWidth1 - 2 * beamWidth <= 0\n ) {\n return;\n } else if (\n UI.multiSpan > 0 &&\n UI.span - UI.existingWidth1 - 1.5 * beamWidth <= 0\n ) {\n return;\n }\n\n if (UI.multiSpan == 0) {\n beamLength =\n (UI.span - beamWidth * 2 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n } else {\n beamLength =\n (UI.span - beamWidth * 1.5 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n }\n } else if (userDataPos.cutOutForMultiSpan) {\n if (UI.span + UI.multiSpan - UI.existingWidth1 - 2 * beamWidth <= 0) {\n return;\n }\n\n if (UI.existingWidth1 > UI.span) {\n beamLength =\n (UI.span + UI.multiSpan - beamWidth * 2 - UI.existingWidth1) /\n this.utils.cos(UI.patiosPitch);\n } else {\n beamLength =\n (UI.multiSpan - beamWidth * 1.5) / this.utils.cos(UI.patiosPitch);\n }\n } else if (userDataPos.rakeCutLeft) {\n beamLength =\n (UI.rakeCutLeftVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n } else if (userDataPos.rakeCutRight) {\n beamLength =\n (UI.rakeCutRightVer - beamWidth) / this.utils.cos(UI.patiosPitch);\n }\n\n let offsetZ = 0;\n let offsetY = 0;\n\n // Scene position z move back\n // The plane be translated\n let shouldCutByRakeCut = true;\n if (userDataPos.span || userDataPos.cutOutForSpan) {\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() -\n (UI.span - (UI.multiSpan ? beamWidth / 2 : beamWidth)) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n UI.span -\n (UI.multiSpan ? beamWidth / 2 : beamWidth) -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n } else if (\n userDataPos.multiSpan ||\n userDataPos.cutOutForMultiSpan ||\n userDataPos.rakeCutLeft ||\n userDataPos.rakeCutRight\n ) {\n if (userDataPos.rakeCutLeft || userDataPos.rakeCutRight) {\n shouldCutByRakeCut = false;\n }\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() -\n (UI.span + UI.multiSpan - beamWidth) * this.utils.tan(UI.patiosPitch);\n offsetZ =\n UI.span +\n UI.multiSpan -\n beamWidth -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n }\n\n let offsetXRafter = offsetX;\n if (userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width;\n } else if (!userDataPos.first && !userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width / 2;\n }\n\n if (shouldCutByRakeCut) {\n const { newStartZ, newLength, fitYForNewStartZPoint } =\n this.cutRafterBeamWithRakeCut(offsetZ, offsetXRafter, beamLength);\n if (!_.isNil(newStartZ)) {\n offsetZ = newStartZ;\n }\n if (!_.isNil(newLength)) {\n beamLength = newLength;\n }\n if (!_.isNil(fitYForNewStartZPoint)) {\n offsetY += fitYForNewStartZPoint;\n }\n }\n\n let scaleX = beamLength / beamGeoLength;\n scaleX += (beamHeight * this.utils.tan(UI.patiosPitch)) / beamGeoLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let material = this.getRafterBeamMaterial(userDataPos, offsetZ, beamLength);\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(0, 0, 0);\n mesh.scale.setX(scaleX);\n\n let { capL, capR } = this.getBeamEndCapForRafterBeam(0, beamLength);\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n\n beamGroup.position.set(offsetXRafter, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n\n this.scene.add(beamGroup);\n }\n private cutRafterBeamWithRakeCut(offsetZ, offsetX, beamLength) {\n // startZ is start point of rafter beam\n // startZ > endZ\n const beamWidth = this.geo_superiorBeam.width;\n let startZ = offsetZ;\n let endZ = offsetZ - beamLength * this.utils.cos(UI.patiosPitch);\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n const offsetZFrontBeam =\n UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n const rakeCutHorLength = this.beamLeftCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX, 0, startZ),\n new Vector3(offsetX, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + 2, 0, startZ),\n new Vector3(offsetX + 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n const endRakeCut = new Vector3(\n -UI.totalBayLength / 2 + fitX + UI.rakeCutLeftHor + beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutLeftVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n const rakeCutVerLength =\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n const rakeCutHorLength = this.beamRightCutSizeInfo.l;\n\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth, 0, startZ),\n new Vector3(offsetX + beamWidth, 0, endZ)\n );\n const beamRakeCutLength = Math.sqrt(\n Math.pow(rakeCutHorLength, 2) + Math.pow(rakeCutVerLength, 2)\n );\n const cosAngleFrontHor = rakeCutHorLength / beamRakeCutLength;\n\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - rakeCutVerLength - beamWidth / cosAngleFrontHor\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - rakeCutHorLength,\n 0,\n offsetZFrontBeam - beamWidth / cosAngleFrontHor\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(startRakeCut, endRakeCut)\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n const beamLine = new Line3(\n new Vector3(offsetX + beamWidth - 2, 0, startZ),\n new Vector3(offsetX + beamWidth - 2, 0, endZ)\n );\n const startRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n const endRakeCut = new Vector3(\n UI.totalBayLength / 2 + fitX - UI.rakeCutRightHor - beamWidth,\n 0,\n offsetZFrontBeam - UI.rakeCutRightVer - beamWidth\n );\n\n const intersection = this.utils.getIntersectionOnAPoint(\n beamLine,\n new Line3(endRakeCut, startRakeCut),\n true\n );\n\n if (intersection && intersection.z < startZ) {\n const newStartZ = intersection.z;\n const newLength =\n Math.abs(newStartZ - endZ) / this.utils.cos(UI.patiosPitch);\n const fitYForNewStartZPoint =\n Math.abs(startZ - newStartZ) * this.utils.tan(UI.patiosPitch);\n\n return { newStartZ, newLength, fitYForNewStartZPoint };\n }\n }\n\n return { newStartZ: null, newLength: null, fitYForNewStartZPoint: null };\n }\n private getBeamEndCapForRafterBeam(offsetXL, offsetXR) {\n let capL;\n let capR;\n let matEndCap = this.getRafterBeamEndCapMaterial();\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n let higherBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(\n offsetXR + 2,\n -this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch),\n this.geo_rafterBeamEndCap.width / 2\n );\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: higherBraketName,\n };\n\n return {\n capL,\n capR,\n };\n }\n private getRafterBeamEndCapMaterial() {\n const matEndCap = UI.beamLayoutShow ? MaterialManager.Instance().BRACKET_WARNING.clone() : MaterialManager.Instance().BEAM.clone();\n let heightPlane =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height;\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(0, heightPlane, 0);\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightRealBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom = matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n -UI.existingWidth1 / 2 - this.extraOffsetZ + this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n -UI.existingWidth1 / 2 - this.extraOffsetZ + this.scene.position.z\n )\n );\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n return matEndCap;\n }\n private getRafterBeamMaterial(userDataPos, offsetZ, beamLength) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n const beamWidth = this.geo_superiorBeam.width;\n const braketWidth = this.geo_bracket.width;\n\n let cutFrontZ = offsetZ + this.extraOffsetZ - braketWidth;\n let cutBackZ =\n offsetZ +\n this.extraOffsetZ -\n braketWidth -\n beamLength * this.utils.cos(UI.patiosPitch);\n\n if (cutFrontZ != 0 || cutBackZ != 0) {\n let nBottom = new Vector3(0, 0, -1).normalize();\n let pBottom = new Vector3(0, 0, cutFrontZ);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, cutBackZ);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n }\n\n return material;\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n private addDownPipeStepRakecut() {\n let fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetX = -UI.totalBayLength / 2 + 50 + fitX;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutLeftVer,\n UI.patiosPitch,\n -1\n ) +\n this.geo_superiorBeam.height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront -\n UI.rakeCutLeftVer -\n 260 -\n UI.existingWidth1 / 2;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeStepRakeCutGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n false\n );\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetX = UI.totalBayLength / 2 - 50 + fitX;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutRightVer,\n UI.patiosPitch,\n -1\n ) +\n this.geo_superiorBeam.height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront -\n UI.rakeCutRightVer -\n 260 -\n UI.existingWidth1 / 2;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeStepRakeCutGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n false\n );\n }\n }\n private addDownPipe() {\n let offsetZ = UI.span + UI.multiSpan - 170;\n let offsetX = -UI.totalBayLength / 2 + 50;\n if (UI.existingType == 1) {\n offsetX = UI.totalBayLength / 2 - 50;\n }\n if (UI.existingType != 0) {\n offsetZ -= UI.existingWidth1 / 2;\n }\n //Rakecut\n //Downpipe will be in left\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n if (UI.existingType == 1 && UI.rakeCutRightType == RAKECUT_TYPE.NONE) {\n offsetX = UI.totalBayLength / 2 - 50;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX = -UI.totalBayLength / 2 + this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX = -UI.totalBayLength / 2 + UI.rakeCutLeftHor;\n }\n }\n //Downpipe will be in right\n else {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX = UI.totalBayLength / 2 - this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetX = UI.totalBayLength / 2 - UI.rakeCutRightHor;\n }\n }\n\n //this.downpipeGroup.position.set(offsetX, 0, 0);\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n ) +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n true\n );\n }\n\n public houseBeamHeight() {\n return this.geo_superiorBeam.height - this.geo_superiorHouseBeam.height;\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n if (planView) {\n this.utils.getPlanVerticesOfBeam(c as Mesh, lsGeometries, [planView]);\n }\n\n let box = new BoxHelper(objCloned);\n c.updateWorldMatrix(true, true);\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n ),\n });\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n //let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n //simplifiedGeo.vertices.push();\n\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n //lineGeo.vertices.push(new Vector3(vertices[i+3], vertices[i+4], vertices[i+5]));\n\n //if(i == 18) break;\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n\n private addGround() {\n let offsetZ = -(\n UI.existingWidth1 / 2 +\n this.extraOffsetZ +\n this.APP.sldBackOverhang.currentValue\n );\n let width = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(0, 0, offsetZ);\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (UI.existingType == 1) {\n base.position.setX(offsetX);\n }\n if (UI.existingType == 2) {\n base.position.setX(-offsetX);\n }\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n if (userDataPos.front) {\n postOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n this.frontPostHeight = UI.eaveHeight + this.getBracketHeight(UI.span);\n scalePostY = this.frontPostHeight / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n if (UI.multiSpan > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n // if (userDataPos.back) {\n // postOffsetZ =\n // -UI.existingWidth1 / 2 - this.extraOffsetZ;\n // bracketOffsetZ =\n // -UI.existingWidth1 / 2 - this.extraOffsetZ;\n // scalePostY =\n // (UI.eaveHeight +\n // this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n // this.geo_superiorPost.height;\n // scaleBracketY =\n // this.totalHeightFromEaveHeightToTopOfFlyoverBraket() / this.geo_bracket.height;\n\n // views = [\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n // ];\n // }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span + UI.multiSpan) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n let exceedMoveBackLimit = false;\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutLeftVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n postOffsetX -= UI.overhangLeft;\n bracketOffsetX -= UI.overhangLeft;\n postOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n }\n\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n postOffsetX += UI.overhangRight;\n bracketOffsetX += UI.overhangRight;\n postOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutRightVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n }\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n //End rakecut\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n let boxPost = new Box3().setFromObject(meshPost);\n // let boxPostHelper = new Box3Helper(boxPost);\n // this.APP.scene.add(boxPostHelper);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (\n meshBracket.userData.position.left &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n meshBracket.userData.position.right &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n if (UI.existingType == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (UI.existingType == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n public addPostAngleRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n let bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n let scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n let scaleBracketY =\n this.getBracketHeight(UI.span + UI.multiSpan) / this.geo_bracket.height;\n let offsetY = UI.eaveHeight;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.first) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.last) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorPost.width,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorBeam.width,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n }\n private addPostStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n let fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let offsetXL = -UI.totalBayLength / 2 + fitX;\n let offsetXR = UI.totalBayLength / 2 - this.geo_superiorPost.width + fitX;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ -\n this.geo_superiorPost.width;\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let posts: Array = [];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postFront.position.set(offsetXL, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postBack.position.set(offsetXL, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n //this.scene.add(postBack);\n posts.push(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postFront.position.set(offsetXR, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postBack.position.set(offsetXR, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n //this.scene.add(postBack);\n posts.push(postBack);\n }\n\n for (let post of posts) {\n let boxPost = new Box3().setFromObject(post);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n let bracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n bracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n bracket.position.set(post.position.x, UI.eaveHeight, post.position.z);\n let height =\n post.scale.y * this.geo_superiorPost.height - UI.eaveHeight;\n let scaleY = height / this.geo_bracket.height;\n bracket.scale.setY(scaleY);\n this.scene.add(bracket);\n } else {\n this.scene.add(post);\n }\n }\n }\n public addPostOrBracketBack() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -UI.totalBayLength / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = UI.totalBayLength / (this.numberOfBracketsBack - 1);\n let cutoutLengthInExistingBoth =\n (UI.totalBayLength - this.APP.sldExistingLength.currentValue) / 2;\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n offsetX += UI.existingLength2;\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2) /\n (this.numberOfBracketsBack - 1);\n } else {\n offsetX +=\n UI.existingLength2 -\n (this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK);\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2 + extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if (UI.existingWidth2 > 0) {\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2) /\n (this.numberOfBracketsBack - 1);\n } else {\n bracketDistance =\n (UI.totalBayLength - UI.existingLength2 + extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX += cutoutLengthInExistingBoth - extraWalWidth;\n bracketDistance =\n (this.APP.sldExistingLength.currentValue + extraWalWidth * 2) /\n (this.numberOfBracketsBack - 1);\n }\n }\n\n for (let i = 0; i < this.numberOfBracketsBack; i++) {\n if (i == this.numberOfBracketsBack - 1) {\n last = true;\n }\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let bracketOffsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (UI.braketHeight + this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, bracketOffsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n\n let isIntersect = false;\n //let isCutoutInterset = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n }\n }\n\n if (isIntersect) {\n if (i == 0 && (UI.existingType == 1 || UI.existingType == 3)) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (last && (UI.existingType == 2 || UI.existingType == 3)) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketsBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n\n let offsetXL = -UI.totalBayLength / 2;\n let offsetXR = UI.totalBayLength / 2;\n\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n let bracketDistance =\n (UI.existingLength2 - extraWalWidth) / (this.numberOfBracketCutout - 1);\n if (UI.existingWidth2 > 0) {\n bracketDistance = UI.existingLength2 / (this.numberOfBracketCutout - 1);\n }\n\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n //let offsetX = 0;\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL;\n if (first) {\n } else if (last) {\n // Move to dodge internal rafter beam\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (UI.existingType == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n first = true;\n\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n // Dodge internal rafter beam\n // bracketOffsetX -= this.geo_bracket.width;\n // postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (UI.existingType == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n public addSuperiorBeam(userDataPos: any) {\n let offsetX = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = UI.eaveHeight + this.getBracketHeight(UI.span);\n offsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n if (UI.multiSpan > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n //Add house beam\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.houseBeamHeight();\n\n offsetZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n offsetX += UI.existingLength2;\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n } else {\n offsetX += UI.existingLength2 - extraWallWidth;\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2 +\n extraWallWidth;\n }\n\n offsetX += UI.overhangLeft;\n beamLength -= UI.overhangLeft;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if (UI.existingWidth2 > 0) {\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n } else {\n beamLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2 +\n extraWallWidth;\n }\n\n beamLength -= UI.overhangRight;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX +=\n (UI.totalBayLength -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n CONST.EAVE_OFFSET_BACK;\n beamLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n CONST.EAVE_OFFSET_BACK * 2;\n }\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY = UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan);\n offsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorBeam.width -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.cutout) {\n offsetY =\n UI.eaveHeight +\n this.getBracketHeight(UI.existingWidth1) +\n this.houseBeamHeight();\n offsetZ = UI.existingWidth1 / 2 - this.extraOffsetZ;\n beamLength =\n UI.existingLength2 -\n this.APP.existingWallManager.geo_existingWallW1.width;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.existingWidth2 > 0) {\n // beamLength += extraWallWidth;\n } else {\n beamLength -= extraWallWidth;\n }\n\n beamLength +=\n UI.overhangLeft +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.existingWidth2 > 0) {\n // beamLength += extraWallWidth;\n offsetX =\n UI.totalBayLength / 2 +\n UI.overhangRight -\n UI.existingLength2 -\n CONST.EAVE_OFFSET_BACK +\n extraWallWidth;\n } else {\n offsetX =\n UI.totalBayLength / 2 +\n UI.overhangRight -\n UI.existingLength2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n extraWallWidth;\n beamLength -= extraWallWidth;\n }\n\n offsetX -=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n beamLength +=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n // Draw beam from start braket to end braket cutout\n beamLength = UI.existingLength2 - extraWallWidth;\n\n if (UI.existingWidth2 > 0) {\n beamLength = UI.existingLength2;\n }\n }\n }\n //rake cut\n if (\n (UI.multiSpan <= 0 && userDataPos.front) ||\n (UI.multiSpan > 0 && userDataPos.multiSpan)\n ) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX += this.beamLeftCutSizeInfo.l;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX += UI.rakeCutLeftHor;\n beamLength -= UI.rakeCutLeftHor;\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n beamLength -= UI.rakeCutRightHor;\n }\n }\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n offsetX += fitX;\n if (userDataPos.front || userDataPos.multiSpan) {\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoBeamJoint\n );\n } else {\n this.cutStandardBeamToEqualLengthBeam(\n userDataPos.back || userDataPos.cutout\n ? this.geo_superiorHouseBeam\n : this.geo_superiorBeam,\n userDataPos.back || userDataPos.cutout\n ? this.geo_houseBeamEndCap\n : this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n userDataPos.back || userDataPos.cutout\n ? this.geoHouseBeamJoint\n : this.geoBeamJoint\n );\n }\n\n //Add one more beam cutout right\n if (userDataPos.cutout && UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX = UI.totalBayLength / 2 - beamLength;\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorHouseBeam,\n this.geo_houseBeamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoHouseBeamJoint\n );\n }\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2 + fitX;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngleRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetZ =\n UI.multiSpan + UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamLeftCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamLeftCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n -UI.totalBayLength / 2 - UI.overhangLeft + this.beamLeftCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(rotX, rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamRightCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamRightCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n UI.totalBayLength / 2 + UI.overhangRight - this.beamRightCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(rotX, -rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n\n let beamLength = UI.rakeCutLeftHor + this.geo_superiorPost.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutLeft.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n beamLength + this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXL -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXL += fitZ;\n }\n beamGroup.position.set(offsetXL, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n\n let beamLength = UI.rakeCutRightHor + this.geo_superiorPost.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutRight.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -(beamLength + this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -(this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXR -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXR += fitZ;\n }\n beamGroup.position.set(offsetXR, offsetY, offsetZ);\n //beamGroup.rotateY(Math.PI);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n\n this.scene.add(beamGroup);\n }\n }\n public getBracketHeight(offset): number {\n let angle = UI.patiosPitch;\n return (\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() -\n this.utils.tan(angle) * offset\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n this.MANAGER.loadRafterBeamAndInternalBeam(\n this.MANAGER.rafterBeamAndInternalBeamInfo\n );\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, ArrowHelper, BufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from 'src/app/core/models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { FIT_DIMENSION, FIT_DIMENSION_FAR, FIT_FLYOVER_BRAKET_ON_ROOF, PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n private dimensionPatiosPlanLeftOverHang: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosFlyOverBraketHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, flyOverManager: PatiosFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n \n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n \n\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMiddle.userData = { type: GEOMETRY_TYPE.DIMENSION };\n //this.dimensionPlanMiddle.rotation.set(-Math.PI / 2, 0, 0);\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosPlanLeftOverHang = new Group();\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosFlyOverBraketHeightDim = new Group();\n this.dimensionPatiosFlyOverBraketHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFlyOverBraketHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLeftLeft,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n );\n\n loader.load( environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n \n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if(this.APP.patiosManager && this.APP.patiosManager.patiosGroup){\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosFlyOverBraketHeightDim.children = this.dimensionPatiosFlyOverBraketHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPatiosPlanLeftOverHang.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionFlyOverBraketHeightDim();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.drawDimensionMidle();\n //this.drawDimensionPatiosPlanLeftOverHang();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n\n this.APP.dimensionManager.draw();\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height\n }\n private drawDimensionFlyOverBraketHeightDim(){\n const bracketHeight =(UI.braketHeight + this.MANAGER.columnAndBeamManager.houseBeamHeight())\n const offsetZBackPos = - UI.existingWidth1 / 2 - this.MANAGER.columnAndBeamManager.extraOffsetZ - FIT_DIMENSION_FAR;\n\n this.dimensionPatiosFlyOverBraketHeightDim.position.set(0, UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfExistingRoof() - FIT_FLYOVER_BRAKET_ON_ROOF + bracketHeight / 2, offsetZBackPos);\n\n let textStr = this.utils.getDimensionValue(bracketHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: bracketHeight,\n container: this.dimensionPatiosFlyOverBraketHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n textRotation: new Vector3(Math.PI, 0, 0),\n labelType: DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosFlyOverBraketHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionLowerHeightDim(){\n const frontPostHeight = UI.eaveHeight + this.MANAGER.columnAndBeamManager.getBracketHeight(UI.span + UI.multiSpan)\n const offsetZFrontPos = UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.MANAGER.columnAndBeamManager.extraOffsetZ + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, frontPostHeight / 2, offsetZFrontPos);\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, 0) };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n text.position.set(-200, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n }\n else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2 - this.APP.sldExistingWidth1.currentValue/2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n let dir = new Vector3(0,0,1);\n let arrow = new ArrowHelper(dir, origin, 1000);\n arrow.userData = { type: \"ARROW\", views: [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }] };\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + ' degree';\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n \n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, Math.PI / 2, 0) };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n\n //console.log(dim);\n }\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.box.max.z + this.dimensionDistance2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance3 - this.APP.sldExistingWidth1.currentValue/2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // offsetZ += 500;\n // }\n //}\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n //this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n // let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n // cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n // cap2.position.setX(offsetX);\n // this.dimensionPatiosPlanBottom.add(cap2);\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true } }\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = -this.APP.dialogEditBay.totalBaySize/2 + this.APP.sldLeftCutHorizontal.currentValue/2 - this.APP.sldLeftOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL)\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = this.APP.dialogEditBay.totalBaySize/2 - this.APP.sldRightCutHorizontal.currentValue/2 + this.APP.sldRightOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500-200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL)\n }\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2 \n - this.APP.sldExistingWidth1.currentValue/2 \n - this.APP.existingWallManager.geo_existingWallL1.width \n - this.APP.eaveManager.backOverhang;\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n //let offsetDimensionX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n //}\n \n //if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n //this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n // let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2 \n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldMultiSpan.currentValue);\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let extraDistance = 0;\n //----Rake cut\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n \n let offsetZ = dimLength/2 + UI.multiSpan / 2 + this.APP.sldFrontOverhang.currentValue - this.APP.sldRightCutVertical.currentValue/2;\n \n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3( 0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL)\n }\n //----End rake cut\n \n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI,\"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT, extraDistance);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n dim.userData['position'] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n \n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let height = this.utils.getHeightByAngle(UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetY = height/2;\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // dimOffsetX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n // }\n\n //this.dimensionPatiosFrontRight.position.set(dimOffsetX,dimOffsetY,0);\n \n\n //--------\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height - (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n // let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2 - 290;\n // if(this.APP.sldExistingWidth1.currentValue + this.APP.sldExistingWidth2.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue){\n // dimOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue + this.dimensionDistance2 - 290;\n // }\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // dimOffsetZ += 500;\n // }\n\n //this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n // let dimOffsetY = this.APP.sldBuildingHeight.currentValue - (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n // let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue / 2 - 290;\n // if(this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue){\n // dimOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2;\n // }\n this.dimensionPatiosRightLeft.position.set(0,this.dimensionPatiosLeftRight.position.y,this.dimensionPatiosLeftRight.position.z);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() { \n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n // if (overhangValue == 0)\n // return;\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n\n if(overhangValue == 0){\n groupDim.children = groupDim.children.filter(el => el.userData?.groupType != labelType)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z + fitZ))\n textCover.position.set(pos.x , pos.y, pos.z);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosPlanLeftOverHang.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n\n ]){\n if(!dim.userData.views){\n // console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n\n private getGeometryFromBufferGeometry(bufferGeo: BufferGeometry) {\n let points: Vector3[] = [];\n let verties = bufferGeo.getAttribute('position').array;\n for (let i = 0; i < verties.length; i += 3) {\n points.push(new Vector3(verties[i], verties[i + 1], verties[i+2]));\n }\n\n return new Geometry().setFromPoints(points);\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n \n //this.APP.sldSpan.addAction(this.eventHandleId);\n //this.APP.sldMultiSpan.addAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.addAction(this.eventHandleId);\n //this.APP.sldExistingLength.addAction(this.eventHandleId);\n //this.APP.sldExistingLength2.addAction(this.eventHandleId);\n //this.APP.sltExistingType.addAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.addAction(this.eventHandleId);\n //this.APP.dialogEditBay.addAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.addAction(this.eventHandleId);\n //this.APP.sldRightOverhang.addAction(this.eventHandleId);\n //this.APP.sldBackOverhang.addAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.addAction(this.eventHandleId);\n //this.APP.sltRoofPitch.addAction(this.eventHandleId);\n }\n private unregisterEvent(): void{\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.APP.sldSpan.removeAction(this.eventHandleId);\n //this.APP.sldMultiSpan.removeAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength2.removeAction(this.eventHandleId);\n //this.APP.sltExistingType.removeAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.removeAction(this.eventHandleId);\n //this.APP.dialogEditBay.removeAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.removeAction(this.eventHandleId);\n //this.APP.sldRightOverhang.removeAction(this.eventHandleId);\n //this.APP.sldBackOverhang.removeAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.removeAction(this.eventHandleId);\n //this.APP.sltRoofPitch.removeAction(this.eventHandleId);\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let height = this.utils.getHeightByAngle(UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetY = height/2;\n dimension.position.setY(dimOffsetY);\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n //let dimOffsetY = this.APP.sldBuildingHeight.currentValue / 2;\n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n // let offsetDimensionZ = this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // - this.APP.sldExistingWidth1.currentValue / 2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n // dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height - (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.dimensionPatiosLeftRight.position.y;\n dimension.position.setY(dimOffsetY);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { Box3, Group, Vector3 } from \"three\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport {\n PatiosManager,\n RafterBeamAndInternalBeamInfo,\n} from \"../patios.manager\";\nimport { ColumnAndBeamManager } from \"./column-and-beam.manager\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { RoofManager } from \"./roof.manager\";\n// import { environment } from 'src/environments/environment';\n\nexport class PatiosFlyOverManager implements PatiosManager {\n public columnAndBeamManager: ColumnAndBeamManager;\n public roofManager: RoofManager;\n private APP: AppComponent;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n public dimensionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public rafterBeamAndInternalBeamInfo: RafterBeamAndInternalBeamInfo = {\n numOfInternalRafter: 0,\n numOfSpanBeam: 0,\n numOfMultiSpanBeam: 0,\n };\n public ignoreBayEvent: boolean = false;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n this.patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndBeamManager = new ColumnAndBeamManager(app, this);\n this.dimensionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndBeamManager.optimize(),\n this.dimensionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndBeamManager.load();\n this.dimensionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsBack = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {}\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void {\n this.rafterBeamAndInternalBeamInfo = info;\n this.columnAndBeamManager.addEndRafterBeam(info);\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimensionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimensionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndBeamManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndBeamManager.load(),\n ]).then(() => {\n this.loadRafterBeamAndInternalBeam(this.rafterBeamAndInternalBeamInfo);\n this.boundingBox = this.getPatiosBox();\n this.dimensionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import {\n BoxBufferGeometry,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n MeshLambertMaterial,\n Object3D,\n Plane,\n Vector3,\n} from \"three\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { Util } from \"../utils\";\n// import { AppComponent } from \"../../app.component\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n RIBSPAN_BARGE_FIT,\n RIBSPAN_PANEL_WIDTH,\n} from \"src/app/app.constants\";\nimport HighLightBox from \"src/app-ribspan/models/HighlightBox\";\nimport { CSG } from \"three-csg-ts\";\nimport { PatiosFlyOverManager } from \".\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private roofGroup: Group;\n\n private objectSizeChangedHandle: any;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private eventHandleId: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n constructor(app: AppComponent, flyOverManager: PatiosFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = new Group();\n flyOverManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve) => {\n this.geo_RoofPanel = this.geometryManager.getRoofRibspanPanel();\n this.geo_RoofPanel.geometry.translate(-this.geo_RoofPanel.width / 2, this.geo_RoofPanel.height / 2, -this.geo_RoofPanel.length / 2);\n this.geo_RoofPanel.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_roofPanelBargeCappingLeft.width / 2 - 3,\n this.geo_roofPanelBargeCappingLeft.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_roofPanelBargeCappingLeft.length / 2\n );\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingRight.geometry.translate(\n -this.geo_roofPanelBargeCappingRight.width / 2 + 3,\n this.geo_roofPanelBargeCappingRight.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_roofPanelBargeCappingRight.length / 2\n );\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_roofPanelBargeCappingBack.length / 2,\n this.geo_roofPanelBargeCappingBack.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_roofPanelBargeCappingBack.width / 2 - 3\n );\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.geo_gutterBack.length / 2,\n -20,\n this.geo_gutterBack.width / 2\n );\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.gutterRakecutLeftInfo.length / 2,\n -20,\n this.gutterRakecutLeftInfo.width / 2\n );\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n -this.gutterRakecutRightInfo.length / 2,\n -20,\n this.gutterRakecutRightInfo.width / 2\n );\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_bargeCutoutLeftHor.length / 2,\n this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_bargeCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_bargeCutoutRightHor.length / 2,\n this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT,\n this.geo_bargeCutoutRightHor.width / 2\n );\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE\n )\n );\n\n //test\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"RAKECUT\")\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTGUTTER\")\n );\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.addRoof();\n this.addCutout();\n if (UI.rakeCutLeftType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft),\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT },\n });\n }\n if (UI.rakeCutRightType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT },\n });\n }\n\n // this.addAngleRakeCut();\n //Add angle rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n this.addAngleRakeCut(BUILDING_SIDE.LEFT);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n this.addAngleRakeCut(BUILDING_SIDE.RIGHT);\n }\n this.addStepRakeCut();\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [\n clipingPlaneLeft,\n clipingPlaneRight,\n ];\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.roofWidth = width;\n this.roofLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width / RIBSPAN_PANEL_WIDTH);\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n let panelDirectionOfset = 1;\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n } else if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT\n ) {\n offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n }\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, [this.csg_cutoutLeft]);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == 2 &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, [this.csg_cutoutRight]);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == 3 &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n } else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, null);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n this.addBargeCapping();\n this.addBargeStepRakecut();\n this.addGutter();\n this.addGutterStepRakecut();\n this.addGutterAngleRakecut();\n this.showPanelOutline();\n //this.getOutLines();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTOUT\")\n );\n\n let offsetX =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 100;\n let offsetY = 0;\n let offsetZ = UI.existingWidth1 / 2 - UI.existingWallW1.width - this.APP.eaveManager.backOverhang - UI.overhangBack;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue +\n this.APP.sldBackOverhang.currentValue +\n 5000) /\n 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (\n this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutLeft = new Mesh(\n this.geo_cutoutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutRight = new Mesh(\n this.geo_cutoutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n private addAngleRakeCut(cutSide: BUILDING_SIDE) {\n let offsetXL =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = -100;\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n // + this.APP.sldBackOverhang.currentValue\n this.extraOffsetZ -\n this.APP.sldExistingWidth1.currentValue / 2;\n //\n let angle;\n let _rotY;\n if (cutSide == BUILDING_SIDE.LEFT) {\n angle = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n _rotY = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n angle = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n _rotY = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n }\n const _offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let _angle = (Math.PI - _rotY) / 2;\n\n let hypotenuse = Math.sqrt(\n Math.pow(this.MANAGER.patiosLength, 2) +\n Math.pow(this.MANAGER.patiosWidth, 2)\n );\n let scaleLength = hypotenuse / 1000;\n let scaleWidth =\n (this.MANAGER.patiosLength * this.MANAGER.patiosWidth) /\n hypotenuse /\n 1000;\n //\n if (cutSide === BUILDING_SIDE.LEFT) {\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutLeft.rotateY(angle);\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n // this.APP.scene.add(this.mesh_rakecutLeft);\n\n //cut gutter csg\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterLeft1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft1.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft1.rotation.set(0, _angle, 0);\n this.meshCutGutterLeft1.updateMatrix();\n this.csgCutGutterLeft1 = CSG.fromMesh(this.meshCutGutterLeft1);\n // this.APP.scene.add(this.meshCutGutterLeft1);\n\n this.meshCutGutterLeft2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft2.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft2.rotation.set(0, _angle + Math.PI, 0);\n this.meshCutGutterLeft2.updateMatrix();\n this.csgCutGutterLeft2 = CSG.fromMesh(this.meshCutGutterLeft2);\n // this.APP.scene.add(this.meshCutGutterLeft2);\n }\n if (cutSide === BUILDING_SIDE.RIGHT) {\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutRight.rotateY(-angle);\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n // this.APP.scene.add(this.mesh_rakecutRight);\n\n //cut gutter\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterRight1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight1.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight1.rotation.set(0, -_angle, 0);\n this.meshCutGutterRight1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight1.updateMatrix();\n this.csgCutGutterRight1 = CSG.fromMesh(this.meshCutGutterRight1);\n\n this.meshCutGutterRight2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight2.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight2.rotation.set(0, -(_angle + Math.PI), 0);\n this.meshCutGutterRight2.updateMatrix();\n this.csgCutGutterRight2 = CSG.fromMesh(this.meshCutGutterRight2);\n }\n }\n private addStepRakeCut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100; //this.APP.sldExistingWallHeight.currentValue;\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n this.extraOffsetZ -\n this.APP.sldExistingWidth1.currentValue / 2;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(5, 5, 5);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(5, 5, 5);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n public getOutLines(): Printing2DGeometry {\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n // if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add(line);\n // // let boxPost = new Box3().setFromObject(o);\n // // console.log('😋: RoofManager -> getOutLines -> boxPost', boxPost.min.distanceTo(boxPost.max));\n // }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views,\n });\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false) return;\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n //let outlineBox = new Box3().setFromBufferAttribute(outlineGeo.getAttribute('position') as Buffer);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().MESH_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n return simplifiedGeo;\n }\n //private getBracketHeight(offset): number{\n // let angle = this.APP.sltRoofPitch.currentValue;\n // return (this.APP.sldFlyOverBracketHeight.currentValue) - this.utils.tan(angle) * offset;\n //}\n\n public addRoof() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PATIOS,\n };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldBackOverhang.currentValue +\n this.extraOffsetZ\n );\n\n this.roofGroup.position.setY(offsetY);\n this.roofGroup.position.setZ(offsetZ);\n this.roofGroup.rotateX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(-offsetX);\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(offsetX);\n }\n\n this.scene.add(this.roofGroup);\n }\n public addRoofSheeting(offsetX: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let scaleZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_RoofPanel.length;\n\n let offsetY = 0;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL,\n views: views,\n };\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n let buferGeo = new BufferGeometry().fromGeometry((meshResult as Mesh).geometry as Geometry);\n this.utils.changeGeoColor(buferGeo, new Vector3(0, 1, 0), UI.roofColor.toString());\n let newGeo = new Geometry().fromBufferGeometry(buferGeo);\n (meshResult as Mesh).geometry = newGeo;\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n private addBargeCapping() {\n let mesh: Mesh;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth;\n let offsetXL2 = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n let offsetXR1 =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n let offsetXR2 =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n let bargeBackLength = this.roofWidth;\n let scaleCutoutVer =\n this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue +\n this.geo_roofPanelBargeCappingLeft.width,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZLeft =\n this.utils.getHypotenuseByCos(\n this.roofLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight =\n this.utils.getHypotenuseByCos(\n this.roofLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n let offsetY = 0;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n // cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeLeftLength -= this.APP.sldExistingWidth1.currentValue;\n scaleZLeft =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeCutoutHorLength =\n this.APP.sldExistingLength2.currentValue +\n this.APP.sldLeftOverhang.currentValue -\n extraWallWidth;\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetXB += this.APP.sldExistingLength2.currentValue;\n offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue;\n bargeBackLength -= this.APP.sldExistingLength2.currentValue;\n bargeCutoutHorLength += extraWallWidth;\n } else {\n bargeBackLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n offsetXB += this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n\n offsetZL += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXL1 =\n -this.APP.sldExistingLength.currentValue / 2 - extraWallWidth;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n bargeBackLength -= this.APP.sldLeftOverhang.currentValue;\n offsetXL1 +=\n this.APP.sldLeftOverhang.currentValue -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n offsetXB += this.APP.sldLeftOverhang.currentValue;\n\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout Ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeRightLength -= this.APP.sldExistingWidth1.currentValue;\n let bargeCutoutHorLength =\n this.APP.sldExistingLength2.currentValue +\n this.APP.sldRightOverhang.currentValue -\n extraWallWidth;\n //scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue + extraWallWidth) / this.geo_roofPanelBargeCappingBack.length;\n //bargeBackLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n scaleZRight =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingRight.length;\n offsetZR += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n //scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue) / this.geo_roofPanelBargeCappingBack.length;\n bargeBackLength -= this.APP.sldExistingLength2.currentValue;\n offsetXR1 -= extraWallWidth;\n\n bargeCutoutHorLength += extraWallWidth;\n } else {\n bargeBackLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXR1 =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n bargeBackLength -= this.APP.sldRightOverhang.currentValue;\n offsetXR1 -=\n this.APP.sldRightOverhang.currentValue -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutRightHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetXB = -this.APP.sldExistingLength.currentValue / 2 - extraWallWidth;\n //scaleXB = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2 + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK*2)/this.geo_roofPanelBargeCappingBack.length;\n bargeBackLength =\n this.APP.sldExistingLength.currentValue + extraWallWidth * 2;\n }\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n }\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n }\n\n scaleZLeft =\n this.utils.getHypotenuseByCos(\n bargeLeftLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n scaleZRight =\n this.utils.getHypotenuseByCos(\n bargeRightLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //right\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //back\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingBack.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(offsetXB);\n mesh.scale.setX(\n bargeBackLength / this.geo_roofPanelBargeCappingBack.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n // private addBargeAngleRakecut() {\n // if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE) {\n // return;\n // }\n\n // let offsetY = 0;\n // let offsetZ = (this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // + this.APP.sldBackOverhang.currentValue) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n // let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n // ];\n\n // if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n // let length = Math.sqrt(Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) + Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2));\n // let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n // let rotY = Math.atan(this.APP.sldLeftCutHorizontal.currentValue / this.APP.sldLeftCutVertical.currentValue);\n\n // let offsetX = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue + this.APP.sldLeftCutHorizontal.currentValue;\n // let mesh = new Mesh(this.geo_bargeRakecutLeft.geometry, MaterialManager.Instance().BARGE);\n // mesh.position.set(offsetX, offsetY, offsetZ);\n // mesh.scale.setZ(scaleZ);\n // mesh.rotateY(rotY);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // this.roofGroup.add(mesh);\n // }\n // if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n // let length = Math.sqrt(Math.pow(this.APP.sldRightCutVertical.currentValue, 2) + Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2));\n // let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n // let rotY = Math.atan(this.APP.sldRightCutHorizontal.currentValue / this.APP.sldRightCutVertical.currentValue);\n\n // let offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldRightCutHorizontal.currentValue;\n // let mesh = new Mesh(this.geo_bargeRakecutRight.geometry, MaterialManager.Instance().BARGE);\n // mesh.position.set(offsetX, offsetY, offsetZ);\n // mesh.scale.setZ(scaleZ);\n // mesh.rotateY(-rotY);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // this.roofGroup.add(mesh);\n // }\n // }\n private addGutterStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n let mesh: Mesh;\n\n let offsetXLL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXLR = offsetXLL + this.APP.sldLeftCutHorizontal.currentValue;\n let offsetXRR = this.totalBaySize / 2 + UI.overhangRight;\n let offsetXRL = offsetXRR - this.APP.sldRightCutHorizontal.currentValue;\n let offsetY = 0;\n let offsetLZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n 50) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let offsetRZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n 50) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let gutterLengthL = this.APP.sldLeftCutHorizontal.currentValue;\n let gutterLengthR = this.APP.sldRightCutHorizontal.currentValue;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleX = gutterLengthL / this.geo_gutterBack.length;\n mesh = new Mesh(\n this.geo_gutterBack.geometry,\n MaterialManager.Instance().GUTTER\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n mesh.position.set(offsetXLL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let endCapMesh = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh.position.set(offsetXLL, 0, 0);\n\n let endCapMesh2 = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh2.position.set(offsetXLR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(0, offsetY, offsetLZ);\n gutterGroup.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n this.roofGroup.add(gutterGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleX = gutterLengthR / this.geo_gutterBack.length;\n mesh = new Mesh(\n this.geo_gutterBack.geometry,\n MaterialManager.Instance().GUTTER\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n mesh.position.set(offsetXRL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let endCapMesh = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh.position.set(offsetXRL, 0, 0);\n\n let endCapMesh2 = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh2.position.set(offsetXRR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(0, offsetY, offsetRZ);\n gutterGroup.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n this.roofGroup.add(gutterGroup);\n }\n }\n private addGutterAngleRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let exLength = 300;\n let rc_offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let rc_offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const rc_offsetZL =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetZR =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetY = 0;\n\n let rc_rotYL = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let rc_lengthL =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let rc_rotYR = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let rc_lengthR =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterRakecutGroupLeft = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n let gutterRakecutGroupRight = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroupLeft, gutterRakecutGroupRight);\n } else {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n }\n }\n private addBargeStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n this.APP.sldLeftCutVertical.currentValue /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL -\n CONST.BARGE_ROOF_OFFSET_X +\n this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZ\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n this.roofGroup.add(bargeVer);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n this.APP.sldRightCutVertical.currentValue /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR -\n this.APP.sldRightCutHorizontal.currentValue +\n CONST.BARGE_ROOF_OFFSET_X,\n 0,\n offsetZ\n );\n bargeVer.scale.set(1, 1, scaleZ);\n this.roofGroup.add(bargeVer);\n }\n }\n public addGutter() {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetY = 0;\n let offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let gutterLength = this.roofWidth;\n let exLength = 300; //Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n //Rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue - exLength;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterMesh = new Mesh(\n this.geo_gutterBack.geometry,\n MaterialManager.Instance().GUTTER\n );\n gutterMesh.scale.setX(gutterLength / this.geo_gutterBack.length);\n gutterMesh.updateMatrix();\n let matrixBefore = gutterMesh.matrix.clone();\n\n gutterMesh.position.set(offsetXL, offsetY, offsetZ);\n gutterMesh.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n gutterMesh.updateMatrix();\n\n let meshClipped = CSG.toMesh(\n CSG.fromMesh(gutterMesh).subtract(this.csgCutGutterLeft1),\n gutterMesh.matrix\n );\n meshClipped = CSG.toMesh(\n CSG.fromMesh(meshClipped).subtract(this.csgCutGutterRight1),\n gutterMesh.matrix\n );\n meshClipped.applyMatrix4(new Matrix4().getInverse(gutterMesh.matrix));\n meshClipped.applyMatrix4(matrixBefore);\n meshClipped.material = gutterMesh.material;\n\n let gutterGroup = this.utils.createGutterGroupWithMesh(\n meshClipped,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n false\n );\n\n this.roofGroup.add(gutterGroup);\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterBack,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n true,\n this.csgCutGutterLeft1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterBack,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n } else {\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterBack,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n this.roofGroup.add(gutterGroup);\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n\n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n public getRoofOffsetY() {\n return (\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geometryManager.getBeam().height +\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldBackOverhang.currentValue\n );\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public onColorChanged() {\n if(this.utils && this.geo_RoofPanel.geometry){\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged() {\n this.optimize().then(() => {\n this.load();\n });\n }\n public uiChanged(): void {\n this.load();\n }\n uiCHangedDefer() {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n BufferGeometry,\n Box3,\n Group,\n LineSegments,\n LineBasicMaterial,\n Plane,\n Vector3,\n BoxHelper,\n Geometry,\n BoxBufferGeometry,\n Object3D,\n Matrix4,\n Color,\n} from \"three\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"src/app/app.config\";\nimport {\n GeometryInfo,\n Printing2DGeometry,\n Printing2DLine,\n Printing2DGeometryType,\n Print2DView,\n ViewType,\n LineType,\n} from \"src/app/core/models\";\nimport { PatiosFreeStandingManager } from \".\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\nimport { EXISTING_BUILDING_CONFIG } from \"src/app/app.constants\";\n\nexport class ColumnAndPurlinManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private eventHandleId: any;\n private totalBaySize: number;\n private frontPostHeight: number;\n\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroup: Group;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private MANAGER: PatiosFreeStandingManager;\n\n constructor(app: AppComponent, manager: PatiosFreeStandingManager) {\n this.APP = app;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.MANAGER = manager;\n this.scene = manager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroup.children = [];\n\n // this.outlineGroup = new Group();\n // this.outlineGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.MESH_OUTLINE };\n // this.scene.add(this.outlineGroup);\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPost(offsetX, { back: true, first, last });\n this.addPost(offsetX, { front: true, first, last });\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addPost(offsetX, { multiSpan: true, first, last });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n this.showBeamOutline();\n this.addDownPipe();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addEndRafterBeam(info: any) {\n const { numOfInternalRafter, numOfSpanBeam, numOfMultiSpanBeam } = info;\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n );\n // Add end rafter for two end side\n // Left side\n this.addRafterSuperiorBeam(-this.totalBaySize / 2, {\n span: true,\n first: true,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(-this.totalBaySize / 2, {\n multiSpan: true,\n first: true,\n last: false,\n });\n }\n\n // Right side\n this.addRafterSuperiorBeam(this.totalBaySize / 2, {\n span: true,\n first: false,\n last: true,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(this.totalBaySize / 2, {\n multiSpan: true,\n first: false,\n last: true,\n });\n }\n\n this.addInternalRafterBeam(\n numOfInternalRafter,\n numOfSpanBeam,\n numOfMultiSpanBeam\n );\n }\n private addInternalRafterBeam(\n numOfRafter: number,\n numOfSpanBeam: number,\n numOfMultiSpanBeam: number\n ) {\n let offsetX = -this.totalBaySize / 2;\n\n const mainRoofLeft = offsetX;\n const mainRoofRight = offsetX + UI.totalBayLength;\n const listRafterPos = [];\n const rafterSpacing = UI.totalBayLength / (numOfRafter + 1);\n for (let i = 0; i < numOfRafter; i++) {\n const offsetXRafter = offsetX + (i + 1) * rafterSpacing;\n\n listRafterPos.push({\n offsetX: offsetXRafter,\n isMainRoof:\n offsetXRafter >= mainRoofLeft && offsetXRafter <= mainRoofRight,\n });\n }\n\n listRafterPos.forEach((el) => {\n this.addRafterSuperiorBeam(el.offsetX, {\n span: true,\n first: false,\n last: false,\n });\n if (UI.multiSpan) {\n this.addRafterSuperiorBeam(el.offsetX, {\n multiSpan: true,\n first: false,\n last: false,\n });\n }\n });\n\n // Add internal beam in here\n this.addInternalBeam(numOfRafter, numOfSpanBeam, numOfMultiSpanBeam);\n }\n private addInternalBeam(\n numOfRafter: number,\n numOfSpanBeam: number = 0,\n numOfMultiSpanBeam: number = 0\n ) {\n if (UI.span > 0) {\n const internalBeamSpacing = UI.span / (numOfSpanBeam + 1);\n for (let i = 0; i < numOfSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n numOfRafter,\n internalBeamSpacing * (i + 1)\n );\n }\n }\n if (UI.multiSpan > 0) {\n const internalBeamSpacing = UI.multiSpan / (numOfMultiSpanBeam + 1);\n for (let i = 0; i < numOfMultiSpanBeam; i++) {\n this.addInternalSuperiorBeam(\n numOfRafter,\n UI.span + internalBeamSpacing * (i + 1)\n );\n }\n }\n }\n public addInternalSuperiorBeam(numOfRafter: number, offsetZ: number) {\n const rafterSpacing = this.totalBaySize / (numOfRafter + 1);\n const beamWidth = this.geo_superiorBeam.width;\n for (let i = 0; i <= numOfRafter; i++) {\n let startX = -this.totalBaySize / 2 + i * rafterSpacing;\n let endX = -this.totalBaySize / 2 + (i + 1) * rafterSpacing;\n\n if (i == 0) {\n startX += beamWidth;\n } else {\n startX += beamWidth / 2;\n }\n\n if (i == numOfRafter) {\n endX -= beamWidth;\n } else {\n endX -= beamWidth / 2;\n }\n\n let scaleX = Math.abs(endX - startX) / this.geo_superiorBeam.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const offsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n offsetZ + beamWidth / 2,\n UI.patiosPitch,\n -1\n );\n\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n mesh.position.set(startX, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capL.position.set(\n startX + this.geo_beamEndCap.length / 2 - 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone()\n );\n capR.position.set(\n endX - this.geo_beamEndCap.length / 2 + 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM,\n views: views,\n };\n beamGroup.position.set(0, offsetY, offsetZ - beamWidth / 2);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n }\n /**\n *\n * @param offsetX : Position x of rafter beam\n */\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n let mesh;\n let offsetXL = 0;\n let offsetXR =\n (this.APP.sldSpan.currentValue -\n (UI.multiSpan\n ? this.geo_superiorBeam.width * 1.5\n : this.geo_superiorBeam.width * 2)) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n if (userDataPos.multiSpan) {\n offsetXR =\n (UI.multiSpan - this.geo_superiorBeam.width * 1.5) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n }\n\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (UI.span -\n (UI.multiSpan\n ? this.geo_superiorBeam.width * 1.5\n : this.geo_superiorBeam.width * 2)) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n if (userDataPos.multiSpan) {\n scaleX =\n (UI.multiSpan - this.geo_superiorBeam.width * 1.5) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n }\n\n scaleX +=\n (this.geo_RafterBeam.height * this.utils.tan(UI.patiosPitch)) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let material = MaterialManager.Instance().BEAM.clone();\n material.color = new Color(UI.beamColor);\n if (userDataPos.span) {\n let nBottom = new Vector3(0, 0, -1).normalize();\n let pBottom = new Vector3(0, 0, UI.span);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, this.geo_superiorBeam.width);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n this.APP.sldBuildingHeight.currentValue -\n (UI.span -\n (UI.multiSpan\n ? this.geo_superiorBeam.width / 2\n : this.geo_superiorBeam.width)) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n this.APP.sldSpan.currentValue -\n (UI.multiSpan\n ? this.geo_superiorBeam.width / 2\n : this.geo_superiorBeam.width);\n } else if (userDataPos.multiSpan) {\n let nBottom = new Vector3(0, 0, -1).normalize();\n let pBottom = new Vector3(\n 0,\n 0,\n UI.span + UI.multiSpan - this.geo_superiorBeam.width\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, UI.span + this.geo_superiorBeam.width / 2);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n this.APP.sldBuildingHeight.currentValue -\n (UI.span + UI.multiSpan - this.geo_superiorBeam.width) *\n this.utils.tan(UI.patiosPitch);\n offsetZ = UI.span + UI.multiSpan - this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n let higherBraketName = getBeamEndCapCode(\n this.geo_rafterBeamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n );\n\n let capL;\n let capR;\n if (userDataPos.span) {\n let matEndCap = UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone();\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: higherBraketName,\n };\n } else {\n let matEndCap = UI.beamLayoutShow\n ? MaterialManager.Instance().BRACKET_WARNING.clone()\n : MaterialManager.Instance().BEAM.clone();\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: higherBraketName,\n };\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n let offsetXRafter = offsetX;\n if (userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width;\n } else if (!userDataPos.first && !userDataPos.last) {\n offsetXRafter = offsetX - this.geo_RafterBeam.width / 2;\n }\n beamGroup.position.set(offsetXRafter, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n beamGroup.rotateZ(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n\n this.scene.add(beamGroup);\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n private addDownPipe() {\n let offsetZ =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + 100;\n let offsetX = -this.totalBaySize / 2 + 50;\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n let offsetY =\n this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue,\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n ) + this.geometryManager.getRoofBase().height;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n if (this.APP.sldFrontOverhang.currentValue > 100) {\n offsetY -= 250;\n\n let meshLBottom = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, offsetY, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(\n 0,\n offsetY + 230,\n this.APP.sldFrontOverhang.currentValue - 100\n );\n\n let meshPipeConnect = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, offsetY + 115, 50);\n meshPipeConnect.scale.set(\n 1,\n (this.APP.sldFrontOverhang.currentValue - 140) /\n this.geo_downPipe.height,\n 1\n );\n\n this.downpipeGroup.add(meshLBottom, meshLTop, meshPipeConnect);\n }\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeGroup.add(meshPipe);\n }\n private addGround() {\n let offsetZ = -this.APP.sldBackOverhang.currentValue;\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n let offsetX =\n (this.APP.sldRightOverhang.currentValue -\n this.APP.sldLeftOverhang.currentValue) /\n 2;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPost(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let postOffsetZ = 0;\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n postOffsetZ = this.APP.sldSpan.currentValue;\n this.frontPostHeight = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n\n scalePostY = this.frontPostHeight / this.geo_superiorPost.height;\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ = 0;\n scalePostY =\n (this.APP.sldBuildingHeight.currentValue -\n this.geo_superiorBeam.height) /\n this.geo_superiorPost.height;\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorPost.width;\n scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue -\n this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n ) / this.geo_superiorPost.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n\n let postOffsetX = offsetX;\n\n // Dodge beam\n if (userDataPos.first) {\n postOffsetX += this.geo_superiorBeam.width;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_superiorPost.width + this.geo_superiorBeam.width;\n } else {\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addSuperiorBeam(userDataPos: any) {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue +\n (UI.multiSpan ? this.geo_superiorBeam.width / 2 : 0),\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n\n //this.APP.sldBuildingHeight.currentValue + this.getBracketHeight(this.APP.sldSpan.currentValue);\n offsetZ = this.APP.sldSpan.currentValue;\n if (this.APP.sldMultiSpan.currentValue > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.geo_superiorBeam.height -\n this.geo_superiorBeam.width * this.utils.tan(UI.patiosPitch);\n offsetZ = 0;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n offsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorBeam.width;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n let beamGroups = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n );\n let beamObjs: Object3D[] = [];\n for (let g of beamGroups) {\n beamObjs = beamObjs.concat(g.children);\n }\n\n objs = [...objs, ...beamObjs];\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n if (\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n ) {\n o.updateMatrix();\n\n let objCloned = o.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(o.matrix));\n\n const planView = _.find(\n o.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n if (planView) {\n this.utils.getPlanVerticesOfBeam(o as Mesh, lsGeometries, [planView]);\n }\n\n let box = new BoxHelper(objCloned);\n o.updateWorldMatrix(true, true);\n box.geometry.applyMatrix4(o.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: _.filter(\n o.userData.views,\n (el) => el.viewType != ViewType.PLAN\n ),\n });\n } else {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n return lineGeo;\n }\n\n private getBracketHeight(offset): number {\n let angle = this.APP.sltRoofPitch.currentValue;\n return (\n this.APP.sldFlyOverBracketHeight.currentValue -\n this.utils.tan(angle) * offset\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n this.MANAGER.loadRafterBeamAndInternalBeam(\n this.MANAGER.rafterBeamAndInternalBeamInfo\n );\n });\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from 'src/app/core/models';\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { UI } from \"../ui\";\nimport { PatiosFreeStandingManager } from \".\";\nimport { FIT_DIMENSION } from \"src/app/app.constants\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n private MANAGER: PatiosFreeStandingManager;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosHigherHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, freeStandingManager: PatiosFreeStandingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n\n this.MANAGER = freeStandingManager;\n\n this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = new GeometryInfo();\n this.lineGeo.geometry = new PlaneBufferGeometry(1000, 50);\n this.lineGeo.width = 50;\n this.lineGeo.length = 1000;\n\n this.lineCapGeo = new GeometryInfo();\n this.lineCapGeo.geometry = new PlaneBufferGeometry(50, 200);\n this.lineCapGeo.width = 50;\n this.lineCapGeo.length = 200;\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosHigherHeightDim = new Group();\n this.dimensionPatiosHigherHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosHigherHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.scene.add(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n\n loader.load( environment.modelBaseUrl + '/../assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n\n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n }\n \n public draw(){\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosHigherHeightDim.children = this.dimensionPatiosHigherHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionHigherHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim(){\n const frontPostHeight = this.utils.getHeightByAngle(UI.height - this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height, UI.span + UI.multiSpan, UI.patiosPitch, -1)\n const offsetZFrontPos = UI.span + UI.multiSpan + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, frontPostHeight / 2, offsetZFrontPos);\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionHigherHeightDim(){\n const backPostHeight = UI.height - this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height\n const offsetZBackPos = - FIT_DIMENSION;\n\n this.dimensionPatiosHigherHeightDim.position.set(0, backPostHeight / 2, offsetZBackPos);\n\n let textStr = this.utils.getDimensionValue(backPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: backPostHeight,\n container: this.dimensionPatiosHigherHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n textRotation: new Vector3(Math.PI, 0, 0),\n labelType: DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosHigherHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x;\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2 - this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, 0) };\n //text.position.setZ(-100);\n text.position.setX(100);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n\n if (this.APP.sltExistingType.currentValue == 2) {\n text.position.set(-100, 0, 1000);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + ' degree';\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n \n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, Math.PI / 2, 0) };\n text.position.setZ(900);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n\n //console.log(text);\n }\n\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize/2;\n let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2;\n \n\n let _dimensionDistane = this.dimensionDistance2;\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // if(this.APP.sldExistingWidth1.currentValue > 0){\n // _dimensionDistane = this.dimensionDistance;\n // }\n // }\n\n let offsetDimensionX = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n // }\n\n this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height/2;\n if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n dimOffsetX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n }\n \n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX,dimOffsetY,0);\n \n\n //--------\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,0,0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight(){\n let dimOffsetY = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n \n\n this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n \n let scaleLength = dimOffsetY / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(dimOffsetY);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text);\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(0,0,0);\n \n this.dimensionPatiosRightBottom.add(dim);\n }\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n let dimOffsetY = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n this.dimensionPatiosRightLeft.add(dim);\n }\n });\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){ \n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n \n \n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children\n ]){\n if(!dim.userData.views){\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n \n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n \n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n \n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n \n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n \n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n \n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n \n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n \n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n \n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId)); \n }\n private unregisterEvent(): void{\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n}\n","import { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { ColumnAndPurlinManager } from './column-and-purlin.manager';\nimport { RoofManager } from './roof.manager';\nimport { PatiosManager, RafterBeamAndInternalBeamInfo } from '../patios.manager';\nimport { Printing2DGeometry } from 'src/app/core/models';\nimport { Group, Box3 } from 'three';\nimport { GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { DimensionManager } from './dimension.manager';\n\nexport class PatiosFreeStandingManager implements PatiosManager{\n patiosGroup: Group;\n public boundingBox: Box3;\n public columnAndPurlinManager: ColumnAndPurlinManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public cutoutCondition: boolean;\n public get rakecutCondition(): boolean{\n return true;\n }\n public rafterBeamAndInternalBeamInfo: RafterBeamAndInternalBeamInfo = {\n numOfInternalRafter: 0,\n numOfSpanBeam: 0,\n numOfMultiSpanBeam: 0,\n }\n public ignoreBayEvent: boolean = false;\n public patiosWidth: number;\n public patiosLength: number;\n public firstLoad = true;\n private controlsToRegisterEvent: Array;\n private APP: AppComponent;\n private updateEventHandle: any;\n\n constructor(app: AppComponent){\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS }\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndPurlinManager = new ColumnAndPurlinManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndPurlinManager.optimize(),\n this.dimesionManager.optimize()\n ])\n .then(() => {\n this.roofManager.load();\n this.columnAndPurlinManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n \n }\n loadBracketCutout(bracketQuantity: number): void{\n \n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n enableCutout(enable: boolean){\n \n }\n changeToExistingTypeBoth(){\n \n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void{\n this.rafterBeamAndInternalBeamInfo = info\n this.columnAndPurlinManager.addEndRafterBeam(info)\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return { \n lines: [\n ...this.columnAndPurlinManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines\n ], \n texts: dimensionOutline.texts\n }\n }\n public destroy(): void {\n this.columnAndPurlinManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.update.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness, \n this.APP.sltGutterType,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWallHeight,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltColourBeam,\n this.APP.sltBeamSize,\n this.APP.btnTurnOnPanel\n ];\n this.controlsToRegisterEvent.forEach(c => { c.addAction(this.updateEventHandle); });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.updateEventHandle));\n }\n update(preVal: number, curVal: number): void {\n this.patiosGroup.position.setX(0);\n Promise.all([\n this.roofManager.load(),\n this.columnAndPurlinManager.load()\n ]).then(() => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n //this.boundingBox = this.getPatiosBox();\n this.loadRafterBeamAndInternalBeam(this.rafterBeamAndInternalBeamInfo)\n this.dimesionManager.draw();\n })\n }\n}\n","import { Scene, Mesh, Vector3, Material, Plane, Group, PlaneHelper, BufferGeometry, Geometry, LineSegments, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Printing2DGeometryType, Print2DView, ViewType, LineType } from 'src/app/core/models';\nimport { PatiosFreeStandingManager } from '.';\nimport { PANEL_DIRECTION, RIBSPAN_BARGE_FIT, RIBSPAN_PANEL_WIDTH } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosFreeStandingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n\n private roofGroup: Group;\n\n private eventHandleId: any;\n\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n\n constructor(app: AppComponent, freeStandingManager: PatiosFreeStandingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = freeStandingManager;\n this.scene = new Group();\n freeStandingManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n \n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.geo_RoofPanel = this.geometryManager.getRoofRibspanPanel();\n this.geo_RoofPanel.geometry\n .translate(-this.geo_RoofPanel.width / 2, this.geo_RoofPanel.height / 2, -this.geo_RoofPanel.length / 2);\n this.geo_RoofPanel.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n \n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingLeft.width/2 - 3,this.geo_roofPanelBargeCappingLeft.height/2 - RIBSPAN_BARGE_FIT,this.geo_roofPanelBargeCappingLeft.length/2);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .translate(-this.geo_roofPanelBargeCappingRight.width/2 + 3,this.geo_roofPanelBargeCappingRight.height/2 - RIBSPAN_BARGE_FIT,this.geo_roofPanelBargeCappingRight.length/2);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI/2)\n .translate(this.geo_roofPanelBargeCappingBack.length/2,this.geo_roofPanelBargeCappingBack.height/2 - RIBSPAN_BARGE_FIT,this.geo_roofPanelBargeCappingBack.width/2 - 3);\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI/2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n \n this.addRoof();\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n \n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n\n let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width/RIBSPAN_PANEL_WIDTH);\n let offsetX = -(this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue);\n\n //panel direction\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n const OFFSET_TOLE_AND_BASE = 10\n\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n \n this.addRoofSheeting(offsetX + OFFSET_TOLE_AND_BASE);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n\n this.addBargeCapping();\n this.addGutter();\n //this.getOutLines();\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n \n let objs = this.roofGroup.children.filter(o => \n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL \n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE \n );\n\n let gutterObjs = this.roofGroup.children.find(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).children;\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0,5000,0); \n\n if(o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE){\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n \n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n \n let objs = this.roofGroup.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n \n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n \n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n \n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n \n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n \n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n } \n public addRoof(){\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(this.APP.sldBackOverhang.currentValue);\n\n this.roofGroup.position.setY(offsetY);\n this.roofGroup.position.setZ(offsetZ);\n this.roofGroup.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroup);\n }\n public addRoofSheeting(offsetX: number){\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n \n let scaleZ = (this.APP.sldSpan.currentValue \n + this.APP.sldFrontOverhang.currentValue \n + this.APP.sldBackOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_RoofPanel.length;\n \n let offsetY = 0;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL, views: views };\n \n this.roofGroup.add(mesh);\n }\n private addBargeCapping(){\n let mesh: Mesh;\n\n let offsetLeft = this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue;\n\n let scaleX = (this.APP.sldLeftOverhang.currentValue \n + this.totalBaySize \n + this.APP.sldRightOverhang.currentValue)/this.geo_roofPanelBargeCappingBack.length;\n let scaleZ = (this.APP.sldSpan.currentValue \n + this.APP.sldFrontOverhang.currentValue \n + this.APP.sldBackOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_roofPanelBargeCappingLeft.length;\n\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(-offsetLeft);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(offsetRight);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n\n //back\n mesh = new Mesh(this.geo_roofPanelBargeCappingBack.geometry, MaterialManager.Instance().BARGE); \n mesh.position.setX(-offsetLeft);\n mesh.scale.setX(scaleX);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n }\n\n public addGutter(){\n let mesh: Mesh;\n \n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = 0;\n let offsetZ = (this.APP.sldFrontOverhang.currentValue \n + this.APP.sldMultiSpan.currentValue \n + this.APP.sldSpan.currentValue\n + this.APP.sldBackOverhang.currentValue\n - 50)/this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue)/this.geo_gutterBack.length;\n \n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n \n let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh.position.set(offsetXL, 0, 0);\n\n let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh2.position.set(offsetXR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n gutterGroup.position.set(0, offsetY, offsetZ);\n gutterGroup.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n this.roofGroup.add(gutterGroup);\n }\n public getRoofOffsetY() {\n return this.APP.sldBuildingHeight.currentValue\n //+ this.geometryManager.getBeam().height\n + this.utils.tan(this.APP.sltRoofPitch.currentValue)*this.APP.sldBackOverhang.currentValue;\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public onColorChanged() {\n if(this.utils && this.geo_RoofPanel.geometry){\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void{\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number){\n this.optimize().then(() => { this.load() });\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, Line3, BufferGeometry, Points, PointsMaterial } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from 'src/app/core/models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { GableFBExistingBuildingManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: GableFBExistingBuildingManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n private geometryManager: GeometryManager;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any\n private textParameter: any;\n\n private isReady = false;\n\n private box: Box3;\n\n private controlsToRegisterEvent: Array;\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, manager: GableFBExistingBuildingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n\n //this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI / 2, Math.PI, -Math.PI / 2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n \n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n \n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n \n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n this.isReady = true;\n this.draw();\n\n\n resolve();\n })\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.map(b => b.value).reduce((sum, current) => sum + current);\n // for (let b of this.APP.dialogEditBay.listBay) {\n // this.totalBaySize += b.value;\n // }\n\n this.box = this.utils.getSceneBox();\n // let boxHelper = new Box3Helper(this.MANAGER.boundingBox);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.scene.add(boxHelper);\n\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n // this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // //let existingHouseDimBox = new Box3().setFromObject(existingHouseDimLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetZ = - UI.existingWidth1 / 2 + this.totalBaySize + UI.overhangFront;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI, 0);\n }\n else {\n let offsetZ = - UI.existingWidth1 / 2;\n this.dimensionPlanMidleLeft.rotation.set(0, 0, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 + this.totalBaySize / 2;\n this.dimensionPlanMiddle.rotation.set(0, 0, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneRotation: new Vector3(0, 0, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, 0, 0)\n }\n let dimSpan = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let offsetDimensionZ = this.totalBaySize / 2\n - this.APP.sldExistingWidth1.currentValue / 2;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n\n this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetX = -this.totalBaySize / 2;\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true }, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textRotation: new Vector3(0, - Math.PI, 0),\n fitZ: -10\n }\n let dimBay = this.dimensionPatiosPlanRight.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n let offsetRight = this.totalBaySize / 2 ;\n let offsetLeft = this.totalBaySize / 2;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT);\n }\n \n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(UI.height, UI.span / 2, UI.patiosPitch, 1);\n let dimOffsetX = this.box.max.x;\n //let dimOffsetX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height / 2;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // dimOffsetX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //-------- \n let scaleLength = height / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, -Math.PI / 2) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = this.utils.getHeightByAngle(UI.height, UI.span / 2, UI.patiosPitch, 1);\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2;\n if(this.APP.sldExistingWidth1.currentValue + this.APP.sldExistingWidth2.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue){\n dimOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue + this.dimensionDistance2 - 290;\n }\n if(this.APP.sldExistingLength2.currentValue > 0){\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY = this.utils.getHeightByAngle(UI.height, UI.span / 2, UI.patiosPitch, 1);\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z;//this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2;\n //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n\n\n this.APP.sldEaveWidth\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n \n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n // patiosBox = this.APP.utils.getObjectsBoundingBox(\n // this.MANAGER.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n\n // let patiosBoxHelper = new Box3Helper(patiosBox);\n // patiosBoxHelper.userData = {type: location};\n // this.scene.add(patiosBoxHelper);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n \n // for(let i = 0; i < 100; i++){\n // let intersectBox = false;\n // for(let o of objs){\n // let objBox = this.APP.utils.getObjectBoundingBox(o);\n // if(dimBox.intersectsBox(objBox)){\n // intersectBox = true;\n // dimBox.translate(new Vector3(100,0,0))\n // }\n // }\n \n // if(!intersectBox)\n // break;\n // }\n\n \n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n dimBox.translate(new Vector3(objBox.max.x - dimBox.min.x,0,0));\n }\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z);\n }\n }\n}\n","import { PostAndBeamManager } from './post-and-beam.manager';\nimport { RoofManager } from './roof.manager';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { PatiosManager, RafterBeamAndInternalBeamInfo } from '../patios.manager';\nimport { Printing2DGeometry } from 'src/app/core/models';\nimport { Group, Box3, Vector3 } from 'three';\nimport { GEOMETRY_CATEGORY, OFFSET_GUTTER_TO_WALL } from 'src/app/app.config';\nimport { DimensionManager } from './dimension.manager';\nimport { CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG, RAKECUT_TYPE } from 'src/app/app.constants';\nimport { UI } from '../ui';\n\nexport class GableFBExistingBuildingManager implements PatiosManager{\n private APP: AppComponent;\n patiosGroup: Group;\n public boundingBox: Box3;\n private postAndBeamManager: PostAndBeamManager;\n private roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n \n private updateEventHandle: any;\n private controlsToRegisterEvent: Array;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public get cutoutCondition(): boolean {\n return [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang\n ].map(x => x.currentValue).reduce((a, b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n };\n public get rakecutCondition(): boolean{\n let patiosWidth = this.APP.dialogEditBay.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let patiosLength = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public patiosLength: number;\n public patiosWidth: number;\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS }\n app.scene.add(this.patiosGroup);\n \n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize()\n ])\n .then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n \n }\n loadBracketCutout(bracketQuantity: number): void{\n \n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void{\n \n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sldBuildingHeight,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.btnTurnOnPanel\n ];\n this.controlsToRegisterEvent.forEach(c => { c.addAction(this.updateEventHandle); });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.updateEventHandle));\n }\n updateDefer(previousValue: number, currentValue: number) {\n if(this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES || this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.update(previousValue, currentValue) }, this.deferTimeout);\n }\n else{\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n \n let diff = this.APP.sldExistingLength.currentValue - UI.span;\n \n this.patiosLength = totalBaySize + UI.overhangFront;\n this.patiosWidth = UI.span + UI.overhangLeft + UI.overhangRight;\n \n //let cutoutCondition = this.cutoutCondition.map(x => x.currentValue).reduce((a,b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.sltExistingType.currentValue == 1) {\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue - this.APP.sldExistingLength2.currentValue + OFFSET_GUTTER_TO_WALL);\n }\n else{\n this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue + OFFSET_GUTTER_TO_WALL);\n }\n }\n else if (this.APP.sltExistingType.currentValue == 2) {\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue + this.APP.sldExistingLength2.currentValue - OFFSET_GUTTER_TO_WALL);\n }\n else{\n this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue - OFFSET_GUTTER_TO_WALL);\n }\n }\n else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([\n this.roofManager.load(),\n this.postAndBeamManager.load()\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n })\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return { \n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines\n ], \n texts: dimensionOutline.texts\n }\n }\n public getPatiosBox(): Box3{\n let left = - UI.span / 2 - UI.overhangLeft;\n let right = UI.span / 2 + UI.overhangRight;\n let front = this.APP.dialogEditBay.totalBaySize + this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n \n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n \n if(this.APP.sltExistingType.currentValue == 1){\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(new Vector3(0,0,-this.APP.sldExistingWidth1.currentValue/2));\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n box.translate(new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0));\n }\n }\n else if(this.APP.sltExistingType.currentValue == 2){\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(new Vector3(0,0,-this.APP.sldExistingWidth1.currentValue/2));\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n box.translate(new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0));\n }\n }\n else if(this.APP.sltExistingType.currentValue == 3){\n box.translate(new Vector3(0,0,-this.APP.sldExistingWidth1.currentValue/2));\n }\n\n // if(!environment.production){\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n \n return box;\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport {\n Material,\n Mesh,\n Vector3,\n BufferGeometry,\n BoxHelper,\n Geometry,\n BoxBufferGeometry,\n Group,\n Matrix4,\n Plane,\n LineSegments,\n} from \"three\";\nimport { Util, getRafterBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport {\n GeometryInfo,\n Printing2DLine,\n Printing2DGeometry,\n Print2DView,\n ViewType,\n LineType,\n} from \"src/app/core/models\";\nimport { GableFBExistingBuildingManager } from \".\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n private beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private frontPostHeight: number;\n private totalBaySize: number;\n private downpipeGroupRight: Group;\n private downpipeGroupLeft: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private MANAGER: GableFBExistingBuildingManager;\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(\n app: AppComponent,\n existingManager: GableFBExistingBuildingManager\n ) {\n this.APP = app;\n this.MANAGER = existingManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = existingManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiCHangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n //this.APP.dialogEditBay,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltCutOut,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, env.height.default / this.postInfo.height, 1);\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroupRight = new Group();\n this.downpipeGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupRight.rotateY(Math.PI / 2);\n this.scene.add(this.downpipeGroupRight);\n\n this.downpipeGroupLeft = new Group();\n this.downpipeGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupLeft.rotateY(-Math.PI / 2);\n this.scene.add(this.downpipeGroupLeft);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroupRight.children = [];\n this.downpipeGroupLeft.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.roofWidth =\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue +\n UI.span;\n this.enableCutout = this.MANAGER.cutoutCondition;\n\n let offsetZ = 0;\n let idx = 0;\n\n this.addGround();\n this.addCenterSuperiorBeam();\n\n this.addHorSuperiorBeam(-UI.span / 2 + this.beamInfo.width / 2, {\n left: true,\n first: true,\n last: false,\n });\n this.addHorSuperiorBeam(UI.span / 2 - this.beamInfo.width / 2, {\n right: true,\n first: false,\n last: true,\n });\n\n this.APP.dialogEditBay.listBay.forEach((m) => {\n offsetZ += m.value;\n\n this.addBeam(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addPost(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n left: true,\n right: false,\n });\n this.addPost(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n left: false,\n right: true,\n });\n\n let fitBeam = 0;\n if (idx + 1 > 0 && idx + 1 < this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width / 2;\n } else if (idx + 1 == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width;\n }\n\n this.addRafterSuperiorBeam(offsetZ - fitBeam - UI.existingWidth1 / 2, {\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n right: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n this.addRafterSuperiorBeam(offsetZ - fitBeam - UI.existingWidth1 / 2, {\n back: idx + 1 == 0,\n left: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n idx++;\n });\n\n this.addDownPipeRight();\n this.addDownPipeLeft();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private addDownPipeRight() {\n let offsetZ = this.totalBaySize - 50;\n let offsetX = UI.span / 2 + 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.overhangRight,\n UI.patiosPitch,\n -1\n ) + 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangRight,\n offsetY,\n true\n );\n }\n private addDownPipeLeft() {\n let offsetZ = this.totalBaySize - 50;\n let offsetX = -UI.span / 2 - 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.overhangLeft,\n UI.patiosPitch,\n -1\n ) + 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangLeft,\n offsetY,\n true\n );\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addGround() {\n let offsetX = -(UI.span / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2;\n let width = UI.span + UI.overhangLeft + UI.overhangRight;\n let length = this.totalBaySize + UI.overhangFront + UI.overhangBack;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangFront;\n\n let views: Print2DView[];\n offsetY = UI.height;\n offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n\n if (userDataPos.left) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartZ = pos.z - length;\n const beamEndZ = pos.z;\n\n let endOfBayZ = -UI.existingWidth1 / 2;\n let startCutBeamZ = beamStartZ;\n let endCutBeamZ = beamStartZ;\n\n const beams = this.utils.getListSeperateBeamsByBaysForFbGable(\n endOfBayZ,\n beamStartZ,\n beamEndZ,\n endCutBeamZ,\n startCutBeamZ\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamZ = beams[i][1];\n startCutBeamZ = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamZ - startCutBeamZ,\n new Vector3(pos.x, pos.y, endCutBeamZ),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasEndCap: UI.beamType == 0 && i == 0,\n hasStartJoint: false,\n hasEndJoint: i !== 0,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addPost(offsetZ: number, userDataPos: any) {\n const condition = offsetZ + this.APP.sldEaveWidth.currentValue;\n if (\n (UI.existingType === 1 || UI.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (UI.existingType === 2 || UI.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n\n let views: Print2DView[] = [];\n if (userDataPos.back || userDataPos.center) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let posZ = offsetZ - UI.existingWidth1 / 2;\n if (userDataPos.back) {\n posZ = offsetZ + this.postInfo.width / 2 - UI.existingWidth1 / 2;\n } else if (userDataPos.front) {\n posZ = offsetZ - this.postInfo.width / 2 - UI.existingWidth1 / 2;\n }\n\n let scaleY = 0;\n let length = 0;\n\n if (userDataPos.isMultiSpan) {\n length = this.APP.sldBuildingHeight.currentValue;\n scaleY = length / this.postInfo.height;\n } else {\n length = this.APP.sldBuildingHeight.currentValue;\n scaleY = length / this.postInfo.height;\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2 + this.postInfo.width / 2;\n } else if (userDataPos.right) {\n offsetX = UI.span / 2 - this.postInfo.width / 2;\n }\n\n mesh.position.set(offsetX, 0, posZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n public addCenterSuperiorBeam() {\n let beamLength = this.totalBaySize + UI.overhangFront;\n\n let offsetY =\n UI.height +\n (UI.span / 2 - this.beamInfo.width / 2) * this.utils.tan(UI.patiosPitch);\n let offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(0, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n { center: true },\n 0,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n private addCenterPost(offsetZ, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n this.frontPostHeight = UI.height;\n\n scalePostY =\n ((UI.span / 2 - this.beamInfo.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.beamInfo.height) /\n this.geo_centerSuperiorPost.height;\n\n if (userDataPos.last) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n let postOffsetX = -this.geo_centerSuperiorPost.width / 2;\n\n let postOffsetZ =\n offsetZ - this.geo_centerSuperiorPost.width / 2 - UI.existingWidth1 / 2;\n if (userDataPos.first) {\n postOffsetZ =\n offsetZ - this.geo_centerSuperiorPost.width / 2 - UI.existingWidth1 / 2;\n } else if (userDataPos.last) {\n postOffsetZ =\n offsetZ - this.geo_centerSuperiorPost.width - UI.existingWidth1 / 2;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(postOffsetX, UI.height, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addRafterSuperiorBeam(offsetZ, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n (UI.span / 2 - this.beamInfo.width / 2) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n\n let scaleX =\n (UI.span / 2 - this.beamInfo.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let fitZ = 0;\n\n if (userDataPos.left) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, UI.height, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n\n let nVer = new Vector3(-1, 0, 0).normalize();\n let pVer = new Vector3(\n -this.beamInfo.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.right) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, UI.height, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n let nVer = new Vector3(1, 0, 0).normalize();\n let pVer = new Vector3(\n this.beamInfo.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n let capL;\n let capR;\n if (userDataPos.left) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.height + (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n -translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n -translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = this.scene.position.x;\n\n planeTop.translate(new Vector3(beamOffsetX, 0, 0));\n planeBottom.translate(new Vector3(beamOffsetX, 0, 0));\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.height + (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = this.scene.position.x;\n\n planeTop.translate(new Vector3(beamOffsetX, 0, 0));\n planeBottom.translate(new Vector3(beamOffsetX, 0, 0));\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2;\n offsetY = UI.height;\n } else if (userDataPos.right) {\n offsetX = this.geo_centerSuperiorPost.width / 2;\n offsetY =\n UI.height +\n (UI.span / 2 - this.beamInfo.width / 2) *\n this.utils.tan(UI.patiosPitch);\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n if (userDataPos.left) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.right) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n public addBeam(offsetZ: number, userDataPos: any) {\n let offsetY = 0;\n\n let beamLength = UI.span - 2 * this.postInfo.width;\n if (userDataPos.back) {\n beamLength = UI.span - 2 * this.beamInfo.width;\n }\n\n let offsetX = -UI.span / 2 + this.postInfo.width;\n if (userDataPos.back) {\n offsetX = -UI.span / 2 + this.beamInfo.width;\n }\n\n let posZ = 0;\n let views: Print2DView[] = [];\n if (userDataPos.front) {\n offsetY = UI.height;\n posZ = offsetZ - this.beamInfo.width / 2 - UI.existingWidth1 / 2;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.center) {\n offsetY = UI.height;\n posZ = offsetZ - UI.existingWidth1 / 2;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY = UI.height;\n posZ = offsetZ + this.beamInfo.width / 2 - UI.existingWidth1 / 2;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let beamGroup: Group;\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n\n this.scene.add(beamGroup);\n }\n\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n }\n }\n}\n","import { Mesh, Vector3, Material, Plane, Geometry, BufferGeometry, Group, BoxBufferGeometry, MeshLambertMaterial, Matrix4, Object3D, LineSegments, Color } from 'three';\nimport { Util } from '../utils';\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RIBSPAN_PANEL_WIDTH, RIBSPAN_BARGE_FIT, RIBSPAN_RECEIVER_CHANNEL_FIT } from 'src/app/app.constants';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Print2DView, ViewType, LineType } from 'src/app/core/models';\nimport { GableFBExistingBuildingManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport { UI } from '../ui';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableFBExistingBuildingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n public ridgeGeo: GeometryInfo;\n private roofInfo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private receiverCutoutRightVer2: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutLeftVer2: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n private roofGroupRight: Group;\n private roofGroupLeft: Group;\n\n private eventHandleId: any;\n\n // Var\n private roofLengthPlus: number;\n private roofWidth: number;\n private roofLength: number;\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n\n constructor(app: AppComponent, existingManager: GableFBExistingBuildingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = existingManager;\n this.scene = new Group();\n existingManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofRibspanPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2, this.roofInfo.height / 2, this.roofInfo.length / 2);\n this.roofInfo.geometry.rotateY(Math.PI / 2)\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n // Barge capping - left\n this.bargeLeftInfo = this.geometryManager.getRibspanBarge();\n this.bargeLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeLeftInfo.length / 2, this.bargeLeftInfo.height / 2 - RIBSPAN_BARGE_FIT, -this.bargeLeftInfo.width / 2 + 3);\n\n // Barge capping - right\n this.bargeRightInfo = this.geometryManager.getRibspanBarge();\n this.bargeRightInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeRightInfo.length / 2, this.bargeRightInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeRightInfo.width / 2 - 3);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutRightHor.length / 2, this.receiverCutoutRightHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightHor.width / 2);\n\n \n //Vertical Barge cutout left 2\n this.receiverCutoutLeftVer2 = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftVer2.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer2.width / 2, this.receiverCutoutLeftVer2.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftVer2.length / 2);\n\n //Vertical cutout right 2\n this.receiverCutoutRightVer2 = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightVer2.geometry\n .translate(-this.receiverCutoutRightVer2.width / 2, this.receiverCutoutRightVer2.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightVer2.length / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getRibspanReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.geo_receiverChanel.width / 2);\n\n // Gutter\n let gtExtraOffsetY = 0;\n if (this.APP.sltGutterType.currentValue == 1 || this.APP.sltGutterType.currentValue == 2) {\n gtExtraOffsetY = 20;\n }\n\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.ridgeGeo = this.geometryManager.getRibspanRidgeCapping();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2 + 1, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL \n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS\n || x.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n || x.userData.type === GEOMETRY_TYPE.HIGHLIGHT_BOX));\n\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type === 'ROOF_OUTLINE'));\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.roofLength = UI.span / 2 + UI.overhangRight;\n this.roofLengthPlus = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n this.roofWidth = this.totalBaySize + UI.overhangFront;\n\n this.addRoofGroupRight();\n this.addRoofGroupLeft();\n this.addCutout();\n\n let roofPanelCount = Math.ceil(this.roofWidth / RIBSPAN_PANEL_WIDTH);\n this.enableCutout = this.MANAGER.cutoutCondition;\n\n //clipping plane\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n this.material.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n\n //panel direction\n let offsetZ = 0;\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetZ = this.totalBaySize + UI.overhangFront - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetZ = 0;\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = true;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft]);\n\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft]);\n\n cuted = isOver;\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + RIBSPAN_PANEL_WIDTH;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n this.addRoofRight(offsetZ, [this.csg_cutoutRight] );\n\n this.addRoofLeft(offsetZ, [this.csg_cutoutRight]);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + RIBSPAN_PANEL_WIDTH;\n let flag = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofRight(offsetZ, []);\n\n this.addRoofLeft(offsetZ, []);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBargeRight();\n this.addBargeLeft();\n\n this.addGutterRight();\n this.addGutterLeft();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n //this.getOutLines();\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n \n public addRoofGroupRight() {\n this.roofGroupRight = null;\n this.roofGroupRight = new Group();\n this.roofGroupRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n //let offsetX = -this.APP.sldLeftOverhang.currentValue;\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -UI.existingWidth1 / 2;\n\n this.roofGroupRight.position.set(0, offsetY, offsetZ);\n this.roofGroupRight.rotation.set(0, 0, -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupRight);\n }\n public addRoofGroupLeft() {\n this.roofGroupLeft = null;\n this.roofGroupLeft = new Group();\n this.roofGroupLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n //let offsetX = -this.APP.sldLeftOverhang.currentValue;\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -UI.existingWidth1 / 2;\n\n this.roofGroupLeft.position.set(0, offsetY, offsetZ);\n this.roofGroupLeft.rotation.set(0, 0, this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupLeft);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let gutterGroupObjs = this.roofGroupRight.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).concat(\n ...this.roofGroupLeft.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n );\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneBack);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForFBRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, -UI.existingWidth1 / 2 - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n}\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoofRight(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let scaleZ = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) / this.roofInfo.length;\n const offsetY = 0;\n let offsetX = 0;\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n \n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n \n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if(cutoutCondition){\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofLeft(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let scaleZ = (UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) / this.roofInfo.length;\n const offsetY = 0;\n let offsetX = 0;\n mesh.position.set(offsetX - scaleZ * this.roofInfo.length, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n \n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n \n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX - scaleZ * this.roofInfo.length + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if(cutoutCondition){\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n private addBargeRight() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL2 = 0;\n\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = 0;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangRight;\n let bargeRightLength = UI.span / 2 + UI.overhangRight;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - fitScale * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n \n // back\n fitScale = this.geo_receiverChanel.height * this.utils.tan(UI.patiosPitch) / this.geo_receiverChanel.length;\n mesh = new Mesh(this.geo_receiverChanel.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(- fitScale * this.bargeRightInfo.length, offsetY, 0);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroupRight.add(mesh);\n }\n private addBargeLeft() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL2 = 0;\n\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = 0;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangLeft;\n let bargeRightLength = UI.span / 2 + UI.overhangLeft;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - scaleZLeft * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n \n // back\n fitScale = this.geo_receiverChanel.height * this.utils.tan(UI.patiosPitch) / this.geo_receiverChanel.length;\n mesh = new Mesh(this.geo_receiverChanel.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(- scaleZLeft * this.bargeRightInfo.length, offsetY, 0);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroupLeft.add(mesh);\n }\n public addGutterRight() {\n let offsetXL = (UI.span / 2 + UI.overhangRight - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let offsetZ = this.totalBaySize + UI.overhangFront;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(0, Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupRight.add(gutterGroup); \n }\n public addGutterLeft() {\n let offsetXL = (UI.span / 2 + UI.overhangLeft - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let offsetZ = 0;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(-offsetXL, offsetY, offsetZ), new Vector3(0, -Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupLeft.add(gutterGroup); \n }\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n\n const height = this.getRoofOffsetY() + \n this.roofInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n \n let offsetX = 0\n \n const ridgeLength = this.totalBaySize + UI.overhangFront;\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.position.set( offsetX, height, this.totalBaySize / 2 + UI.overhangFront / 2 - UI.existingWidth1 / 2);\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]};\n this.scene.add(ridgeFront)\n }\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n\n rightCap.rotateY(Math.PI)\n\n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n\n leftCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n\n return new Group().add(leftCap, rightCap)\n }\n public getRoofOffsetY() {\n return UI.height + this.utils.tan(UI.patiosPitch) * (UI.span / 2);\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n public onColorChanged() {\n if(this.utils && this.roofInfo.geometry){\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltReceiverType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n}\n\n","import {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport { PANEL_DIRECTION, RAKECUT_TYPE } from \"src/app/app.constants\";\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { GableFBFasciaManager } from \".\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: GableFBFasciaManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any;\n private textParameter: any;\n private isReady = false;\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n private geometryManager: GeometryManager;\n\n constructor(app: AppComponent, manager: GableFBFasciaManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n\n this.isReady = true;\n this.draw();\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n // this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if (existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left) {\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n this.APP.dimensionManager.draw();\n }\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI, 0);\n }\n else {\n let offsetZ = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n this.dimensionPlanMidleLeft.rotation.set(0, 0, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4 + this.totalBaySize / 2;\n this.dimensionPlanMiddle.rotation.set(0, 0, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n },\n textCloneRotation: new Vector3(0, 0, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, 0, 0),\n };\n let dimSpan = this.dimensionPatiosPlanBottom.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n UI.span / 2,\n UI.overhangLeft,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n UI.span / 2,\n UI.overhangRight,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let offsetDimensionZ =\n this.totalBaySize / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetX = -this.totalBaySize / 2;\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimBay = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n let offsetRight = this.totalBaySize / 2;\n let offsetLeft = this.totalBaySize / 2;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n UI.overhangFront,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n UI.overhangBack,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n let dimOffsetX =\n UI.span / 2 +\n this.APP.patiosManager.patiosGroup.position.x +\n _dimensionDistane;\n let dimOffsetY = height / 2;\n if (this.APP.sldExistingLength.currentValue / 2 > UI.span / 2) {\n dimOffsetX =\n this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n }\n\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY =\n UI.eaveHeight +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = +dimOffsetY.toFixed(0);\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY =\n UI.eaveHeight +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { PatiosManager, RafterBeamAndInternalBeamInfo } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport { Group, Box3, Vector3 } from \"three\";\nimport { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { UI } from \"../ui\";\n\nexport class GableFBFasciaManager implements PatiosManager {\n public patiosGroup: Group;\n public boundingBox: Box3;\n private APP: AppComponent;\n public postAndBeamManager: PostAndBeamManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n\n private updateEventHandle: any;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private controlsToRegisterEvent: Array;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [\n this.APP.sldEaveWidth,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n ]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.postAndBeamManager.numOfBraket = bracketQuantity;\n this.postAndBeamManager.addUpstandBraket();\n }\n loadBracketCutout(bracketQuantity: number): void {\n // this.postAndBeamManager.addUpstandBraketCutOut(bracketQuantity);\n }\n loadSideGableBracket(bracketQuantity: number): void{\n this.postAndBeamManager.numberOfBracketsSide = bracketQuantity\n this.postAndBeamManager.addBraketOrBeamSideRoof();\n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void{\n \n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.btnTurnOnPanel\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number): void {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let diff = this.APP.sldExistingLength.currentValue - UI.span;\n\n this.patiosLength = totalBaySize + UI.overhangFront;\n this.patiosWidth = UI.span + UI.overhangLeft + UI.overhangRight;\n\n if (this.APP.sltExistingType.currentValue == 1) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n -diff / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 + this.APP.sldEaveWidth.currentValue + FASCIA_BRACKET_FIT\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n diff / 2 -\n this.APP.sldEaveWidth.currentValue +\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 - this.APP.sldEaveWidth.currentValue - FASCIA_BRACKET_FIT\n );\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left = -UI.span / 2 - UI.overhangLeft;\n let right = UI.span / 2 + UI.overhangRight;\n let front =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, this.APP.sldEaveWidth.currentValue));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n box.translate(new Vector3(this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n box.translate(new Vector3(-this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import _ from \"lodash\";\nimport UpstandBraket, {\n UpstandBraketOptions,\n} from \"src/app-ribspan/models/UpstandBraket.model\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n Vector3,\n} from \"three\";\nimport { GableFBFasciaManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n} from \"src/app/app.constants\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util, getRafterBeamEndCapCode } from \"../utils\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableFBFasciaManager;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private existingTypeLeftX: number;\n private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private frontPostHeight: number;\n private downpipeGroupRight: Group;\n private downpipeGroupLeft: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n public geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geoBraketExtL_2: GeometryInfo;\n private geoBraketExtR_2: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n private geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n\n private offsetYBraket = 0;\n public numberOfBracketsSide = INIT.DEFAULT_BRACKET_NUMBER;\n public numOfBraket = INIT.DEFAULT_BRACKET_NUMBER;\n\n k: number;\n k_: number;\n j: number;\n l: number;\n m: number;\n v: number;\n\n constructor(app: AppComponent, fasciaManager: GableFBFasciaManager) {\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = fasciaManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, scalePostHeight, 1);\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroupRight = new Group();\n this.downpipeGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupRight.rotateY(Math.PI / 2);\n this.scene.add(this.downpipeGroupRight);\n\n this.downpipeGroupLeft = new Group();\n this.downpipeGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupLeft.rotateY(-Math.PI / 2);\n this.scene.add(this.downpipeGroupLeft);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBraketExtL_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtL_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateY(-Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtL_2.geometry.translate(\n -this.geoBraketExtL_2.height / 2,\n this.geoBraketExtL_2.length / 2,\n this.geoBraketExtL_2.height / 3 - this.geoBraket_1.width / 2\n );\n //Right\n this.geoBraketExtR_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtR_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateY(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtR_2.geometry.translate(\n this.geoBraketExtR_2.height / 2,\n this.geoBraketExtR_2.length / 2,\n this.geoBraketExtR_2.height / 3 - this.geoBraket_1.width / 2\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.downpipeGroupRight.children = [];\n this.downpipeGroupLeft.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofWidth = UI.span;\n this.existingType = +this.APP.sltExistingType.currentValue;\n this.existingTypeLeftX = 0;\n this.existingTypeRightX = 0;\n if (this.existingType === 1 || this.existingType === 3) {\n this.existingTypeLeftX = this.APP.sldEaveWidth.currentValue;\n }\n if (this.existingType === 2 || this.existingType === 3) {\n this.existingTypeRightX = this.APP.sldEaveWidth.currentValue;\n }\n this.offsetYBraket = 0;\n if (UI.upstandBraketType == 150) {\n this.offsetYBraket =\n 150 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 300) {\n this.offsetYBraket =\n 300 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 450) {\n this.offsetYBraket =\n 450 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 600) {\n this.offsetYBraket =\n 600 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n this.offsetYBraket -=\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch) +\n (this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n }\n\n this.addCenterSuperiorBeam();\n this.addGround();\n let offsetZ = 0;\n let idx = 0;\n\n this.addHorSuperiorBeam(-UI.span / 2 + this.geoBeam.width / 2, {\n left: true,\n first: true,\n last: false,\n });\n this.addHorSuperiorBeam(UI.span / 2 - this.geoBeam.width / 2, {\n right: true,\n first: false,\n last: true,\n });\n\n this.addBeam(offsetZ, {\n back: idx == 0,\n center: !(idx == this.APP.dialogEditBay.listBay.length) && !(idx == 0),\n front: idx == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center: !(idx == this.APP.dialogEditBay.listBay.length) && !(idx == 0),\n first: idx == 0,\n last: idx == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addRafterSuperiorBeam(\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4,\n {\n front: idx == this.APP.dialogEditBay.listBay.length,\n right: true,\n first: idx === 0,\n last: idx == this.APP.dialogEditBay.listBay.length,\n }\n );\n this.addRafterSuperiorBeam(\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4,\n {\n back: idx == 0,\n left: true,\n first: idx === 0,\n last: idx == this.APP.dialogEditBay.listBay.length,\n }\n );\n\n this.APP.dialogEditBay.listBay.map((m) => {\n offsetZ += m.value;\n\n this.addBeam(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n let fitBeam = 0;\n if (idx + 1 > 0 && idx + 1 < this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width / 2;\n } else if (idx + 1 == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width;\n }\n\n this.addRafterSuperiorBeam(\n offsetZ -\n fitBeam -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4,\n {\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n right: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n }\n );\n this.addRafterSuperiorBeam(\n offsetZ -\n fitBeam -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4,\n {\n back: idx + 1 == 0,\n left: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n }\n );\n\n idx++;\n });\n\n this.addBraketOrBeamSideRoof();\n\n this.addDownPipeRight();\n this.addDownPipeLeft();\n this.addUpstandBraket();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addBraketOrBeamSideRoof() {\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n\n let offsetZ = 0;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == 0) {\n offsetZ += UI.listBay[i].value;\n continue;\n }\n this.addPost(offsetZ, {\n back: i + 1 == 0,\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n front: i == this.APP.dialogEditBay.listBay.length,\n first: i == 0,\n last: i == this.APP.dialogEditBay.listBay.length,\n left: true,\n right: false,\n });\n this.addPost(offsetZ, {\n back: i == 0,\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n front: i == this.APP.dialogEditBay.listBay.length,\n first: i == 0,\n last: i == this.APP.dialogEditBay.listBay.length,\n left: false,\n right: true,\n });\n\n if (i < UI.listBay.length) {\n offsetZ += UI.listBay[i].value;\n }\n }\n\n //LEFT SIDE\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n let numOfBrakets = this.numberOfBracketsSide + 1;\n let distance =\n (UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4 >\n UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4) /\n (numOfBrakets - 1);\n for (let i = 0; i < numOfBrakets; i++) {\n this.addUpstandBraketExt(offsetZ, {\n back: i == 0,\n center: !(i + 1 == numOfBrakets) && !(i == 0),\n front: i + 1 == numOfBrakets,\n first: i == 0,\n last: i + 1 == numOfBrakets,\n left: true,\n right: false,\n });\n\n offsetZ += distance;\n }\n }\n\n //RIGHT SIDE\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n let numOfBrakets = this.numberOfBracketsSide + 1;\n let distance =\n (UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4 >\n UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4) /\n (numOfBrakets - 1);\n for (let i = 0; i < numOfBrakets; i++) {\n this.addUpstandBraketExt(offsetZ, {\n back: i == 0,\n center: !(i + 1 == numOfBrakets) && !(i == 0),\n front: i + 1 == numOfBrakets,\n first: i == 0,\n last: i + 1 == numOfBrakets,\n left: false,\n right: true,\n });\n\n offsetZ += distance;\n }\n }\n }\n public addUpstandBraket() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET\n )\n );\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n let distance = 1000;\n let offsetX = -UI.existingLength1 / 2;\n let spanLength = UI.span;\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n spanLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n spanLength -= 2 * UI.existingLength2;\n }\n }\n\n if (UI.existingType == 0) {\n let startX =\n -spanLength / 2 > -UI.existingLength1 / 2\n ? -spanLength / 2\n : -UI.existingLength1 / 2;\n let endX =\n spanLength / 2 < UI.existingLength1 / 2\n ? spanLength / 2\n : UI.existingLength1 / 2;\n distance = (endX - startX) / (this.numOfBraket - 1);\n offsetX = startX;\n } else if (UI.existingType == 1) {\n distance = (spanLength - _bracketOffsetXExt) / (this.numOfBraket - 1);\n offsetX = -spanLength / 2 + _bracketOffsetXExt;\n if (spanLength > UI.existingLength1 - UI.eaveWidth) {\n distance =\n (UI.existingLength1 - UI.eaveWidth - _bracketOffsetXExt) /\n (this.numOfBraket - 1);\n }\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -spanLength / 2 + UI.existingLength2 / 2 + _bracketOffsetXExt;\n }\n } else if (UI.existingType == 2) {\n offsetX = -spanLength / 2;\n distance = (spanLength - _bracketOffsetXExt) / (this.numOfBraket - 1);\n\n if (spanLength > UI.existingLength1 - UI.eaveWidth) {\n offsetX =\n -spanLength / 2 + (spanLength - UI.existingLength1 + UI.eaveWidth);\n distance =\n (UI.existingLength1 - _bracketOffsetXExt - UI.eaveWidth) /\n (this.numOfBraket - 1);\n }\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n } else if (UI.existingType == 3) {\n distance = (spanLength - _bracketOffsetXExt * 2) / (this.numOfBraket - 1);\n offsetX = -spanLength / 2 + _bracketOffsetXExt;\n }\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET,\n views: views,\n };\n for (let i = 0; i < this.numOfBraket; i++) {\n let posX = offsetX;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == this.numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n if (\n (UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH) &&\n i == 0\n ) {\n offsetX += distance;\n continue;\n }\n if (\n (UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH) &&\n i == this.numOfBraket - 1\n ) {\n offsetX += distance;\n continue;\n }\n\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth - UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetX += distance;\n }\n }\n private addDownPipeRight() {\n let offsetZ =\n this.totalBaySize - 50 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetX = UI.span / 2 + 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + +UI.upstandBraketType,\n UI.overhangRight,\n UI.patiosPitch,\n -1\n ) +\n this.geoBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangRight / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupRight.add(meshPipe);\n this.downpipeGroupRight.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangRight,\n offsetY,\n true\n );\n }\n }\n private addDownPipeLeft() {\n let offsetZ =\n this.totalBaySize - 50 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetX = -UI.span / 2 - 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + +UI.upstandBraketType,\n UI.overhangLeft,\n UI.patiosPitch,\n -1\n ) +\n this.geoBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangLeft / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupLeft.add(meshPipe);\n this.downpipeGroupLeft.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangLeft,\n offsetY,\n true\n );\n }\n }\n private addGround() {\n let offsetX = -(UI.span / 2 + UI.overhangLeft);\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - UI.overhangBack;\n let width = UI.span + UI.overhangLeft + UI.overhangRight;\n let length =\n this.totalBaySize +\n UI.overhangFront +\n UI.overhangBack +\n this.APP.sldEaveWidth.currentValue +\n this.geoBraket_2.height / 4;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private getRoofHeight() {\n const _height = this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue,\n UI.span / 2,\n this.APP.sltRoofPitch.currentValue,\n 1\n );\n return this.APP.sldExistingWallHeight.currentValue - _height;\n }\n private updateUI() {\n this.APP.roofHeight = this.getRoofHeight();\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let braketGroup = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n );\n\n for (let g of braketGroup) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n g.children[1] as Mesh,\n 60\n );\n g.children[1].updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(g.children[1].matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: simplifiedGeo.vertices,\n views: g.userData.views,\n });\n\n g.children[0].updateMatrix();\n let objCloned = g.children[0].clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(g.children[0].matrix));\n\n let box = new BoxHelper(objCloned);\n\n g.children[0].updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(g.children[0].matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo1 = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo1.vertices,\n views: g.userData.views,\n });\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addCenterPost(offsetZ, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n this.frontPostHeight = UI.existingWallHeight + +UI.upstandBraketType;\n\n scalePostY =\n ((UI.span / 2 - this.geoBeam.width / 2) * this.utils.tan(UI.patiosPitch) -\n this.geoBeam.height) /\n this.geo_centerSuperiorPost.height;\n\n if (userDataPos.last) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let postOffsetX = -this.geo_centerSuperiorPost.width / 2;\n\n let postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n if (userDataPos.first) {\n postOffsetZ =\n offsetZ -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n } else if (userDataPos.last) {\n postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addPost(offsetZ: number, userDataPos: any) {\n const condition = offsetZ + this.APP.sldEaveWidth.currentValue;\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n\n let views: Print2DView[] = [];\n if (userDataPos.back || userDataPos.center) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let posZ =\n offsetZ -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n if (userDataPos.back) {\n posZ =\n offsetZ +\n this.postInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n } else if (userDataPos.front) {\n posZ =\n offsetZ -\n this.postInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n }\n\n let length =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n let scaleY = length / this.postInfo.height;\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2 + this.postInfo.width / 2;\n } else if (userDataPos.right) {\n offsetX = UI.span / 2 - this.postInfo.width / 2;\n }\n\n mesh.position.set(offsetX, 0, posZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n\n private addUpstandBraketExt(offsetZ: number, userDataPos: any) {\n if (\n UI.upstandBraketType == 0 ||\n UI.listBay.length == 0 ||\n UI.existingType == 0\n ) {\n return;\n }\n if (\n (this.existingType == 1 && userDataPos.right) ||\n (this.existingType == 2 && userDataPos.left)\n ) {\n return;\n }\n let _flag = false;\n\n const condition = offsetZ + this.APP.sldEaveWidth.currentValue;\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n } else if (!_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n }\n if (!_flag) {\n return;\n }\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5; // + this.geoBraket_1.width / 4;\n let height = 0;\n let offsetX = -UI.existingLength1 / 2;\n let spanLength = UI.span;\n\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n spanLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n spanLength -= 2 * UI.existingLength2;\n }\n }\n\n const _cond1 =\n UI.existingWidth1 < condition &&\n UI.existingWidth1 + UI.existingWidth2 > condition;\n const _cond2 =\n userDataPos.isMultiSpan &&\n UI.existingWidth1 < condition + UI.multiSpan &&\n UI.existingWidth1 + UI.existingWidth2 > condition + UI.multiSpan;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX = -spanLength / 2 + this.geoBraket_1.width - FASCIA_BRACKET_FIT;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -spanLength / 2 + UI.existingLength2 / 2;\n }\n offsetX += _bracketOffsetXExt;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX = spanLength / 2 - this.geoBraket_1.width + FASCIA_BRACKET_FIT;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n offsetX -= _bracketOffsetXExt;\n } else if (UI.existingType == 3) {\n offsetX =\n (-spanLength / 2) * (userDataPos.left ? 1 : -1) +\n (userDataPos.left ? this.geoBraket_1.width - FASCIA_BRACKET_FIT : 0) -\n (userDataPos.right ? this.geoBraket_1.width - FASCIA_BRACKET_FIT : 0);\n if ((!userDataPos.isMultiSpan && _cond1) || _cond2) {\n offsetX -=\n UI.existingLength2 * (userDataPos.left ? 1 : -1) +\n (userDataPos.right ? this.geoBraket_1.width : 0);\n }\n offsetX += _bracketOffsetXExt * (userDataPos.left ? 1 : -1);\n }\n\n let posZ =\n offsetZ -\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth;\n if (userDataPos.front) {\n posZ =\n offsetZ - this.geoBraket_1.width - UI.existingWidth1 / 2 + UI.eaveWidth;\n }\n if (userDataPos.back) {\n posZ =\n offsetZ +\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth;\n }\n\n height = +UI.upstandBraketType;\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2:\n UI.existingType == 2 ? this.geoBraketExtR_2 : this.geoBraketExtL_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n if (UI.existingType == 1) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtL_2 };\n } else if (UI.existingType == 2) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtR_2 };\n } else {\n optionBrakets = {\n ...optionBrakets,\n geoBraket_2: userDataPos.right\n ? this.geoBraketExtR_2\n : this.geoBraketExtL_2,\n };\n }\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n if (userDataPos.right) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(offsetX, UI.existingWallHeight, posZ),\n userData: { type: GEOMETRY_TYPE.UPSTAND_BRAKET_EXT, views },\n });\n }\n\n public addBeam(offsetZ: number, userDataPos: any) {\n let offsetY = 0;\n let offsetX = -UI.span / 2 + this.postInfo.width;\n if (userDataPos.back) {\n offsetX = -UI.span / 2 + this.geoBeam.width;\n }\n\n let beamLength = UI.span - 2 * this.postInfo.width;\n if (userDataPos.back) {\n beamLength = UI.span - 2 * this.geoBeam.width;\n }\n\n let posZ = 0;\n let views: Print2DView[] = [];\n if (userDataPos.front) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n posZ =\n offsetZ -\n this.geoBeam.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.center) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n posZ =\n offsetZ -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n posZ =\n offsetZ +\n this.geoBeam.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let beamGroup: Group;\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n\n this.scene.add(beamGroup);\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n offsetY = UI.existingWallHeight + +UI.upstandBraketType;\n offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n if (userDataPos.left) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY + this.beamInfo.height, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartZ = pos.z - length;\n const beamEndZ = pos.z;\n\n let endOfBayZ =\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let startCutBeamZ = beamStartZ;\n let endCutBeamZ = beamStartZ;\n\n const beams = this.utils.getListSeperateBeamsByBaysForFbGable(\n endOfBayZ,\n beamStartZ,\n beamEndZ,\n endCutBeamZ,\n startCutBeamZ\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamZ = beams[i][1];\n startCutBeamZ = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamZ - startCutBeamZ,\n new Vector3(pos.x, pos.y, endCutBeamZ),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasEndCap: UI.beamType == 0 && i == 0,\n hasStartJoint: false,\n hasEndJoint: i !== 0,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addRafterSuperiorBeam(offsetZ, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n (UI.span / 2 - this.geoBeam.width / 2) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n\n let scaleX =\n (UI.span / 2 - this.geoBeam.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let fitZ = 0;\n\n if (userDataPos.left) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n\n let nVer = new Vector3(-1, 0, 0).normalize();\n let pVer = new Vector3(\n -this.geoBeam.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.right) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n let nVer = new Vector3(1, 0, 0).normalize();\n let pVer = new Vector3(\n this.geoBeam.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.left) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n -translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n -translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2;\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n } else if (userDataPos.right) {\n offsetX = this.geo_centerSuperiorPost.width / 2;\n offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height +\n (UI.span / 2 - this.geoBeam.width / 2) * this.utils.tan(UI.patiosPitch);\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n if (userDataPos.left) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.right) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n public addCenterSuperiorBeam() {\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n let offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n (UI.span / 2 - this.geoBeam.width / 2) * this.utils.tan(UI.patiosPitch);\n let offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(0, offsetY + this.beamInfo.height, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n { center: true },\n 0,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n }\n }\n }\n}\n","import { BoxBufferGeometry, BufferGeometry, Color, Geometry, Group, LineSegments, Material, Matrix4, Mesh, MeshLambertMaterial, Object3D, Plane, Vector3 } from 'three';\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RAKECUT_TYPE, RIBSPAN_PANEL_WIDTH, RIBSPAN_BARGE_FIT, RIBSPAN_RECEIVER_CHANNEL_FIT } from 'src/app/app.constants';\nimport { Util } from '../utils';\nimport { CSG } from 'three-csg-ts';\nimport { GableFBFasciaManager } from '.';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, LineType, Print2DView, Printing2DGeometry, Printing2DLine, ViewType } from 'src/app/core/models';\nimport { UI } from '../ui';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableFBFasciaManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n public ridgeGeo: GeometryInfo;\n private roofInfo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private bargeFrontInfo: GeometryInfo;\n private bargeBackInfo: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n // Var\n private roofLength: number;\n private roofLengthPlus: number;\n private roofWidth: number;\n //private existingTypeLeftX: number;\n //private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofGroupRight: Group;\n private roofGroupLeft: Group;\n private cutoutExistingBothLength: number;\n\n constructor(app: AppComponent, fasciaManager: GableFBFasciaManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.scene = new Group();\n fasciaManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n public onColorChanged() {\n if(this.utils && this.roofInfo.geometry){\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofRibspanPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2, this.roofInfo.height / 2, this.roofInfo.length / 2);\n this.roofInfo.geometry.rotateY(Math.PI / 2)\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n // Barge capping\n this.bargeLeftInfo = this.geometryManager.getRibspanBarge();\n this.bargeLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeLeftInfo.length / 2, this.bargeLeftInfo.height / 2 - RIBSPAN_BARGE_FIT, -this.bargeLeftInfo.width / 2 + 3);\n\n this.bargeRightInfo = this.geometryManager.getRibspanBarge();\n this.bargeRightInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeRightInfo.length / 2, this.bargeRightInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeRightInfo.width / 2 - 3);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftHor.width / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getRibspanReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getRibspanReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 + 2 - RIBSPAN_RECEIVER_CHANNEL_FIT, this.geo_receiverChanel.width / 2);\n\n // Gutter\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(800, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(0, this.geoBraket_2.length / 2, - this.geoBraket_2.height / 4);\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(0, this.geoBeamEndCap.height / 2, this.geoBeamEndCap.length / 2)\n .rotateY(Math.PI / 2);\n\n this.bargeFrontInfo = this.geometryManager.getRibspanBarge();\n this.bargeFrontInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeFrontInfo.length / 2, this.bargeFrontInfo.height / 2 - RIBSPAN_BARGE_FIT, -this.bargeFrontInfo.width / 2);\n\n this.bargeBackInfo = this.geometryManager.getRibspanBarge();\n this.bargeBackInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeBackInfo.length / 2, this.bargeBackInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeBackInfo.width / 2 - 3);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutRight.length / 2);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutRight.length / 2);\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutRightHor.width / 2);\n\n this.ridgeGeo = this.geometryManager.getRibspanRidgeCapping();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2 + 1, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n this.roofLength = UI.span / 2 + UI.overhangRight;\n this.roofLengthPlus = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n\n this.roofWidth = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n this.cutoutExistingBothLength = (this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2;\n\n this.addRoofGroupRight();\n this.addRoofGroupLeft();\n this.addCutout();\n\n this.existingType = +this.APP.sltExistingType.currentValue;\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n this.material.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n\n const roofPanelCount = Math.ceil(this.roofWidth / RIBSPAN_PANEL_WIDTH);\n let offsetZ = - UI.overhangBack;\n\n //panel direction\n let panelDirectionOfset = 1;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n offsetZ = this.totalBaySize + UI.overhangFront - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT) {\n offsetZ = - UI.overhangBack;\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = true;\n\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft]);\n\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + RIBSPAN_PANEL_WIDTH;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n\n this.addRoofRight(offsetZ, [this.csg_cutoutRight]);\n\n this.addRoofLeft(offsetZ, [this.csg_cutoutRight]);\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofRight(offsetZ, []);\n\n this.addRoofLeft(offsetZ, []);\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBargeCappingRight();\n this.addBargeCappingLeft();\n\n this.addGutterRight();\n this.addGutterLeft();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 - this.APP.sldEaveWidth.currentValue;\n let offsetY = 0;\n const eaveThickness = 50;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + UI.eaveWidth + eaveThickness - UI.overhangBack;\n\n //extra length to prevent lack when cut\n let extra = 5000;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + extra) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + extra) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + UI.overhangBack + extra) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX - this.APP.sldLeftOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX + this.APP.sldRightOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n public addRoofGroupRight() {\n this.roofGroupRight = null;\n this.roofGroupRight = new Group();\n this.roofGroupRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n this.roofGroupRight.position.setY(offsetY);\n this.roofGroupRight.position.setZ(offsetZ);\n this.roofGroupRight.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n\n this.scene.add(this.roofGroupRight);\n }\n public addRoofGroupLeft() {\n this.roofGroupLeft = null;\n this.roofGroupLeft = new Group();\n this.roofGroupLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n this.roofGroupLeft.position.setY(offsetY);\n this.roofGroupLeft.position.setZ(offsetZ);\n this.roofGroupLeft.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n\n this.scene.add(this.roofGroupLeft);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );;\n\n let gutterGroupObjs = this.roofGroupRight.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n .concat(\n ...this.roofGroupLeft.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n );;\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneBack);\n }\n\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"ROOF_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForFBRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4 - UI.overhangBack)))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n\n var line = new LineSegments(outlineGeo, MaterialManager.Instance().MESH_OUTLINE);\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoofRight(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let scaleZ = this.roofLengthPlus / this.roofInfo.length;\n const offsetY = 0;\n let offsetX = 0;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofLeft(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let scaleZ = (UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) / this.roofInfo.length;\n const offsetY = 0;\n let offsetX = - scaleZ * this.roofInfo.length;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, \n length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n private addBargeCappingRight() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL2 = 0;\n\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let offsetY = 0;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - fitScale * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n\n //right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - fitScale * this.bargeRightInfo.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n }\n private addBargeCappingLeft() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = 0;\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + extraWallWidth;\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let bargeBackLength = this.roofWidth;\n let scaleCutoutVer = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue + this.bargeLeftInfo.width, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangLeft;\n let bargeRightLength = UI.span / 2 + UI.overhangLeft;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - scaleZLeft * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n\n //right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - scaleZRight * this.bargeRightInfo.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n }\n public addGutterRight() {\n let offsetXL = (UI.span / 2 + UI.overhangRight - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let offsetZ = this.totalBaySize + UI.overhangFront;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(0, Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupRight.add(gutterGroup); \n }\n public addGutterLeft() {\n let offsetXL = (UI.span / 2 + UI.overhangLeft - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let offsetZ = - UI.overhangBack;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(-offsetXL, offsetY, offsetZ), new Vector3(0, -Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupLeft.add(gutterGroup); \n }\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n\n const height = this.getRoofOffsetY() + \n this.roofInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n \n let offsetX = 0\n \n const ridgeLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.position.set( offsetX, height, this.totalBaySize / 2 + (UI.overhangFront - UI.overhangBack) / 2 + this.geoBraket_2.height / 4 - UI.existingWidth1 / 2 + UI.eaveWidth);\n this.scene.add(ridgeFront)\n }\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n\n rightCap.rotateY(Math.PI)\n\n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n\n leftCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n\n return new Group().add(leftCap, rightCap)\n }\n\n public getRoofOffsetY() {\n return UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2);\n }\n}\n\n","import {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n} from \"src/app/app.constants\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n Vector3,\n} from \"three\";\nimport { PatiosGableFBFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"src/app/app.config\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util, getRafterBeamEndCapCode } from \"../utils\";\nimport _ from \"lodash\";\n\nexport class ColumnAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableFBFlyOverManager;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private geo_superiorPost: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroupRight: Group;\n private downpipeGroupLeft: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private geoBeamJoint: GeometryInfo;\n\n private frontPostHeight: number;\n //private extraBracketHeight = 250;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private deferHandle;\n private deferTimeout = CONST.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketsBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n public numberOfBracketsSide = INIT.DEFAULT_BRACKET_NUMBER;\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableFBFlyOverManager) {\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = flyOverManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoBeamJoint.geometry.translate(0, this.geoBeamJoint.height, 0);\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n\n this.downpipeGroupRight = new Group();\n this.downpipeGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupRight.rotateY(Math.PI / 2);\n this.scene.add(this.downpipeGroupRight);\n\n this.downpipeGroupLeft = new Group();\n this.downpipeGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupLeft.rotateY(-Math.PI / 2);\n this.scene.add(this.downpipeGroupLeft);\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter((x) => x.userData.type == \"BOXHELPER\")\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n this.downpipeGroupRight.children = [];\n this.downpipeGroupLeft.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.cutoutExistingBothLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addCenterSuperiorBeam();\n this.addGround();\n\n let offsetZ = 0;\n let first = true;\n let last = false;\n\n this.addHorSuperiorBeam(-UI.span / 2, {\n left: true,\n first: true,\n last: false,\n });\n this.addHorSuperiorBeam(UI.span / 2 - this.geo_superiorBeam.width, {\n right: true,\n first: false,\n last: true,\n });\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n\n this.addSuperiorBeam(offsetZ, {\n back: i == 0,\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n front: i == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n first: i == 0,\n last: i == this.APP.dialogEditBay.listBay.length,\n });\n\n let fitBeam = 0;\n if (i > 0 && i < this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width / 2;\n } else if (i == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width;\n }\n\n this.addRafterSuperiorBeam(\n offsetZ - fitBeam - UI.existingWidth1 / 2 - this.extraOffsetZ,\n {\n front: i == this.APP.dialogEditBay.listBay.length,\n right: true,\n first,\n last,\n }\n );\n this.addRafterSuperiorBeam(\n offsetZ - fitBeam - UI.existingWidth1 / 2 - this.extraOffsetZ,\n { back: i == 0, left: true, first, last }\n );\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetZ += b.value;\n }\n first = false;\n }\n first = true;\n last = false;\n\n this.addBraketOrBeamSideRoof();\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n\n this.addDownPipeRight();\n this.addDownPipeLeft();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n public addBraketOrBeamSideRoof() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData?.position?.back\n )\n );\n\n // LEFT SIDE\n let numOfBrakets = this.numberOfBracketsSide;\n let first = true;\n let last = false;\n\n let offsetZ = 0;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == UI.listBay.length) {\n last = true;\n }\n if (\n i !== 0 &&\n (offsetZ - 2 * this.geo_superiorPost.width > UI.existingWidth1 ||\n (UI.existingType != BUILDING_SIDE.LEFT &&\n UI.existingType != BUILDING_SIDE.BOTH))\n ) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == UI.listBay.length) && !(i == 0),\n front: i == UI.listBay.length,\n first: i == 0,\n last: i == UI.listBay.length,\n left: true,\n right: false,\n });\n }\n\n if (i < UI.listBay.length) {\n offsetZ += UI.listBay[i].value;\n }\n first = false;\n }\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n numOfBrakets = this.numberOfBracketsSide;\n let distance =\n (UI.existingWidth1 > UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1) / numOfBrakets;\n for (let i = 0; i <= numOfBrakets; i++) {\n if (i == numOfBrakets) {\n last = true;\n }\n if (i !== 0) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == numOfBrakets) && !(i == 0),\n front: i == numOfBrakets,\n first: i == 0,\n last: i == numOfBrakets,\n left: true,\n right: false,\n });\n }\n\n offsetZ += distance;\n first = false;\n }\n }\n\n //RIGHT SIDE\n offsetZ = 0;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == UI.listBay.length) {\n last = true;\n }\n if (\n i !== 0 &&\n (offsetZ - 2 * this.geo_superiorPost.width > UI.existingWidth1 ||\n (UI.existingType != BUILDING_SIDE.RIGHT &&\n UI.existingType != BUILDING_SIDE.BOTH))\n ) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == UI.listBay.length) && !(i == 0),\n front: i == UI.listBay.length,\n first: i == 0,\n last: i == UI.listBay.length,\n left: false,\n right: true,\n });\n }\n\n if (i < UI.listBay.length) {\n offsetZ += UI.listBay[i].value;\n }\n first = false;\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n numOfBrakets = this.numberOfBracketsSide;\n let distance =\n (UI.existingWidth1 > UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1) / numOfBrakets;\n for (let i = 0; i <= numOfBrakets; i++) {\n if (i == numOfBrakets) {\n last = true;\n }\n if (i !== 0) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == numOfBrakets) && !(i == 0),\n front: i == numOfBrakets,\n first: i == 0,\n last: i == numOfBrakets,\n left: false,\n right: true,\n });\n }\n\n offsetZ += distance;\n first = false;\n }\n }\n }\n private addDownPipeRight() {\n let offsetZ = this.totalBaySize - this.extraOffsetZ - 50;\n let offsetX = UI.span / 2 + 100;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= offsetXExtra;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += offsetXExtra;\n }\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.overhangRight,\n UI.patiosPitch,\n -1\n ) +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangRight / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupRight.add(meshPipe);\n this.downpipeGroupRight.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangRight,\n offsetY,\n true\n );\n }\n }\n private addDownPipeLeft() {\n let offsetZ = this.totalBaySize - this.extraOffsetZ - 50;\n let offsetX = -UI.span / 2 - 100;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= offsetXExtra;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += offsetXExtra;\n }\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.overhangLeft,\n UI.patiosPitch,\n -1\n ) +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangLeft / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupLeft.add(meshPipe);\n this.downpipeGroupLeft.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangLeft,\n offsetY,\n true\n );\n }\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n //let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n //simplifiedGeo.vertices.push();\n\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n //lineGeo.vertices.push(new Vector3(vertices[i+3], vertices[i+4], vertices[i+5]));\n\n //if(i == 18) break;\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n\n private addGround() {\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.extraOffsetZ +\n UI.overhangBack\n );\n let width = UI.span + UI.overhangLeft + UI.overhangRight;\n let length = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set((UI.overhangRight - UI.overhangLeft) / 2, 0, offsetZ);\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (this.APP.sltExistingType.currentValue == 1) {\n base.position.setX(offsetX);\n }\n if (this.APP.sltExistingType.currentValue == 2) {\n base.position.setX(-offsetX);\n }\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetZ: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n let scalePostY =\n (UI.existingWallHeight +\n +this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height) /\n this.geo_superiorPost.height;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n if (userDataPos.front) {\n postOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n if (userDataPos.center) {\n postOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let offsetX = -UI.span / 2;\n if (userDataPos.right) {\n offsetX = UI.span / 2;\n }\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.left) {\n } else if (userDataPos.right) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n let exceedMoveBackLimit = false;\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(meshPost);\n // let boxPostHelper = new Box3Helper(boxPost);\n // this.APP.scene.add(boxPostHelper);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue != 3) {\n if (meshBracket.userData.position.left) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (meshBracket.userData.position.right) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n }\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n\n public addPostOrBracketBack() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -UI.span / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = UI.span / (this.numberOfBracketsBack - 1);\n\n for (let i = 0; i < this.numberOfBracketsBack; i++) {\n if (i == this.numberOfBracketsBack - 1) {\n last = true;\n }\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let bracketOffsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n UI.braketHeight / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, bracketOffsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n\n let isIntersect = false;\n //let isCutoutInterset = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketsBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -UI.span / 2;\n let offsetXR = UI.span / 2;\n\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n let bracketDistance =\n (this.APP.sldExistingLength2.currentValue - extraWalWidth) /\n (this.numberOfBracketCutout - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n this.APP.sldExistingLength2.currentValue /\n (this.numberOfBracketCutout - 1);\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n //let offsetX = 0;\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL;\n if (first) {\n } else if (last) {\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n first = true;\n\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n\n public addCenterSuperiorBeam() {\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangFront);\n let offsetXR = this.totalBaySize / 2 + UI.overhangBack;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n (UI.span / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const fixX = this.getContainerOffsetXToFitBraketToExistingWall();\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(fixX - this.geo_superiorBeam.width / 2, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n { center: true },\n this.geo_beamEndCap.width / 2,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n\n private addCenterPost(offsetZ, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n this.frontPostHeight =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n\n scalePostY =\n ((UI.span / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.geo_superiorBeam.height) /\n this.geo_centerSuperiorPost.height;\n\n if (userDataPos.last) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let postOffsetX = -this.geo_centerSuperiorPost.width / 2;\n\n let postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n if (userDataPos.first) {\n postOffsetZ = offsetZ - UI.existingWidth1 / 2 - this.extraOffsetZ;\n } else if (userDataPos.last) {\n postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX -= offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX += offsetX;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let offsetXL = 0;\n let offsetXR = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n if (userDataPos.left) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const fixX = this.getContainerOffsetXToFitBraketToExistingWall();\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX + fixX, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n userDataPos,\n this.geo_beamEndCap.width / 2,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n return fitX;\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartZ = pos.z - length;\n const beamEndZ = pos.z;\n\n let endOfBayZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n let startCutBeamZ = beamStartZ;\n let endCutBeamZ = beamStartZ;\n\n const beams = this.utils.getListSeperateBeamsByBaysForFbGable(\n endOfBayZ,\n beamStartZ,\n beamEndZ,\n endCutBeamZ,\n startCutBeamZ\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamZ = beams[i][1];\n startCutBeamZ = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamZ - startCutBeamZ,\n new Vector3(pos.x, pos.y, endCutBeamZ),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasEndCap: UI.beamType == 0 && i == 0,\n hasStartJoint: false,\n hasEndJoint: i !== 0,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addRafterSuperiorBeam(offsetZ, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n (UI.span / 2 - this.geo_superiorBeam.width / 2) /\n this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n\n let scaleX =\n (UI.span / 2 - this.geo_superiorBeam.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let fitZ = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n fitZ = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) -\n this.geo_superiorBeam.width / 2\n );\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) -\n this.geo_superiorBeam.width / 2;\n }\n\n if (userDataPos.left) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n\n let nVer = new Vector3(-1, 0, 0).normalize();\n let pVer = new Vector3(\n -this.geo_superiorBeam.width / 2 +\n beamOffsetX +\n this.scene.position.x +\n fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.right) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n let nVer = new Vector3(1, 0, 0).normalize();\n let pVer = new Vector3(\n this.geo_superiorBeam.width / 2 +\n beamOffsetX +\n this.scene.position.x +\n fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.left) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n -translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n -translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2;\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height;\n } else if (userDataPos.right) {\n offsetX = this.geo_centerSuperiorPost.width / 2;\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (UI.span / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n if (userDataPos.left) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.right) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n\n public addSuperiorBeam(offsetZ: number, userDataPos: any) {\n let offsetX = -UI.span / 2 + this.geo_superiorPost.width;\n if (userDataPos.back) {\n offsetX = -UI.span / 2 + this.geo_superiorBeam.width;\n }\n let offsetY = 0;\n\n let beamLength = UI.span - 2 * this.geo_superiorPost.width;\n if (userDataPos.back) {\n beamLength = UI.span - 2 * this.geo_superiorBeam.width;\n }\n if (\n offsetZ - this.geo_bracket.width - this.geo_superiorPost.width / 2 <\n UI.existingWidth1 &&\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n beamLength = UI.span - 2 * this.geo_superiorBeam.width;\n offsetX = -UI.span / 2 + this.geo_superiorBeam.width;\n }\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n let posZ = offsetZ;\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n posZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ -\n this.geo_superiorBeam.width;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.center) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n posZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ -\n this.geo_superiorBeam.width / 2;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n posZ =\n offsetZ -\n (this.APP.sldExistingWidth1.currentValue / 2 + this.extraOffsetZ);\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n let beamGroup = this.utils.createBeamGroup(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n this.scene.add(beamGroup);\n\n //Add one more beam cutout right\n if (userDataPos.cutout && this.APP.sltExistingType.currentValue == 3) {\n offsetX =\n UI.span / 2 -\n (UI.span - this.APP.sldExistingLength.currentValue) / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK -\n this.geo_superiorBeam.width -\n (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2);\n let beamGroup = this.utils.createBeamGroup(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n this.scene.add(beamGroup);\n }\n }\n public getBracketHeight(offset): number {\n let angle = UI.patiosPitch;\n return this.utils.tan(angle) * offset;\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, ArrowHelper, BufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from 'src/app/core/models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosGableFBFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { BUILDING_SIDE, PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosGableFBFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n private dimensionPatiosPlanLeftOverHang: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableFBFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n \n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n \n\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMiddle.userData = { type: GEOMETRY_TYPE.DIMENSION };\n //this.dimensionPlanMiddle.rotation.set(-Math.PI / 2, 0, 0);\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosPlanLeftOverHang = new Group();\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLeftLeft,\n this.dimensionPlanMidleLeft\n );\n\n\n\n loader.load( environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n \n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if(this.APP.patiosManager && this.APP.patiosManager.patiosGroup){\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosPlanLeftOverHang\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPatiosPlanLeftOverHang.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n // this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX = -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI, 0);\n }\n else {\n let offsetZ = - UI.overhangBack - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.dimensionPlanMidleLeft.rotation.set(0, 0, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX = -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) + this.totalBaySize / 2;\n this.dimensionPlanMiddle.rotation.set(0, 0, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom(){\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneRotation: new Vector3(0, 0, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, 0, 0)\n }\n let dimSpan = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, UI.overhangLeft, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, UI.overhangRight, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n let offsetX = -this.totalBaySize / 2;\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true }, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textRotation: new Vector3(0, - Math.PI, 0),\n fitZ: -10\n }\n let dimBay = this.dimensionPatiosPlanRight.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n \n let offsetRight = this.totalBaySize / 2 ;\n let offsetLeft = this.totalBaySize / 2;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, UI.overhangFront, views, \"Right\", Math.PI,\"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, UI.overhangBack, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n dim.userData['position'] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n \n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let height = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n let dimOffsetY = height/2;\n\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n this.dimensionPatiosRightLeft.position.set(0,this.dimensionPatiosLeftRight.position.y,this.dimensionPatiosLeftRight.position.z);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() { \n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z + fitZ))\n textCover.position.set(pos.x , pos.y, pos.z);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosPlanLeftOverHang.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n\n ]){\n if(!dim.userData.views){\n // console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n\n private getGeometryFromBufferGeometry(bufferGeo: BufferGeometry) {\n let points: Vector3[] = [];\n let verties = bufferGeo.getAttribute('position').array;\n for (let i = 0; i < verties.length; i += 3) {\n points.push(new Vector3(verties[i], verties[i + 1], verties[i+2]));\n }\n\n return new Geometry().setFromPoints(points);\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n \n //this.APP.sldSpan.addAction(this.eventHandleId);\n //this.APP.sldMultiSpan.addAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.addAction(this.eventHandleId);\n //this.APP.sldExistingLength.addAction(this.eventHandleId);\n //this.APP.sldExistingLength2.addAction(this.eventHandleId);\n //this.APP.sltExistingType.addAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.addAction(this.eventHandleId);\n //this.APP.dialogEditBay.addAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.addAction(this.eventHandleId);\n //this.APP.sldRightOverhang.addAction(this.eventHandleId);\n //this.APP.sldBackOverhang.addAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.addAction(this.eventHandleId);\n //this.APP.sltRoofPitch.addAction(this.eventHandleId);\n }\n private unregisterEvent(): void{\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.APP.sldSpan.removeAction(this.eventHandleId);\n //this.APP.sldMultiSpan.removeAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength2.removeAction(this.eventHandleId);\n //this.APP.sltExistingType.removeAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.removeAction(this.eventHandleId);\n //this.APP.dialogEditBay.removeAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.removeAction(this.eventHandleId);\n //this.APP.sldRightOverhang.removeAction(this.eventHandleId);\n //this.APP.sldBackOverhang.removeAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.removeAction(this.eventHandleId);\n //this.APP.sltRoofPitch.removeAction(this.eventHandleId);\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let height = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n let dimOffsetY = height/2;\n dimension.position.setY(dimOffsetY);\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n //let dimOffsetY = this.APP.sldBuildingHeight.currentValue / 2;\n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n // let offsetDimensionZ = this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // - this.APP.sldExistingWidth1.currentValue / 2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n // dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.totalBaySize / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { ColumnAndBeamManager } from \"./column-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { Group, Box3, Vector3, Box3Helper } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport {\n PatiosManager,\n RafterBeamAndInternalBeamInfo,\n} from \"../patios.manager\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n EXISTING_BUILDING_CONFIG,\n CUTOUT_ENABLE,\n RAKECUT_TYPE,\n BUILDING_SIDE,\n} from \"src/app/app.constants\";\nimport { environment } from \"src/environments/environment\";\nimport { UI } from \"../ui\";\n// import { environment } from 'src/environments/environment';\n\nexport class PatiosGableFBFlyOverManager implements PatiosManager {\n public columnAndBeamManager: ColumnAndBeamManager;\n public roofManager: RoofManager;\n private APP: AppComponent;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n public dimensionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n this.patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndBeamManager = new ColumnAndBeamManager(app, this);\n this.dimensionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndBeamManager.optimize(),\n this.dimensionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndBeamManager.load();\n this.dimensionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsBack = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsSide = bracketQuantity;\n this.columnAndBeamManager.addBraketOrBeamSideRoof();\n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void {}\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimensionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimensionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.patiosLength = totalBaySize + UI.overhangFront;\n this.patiosWidth = UI.span + UI.overhangLeft + UI.overhangRight;\n\n let diff = this.APP.sldExistingLength.currentValue - UI.span;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndBeamManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndBeamManager.load(),\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimensionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left = -UI.span / 2 - UI.overhangLeft;\n let right = UI.span / 2 + UI.overhangRight;\n let front =\n this.APP.dialogEditBay.totalBaySize + UI.overhangFront + UI.overhangBack;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","\nimport { Mesh, Vector3, Material, Plane, Group, BufferGeometry, Geometry, BoxBufferGeometry, MeshLambertMaterial, Matrix4, Object3D, LineSegments, LineBasicMaterial, Box3, Box3Helper, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { GEOMETRY_TYPE, GEOMETRY_CATEGORY } from 'src/app/app.config';\n// import { AppComponent } from \"../../app.component\";\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Print2DView, ViewType, LineType, Printing2DLine, Printing2DGeometry } from 'src/app/core/models';\nimport { PatiosGableFBFlyOverManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport { EXISTING_BUILDING_CONFIG, RAKECUT_TYPE, EXISTING_BUILDING_CONFIG as CONST, BUILDING_SIDE, CUTOUT_ENABLE, PANEL_DIRECTION, RIBSPAN_PANEL_WIDTH, RIBSPAN_BARGE_FIT, FIT_FLYOVER_BRAKET_ON_ROOF } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableFBFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private roofGroupRight: Group;\n private roofGroupLeft: Group;\n\n private objectSizeChangedHandle: any;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private eventHandleId: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG\n \n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableFBFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = new Group();\n flyOverManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve) => {\n\n this.geo_RoofPanel = this.geometryManager.getRoofRibspanPanel();\n this.geo_RoofPanel.geometry\n .translate(- this.geo_RoofPanel.width / 2, this.geo_RoofPanel.height / 2, this.geo_RoofPanel.length / 2);\n this.geo_RoofPanel.geometry.rotateY(Math.PI / 2)\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingLeft.length / 2, this.geo_roofPanelBargeCappingLeft.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_roofPanelBargeCappingLeft.width / 2 + 3);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingRight.length / 2, this.geo_roofPanelBargeCappingRight.height / 2 - RIBSPAN_BARGE_FIT, this.geo_roofPanelBargeCappingRight.width / 2 - 3);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingBack.length / 2, this.geo_roofPanelBargeCappingBack.height / 2 - RIBSPAN_BARGE_FIT, this.geo_roofPanelBargeCappingBack.width / 2 - 3);\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n \n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutRightHor.width / 2);\n\n this.ridgeGeo = this.geometryManager.getRibspanRidgeCapping();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2 + 1, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n this.extraOffsetZ = this.APP.existingWallManager.geo_existingWallL1.width + this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.addRoofLeft();\n this.addRoofRight();\n this.addCutout();\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n\n this.material.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n let width = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n this.roofWidth = width;\n this.roofLength = UI.span / 2 + UI.overhangRight;\n let roofSheetingCount = Math.ceil(width / RIBSPAN_PANEL_WIDTH);\n let offsetZ = - UI.overhangBack;\n\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetZ = this.totalBaySize + UI.overhangFront - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetZ = - UI.overhangBack;\n }\n\n if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 1 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingRight(offsetZ, [this.csg_cutoutLeft]);\n\n this.addRoofSheetingLeft(offsetZ, [this.csg_cutoutLeft]);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 2 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingRight(offsetZ, [this.csg_cutoutRight]);\n\n this.addRoofSheetingLeft(offsetZ, [this.csg_cutoutRight]);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 3 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n\n this.addRoofSheetingRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofSheetingLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingRight(offsetZ, null);\n\n this.addRoofSheetingLeft(offsetZ, null);\n\n offsetZ += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBargeCappingRight();\n this.addBargeCappingLeft();\n\n this.addGutterRight();\n this.addGutterLeft();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.APP.existingWallManager.geo_existingWallL2.width + 100;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 - this.APP.existingWallManager.geo_existingWallL2.width - this.APP.sldBackOverhang.currentValue;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldBackOverhang.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ));\n\n let gutterGroupObjs = this.roofGroupRight.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n .concat(...this.roofGroupLeft.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n\n let roofClipingPlaneLeft = new Plane(new Vector3(0, 0, -1), offsetFront);\n let roofClipingPlaneRight = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneRight);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForFBRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(this.roofGroupLeft.position.x, 0, -(UI.existingWidth1 / 2 + this.extraOffsetZ) - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ));\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n\n let roofClipingPlaneLeft = new Plane(new Vector3(0, 0, -1), offsetFront);\n let roofClipingPlaneRight = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n //let outlineBox = new Box3().setFromBufferAttribute(outlineGeo.getAttribute('position') as Buffer);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n //private getBracketHeight(offset): number{\n // let angle = this.APP.sltRoofPitch.currentValue;\n // return (this.APP.sldFlyOverBracketHeight.currentValue) - this.utils.tan(angle) * offset;\n //}\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n\n const height = this.getRoofOffsetY() +\n this.geo_RoofPanel.height / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n \n let offsetX = 0\n if(UI.existingType == BUILDING_SIDE.RIGHT){\n offsetX = - this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n if(UI.existingType == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n const ridgeLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.position.set( offsetX, height, this.totalBaySize / 2 + (UI.overhangFront - UI.overhangBack) / 2 - UI.existingWidth1 / 2 - this.extraOffsetZ);\n this.scene.add(ridgeFront)\n }\n\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n \n rightCap.rotateY(Math.PI)\n \n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n \n leftCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n \n return new Group().add(leftCap, rightCap)\n }\n\n public addRoofRight() {\n this.roofGroupRight = null;\n this.roofGroupRight = new Group();\n this.roofGroupRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n // 0\n let offsetZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n\n this.roofGroupRight.position.setY(offsetY);\n this.roofGroupRight.position.setZ(offsetZ);\n this.roofGroupRight.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupRight.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupRight.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupRight);\n }\n public addRoofLeft() {\n this.roofGroupLeft = null;\n this.roofGroupLeft = new Group();\n this.roofGroupLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n // 0\n let offsetZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n\n this.roofGroupLeft.position.setY(offsetY);\n this.roofGroupLeft.position.setZ(offsetZ);\n this.roofGroupLeft.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupLeft.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupLeft.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupLeft);\n }\n public addRoofSheetingRight(offsetZ: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let scaleZ = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) / this.geo_RoofPanel.length;\n\n let offsetY = 0;\n let offsetX = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofSheetingLeft(offsetZ: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let scaleZ = (UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) / this.geo_RoofPanel.length;\n\n let offsetY = 0;\n let offsetX = -scaleZ * this.geo_RoofPanel.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupLeft.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n private addBargeCappingRight() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = 0;\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + extraWallWidth;\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let bargeBackLength = this.roofWidth;\n let scaleCutoutVer = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue + this.geo_roofPanelBargeCappingLeft.width, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZLeft = this.utils.getHypotenuseByCos(this.roofLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = this.utils.getHypotenuseByCos(this.roofLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n\n let offsetY = 0;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - fitScale * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - fitScale * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n }\n private addBargeCappingLeft() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = 0;\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + extraWallWidth;\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangLeft;\n let bargeRightLength = UI.span / 2 + UI.overhangLeft;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - scaleZLeft * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - scaleZRight * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n }\n public addGutterRight() {\n let offsetXL = (UI.span / 2 + UI.overhangRight - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let offsetZ = this.totalBaySize + UI.overhangFront;\n\n let gutterLength = this.roofWidth;\n let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(0, Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupRight.add(gutterGroup); \n }\n public addGutterLeft() {\n let offsetXL = (UI.span / 2 + UI.overhangLeft - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let offsetZ = - UI.overhangBack;\n\n let gutterLength = this.roofWidth;\n let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap,\n gutterLength, new Vector3(-offsetXL, offsetY, offsetZ), new Vector3(0, -Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupLeft.add(gutterGroup); \n }\n public getRoofOffsetY() {\n return UI.eaveHeight\n + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2);\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public onColorChanged() {\n if(this.utils && this.geo_RoofPanel.geometry){\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.eventHandleId = this.onColorChanged.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged() {\n this.optimize().then(() => { this.load() });\n }\n public uiChanged(): void {\n this.load();\n }\n uiCHangedDefer() {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n}\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n BufferGeometry,\n Box3,\n Group,\n LineSegments,\n LineBasicMaterial,\n Plane,\n Vector3,\n BoxHelper,\n Geometry,\n BoxBufferGeometry,\n Object3D,\n Matrix4,\n} from \"three\";\nimport { Util, getBeamEndCapCode, getRafterBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"src/app/app.config\";\nimport {\n GeometryInfo,\n Printing2DGeometry,\n Printing2DLine,\n Printing2DGeometryType,\n Print2DView,\n ViewType,\n LineType,\n} from \"src/app/core/models\";\nimport { PatiosGableFreeStandingManager } from \".\";\nimport { UI } from \"../ui\";\nimport { EXISTING_BUILDING_CONFIG } from \"src/app/app.constants\";\nimport _ from \"lodash\";\n\nexport class ColumnAndPurlinManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n\n private eventHandleId: any;\n private totalBaySize: number;\n private frontPostHeight: number;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroup: Group;\n private downpipeGroupBack: Group;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private FIT_SHEETING: number = 0;\n private FIT_SHEETING_BASE: number = -60;\n\n constructor(app: AppComponent, manager: PatiosGableFreeStandingManager) {\n this.APP = app;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = manager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeGroupBack = new Group();\n this.downpipeGroupBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroupBack);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeGroupBack.children = [];\n\n // this.outlineGroup = new Group();\n // this.outlineGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.MESH_OUTLINE };\n // this.scene.add(this.outlineGroup);\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n\n this.addCenterSuperiorBeam();\n\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPost(offsetX, { back: true, first, last });\n this.addPost(offsetX, { front: true, first, last });\n\n this.addCenterPost(offsetX, { center: true, first, last });\n\n let fitBeam = 0;\n\n if (i !== 0) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_superiorBeam.width;\n } else {\n fitBeam = this.geo_superiorBeam.width / 2;\n }\n }\n\n this.addHorSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n back: true,\n first,\n last,\n });\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addPost(offsetX, { multiSpan: true, first, last });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n this.addDownPipeFront();\n this.addDownPipeBack();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n private addDownPipeFront() {\n let offsetZ =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + 100;\n let offsetX = -this.totalBaySize / 2 + 50;\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n let offsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.APP.sldFrontOverhang.currentValue *\n this.utils.tan(this.APP.sltRoofPitch.currentValue);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n offsetY -= 160;\n\n let meshLBottom = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, offsetY, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(\n 0,\n offsetY + 230,\n this.APP.sldFrontOverhang.currentValue + this.FIT_SHEETING - 100\n );\n\n let meshPipeConnect = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, offsetY + 115, 50);\n meshPipeConnect.scale.set(\n 1,\n (this.APP.sldFrontOverhang.currentValue + this.FIT_SHEETING - 140) /\n this.geo_downPipe.height,\n 1\n );\n\n this.downpipeGroup.add(meshLBottom, meshLTop, meshPipeConnect);\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeGroup.add(meshPipe);\n }\n private addDownPipeBack() {\n let offsetZ = -100;\n let offsetX = -this.totalBaySize / 2 + 50;\n\n this.downpipeGroupBack.position.set(offsetX, 0, offsetZ);\n let offsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.APP.sldBackOverhang.currentValue *\n this.utils.tan(this.APP.sltRoofPitch.currentValue);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n offsetY -= 160;\n\n let meshLBottom = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, offsetY, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(\n 0,\n offsetY + 230,\n this.APP.sldBackOverhang.currentValue + this.FIT_SHEETING - 100\n );\n\n let meshPipeConnect = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, offsetY + 115, 50);\n meshPipeConnect.scale.set(\n 1,\n (this.APP.sldBackOverhang.currentValue + this.FIT_SHEETING - 140) /\n this.geo_downPipe.height,\n 1\n );\n\n this.downpipeGroupBack.add(meshLBottom, meshLTop, meshPipeConnect);\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeGroupBack.rotation.set(0, Math.PI, 0);\n this.downpipeGroupBack.add(meshPipe);\n }\n private addGround() {\n let offsetZ = -this.APP.sldBackOverhang.currentValue;\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n let offsetX =\n (this.APP.sldRightOverhang.currentValue -\n this.APP.sldLeftOverhang.currentValue) /\n 2;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addCenterPost(offsetX, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let postOffsetZ = 0;\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ =\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 -\n this.geo_centerSuperiorPost.width / 2;\n\n this.frontPostHeight =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n\n scalePostY =\n (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) *\n this.utils.tan(this.APP.sltRoofPitch.currentValue) -\n this.geo_superiorBeam.height) /\n this.geo_centerSuperiorPost.height;\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let postOffsetX = offsetX - this.geo_centerSuperiorPost.width / 2;\n\n if (userDataPos.first) {\n postOffsetX += this.geo_centerSuperiorPost.width / 2;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_centerSuperiorPost.width / 2;\n } else {\n // postOffsetX -= this.geo_superiorPost.width / 2\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n this.APP.sldBuildingHeight.currentValue,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n private addPost(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let postOffsetZ = 0;\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n postOffsetZ = this.APP.sldSpan.currentValue;\n this.frontPostHeight =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n\n scalePostY =\n this.APP.sldBuildingHeight.currentValue / this.geo_superiorPost.height;\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ = 0;\n scalePostY =\n this.APP.sldBuildingHeight.currentValue / this.geo_superiorPost.height;\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorPost.width;\n // scalePostY = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n // this.APP.sltRoofPitch.currentValue, -1)/this.geo_superiorPost.height;\n\n scalePostY =\n this.APP.sldBuildingHeight.currentValue / this.geo_superiorPost.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addSuperiorBeam(userDataPos: any) {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n\n //this.APP.sldBuildingHeight.currentValue + this.getBracketHeight(this.APP.sldSpan.currentValue);\n offsetZ = this.APP.sldSpan.currentValue;\n if (this.APP.sldMultiSpan.currentValue > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ = 0;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorBeam.width;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n }\n\n public addCenterSuperiorBeam() {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n offsetY =\n this.APP.sldBuildingHeight.currentValue +\n ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) *\n this.utils.tan(this.APP.sltRoofPitch.currentValue) -\n this.geo_superiorBeam.height;\n\n offsetZ =\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 -\n this.geo_superiorBeam.width / 2;\n\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n { center: true },\n \"RB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n ((this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n ((this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, this.APP.sldBuildingHeight.currentValue, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, this.geo_superiorBeam.width / 2);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY = this.APP.sldBuildingHeight.currentValue;\n offsetZ =\n this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, this.APP.sldBuildingHeight.currentValue, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, -1).normalize();\n let pVer = new Vector3(0, 0, -this.geo_superiorBeam.width / 2);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n this.APP.sldBuildingHeight.currentValue +\n ((this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) *\n this.utils.tan(this.APP.sltRoofPitch.currentValue);\n offsetZ =\n (this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2;\n\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.front) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n this.APP.sldBuildingHeight.currentValue +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlane =\n heightReal * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZ =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n this.APP.sldBuildingHeight.currentValue -\n this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlaneBottom =\n heightRealBottom * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZBottom =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.sin(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length /\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n -Math.PI / 2 +\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n this.APP.sldBuildingHeight.currentValue +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlane =\n heightReal * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZ =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n -translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n this.APP.sldBuildingHeight.currentValue -\n this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlaneBottom =\n heightRealBottom * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZBottom =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n -translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.sin(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length /\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n -Math.PI / 2 +\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n if (userDataPos.front) {\n beamGroup.rotateZ(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n } else if (userDataPos.back) {\n beamGroup.rotateZ(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n }\n\n this.scene.add(beamGroup);\n }\n\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n\n let offsetXL = 0;\n let offsetXR =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n 2 * this.geo_superiorBeam.width;\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n 2 * this.geo_superiorPost.width) /\n this.geo_superiorBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorPost.width;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n offsetXL + this.geo_beamEndCap.length / 2 - 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n offsetXR - this.geo_beamEndCap.length / 2 + 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n name: \"GB\",\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n this.scene.add(beamGroup);\n }\n\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n let beamObjs: Object3D[] = [];\n for (let g of beamGroups) {\n beamObjs = beamObjs.concat(g.children);\n }\n\n objs = [...objs, ...beamObjs];\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n o.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n o.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n return lineGeo;\n }\n\n private getBracketHeight(offset): number {\n let angle = this.APP.sltRoofPitch.currentValue;\n return (\n this.APP.sldFlyOverBracketHeight.currentValue -\n this.utils.tan(angle) * offset\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n this.APP.sltRoofPitch,\n this.APP.sltWindClass,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n}\n","import { Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, Matrix4, Box3, Geometry, BoxBufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText } from 'src/app/core/models';\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { UI } from \"../ui\";\nimport { PatiosGableFreeStandingManager } from \".\";\nimport { FIT_DIMENSION, FIT_DIMENSION_MEDIUM, PANEL_DIRECTION } from \"src/app/app.constants\";\n\nexport class DimensionManager {\n private scene: Group;\n private APP: AppComponent;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n private MANAGER: PatiosGableFreeStandingManager;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosHigherHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, freeStandingManager: PatiosGableFreeStandingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.scene = freeStandingManager.patiosGroup;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.MANAGER = freeStandingManager;\n\n this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = new GeometryInfo();\n this.lineGeo.geometry = new PlaneBufferGeometry(1000, 50);\n this.lineGeo.width = 50;\n this.lineGeo.length = 1000;\n\n this.lineCapGeo = new GeometryInfo();\n this.lineCapGeo.geometry = new PlaneBufferGeometry(50, 200);\n this.lineCapGeo.width = 50;\n this.lineCapGeo.length = 200;\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosHigherHeightDim = new Group();\n this.dimensionPatiosHigherHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosHigherHeightDim.rotation.set(0, Math.PI / 2, Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.scene.add(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n\n loader.load( environment.modelBaseUrl + '/../assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n\n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n }\n \n public draw(){\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosHigherHeightDim.children = this.dimensionPatiosHigherHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionHigherHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim(){\n const height = UI.height - this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height\n const offsetZ = UI.span + UI.multiSpan +FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, height / 2, offsetZ);\n\n let textStr = this.utils.getDimensionValue(height);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: height,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionHigherHeightDim(){\n const height = UI.height + ( UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch)\n const offsetZ = - UI.overhangBack - FIT_DIMENSION_MEDIUM;\n const offsetX = UI.totalBayLength / 2 + FIT_DIMENSION_MEDIUM + UI.overhangRight;\n\n this.dimensionPatiosHigherHeightDim.position.set(offsetX, height / 2, offsetZ);\n\n let textStr = this.utils.getDimensionValue(height);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: height,\n container: this.dimensionPatiosHigherHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosHigherHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n let offsetZ = UI.span / 2 - UI.existingWidth1 / 2;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetX = this.totalBaySize / 2 + UI.overhangRight;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n }\n else {\n let offsetX = - this.totalBaySize / 2 - UI.overhangLeft;\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n dimLeft.visible = false;\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = UI.span / 2 - UI.existingWidth1 / 2;\n this.dimensionPlanMiddle.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize/2;\n let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2;\n \n\n let _dimensionDistane = this.dimensionDistance2;\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // if(this.APP.sldExistingWidth1.currentValue > 0){\n // _dimensionDistane = this.dimensionDistance;\n // }\n // }\n\n let offsetDimensionX = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n // }\n\n this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = Math.ceil(this.APP.sldBuildingHeight.currentValue + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 * this.utils.tan(this.APP.sltRoofPitch.currentValue))\n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height/2;\n\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // dimOffsetX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n // }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX,dimOffsetY,0);\n \n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,0,0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight(){\n let dimOffsetY = Math.ceil(this.APP.sldBuildingHeight.currentValue + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 * this.utils.tan(this.APP.sltRoofPitch.currentValue));\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n \n\n this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n \n let scaleLength = dimOffsetY / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(dimOffsetY);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text);\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(0,0,0);\n \n this.dimensionPatiosRightBottom.add(dim);\n }\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n let dimOffsetY = Math.ceil(this.APP.sldBuildingHeight.currentValue + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 * this.utils.tan(this.APP.sltRoofPitch.currentValue));\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n this.dimensionPatiosRightLeft.add(dim);\n }\n });\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){ \n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n \n \n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children\n ]){\n if(!dim.userData.views){\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n \n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n \n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n \n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n \n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n \n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n \n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n \n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n \n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n \n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId)); \n }\n private unregisterEvent(): void{\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n}\n","import { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { ColumnAndPurlinManager } from './column-and-purlin.manager';\nimport { RoofManager } from './roof.manager';\nimport { PatiosManager, RafterBeamAndInternalBeamInfo } from '../patios.manager';\nimport { Printing2DGeometry } from 'src/app/core/models';\nimport { Group, Box3 } from 'three';\nimport { GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { DimensionManager } from './dimension.manager';\n\nexport class PatiosGableFreeStandingManager implements PatiosManager{\n patiosGroup: Group;\n public boundingBox: Box3;\n public columnAndPurlinManager: ColumnAndPurlinManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public cutoutCondition: boolean;\n public get rakecutCondition(): boolean{\n return true;\n }\n public ignoreBayEvent: boolean = false;\n public patiosWidth: number;\n public patiosLength: number;\n public firstLoad = true;\n private controlsToRegisterEvent: Array;\n private APP: AppComponent;\n private updateEventHandle: any;\n\n constructor(app: AppComponent){\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS }\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndPurlinManager = new ColumnAndPurlinManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndPurlinManager.optimize(),\n this.dimesionManager.optimize()\n ])\n .then(() => {\n this.roofManager.load();\n this.columnAndPurlinManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n \n }\n loadBracketCutout(bracketQuantity: number): void{\n \n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n enableCutout(enable: boolean){\n \n }\n changeToExistingTypeBoth(){\n \n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void{\n \n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return { \n lines: [\n ...this.columnAndPurlinManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines\n ], \n texts: dimensionOutline.texts\n }\n }\n public destroy(): void {\n this.columnAndPurlinManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.update.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness, \n this.APP.sltGutterType,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWallHeight,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltColourBeam,\n this.APP.btnTurnOnPanel\n ];\n this.controlsToRegisterEvent.forEach(c => { c.addAction(this.updateEventHandle); });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.updateEventHandle));\n }\n update(preVal: number, curVal: number): void {\n this.patiosGroup.position.setX(0);\n this.patiosGroup.position.setZ(- (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2);\n Promise.all([\n this.roofManager.load(),\n this.columnAndPurlinManager.load()\n ]).then(() => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n //this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n })\n }\n}\n","import { Mesh, Vector3, Material, Plane, Group, BufferGeometry, Geometry, LineSegments, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Print2DView, ViewType, LineType } from 'src/app/core/models';\nimport { PatiosGableFreeStandingManager } from '.';\nimport { PANEL_DIRECTION, RIBSPAN_BARGE_FIT, RIBSPAN_PANEL_WIDTH } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableFreeStandingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n\n private roofGroupFront: Group;\n private roofGroupBack: Group;\n\n private eventHandleId: any;\n\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private FIT_SHEETING: number = 0;\n private FIT_SHEETING_BASE: number = -60;\n\n\n constructor(app: AppComponent, freeStandingManager: PatiosGableFreeStandingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = freeStandingManager;\n this.scene = new Group();\n freeStandingManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n \n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.geo_RoofPanel = this.geometryManager.getRoofRibspanPanel();\n this.geo_RoofPanel.geometry\n .translate(-this.geo_RoofPanel.width / 2, this.geo_RoofPanel.height / 2, -this.geo_RoofPanel.length / 2);\n this.geo_RoofPanel.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n \n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingLeft.width/2 - 3,this.geo_roofPanelBargeCappingLeft.height/2 - RIBSPAN_BARGE_FIT,this.geo_roofPanelBargeCappingLeft.length/2);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .translate(-this.geo_roofPanelBargeCappingRight.width/2 + 3,this.geo_roofPanelBargeCappingRight.height/2 - RIBSPAN_BARGE_FIT,this.geo_roofPanelBargeCappingRight.length/2);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI/2)\n .translate(this.geo_roofPanelBargeCappingBack.length/2,this.geo_roofPanelBargeCappingBack.height/2 - RIBSPAN_BARGE_FIT,this.geo_roofPanelBargeCappingBack.width/2 - 3);\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI/2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.ridgeGeo = this.geometryManager.getRibspanRidgeCapping();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2 + 1, -this.ridgeGeo.height / 2, 0);\n // this.ridgeGeo.geometry.rotateY(Math.PI / 2)\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n \n this.addRoofFront();\n this.addRoofBack();\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n \n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n\n // this.material.clippingPlanes = [];\n // MaterialManager.Instance().ROOF_BASE.clippingPlanes = [];\n\n let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width/RIBSPAN_PANEL_WIDTH);\n let offsetX = -(this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue);\n\n //panel direction\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n // let helper = new PlaneHelper(clipingPlaneRight, 10000, 0xffff00);\n // helper.userData = { type: 'HELPER' };\n // this.APP.scene.add(helper);\n\n const OFFSET_TOLE_AND_BASE = 10\n\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n \n this.addRoofSheetingFront(offsetX + OFFSET_TOLE_AND_BASE);\n this.addRoofSheetingBack(offsetX + OFFSET_TOLE_AND_BASE);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n\n this.addBargeCappingFront();\n this.addBargeCappingBack();\n \n this.addGutterFront();\n this.addGutterBack();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n \n let objs = this.roofGroupFront.children.filter(o => \n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL \n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE \n ).concat(...this.roofGroupBack.children.filter(o => \n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL \n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE \n ));\n\n let gutterObjs = this.roofGroupFront.children.find(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).children.concat(...this.roofGroupBack.children.find(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).children);\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0,5000,0); \n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlane);\n }\n \n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n \n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ));\n \n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n \n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n \n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n \n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n \n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n } \n public addRoofFront(){\n this.roofGroupFront = null;\n this.roofGroupFront = new Group();\n this.roofGroupFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2;\n\n this.roofGroupFront.position.setY(offsetY);\n this.roofGroupFront.position.setZ(offsetZ);\n this.roofGroupFront.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupFront);\n }\n public addRoofBack(){\n this.roofGroupBack = null;\n this.roofGroupBack = new Group();\n this.roofGroupBack.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2;\n\n this.roofGroupBack.position.setY(offsetY);\n this.roofGroupBack.position.setZ(offsetZ);\n this.roofGroupBack.rotateX(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupBack);\n }\n public addRoofSheetingFront(offsetX: number){\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n \n let scaleZ = ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldFrontOverhang.currentValue\n + this.FIT_SHEETING)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_RoofPanel.length;\n \n let offsetY = 0;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n \n this.roofGroupFront.add(mesh);\n }\n public addRoofSheetingBack(offsetX: number){\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n \n let scaleZ = ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldBackOverhang.currentValue\n + this.FIT_SHEETING)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_RoofPanel.length;\n \n let offsetY = 0;\n let offsetZ = - scaleZ * this.geo_RoofPanel.length;\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n \n this.roofGroupBack.add(mesh);\n }\n private addBargeCappingFront(){\n let mesh: Mesh;\n\n let offsetLeft = this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue;\n\n let scaleX = (this.APP.sldLeftOverhang.currentValue \n + this.totalBaySize \n + this.APP.sldRightOverhang.currentValue)/this.geo_roofPanelBargeCappingBack.length;\n \n let fitZ = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(this.APP.sltRoofPitch.currentValue)\n\n let scaleZ = ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldFrontOverhang.currentValue \n + this.FIT_SHEETING + fitZ)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_roofPanelBargeCappingLeft.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(-offsetLeft);\n mesh.position.setZ(-fitZ)\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(offsetRight);\n mesh.position.setZ(-fitZ)\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n }\n\n private addBargeCappingBack(){\n let mesh: Mesh;\n\n let offsetLeft = this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue;\n\n let scaleX = (this.APP.sldLeftOverhang.currentValue \n + this.totalBaySize \n + this.APP.sldRightOverhang.currentValue)/this.geo_roofPanelBargeCappingBack.length;\n\n let fitZ = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(this.APP.sltRoofPitch.currentValue);\n\n let scaleZ = ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldBackOverhang.currentValue \n + this.FIT_SHEETING + fitZ)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_roofPanelBargeCappingLeft.length;\n\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(-offsetLeft);\n mesh.position.setZ(- scaleZ * this.geo_roofPanelBargeCappingLeft.length + fitZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(offsetRight);\n mesh.position.setZ(- scaleZ * this.geo_roofPanelBargeCappingLeft.length + fitZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n\n public addGutterFront(){\n let mesh: Mesh;\n \n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = 0;\n let offsetZ = (this.APP.sldFrontOverhang.currentValue \n + (this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) / 2\n + this.FIT_SHEETING - 50)/this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue)/this.geo_gutterBack.length;\n \n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n \n let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh.position.set(offsetXL, 0, 0);\n\n let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh2.position.set(offsetXR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n gutterGroup.position.set(0, offsetY, offsetZ);\n gutterGroup.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n this.roofGroupFront.add(gutterGroup);\n }\n\n public addRidgeCapping(){\n let ridgeFront = this.createRidgeCapping();\n const height = this.getRoofOffsetY() + \n this.geo_RoofPanel.height / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const ridgeLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.rotation.set(0, Math.PI / 2, 0)\n ridgeFront.position.set((this.APP.sldRightOverhang.currentValue - this.APP.sldLeftOverhang.currentValue) / 2, height, (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2);\n this.scene.add(ridgeFront)\n }\n\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n \n rightCap.rotateY(Math.PI)\n \n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n \n leftCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n \n return new Group().add(leftCap, rightCap)\n }\n\n public addGutterBack(){\n let mesh: Mesh;\n \n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = 0;\n let offsetZ = -(this.APP.sldBackOverhang.currentValue \n + (this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) / 2\n + this.FIT_SHEETING - 50)/this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue)/this.geo_gutterBack.length;\n \n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n \n let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh.position.set(offsetXL, 0, 0);\n\n let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh2.position.set(offsetXR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n gutterGroup.position.set(-(this.APP.sldLeftOverhang.currentValue - this.APP.sldRightOverhang.currentValue), offsetY, offsetZ);\n gutterGroup.rotation.set(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), Math.PI, 0);\n this.roofGroupBack.add(gutterGroup);\n }\n public getRoofOffsetY() {\n return this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public onColorChanged() {\n if(this.utils && this.geo_RoofPanel.geometry){\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void{\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number){\n this.optimize().then(() => { this.load() });\n }\n}\n","import {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport { PANEL_DIRECTION, RAKECUT_TYPE } from \"src/app/app.constants\";\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { GableLRFasciaManager } from \".\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: GableLRFasciaManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any;\n private textParameter: any;\n private isReady = false;\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n private geometryManager: GeometryManager;\n\n constructor(app: AppComponent, manager: GableLRFasciaManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n\n this.isReady = true;\n this.draw();\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if (existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left) {\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n this.APP.dimensionManager.draw();\n }\n private drawDimensionMidleLeft() {\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n let offsetZ =UI.span / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetX = this.totalBaySize / 2 + UI.overhangRight;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n }\n else {\n let offsetX = - this.totalBaySize / 2 - UI.overhangLeft;\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n dimLeft.visible = false;\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4 + UI.span / 2;\n this.dimensionPlanMiddle.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 + this.APP.sldEaveWidth.currentValue - this.APP.sldExistingWidth1.currentValue / 2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2;\n //}\n\n let offsetZ =\n this.box.max.z +\n this.dimensionDistance2 +\n this.APP.sldEaveWidth.currentValue;\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n },\n };\n let dimBay = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n offsetX += b.value;\n }\n\n //rakecut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n -this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftCutHorizontal.currentValue / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldRightCutHorizontal.currentValue / 2 +\n this.APP.sldRightOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500 - 200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n );\n }\n //End rakecut\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldLeftOverhang.currentValue,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldRightOverhang.currentValue,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n //let offsetDimensionX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // offsetDimensionX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimSpan = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n // let offsetX = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n\n // let scaleLength = this.APP.sldMultiSpan.currentValue / this.lineGeo.length;\n dimLength += this.APP.sldMultiSpan.currentValue;\n let textStr = this.utils.getDimensionValue(\n this.APP.sldMultiSpan.currentValue\n );\n let optionsMul: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n 0,\n 0\n ),\n textPos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n -200,\n 0\n ),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimMul = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) as Dimension;\n if (!dimMul) {\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN\n );\n }\n\n let extraDistance = 0;\n\n //----Rake cut\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ =\n dimLength / 2 +\n UI.multiSpan / 2 +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3(0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n );\n }\n //----End rake cut\n\n let offsetRight =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2; // + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n this.APP.sldFrontOverhang.currentValue,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n this.APP.sldBackOverhang.currentValue,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT,\n extraDistance\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = UI.existingWallHeight + +UI.upstandBraketType + this.MANAGER.postAndBeamManager.beamInfo.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n\n let dimOffsetX =\n this.totalBaySize / 2 +\n this.APP.patiosManager.patiosGroup.position.x +\n _dimensionDistane;\n let dimOffsetY = height / 2;\n if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n dimOffsetX =\n this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n }\n\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.existingWallHeight + +UI.upstandBraketType + this.MANAGER.postAndBeamManager.beamInfo.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = +dimOffsetY.toFixed(0);\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY = UI.existingWallHeight + +UI.upstandBraketType + this.MANAGER.postAndBeamManager.beamInfo.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { PatiosManager, RafterBeamAndInternalBeamInfo } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport { Group, Box3, Vector3 } from \"three\";\nimport { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\n\nexport class GableLRFasciaManager implements PatiosManager {\n public patiosGroup: Group;\n public boundingBox: Box3;\n private APP: AppComponent;\n public postAndBeamManager: PostAndBeamManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n\n private updateEventHandle: any;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private controlsToRegisterEvent: Array;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [\n this.APP.sldEaveWidth,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n ]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraket(bracketQuantity);\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraketCutOut(bracketQuantity);\n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void{\n \n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.sltBeamLayoutShow,\n this.APP.btnTurnOnPanel\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number): void {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n //let cutoutCondition = this.cutoutCondition.map(x => x.currentValue).reduce((a, b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.sltExistingType.currentValue == 1) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n // this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue + this.APP.sldEaveWidth.currentValue - this.APP.sldExistingLength2.currentValue);\n this.patiosGroup.position.setX(\n -diff / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n // this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue + this.APP.sldEaveWidth.currentValue);\n this.patiosGroup.position.setX(\n -diff / 2 + this.APP.sldEaveWidth.currentValue\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n // this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue - this.APP.sldEaveWidth.currentValue + this.APP.sldExistingLength2.currentValue);\n this.patiosGroup.position.setX(\n diff / 2 -\n this.APP.sldEaveWidth.currentValue +\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n // this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue - this.APP.sldEaveWidth.currentValue);\n this.patiosGroup.position.setX(\n diff / 2 - this.APP.sldEaveWidth.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, this.APP.sldEaveWidth.currentValue));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n box.translate(new Vector3(this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n box.translate(new Vector3(-this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import _ from \"lodash\";\nimport Beam, { BeamOptions } from \"src/app-ribspan/models/Beam.model\";\nimport UpstandBraket, {\n UpstandBraketOptions,\n} from \"src/app-ribspan/models/UpstandBraket.model\";\nimport {\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n Vector3,\n} from \"three\";\nimport { GableLRFasciaManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { BUILDING_SIDE, EXISTING_BUILDING_CONFIG } from \"src/app/app.constants\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"src/app/core/models\";\nimport { UI } from \"../ui\";\nimport { Util, getBeamEndCapCode, getRafterBeamEndCapCode } from \"../utils\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableLRFasciaManager;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private existingTypeLeftX: number;\n private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private frontPostHeight: number;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n public geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geoBraketExtL_2: GeometryInfo;\n private geoBraketExtR_2: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n private geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n\n private offsetYBraket = 0;\n\n k: number;\n k_: number;\n j: number;\n l: number;\n m: number;\n v: number;\n\n constructor(app: AppComponent, fasciaManager: GableLRFasciaManager) {\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = fasciaManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, scalePostHeight, 1);\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBraketExtL_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtL_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateY(-Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtL_2.geometry.translate(\n -this.geoBraketExtL_2.height / 2,\n this.geoBraketExtL_2.length / 2,\n this.geoBraketExtL_2.height / 3 - this.geoBraket_1.width / 2\n );\n //Right\n this.geoBraketExtR_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtR_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateY(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtR_2.geometry.translate(\n this.geoBraketExtR_2.height / 2,\n this.geoBraketExtR_2.length / 2,\n this.geoBraketExtR_2.height / 3 - this.geoBraket_1.width / 2\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofWidth = this.totalBaySize;\n this.existingType = +this.APP.sltExistingType.currentValue;\n this.existingTypeLeftX = 0;\n this.existingTypeRightX = 0;\n if (this.existingType === 1 || this.existingType === 3) {\n this.existingTypeLeftX = this.APP.sldEaveWidth.currentValue;\n }\n if (this.existingType === 2 || this.existingType === 3) {\n this.existingTypeRightX = this.APP.sldEaveWidth.currentValue;\n }\n this.offsetYBraket = 0;\n if (UI.upstandBraketType == 150) {\n this.offsetYBraket =\n 150 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 300) {\n this.offsetYBraket =\n 300 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 450) {\n this.offsetYBraket =\n 450 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 600) {\n this.offsetYBraket =\n 600 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n this.offsetYBraket -=\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch) +\n (this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n }\n\n this.addBeam({ isMultiSpan: false });\n this.addBeam({ isMultiSpan: true });\n\n this.addGround();\n let offsetX = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let offsetXOrigin = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let idx = 0;\n\n this.addPost(offsetX, { isMultiSpan: false, left: true });\n this.addUpstandBraketExt({ isMultiSpan: false, left: true });\n\n this.addPost(offsetX, { isMultiSpan: true, left: true });\n this.addUpstandBraketExt({ isMultiSpan: true, left: true });\n\n this.addCenterSuperiorBeam();\n\n this.addHorSuperiorBeam(offsetX, {\n front: true,\n first: true,\n last: false,\n });\n this.addCenterPost(offsetX, { center: true, first: true, last: false });\n\n this.addRafterSuperiorBeam(offsetX - this.beamInfo.width / 2, {\n front: true,\n first: true,\n last: false,\n });\n this.addRafterSuperiorBeam(offsetX - this.beamInfo.width / 2, {\n back: true,\n first: true,\n last: false,\n });\n\n this.APP.dialogEditBay.listBay.map((m) => {\n offsetX += m.value;\n this.addHorSuperiorBeam(\n offsetX -\n (idx === this.APP.dialogEditBay.listBay.length - 1\n ? this.geoBeam.width\n : this.geoBeam.width / 2),\n {\n front: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n }\n );\n\n this.addCenterPost(offsetX, {\n center: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n });\n\n this.addRafterSuperiorBeam(\n offsetX -\n (idx === this.APP.dialogEditBay.listBay.length - 1\n ? this.beamInfo.width * 1.5\n : this.beamInfo.width),\n {\n front: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n }\n );\n this.addRafterSuperiorBeam(\n offsetX -\n (idx === this.APP.dialogEditBay.listBay.length - 1\n ? this.beamInfo.width * 1.5\n : this.beamInfo.width),\n {\n back: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n }\n );\n\n if (idx === this.APP.dialogEditBay.listBay.length - 1) {\n offsetX -= this.postInfo.width;\n this.addPost(offsetX, { isMultiSpan: false, right: true });\n this.addPost(offsetX, { isMultiSpan: true, right: true });\n } else {\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: false,\n });\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: true,\n });\n }\n idx++;\n });\n\n this.addUpstandBraketExt({ isMultiSpan: false, right: true });\n this.addUpstandBraketExt({ isMultiSpan: true, right: true });\n\n this.addDownPipe();\n\n this.addUpstandBeam();\n\n this.addUpstandBraket();\n this.addUpstandBraketCutOut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addUpstandBeam() {\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType + this.beamInfo.height;\n let pos = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + height,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2\n );\n let totalLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n pos.setX(pos.x + UI.existingLength2);\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n }\n }\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n this.cutStandardBeamToEqualLengthBeam(\n this.beamInfo,\n this.geo_beamEndCap,\n totalLength,\n pos,\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n // Beam cutout\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n let offsetHeightCutout = +UI.upstandBraketType + this.beamInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetHeightCutout +=\n (UI.existingWidth1 + this.geoBraket_2.height / 4) *\n this.utils.tan(UI.patiosPitch);\n } else {\n offsetHeightCutout -=\n (UI.existingWidth1 + this.geoBraket_2.height / 4) *\n this.utils.tan(UI.patiosPitch);\n }\n\n if (offsetHeightCutout < 0) {\n return;\n }\n if (UI.existingType == 1 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.beamInfo,\n this.geo_beamEndCap,\n UI.existingLength2,\n new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.beamInfo,\n this.geo_beamEndCap,\n UI.existingLength2,\n new Vector3(\n UI.totalBayLength / 2 - UI.existingLength2 + UI.overhangRight,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n }\n }\n public addUpstandBraket(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET\n )\n );\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n let distance = 1000;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n\n if (UI.existingType == 0) {\n let startX =\n -bayMainLength / 2 > -UI.existingLength1 / 2\n ? -bayMainLength / 2\n : -UI.existingLength1 / 2;\n let endX =\n bayMainLength / 2 < UI.existingLength1 / 2\n ? bayMainLength / 2\n : UI.existingLength1 / 2;\n distance = (endX - startX) / (numOfBraket - 1);\n offsetX = startX;\n } else if (UI.existingType == 1) {\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n distance =\n (UI.existingLength1 - UI.eaveWidth - _bracketOffsetXExt) /\n (numOfBraket - 1);\n }\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX =\n -bayMainLength / 2 + UI.existingLength2 / 2 + _bracketOffsetXExt;\n }\n } else if (UI.existingType == 2) {\n offsetX = -bayMainLength / 2;\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n offsetX =\n -bayMainLength / 2 +\n (bayMainLength - UI.existingLength1 + UI.eaveWidth);\n distance =\n (UI.existingLength1 - _bracketOffsetXExt - UI.eaveWidth) /\n (numOfBraket - 1);\n }\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n } else if (UI.existingType == 3) {\n distance = (bayMainLength - _bracketOffsetXExt * 2) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n }\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetX;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth - UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetX += distance;\n }\n }\n\n public addUpstandBraketCutOut(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n )\n );\n if (HomeComponent.ins.sltCutOut._isDisable || UI.cutOutType == 0) {\n return;\n }\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType;\n // if (UI.isUpFasciaUpstandardBracket) {\n // height += (UI.existingWidth1 + this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n // } else {\n // height -= (UI.existingWidth1 + this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n // }\n\n if (height < 0) {\n return;\n }\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n if (UI.existingType == 1 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangLeft : 0;\n let distance =\n (UI.existingLength2 - UI.eaveWidth - UI.overhangLeft + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ = -UI.totalBayLength / 2 - _offsetZ + _bracketOffsetXExt;\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangRight : 0;\n let distance =\n (UI.existingLength2 - (UI.overhangRight + UI.eaveWidth) + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ =\n UI.totalBayLength / 2 -\n UI.existingLength2 +\n UI.eaveWidth +\n UI.overhangRight -\n _bracketOffsetXExt;\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n }\n private addDownPipe() {\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth +\n 100 -\n UI.existingWidth1 / 2 +\n this.geoBraket_2.height / 4;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + +UI.upstandBraketType + this.geoBeam.height,\n UI.overhangFront,\n this.APP.sltRoofPitch.currentValue,\n -1\n ) + 10;\n\n this.downpipeGroup = this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n 0,\n offsetZ,\n offsetZ,\n 0,\n this.APP.sldFrontOverhang.currentValue,\n offsetY,\n true\n );\n }\n private addGround() {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - UI.overhangBack;\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.geoBraket_2.height / 4;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private getRoofHeight() {\n const _height = this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue,\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n return this.APP.sldExistingWallHeight.currentValue - _height;\n }\n private updateUI() {\n this.APP.roofHeight = this.getRoofHeight();\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let braketGroup = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n );\n\n for (let g of braketGroup) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n g.children[1] as Mesh,\n 60\n );\n g.children[1].updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(g.children[1].matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: simplifiedGeo.vertices,\n views: g.userData.views,\n });\n\n g.children[0].updateMatrix();\n let objCloned = g.children[0].clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(g.children[0].matrix));\n\n let box = new BoxHelper(objCloned);\n\n g.children[0].updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(g.children[0].matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo1 = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo1.vertices,\n views: g.userData.views,\n });\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addCenterPost(offsetX, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n let postOffsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n this.frontPostHeight =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n\n scalePostY =\n (((UI.span + UI.multiSpan) / 2 - this.geoBeam.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.geoBeam.height) /\n this.geo_centerSuperiorPost.height;\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let postOffsetX = offsetX - this.geo_centerSuperiorPost.width;\n\n if (userDataPos.first) {\n postOffsetX += this.geo_centerSuperiorPost.width / 2;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_centerSuperiorPost.width / 2;\n } else {\n }\n\n // if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n // let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n // postOffsetX -= offsetX\n // }\n // if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n // let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n // postOffsetX += offsetX\n // }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addPost(offsetX: number, userDataPos: any) {\n if (userDataPos.isMultiSpan && this.APP.sldMultiSpan.currentValue === 0) {\n return;\n }\n // // let _flag = false;\n // if (userDataPos.left && this.APP.sldLeftOverhang.currentValue > 0 && this.APP.sltExistingType.currentValue == 1) {\n // // _flag = true;\n // return;\n // } else if (userDataPos.right && this.APP.sldRightOverhang.currentValue > 0 && this.APP.sltExistingType.currentValue == 2) {\n // // _flag = true;\n // return;\n // }\n const condition =\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue;\n if (!userDataPos.isMultiSpan) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n } else {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n }\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue +\n this.geoBraket_2.height / 4;\n if (userDataPos.isMultiSpan) {\n offsetZ +=\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue -\n this.beamInfo.width / 2;\n } else {\n offsetZ +=\n this.APP.sldSpan.currentValue -\n (this.APP.sldMultiSpan.currentValue > 0 ? 0 : this.beamInfo.width / 2);\n }\n let scaleY = 0;\n let length = 0;\n\n if (userDataPos.isMultiSpan) {\n length = UI.existingWallHeight + +UI.upstandBraketType;\n scaleY = length / this.postInfo.height;\n } else {\n length = UI.existingWallHeight + +UI.upstandBraketType;\n scaleY = length / this.postInfo.height;\n }\n\n //in case of multi span & apply to back post only\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue >\n this.APP.sldExistingWidth1.currentValue &&\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue <\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldEaveWidth.currentValue\n ) {\n if (this.APP.sltExistingType.currentValue == 1 && userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == 2 &&\n userDataPos.right\n ) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n if (userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n }\n if (userDataPos.right) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n }\n }\n }\n }\n\n let exceedMoveBackLimit = false;\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n\n private addUpstandBraketExt(userDataPos: any) {\n if (\n UI.upstandBraketType == 0 ||\n UI.listBay.length == 0 ||\n UI.existingType == 0 ||\n (userDataPos.isMultiSpan && UI.multiSpan == 0)\n ) {\n return;\n }\n if (\n (this.existingType == 1 && userDataPos.right) ||\n (this.existingType == 2 && userDataPos.left)\n ) {\n return;\n }\n let _flag = false;\n\n const condition =\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue;\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n } else if (!_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n }\n if (!_flag) {\n return;\n }\n // if (userDataPos.left && UI.overhangLeft > 0 || userDataPos.right && UI.overhangRight > 0)\n // return;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5; // + this.geoBraket_1.width / 4;\n let height = 0;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n const _cond1 =\n UI.existingWidth1 < condition &&\n UI.existingWidth1 + UI.existingWidth2 > condition;\n const _cond2 =\n userDataPos.isMultiSpan &&\n UI.existingWidth1 < condition + UI.multiSpan &&\n UI.existingWidth1 + UI.existingWidth2 > condition + UI.multiSpan;\n\n if (UI.existingType == 1) {\n offsetX = -bayMainLength / 2;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -bayMainLength / 2 + UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX -= UI.existingLength2;\n }\n offsetX += _bracketOffsetXExt;\n } else if (UI.existingType == 2) {\n offsetX = bayMainLength / 2 - this.geoBraket_1.width;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX += UI.existingLength2;\n }\n offsetX -= _bracketOffsetXExt;\n } else if (UI.existingType == 3) {\n offsetX =\n (-bayMainLength / 2) * (userDataPos.left ? 1 : -1) -\n (userDataPos.right ? this.geoBraket_1.width : 0);\n if ((!userDataPos.isMultiSpan && _cond1) || _cond2) {\n offsetX -=\n UI.existingLength2 * (userDataPos.left ? 1 : -1) +\n (userDataPos.right ? this.geoBraket_1.width : 0);\n }\n offsetX += _bracketOffsetXExt * (userDataPos.left ? 1 : -1);\n }\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.geoBraket_1.width / 2;\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n if (userDataPos.isMultiSpan) {\n height = +UI.upstandBraketType;\n } else {\n height = +UI.upstandBraketType;\n }\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2:\n UI.existingType == 2 ? this.geoBraketExtR_2 : this.geoBraketExtL_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n if (UI.existingType == 1) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtL_2 };\n } else if (UI.existingType == 2) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtR_2 };\n } else {\n optionBrakets = {\n ...optionBrakets,\n geoBraket_2: userDataPos.right\n ? this.geoBraketExtR_2\n : this.geoBraketExtL_2,\n };\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(offsetX, UI.existingWallHeight, offsetZ),\n userData: { type: GEOMETRY_TYPE.UPSTAND_BRAKET_EXT },\n });\n }\n\n public addBeam(userDataPos: any) {\n if (userDataPos.isMultiSpan && this.APP.sldMultiSpan.currentValue === 0) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ =\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetXR = this.totalBaySize / 2;\n\n let beamLength = this.roofWidth + UI.overhangLeft + UI.overhangRight;\n\n const condition = UI.span + UI.eaveWidth;\n let _flag = false;\n if (\n (userDataPos.isMultiSpan &&\n this.APP.sldExistingWidth1.currentValue >=\n condition + this.APP.sldMultiSpan.currentValue) ||\n (!userDataPos.isMultiSpan &&\n this.APP.sldExistingWidth1.currentValue >= condition)\n ) {\n _flag = true;\n }\n if (userDataPos.isMultiSpan) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n offsetZ +=\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue -\n this.beamInfo.width / 2;\n } else {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n offsetZ +=\n this.APP.sldSpan.currentValue -\n (this.APP.sldMultiSpan.currentValue > 0 ? 0 : this.beamInfo.width / 2);\n }\n\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n //Cutout\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue <=\n this.APP.sldExistingWidth1.currentValue\n ) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + this.APP.sldEaveWidth.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + this.APP.sldEaveWidth.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2; // + this.APP.sldEaveWidth.currentValue;\n }\n } else if (\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue >\n this.APP.sldExistingWidth1.currentValue &&\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue <\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldEaveWidth.currentValue\n ) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2;\n }\n }\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let mesh = new Mesh(this.geoBeam.geometry, MaterialManager.Instance().BEAM);\n\n let offsetXL = 0;\n let offsetXR = UI.span + UI.multiSpan - this.geoBeam.width * 2;\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (UI.span + UI.multiSpan - this.geoBeam.width * 2) / this.geoBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = UI.existingWallHeight + +UI.upstandBraketType;\n offsetZ =\n UI.span +\n UI.multiSpan -\n this.geoBeam.width -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n offsetXL +\n this.geo_beamEndCap.length / 2 -\n 2 -\n (scaleX * this.geoBeam.length) / 2,\n this.geo_beamEndCap.height,\n 0\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n offsetXR -\n this.geo_beamEndCap.length / 2 +\n 2 -\n (scaleX * this.geoBeam.length) / 2,\n this.geo_beamEndCap.height,\n 0\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamOffsetX = offsetX;\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n name: \"GB\",\n };\n beamGroup.position.set(\n beamOffsetX,\n offsetY,\n offsetZ - (scaleX * this.geoBeam.length) / 2\n );\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n this.scene.add(beamGroup);\n }\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n ((UI.span + UI.multiSpan) / 2 - this.beamInfo.width / 2) /\n this.utils.cos(UI.patiosPitch);\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n ((UI.span + UI.multiSpan) / 2 - this.beamInfo.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.beamInfo.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 +\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.beamInfo.height;\n offsetZ =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.beamInfo.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, -1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n ((UI.span + UI.multiSpan) / 2 - this.beamInfo.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.front) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n -translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n -translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n if (userDataPos.front) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.back) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n public addCenterSuperiorBeam() {\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n ((UI.span + UI.multiSpan) / 2 - this.geoBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n { center: true },\n 0,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n }\n }\n }\n}\n","import { BoxBufferGeometry, BufferGeometry, Color, Geometry, Group, LineSegments, Material, Matrix4, Mesh, MeshLambertMaterial, Object3D, Plane, Vector3 } from 'three';\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, PANEL_DIRECTION, RAKECUT_TYPE, RIBSPAN_BARGE_FIT, RIBSPAN_PANEL_WIDTH } from 'src/app/app.constants';\nimport { Util } from '../utils';\nimport { CSG } from 'three-csg-ts';\nimport { GableLRFasciaManager } from '.';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, LineType, Print2DView, Printing2DGeometry, Printing2DLine, ViewType } from 'src/app/core/models';\nimport { UI } from '../ui';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableLRFasciaManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private roofInfo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private bargeFrontInfo: GeometryInfo;\n private bargeBackInfo: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n // Var\n private roofLength: number;\n private roofLengthPlus: number;\n private roofWidth: number;\n //private existingTypeLeftX: number;\n //private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofGroupFront: Group;\n private roofGroupBack: Group;\n private cutoutExistingBothLength: number;\n\n constructor(app: AppComponent, fasciaManager: GableLRFasciaManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.scene = new Group();\n fasciaManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n public onColorChanged() {\n if(this.utils && this.roofInfo.geometry){\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n}\n private registerEvent(): void {\n this.eventHandleId = this.onColorChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofRibspanPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2, this.roofInfo.height / 2, -this.roofInfo.length / 2);\n this.roofInfo.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.roofInfo.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n // Barge capping\n this.bargeLeftInfo = this.geometryManager.getRibspanBarge();\n this.bargeLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(this.bargeLeftInfo.width / 2 - 3, this.bargeLeftInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeLeftInfo.length / 2);\n\n this.bargeRightInfo = this.geometryManager.getRibspanBarge();\n this.bargeRightInfo.geometry\n .translate(-this.bargeRightInfo.width / 2 + 3, this.bargeRightInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeRightInfo.length / 2);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 + 2, this.geo_receiverChanel.width / 2);\n\n // Gutter\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(800, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(0, this.geoBraket_2.length / 2, - this.geoBraket_2.height / 4);\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(0, this.geoBeamEndCap.height / 2, this.geoBeamEndCap.length / 2)\n .rotateY(Math.PI / 2);\n\n this.bargeFrontInfo = this.geometryManager.getRibspanBarge();\n this.bargeFrontInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeFrontInfo.length / 2, this.bargeFrontInfo.height / 2 - RIBSPAN_BARGE_FIT, -this.bargeFrontInfo.width / 2);\n\n this.bargeBackInfo = this.geometryManager.getRibspanBarge();\n this.bargeBackInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeBackInfo.length / 2, this.bargeBackInfo.height / 2 - RIBSPAN_BARGE_FIT, this.bargeBackInfo.width / 2 - 3);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutRight.length / 2);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getRibspanBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_bargeRakecutRight.length / 2);\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutRightHor.width / 2);\n\n this.ridgeGeo = this.geometryManager.getRibspanRidgeCapping();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2 + 1, - this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n this.roofLength = (UI.span + UI.multiSpan) / 2 + UI.overhangFront;\n this.roofLengthPlus = this.roofLength / this.utils.cos(UI.patiosPitch);\n this.roofWidth = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n this.cutoutExistingBothLength = (this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2;\n\n this.addRoofGroupFront();\n this.addRoofGroupBack();\n this.addCutout();\n\n this.existingType = +this.APP.sltExistingType.currentValue;\n\n\n let offsetXR = this.totalBaySize / 2 + this.MANAGER.patiosGroup.position.x + this.APP.sldRightOverhang.currentValue;\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR); // (this.APP.sldBaySize.currentValue / 2) + this.APP.sldRightOverhang.currentValue );\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n const roofPanelCount = Math.ceil(this.roofWidth / RIBSPAN_PANEL_WIDTH);\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n //panel direction\n let panelDirectionOfset = 1;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n offsetXL = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT) {\n offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = true;\n\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofFront(offsetXL, [this.csg_cutoutLeft]);\n\n this.addRoofBack(offsetXL, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + RIBSPAN_PANEL_WIDTH;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n\n this.addRoofFront(offsetXL, [this.csg_cutoutRight]);\n\n this.addRoofBack(offsetXL, [this.csg_cutoutRight]);\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += RIBSPAN_PANEL_WIDTH;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + RIBSPAN_PANEL_WIDTH;\n let flag = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoofFront(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofBack(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofFront(offsetXL, []);\n\n this.addRoofBack(offsetXL, []);\n offsetXL += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBargeFront();\n this.addBargeBack();\n\n this.addGutterFront();\n this.addGutterBack();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING};\n const height = this.getRoofOffsetY() + \n this.roofInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n \n let offsetX = (UI.overhangRight - UI.overhangLeft) / 2\n \n const ridgeLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.rotation.set(0, Math.PI / 2, 0)\n ridgeFront.position.set( offsetX, height, ( UI.span + UI.multiSpan ) / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4);\n this.scene.add(ridgeFront)\n }\n\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n\n rightCap.rotateY(Math.PI)\n\n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n\n leftCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n\n return new Group().add(leftCap, rightCap)\n }\n\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 - this.APP.sldEaveWidth.currentValue;\n let offsetY = 0;\n const eaveThickness = 50;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + UI.eaveWidth + eaveThickness - UI.overhangBack;\n\n //extra length to prevent lack when cut\n let extra = 5000;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + extra) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + extra) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + UI.overhangBack + extra) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX - this.APP.sldLeftOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX + this.APP.sldRightOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n\n public addRoofGroupFront() {\n this.roofGroupFront = null;\n this.roofGroupFront = new Group();\n this.roofGroupFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetX = 0;\n let offsetY = this.getRoofOffsetY();\n\n let offsetZ = (UI.span + UI.multiSpan) / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n this.roofGroupFront.position.set(offsetX, offsetY, offsetZ);\n \n this.roofGroupFront.rotation.set(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n\n this.scene.add(this.roofGroupFront);\n }\n public addRoofGroupBack() {\n this.roofGroupBack = null;\n this.roofGroupBack = new Group();\n this.roofGroupBack.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetX = 0;\n let offsetY = this.getRoofOffsetY();\n\n let offsetZ = (UI.span + UI.multiSpan) / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n this.roofGroupBack.position.set(offsetX, offsetY, offsetZ);\n \n this.roofGroupBack.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n\n this.scene.add(this.roofGroupBack);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let gutterGroupObjs = this.roofGroupFront.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).concat(\n ...this.roofGroupBack.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlane);\n }\n\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"ROOF_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, - UI.existingWidth1 / 2 - UI.overhangBack + UI.eaveWidth + this.geoBraket_2.height / 4)))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(outlineGeo, MaterialManager.Instance().MESH_OUTLINE);\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoofFront(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n //if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX += this.APP.sldEaveWidth.currentValue;\n //}\n\n let scaleZ = this.roofLengthPlus / this.roofInfo.length;\n const offsetY = 0;\n let offsetZ = 0;\n\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && over && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - this.APP.sldExistingWidth1.currentValue) / this.roofInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, \n length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupFront.position.z);\n mesh.updateMatrix();\n\n // let meshResult = new Mesh();\n // let meshTemp = mesh;\n\n // for (let csgObj of csgObjs) {\n // meshResult = CSG.toMesh(CSG.fromMesh(meshTemp).subtract(csgObj), mesh.matrix);\n // meshTemp = meshResult;\n // }\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupFront.add(meshResult);\n }\n else {\n this.roofGroupFront.add(mesh);\n }\n }\n public addRoofBack(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n let scaleZ = (((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch)) / this.roofInfo.length;\n const offsetY = 0;\n let offsetZ = 0;\n\n mesh.position.set(offsetX, offsetY, offsetZ - scaleZ * this.roofInfo.length);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, \n length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupBack.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupBack.add(meshResult);\n }\n else {\n this.roofGroupBack.add(mesh);\n }\n }\n private addBargeFront() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n let mesh: Mesh;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n const offsetY = 0;\n\n let scaleZLeft = this.roofLengthPlus / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLengthPlus;\n let scaleZRight = this.roofLengthPlus / this.bargeRightInfo.length;\n let bargeRightLength = this.roofLengthPlus;\n\n scaleZLeft = bargeLeftLength / this.bargeLeftInfo.length;\n scaleZRight = bargeRightLength / this.bargeRightInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n // left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - fitScale * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n // right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - fitScale * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n }\n private addBargeBack() {\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n let mesh: Mesh;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n const offsetY = 0;\n\n let bargeLeftLength = ((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch);\n let bargeRightLength = ((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch);\n\n const scaleZLeft = bargeLeftLength / this.bargeLeftInfo.length;\n const scaleZRight = bargeRightLength / this.bargeRightInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n // left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - scaleZLeft * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n\n // right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - scaleZRight * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n public addGutterFront() {\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n const offsetZ = ((UI.span + UI.multiSpan) / 2 + UI.overhangFront - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n const offsetY = 0;\n\n let gutterLength = this.roofWidth;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, true);\n this.roofGroupFront.add(gutterGroup);\n }\n public addGutterBack() {\n let offsetX = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ = -((UI.span + UI.multiSpan) / 2 + UI.overhangBack - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n let gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n //cutout\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight - UI.existingLength2;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight - UI.existingLength2;\n offsetX = UI.totalBayLength / 2 + UI.overhangRight - UI.existingLength2;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX = UI.existingLength1 / 2 - UI.eaveWidth;\n gutterLength = UI.existingLength1 - 2 * UI.eaveWidth;\n }\n }\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //Add gutter back\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap, gutterLength,\n new Vector3(offsetX, offsetY, offsetZ), new Vector3(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), Math.PI, 0), views, 1, true, true);\n this.roofGroupBack.add(gutterGroup);\n this.addDownPipe(gutterGroup, gutterLength);\n }\n private addDownPipe(gutterGroup: Group, gutterLength: number) {\n let meshPipe = new Mesh(this.MANAGER.postAndBeamManager.geo_downPipe.geometry, MaterialManager.Instance().DOWNPIPE);\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.MANAGER.postAndBeamManager.geo_downPipe.height);\n meshPipe.position.set(gutterLength - 100, -190, this.MANAGER.postAndBeamManager.geo_downPipe.width / 2 + 20);\n\n gutterGroup.add(meshPipe);\n }\n public getRoofOffsetY() {\n return UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2);\n }\n}\n\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Material,\n Mesh,\n BufferGeometry,\n Box3,\n Group,\n Plane,\n Vector3,\n Geometry,\n BoxHelper,\n BoxBufferGeometry,\n Matrix4,\n LineSegments,\n} from \"three\";\nimport { Util, getBeamEndCapCode, getRafterBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n INIT,\n} from \"src/app/app.config\";\nimport {\n GeometryInfo,\n Printing2DLine,\n ViewType,\n LineType,\n Print2DView,\n Printing2DGeometry,\n} from \"src/app/core/models\";\nimport { PatiosGableLRFlyOverManager } from \".\";\nimport {\n EXISTING_BUILDING_CONFIG as CONST,\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n EXISTING_BUILDING_CONFIG,\n} from \"src/app/app.constants\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableLRFlyOverManager;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private geo_superiorPost: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private geoBeamJoint: GeometryInfo;\n\n private frontPostHeight: number;\n //private extraBracketHeight = 250;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private deferHandle;\n private deferTimeout = CONST.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketsBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableLRFlyOverManager) {\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = flyOverManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData?.position?.back\n )\n );\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE));\n this.scene.remove(\n ...this.scene.children.filter((x) => x.userData.type == \"BOXHELPER\")\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.cutoutExistingBothLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n this.addSuperiorBeam({ cutout: true });\n }\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n\n this.addCenterSuperiorBeam();\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n\n this.addCenterPost(offsetX, { center: true, first, last });\n\n let fitBeam = 0;\n if (i !== 0) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_superiorBeam.width;\n } else {\n fitBeam = this.geo_superiorBeam.width / 2;\n }\n }\n\n this.addHorSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n back: true,\n first,\n last,\n });\n\n this.addPostOrBracket(offsetX, {\n front: true,\n first,\n last,\n left: first,\n right: last,\n });\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addPostOrBracket(offsetX, {\n multiSpan: true,\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n offsetX = -this.totalBaySize / 2;\n first = true;\n last = false;\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n this.showBeamOutline();\n this.addDownPipe();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n private addDownPipe() {\n let offsetZ =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue - 170;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.overhangFront,\n UI.patiosPitch,\n -1\n ) +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldFrontOverhang.currentValue,\n 0,\n this.APP.sldFrontOverhang.currentValue,\n offsetY,\n true\n );\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n //let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n //simplifiedGeo.vertices.push();\n\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n //lineGeo.vertices.push(new Vector3(vertices[i+3], vertices[i+4], vertices[i+5]));\n\n //if(i == 18) break;\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n\n private addGround() {\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.extraOffsetZ +\n this.APP.sldBackOverhang.currentValue\n );\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set((UI.overhangRight - UI.overhangLeft) / 2, 0, offsetZ);\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (this.APP.sltExistingType.currentValue == 1) {\n base.position.setX(base.position.x + offsetX);\n }\n if (this.APP.sltExistingType.currentValue == 2) {\n base.position.setX(base.position.x - offsetX);\n }\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n if (userDataPos.front) {\n postOffsetZ =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n UI.span +\n UI.multiSpan -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n bracketOffsetZ =\n UI.span +\n UI.multiSpan -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n let exceedMoveBackLimit = false;\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n let boxPost = new Box3().setFromObject(meshPost);\n // let boxPostHelper = new Box3Helper(boxPost);\n // this.APP.scene.add(boxPostHelper);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue != 3) {\n if (meshBracket.userData.position.left) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (meshBracket.userData.position.right) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n }\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n public addPostOrBracketBack() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -this.totalBaySize / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = this.totalBaySize / (this.numberOfBracketsBack - 1);\n let cutoutLengthInExistingBoth =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketsBack - 1);\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue -\n (this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK);\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketsBack - 1);\n } else {\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX += cutoutLengthInExistingBoth - extraWalWidth;\n bracketDistance =\n (this.APP.sldExistingLength.currentValue + extraWalWidth * 2) /\n (this.numberOfBracketsBack - 1);\n }\n }\n\n for (let i = 0; i < this.numberOfBracketsBack; i++) {\n if (i == this.numberOfBracketsBack - 1) {\n last = true;\n }\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let bracketOffsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n UI.braketHeight / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, bracketOffsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n\n let isIntersect = false;\n //let isCutoutInterset = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n }\n }\n\n if (isIntersect) {\n if (\n i == 0 &&\n (this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n last &&\n (this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketsBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -this.totalBaySize / 2;\n let offsetXR = this.totalBaySize / 2;\n\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n let bracketDistance =\n (this.APP.sldExistingLength2.currentValue - extraWalWidth) /\n (this.numberOfBracketCutout - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n this.APP.sldExistingLength2.currentValue /\n (this.numberOfBracketCutout - 1);\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n //let offsetX = 0;\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL;\n if (first) {\n } else if (last) {\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n first = true;\n\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n\n public addCenterSuperiorBeam() {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n ((UI.span + UI.multiSpan) / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_superiorBeam.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL + fitX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n { center: true },\n \"RB\",\n this.geoBeamJoint\n );\n }\n\n private addCenterPost(offsetX, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n let postOffsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n this.frontPostHeight =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n\n scalePostY =\n (((UI.span + UI.multiSpan) / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.geo_superiorBeam.height) /\n this.geo_centerSuperiorPost.height;\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let postOffsetX = offsetX - this.geo_centerSuperiorPost.width / 2;\n\n if (userDataPos.first) {\n postOffsetX += this.geo_centerSuperiorPost.width / 2;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_centerSuperiorPost.width / 2;\n } else {\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX -= offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX += offsetX;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n\n let offsetXL = 0;\n let offsetXR = UI.span + UI.multiSpan - 2 * this.geo_superiorBeam.width;\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (UI.span + UI.multiSpan - 2 * this.geo_superiorBeam.width) /\n this.geo_superiorBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n UI.span +\n UI.multiSpan -\n this.geo_superiorBeam.width -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n offsetXL + this.geo_beamEndCap.length / 2 - 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n offsetXR - this.geo_beamEndCap.length / 2 + 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamOffsetX = offsetX;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n beamOffsetX -= offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n beamOffsetX += offsetX;\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n name: \"GB\",\n };\n beamGroup.position.set(beamOffsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n this.scene.add(beamGroup);\n }\n\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n const beamWidth = this.geo_superiorBeam.width;\n const braketWidth = this.geo_bracket.width;\n let offsetXL = 0;\n let offsetXR =\n ((UI.span + UI.multiSpan) / 2 - beamWidth / 2) /\n this.utils.cos(UI.patiosPitch);\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n ((UI.span + UI.multiSpan) / 2 - beamWidth / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n braketWidth +\n beamWidth / 2 -\n UI.existingWidth1 / 2\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height;\n offsetZ =\n UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, -1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n braketWidth -\n this.geo_superiorBeam.width * 0.5 -\n UI.existingWidth1 / 2\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n ((UI.span + UI.multiSpan) / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_superiorBeam.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.front) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n -translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n -translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n if (userDataPos.front) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.back) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n\n public addSuperiorBeam(userDataPos: any) {\n let offsetX =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n if (this.APP.sldMultiSpan.currentValue > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.extraOffsetZ\n );\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n offsetX += this.APP.sldLeftOverhang.currentValue;\n beamLength -= this.APP.sldLeftOverhang.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n } else {\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n beamLength -= this.APP.sldRightOverhang.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetX +=\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n CONST.EAVE_OFFSET_BACK;\n beamLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n CONST.EAVE_OFFSET_BACK * 2;\n }\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n UI.span +\n UI.multiSpan -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.geo_superiorBeam.width -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.cutout) {\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.getBracketHeight(\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1\n );\n\n offsetZ =\n this.APP.sldExistingWidth1.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n beamLength =\n this.APP.sldExistingLength2.currentValue -\n this.APP.existingWallManager.geo_existingWallW1.width;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n }\n\n beamLength +=\n this.APP.sldLeftOverhang.currentValue +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue -\n CONST.EAVE_OFFSET_BACK;\n } else {\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width;\n }\n\n offsetX -=\n this.APP.sldRightOverhang.currentValue +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n beamLength +=\n this.APP.sldRightOverhang.currentValue +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n beamLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2 -\n this.APP.existingWallManager.geo_existingWallW1.width -\n CONST.EAVE_OFFSET_BACK +\n this.geo_bracket.width +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n\n if (userDataPos.front || userDataPos.multiSpan) {\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n } else {\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n }\n\n //Add one more beam cutout right\n if (userDataPos.cutout && this.APP.sltExistingType.currentValue == 3) {\n offsetX =\n this.totalBaySize / 2 -\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK -\n this.geo_superiorBeam.width -\n (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2);\n\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n }\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2 + fitX;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n return fitX;\n }\n public getBracketHeight(offset): number {\n let angle = UI.patiosPitch;\n return this.utils.tan(angle) * offset;\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, Vector3, Matrix4, Box3, Geometry, BoxBufferGeometry, BufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText } from 'src/app/core/models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosGableLRFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { BUILDING_SIDE, FIT_FLYOVER_BRAKET_ON_ROOF, PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app-ribspan/models/Dimension\";\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosGableLRFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n private dimensionPatiosPlanLeftOverHang: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableLRFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n \n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n \n\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMiddle.userData = { type: GEOMETRY_TYPE.DIMENSION };\n //this.dimensionPlanMiddle.rotation.set(-Math.PI / 2, 0, 0);\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosPlanLeftOverHang = new Group();\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLeftLeft,\n this.dimensionPlanMidleLeft\n );\n\n\n\n loader.load( environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n \n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if(this.APP.patiosManager && this.APP.patiosManager.patiosGroup){\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosPlanLeftOverHang\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPatiosPlanLeftOverHang.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height\n }\n private drawDimensionMidleLeft() {\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n let offsetZ =UI.span / 2 - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetX = this.totalBaySize / 2 + UI.overhangRight;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX += -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n }\n else {\n let offsetX = - this.totalBaySize / 2 - UI.overhangLeft;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX += -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX = -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n dimLeft.visible = false;\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) + UI.span / 2;\n this.dimensionPlanMiddle.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.box.max.z + this.dimensionDistance2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance3 - this.APP.sldExistingWidth1.currentValue/2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // offsetZ += 500;\n // }\n //}\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n //this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n // let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n // cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n // cap2.position.setX(offsetX);\n // this.dimensionPatiosPlanBottom.add(cap2);\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true } }\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = -this.APP.dialogEditBay.totalBaySize/2 + this.APP.sldLeftCutHorizontal.currentValue/2 - this.APP.sldLeftOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL)\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = this.APP.dialogEditBay.totalBaySize/2 - this.APP.sldRightCutHorizontal.currentValue/2 + this.APP.sldRightOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500-200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL)\n }\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2 \n - this.APP.sldExistingWidth1.currentValue/2 \n - this.APP.existingWallManager.geo_existingWallL1.width \n - this.APP.eaveManager.backOverhang;\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n // let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2 \n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldMultiSpan.currentValue);\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let extraDistance = 0;\n //----Rake cut\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n \n let offsetZ = dimLength/2 + UI.multiSpan / 2 + this.APP.sldFrontOverhang.currentValue - this.APP.sldRightCutVertical.currentValue/2;\n \n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3( 0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL)\n }\n //----End rake cut\n \n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI,\"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT, extraDistance);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n dim.userData['position'] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n \n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let height = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n let dimOffsetY = height/2;\n\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n this.dimensionPatiosRightLeft.position.set(0,this.dimensionPatiosLeftRight.position.y,this.dimensionPatiosLeftRight.position.z);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() { \n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z + fitZ))\n textCover.position.set(pos.x , pos.y, pos.z);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosPlanLeftOverHang.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n\n ]){\n if(!dim.userData.views){\n // console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n\n private getGeometryFromBufferGeometry(bufferGeo: BufferGeometry) {\n let points: Vector3[] = [];\n let verties = bufferGeo.getAttribute('position').array;\n for (let i = 0; i < verties.length; i += 3) {\n points.push(new Vector3(verties[i], verties[i + 1], verties[i+2]));\n }\n\n return new Geometry().setFromPoints(points);\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n \n //this.APP.sldSpan.addAction(this.eventHandleId);\n //this.APP.sldMultiSpan.addAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.addAction(this.eventHandleId);\n //this.APP.sldExistingLength.addAction(this.eventHandleId);\n //this.APP.sldExistingLength2.addAction(this.eventHandleId);\n //this.APP.sltExistingType.addAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.addAction(this.eventHandleId);\n //this.APP.dialogEditBay.addAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.addAction(this.eventHandleId);\n //this.APP.sldRightOverhang.addAction(this.eventHandleId);\n //this.APP.sldBackOverhang.addAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.addAction(this.eventHandleId);\n //this.APP.sltRoofPitch.addAction(this.eventHandleId);\n }\n private unregisterEvent(): void{\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.APP.sldSpan.removeAction(this.eventHandleId);\n //this.APP.sldMultiSpan.removeAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength2.removeAction(this.eventHandleId);\n //this.APP.sltExistingType.removeAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.removeAction(this.eventHandleId);\n //this.APP.dialogEditBay.removeAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.removeAction(this.eventHandleId);\n //this.APP.sldRightOverhang.removeAction(this.eventHandleId);\n //this.APP.sldBackOverhang.removeAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.removeAction(this.eventHandleId);\n //this.APP.sltRoofPitch.removeAction(this.eventHandleId);\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let height = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n let dimOffsetY = height/2;\n dimension.position.setY(dimOffsetY);\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n // let offsetDimensionZ = this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // - this.APP.sldExistingWidth1.currentValue / 2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n // dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.dimensionPatiosLeftRight.position.y;\n dimension.position.setY(dimOffsetY);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { ColumnAndBeamManager } from \"./column-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { Group, Box3, Vector3, Box3Helper } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport {\n PatiosManager,\n RafterBeamAndInternalBeamInfo,\n} from \"../patios.manager\";\nimport { Printing2DGeometry } from \"src/app/core/models\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n EXISTING_BUILDING_CONFIG,\n CUTOUT_ENABLE,\n RAKECUT_TYPE,\n BUILDING_SIDE,\n} from \"src/app/app.constants\";\nimport { environment } from \"src/environments/environment\";\n// import { environment } from 'src/environments/environment';\n\nexport class PatiosGableLRFlyOverManager implements PatiosManager {\n public columnAndBeamManager: ColumnAndBeamManager;\n public roofManager: RoofManager;\n private APP: AppComponent;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n public dimensionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n this.patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndBeamManager = new ColumnAndBeamManager(app, this);\n this.dimensionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndBeamManager.optimize(),\n this.dimensionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndBeamManager.load();\n this.dimensionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsBack = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {}\n loadRafterBeamAndInternalBeam(info: RafterBeamAndInternalBeamInfo): void {}\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimensionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimensionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndBeamManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndBeamManager.load(),\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimensionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","\nimport { Mesh, Vector3, Material, Plane, Group, BufferGeometry, Geometry, BoxBufferGeometry, MeshLambertMaterial, Matrix4, Object3D, LineSegments, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { GEOMETRY_TYPE, GEOMETRY_CATEGORY } from 'src/app/app.config';\n// import { AppComponent } from \"../../app.component\";\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Print2DView, ViewType, LineType, Printing2DLine, Printing2DGeometry } from 'src/app/core/models';\nimport { PatiosGableLRFlyOverManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport { EXISTING_BUILDING_CONFIG, EXISTING_BUILDING_CONFIG as CONST, BUILDING_SIDE, CUTOUT_ENABLE, PANEL_DIRECTION, RIBSPAN_PANEL_WIDTH, RIBSPAN_BARGE_FIT, FIT_FLYOVER_BRAKET_ON_ROOF } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableLRFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_roofPanelBargeCappingFront: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private roofGroupFront: Group;\n private roofGroupBack: Group;\n\n private objectSizeChangedHandle: any;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n \n private eventHandleId: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG\n \n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableLRFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = new Group();\n flyOverManager.patiosGroup.add(this.scene);\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve) => {\n\n this.geo_RoofPanel = this.geometryManager.getRoofRibspanPanel();\n this.geo_RoofPanel.geometry\n .translate(-this.geo_RoofPanel.width / 2, this.geo_RoofPanel.height / 2, -this.geo_RoofPanel.length / 2);\n this.geo_RoofPanel.geometry.rotateY(Math.PI)\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n\n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingLeft.width / 2 - 3, this.geo_roofPanelBargeCappingLeft.height / 2 - RIBSPAN_BARGE_FIT, this.geo_roofPanelBargeCappingLeft.length / 2);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .translate(-this.geo_roofPanelBargeCappingRight.width / 2 + 3, this.geo_roofPanelBargeCappingRight.height / 2 - RIBSPAN_BARGE_FIT, this.geo_roofPanelBargeCappingRight.length / 2);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingBack.length / 2, this.geo_roofPanelBargeCappingBack.height / 2 - RIBSPAN_BARGE_FIT, this.geo_roofPanelBargeCappingBack.width / 2 - 3);\n\n this.geo_roofPanelBargeCappingFront = this.geometryManager.getRibspanBarge();\n this.geo_roofPanelBargeCappingFront.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingFront.length / 2, this.geo_roofPanelBargeCappingFront.height / 2 - RIBSPAN_BARGE_FIT, -this.geo_roofPanelBargeCappingFront.width / 2);\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n \n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getRibspanBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - RIBSPAN_BARGE_FIT, this.geo_bargeCutoutRightHor.width / 2);\n \n this.ridgeGeo = this.geometryManager.getRibspanRidgeCapping();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2 + 1, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n this.extraOffsetZ = this.APP.existingWallManager.geo_existingWallL1.width + this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.addRoofFront();\n this.addRoofBack();\n this.addCutout();\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX\n offsetLeft += offsetX\n }\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX\n offsetRight += offsetX\n }\n\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n this.roofWidth = width;\n this.roofLength = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldBackOverhang.currentValue + this.APP.sldFrontOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width / RIBSPAN_PANEL_WIDTH);\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - RIBSPAN_PANEL_WIDTH;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 1 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, []);\n this.addRoofSheetingBack(offsetX, [this.csg_cutoutLeft]);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 2 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, []);\n this.addRoofSheetingBack(offsetX, [this.csg_cutoutRight]);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 3 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, []);\n this.addRoofSheetingBack(offsetX, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, null);\n this.addRoofSheetingBack(offsetX, null);\n\n offsetX += RIBSPAN_PANEL_WIDTH * panelDirectionOfset;\n }\n }\n\n this.addBargeCappingFront();\n this.addBargeCappingBack();\n\n this.addGutterFront();\n this.addGutterBack();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.APP.existingWallManager.geo_existingWallL2.width + 100;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 - this.APP.existingWallManager.geo_existingWallL2.width - this.APP.sldBackOverhang.currentValue;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldBackOverhang.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let gutterGroupObjs = this.roofGroupFront.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n .concat(...this.roofGroupBack.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneRight);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(this.roofGroupFront.position.x, 0, - UI.existingWidth1 / 2 - this.extraOffsetZ - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n //let outlineBox = new Box3().setFromBufferAttribute(outlineGeo.getAttribute('position') as Buffer);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n\n public addRoofFront() {\n this.roofGroupFront = null;\n this.roofGroupFront = new Group();\n this.roofGroupFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(this.APP.sldExistingWidth1.currentValue / 2 + this.extraOffsetZ) + (UI.span + UI.multiSpan) / 2;\n\n this.roofGroupFront.position.setY(offsetY);\n this.roofGroupFront.position.setZ(offsetZ);\n this.roofGroupFront.rotateX(this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupFront.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupFront.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupFront);\n }\n\n public addRoofBack() {\n this.roofGroupBack = null;\n this.roofGroupBack = new Group();\n this.roofGroupBack.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(this.APP.sldExistingWidth1.currentValue / 2 + this.extraOffsetZ) + (UI.span + UI.multiSpan) / 2;\n\n this.roofGroupBack.position.setY(offsetY);\n this.roofGroupBack.position.setZ(offsetZ);\n this.roofGroupBack.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupBack.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupBack.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupBack);\n }\n\n public addRoofSheetingFront(offsetX: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 30;\n }\n else {\n offsetSheet = 12;\n }\n\n let scaleZ = ((UI.span + UI.multiSpan) / 2\n + this.APP.sldFrontOverhang.currentValue) / this.utils.cos(this.APP.sltRoofPitch.currentValue) / this.geo_RoofPanel.length;\n\n let offsetY = 0;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupFront.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupFront.add(meshResult);\n }\n else {\n this.roofGroupFront.add(mesh);\n }\n }\n public addRoofSheetingBack(offsetX: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 30;\n }\n else {\n offsetSheet = 12;\n }\n\n let scaleZ = ((UI.span + UI.multiSpan) / 2\n + UI.overhangBack) / this.utils.cos(this.APP.sltRoofPitch.currentValue) / this.geo_RoofPanel.length;\n\n let offsetY = 0;\n let offsetZ = - scaleZ * this.geo_RoofPanel.length;;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupBack.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupBack.add(meshResult);\n }\n else {\n this.roofGroupBack.add(mesh);\n }\n }\n\n private addBargeCappingBack() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + this.APP.existingWallManager.geo_existingWallW1.width + 100;\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n let totalLengthCutOut = UI.existingWidth1 < (UI.span + UI.multiSpan) / 2 ? UI.existingWidth1 : (UI.span + UI.multiSpan) / 2;\n\n let scaleCutoutVer = this.utils.getHypotenuseByCos(totalLengthCutOut + this.geo_roofPanelBargeCappingLeft.width, UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n let roofBackLength = (UI.span + UI.multiSpan) / 2 + UI.overhangBack;\n let bargeLeftLength = roofBackLength;\n let bargeRightLength = roofBackLength;\n\n let angleLength = roofBackLength / this.utils.cos(UI.patiosPitch);\n\n let offsetY = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let isShowLeftBarge = true;\n let isShowRightBarge = true;\n\n let scaleXF = roofBackLength / this.geo_roofPanelBargeCappingFront.length;\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingRight.length;\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n if(isShowLeftBarge){\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - this.geo_roofPanelBargeCappingLeft.length * scaleZLeft);\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n\n //right\n if(isShowRightBarge){\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - this.geo_roofPanelBargeCappingRight.length * scaleZRight);\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n }\n\n private addBargeCappingFront() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n let roofFrontLength = (UI.span + UI.multiSpan) / 2 + UI.overhangFront;\n let offsetY = 0;\n let bargeLeftLength = roofFrontLength;\n let bargeRightLength = roofFrontLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let scaleZLeft = this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch));\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch));\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n // //back\n // mesh = new Mesh(this.geo_roofPanelBargeCappingBack.geometry, MaterialManager.Instance().BARGE);\n // mesh.position.setX(offsetXB);\n // mesh.scale.setX(bargeBackLength/this.geo_roofPanelBargeCappingBack.length);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // this.roofGroupFront.add(mesh);\n }\n public addGutterFront() {\n\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetY = 0;\n let offsetZ = ((UI.span + UI.multiSpan) / 2 + UI.overhangFront\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let gutterLength = this.roofWidth;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, true);\n this.roofGroupFront.add(gutterGroup); \n }\n\n public addGutterBack() {\n let offsetX = (this.totalBaySize / 2 + UI.overhangRight);\n let offsetY = 0;\n let gutterLength = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue);\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n //cutout\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if(this.APP.sldExistingWidth2.currentValue > 0){\n gutterLength -= this.APP.sldExistingLength2.currentValue;\n }\n else{\n gutterLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n }\n gutterLength -= this.APP.sldLeftOverhang.currentValue;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if(this.APP.sldExistingWidth2.currentValue > 0){\n offsetX -= this.APP.sldExistingLength2.currentValue;\n gutterLength -= this.APP.sldExistingLength2.currentValue;\n }\n else{\n offsetX -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n gutterLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n }\n offsetX -= this.APP.sldRightOverhang.currentValue;\n gutterLength -= this.APP.sldRightOverhang.currentValue;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX -= ((this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2 - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK);\n gutterLength = this.APP.sldExistingLength.currentValue + extraWallWidth *2;\n }\n }\n\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let offsetZ = -((UI.span + UI.multiSpan) / 2 + UI.overhangBack\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n //back\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap, gutterLength,\n new Vector3(offsetX, offsetY, offsetZ), new Vector3(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), Math.PI, 0), views, 1, true, true);\n\n this.roofGroupBack.add(gutterGroup);\n }\n\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING};\n const height = this.getRoofOffsetY() + this.geo_RoofPanel.height / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n \n let offsetX = (UI.overhangRight - UI.overhangLeft) / 2\n if(UI.existingType == BUILDING_SIDE.RIGHT){\n offsetX += - this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n if(UI.existingType == BUILDING_SIDE.LEFT){\n offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n const ridgeLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.rotation.set(0, Math.PI / 2, 0)\n ridgeFront.position.set( offsetX, height, ( UI.span + UI.multiSpan ) / 2 - UI.existingWidth1 / 2 - this.extraOffsetZ);\n this.scene.add(ridgeFront)\n }\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n \n rightCap.rotateY(Math.PI)\n \n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n \n leftCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n \n return new Group().add(leftCap, rightCap)\n }\n\n public getRoofOffsetY() {\n return UI.eaveHeight\n + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2);\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public onColorChanged() {\n if(this.utils && this.geo_RoofPanel.geometry){\n this.utils.changeGeoColor(this.geo_RoofPanel.geometry, new Vector3(0, 1, 0), UI.roofColor.toString());\n }\n }\n private registerEvent(): void {\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.eventHandleId = this.onColorChanged.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sltColourRoof\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged() {\n this.optimize().then(() => { this.load() });\n }\n public uiChanged(): void {\n this.load();\n }\n uiCHangedDefer() {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n}\n","import {\n BufferGeometry,\n Vector3,\n PlaneBufferGeometry,\n BoxBufferGeometry,\n} from \"three\";\nimport { environment as env } from \"src/environments/environment\";\nimport { STLLoader } from \"three/examples/jsm/loaders/STLLoader\";\nimport { Util } from \"./utils\";\nimport { GeometryInfo } from \"src/app/core/models\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home/home.component\";\nimport { EXISTING_BUILDING_CONFIG } from \"src/app/app.constants\";\nimport { UI } from \"./ui\";\nimport _ from \"lodash\"\n\nexport class GeometryManager {\n APP: HomeComponent;\n private constructor() {\n this.utils = new Util();\n this.loader = new STLLoader();\n }\n public init(app: HomeComponent) {\n this.APP = app;\n }\n private static instance: GeometryManager;\n private loader: STLLoader;\n\n private utils: Util;\n\n public EXISTING_ROOF: {\n EXISTING_ROOF: GeometryInfo;\n } = {\n EXISTING_ROOF: new GeometryInfo(),\n };\n\n public EXISTING_WALL: {\n EXISTING_WALL: GeometryInfo;\n } = {\n EXISTING_WALL: new GeometryInfo(),\n };\n\n public FASCIA: {\n FASCIA: GeometryInfo;\n } = {\n FASCIA: new GeometryInfo(),\n };\n public EAVE: {\n EAVE: GeometryInfo;\n } = {\n EAVE: new GeometryInfo(),\n };\n\n public SUPERIOR_BEAM: {\n S65x110: GeometryInfo;\n S65x110_JOINT: GeometryInfo;\n S65x110_ENDCAP: GeometryInfo;\n S65x160: GeometryInfo;\n S65x160_JOINT: GeometryInfo;\n S65x160_ENDCAP: GeometryInfo;\n S65x210: GeometryInfo;\n S65x210_JOINT: GeometryInfo;\n S65x210_ENDCAP: GeometryInfo;\n S65x260: GeometryInfo;\n S65x260_JOINT: GeometryInfo;\n S65x260_ENDCAP: GeometryInfo;\n } = {\n S65x110: new GeometryInfo(),\n S65x110_JOINT: new GeometryInfo(),\n S65x110_ENDCAP: new GeometryInfo(),\n S65x160: new GeometryInfo(),\n S65x160_JOINT: new GeometryInfo(),\n S65x160_ENDCAP: new GeometryInfo(),\n S65x210: new GeometryInfo(),\n S65x210_JOINT: new GeometryInfo(),\n S65x210_ENDCAP: new GeometryInfo(),\n S65x260: new GeometryInfo(),\n S65x260_JOINT: new GeometryInfo(),\n S65x260_ENDCAP: new GeometryInfo(),\n };\n public TIMBER_BEAM: {\n S140x45: GeometryInfo;\n S190x45: GeometryInfo;\n S150x50: GeometryInfo;\n S200x50: GeometryInfo;\n S150x75: GeometryInfo;\n S200x75: GeometryInfo;\n S250x75: GeometryInfo;\n S150x50_ENDCAP: GeometryInfo;\n } = {\n S140x45: new GeometryInfo(),\n S190x45: new GeometryInfo(),\n S150x50: new GeometryInfo(),\n S200x50: new GeometryInfo(),\n S150x75: new GeometryInfo(),\n S200x75: new GeometryInfo(),\n S250x75: new GeometryInfo(),\n S150x50_ENDCAP: new GeometryInfo(),\n };\n\n public RidgeCapping: {\n // S_Ridge_100: GeometryInfo;\n // S_Ridge_125: GeometryInfo;\n // S_Ridge_150: GeometryInfo;\n // S_Ridge_200: GeometryInfo;\n // S_Ridge_225: GeometryInfo;\n // S_Ridge_250: GeometryInfo;\n S_Ridge_Custom: GeometryInfo;\n } = {\n S_Ridge_Custom: new GeometryInfo()\n };\n\n public SUPERIOR_POST: {\n S65x65: GeometryInfo;\n S90x90: GeometryInfo;\n TIMBER: GeometryInfo; // 150\n CENTER_POST_TIMBER: GeometryInfo;\n } = {\n S65x65: new GeometryInfo(),\n S90x90: new GeometryInfo(),\n TIMBER: new GeometryInfo(),\n CENTER_POST_TIMBER: new GeometryInfo(),\n };\n public FLY_OVER_BRACKET: {\n S65x3: GeometryInfo;\n } = {\n S65x3: new GeometryInfo(),\n };\n public RIBSPAN: {\n RIBSPAN_PANEL: GeometryInfo;\n RIBSPAN_BARGE: GeometryInfo;\n RIBSPAN_RECEIVER_CHANNEL: GeometryInfo;\n RIBSPAN_RIDGE_CAPPING: GeometryInfo;\n } = {\n RIBSPAN_PANEL: new GeometryInfo(),\n RIBSPAN_BARGE: new GeometryInfo(),\n RIBSPAN_RECEIVER_CHANNEL: new GeometryInfo(),\n RIBSPAN_RIDGE_CAPPING: new GeometryInfo()\n };\n public MONO_PANEL: {\n S50MM: GeometryInfo;\n S50MM_BASE: GeometryInfo;\n S75MM: GeometryInfo;\n S75MM_BASE: GeometryInfo;\n S100MM: GeometryInfo;\n S100MM_BASE: GeometryInfo;\n S125MM: GeometryInfo;\n S125MM_BASE: GeometryInfo;\n S150MM: GeometryInfo;\n S150MM_BASE: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S50MM_BASE: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S75MM_BASE: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S100MM_BASE: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S125MM_BASE: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n S150MM_BASE: new GeometryInfo(),\n };\n\n public CORRO_PANEL: {\n S50MM: GeometryInfo;\n S50MM_BASE: GeometryInfo;\n S75MM: GeometryInfo;\n S75MM_BASE: GeometryInfo;\n S100MM: GeometryInfo;\n S100MM_BASE: GeometryInfo;\n S125MM: GeometryInfo;\n S125MM_BASE: GeometryInfo;\n S150MM: GeometryInfo;\n S150MM_BASE: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S50MM_BASE: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S75MM_BASE: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S100MM_BASE: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S125MM_BASE: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n S150MM_BASE: new GeometryInfo(),\n };\n\n public UPSTAND_BRAKET = {\n BRAKET_1: new GeometryInfo(),\n BRAKET_2: new GeometryInfo(),\n };\n\n public MONO_PANEL_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public CORRO_PANEL_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public MONO_PANEL_DRIP_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public CORRO_PANEL_DRIP_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public MONO_PANEL_RECIEVER_CHANEL: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n public CORRO_PANEL_RECIEVER_CHANEL: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public GUTTER: {\n SQUARE_LINE: GeometryInfo;\n SQUARE_LINE_END_CAP: GeometryInfo;\n QUAD_150: GeometryInfo;\n QUAD_150_END_CAP: GeometryInfo;\n } = {\n SQUARE_LINE: new GeometryInfo(),\n SQUARE_LINE_END_CAP: new GeometryInfo(),\n QUAD_150: new GeometryInfo(),\n QUAD_150_END_CAP: new GeometryInfo(),\n };\n public DOWNPIPE: {\n PIPE_S90MM: GeometryInfo;\n L_S90MM: GeometryInfo;\n } = {\n PIPE_S90MM: undefined,\n L_S90MM: undefined,\n };\n\n public Z_FlASHING: {\n S50: GeometryInfo;\n S75: GeometryInfo;\n S100: GeometryInfo;\n S125: GeometryInfo;\n S150: GeometryInfo;\n } = {\n S50: new GeometryInfo(),\n S75: new GeometryInfo(),\n S100: new GeometryInfo(),\n S125: new GeometryInfo(),\n S150: new GeometryInfo(),\n };\n\n public DIMENSION = {\n LINE: new GeometryInfo(new PlaneBufferGeometry(1000, 15), 15, 1, 1000),\n CAP: new GeometryInfo(new PlaneBufferGeometry(15, 200), 200, 1, 15),\n };\n\n public UI_CONTROL = {\n LINE: new GeometryInfo(new PlaneBufferGeometry(1000, 30), 15, 1, 1000),\n };\n\n static Instance(): GeometryManager {\n if (!GeometryManager.instance) {\n GeometryManager.instance = new GeometryManager();\n }\n return GeometryManager.instance;\n }\n\n public loadAll(): Promise {\n return Promise.all([\n this.loadExistingRoof(),\n this.loadExistingWall(),\n this.loadFascia(),\n this.loadEave(),\n this.loadSuperiorBeam(),\n this.loadBeamJoint(),\n this.loadRidgeCapping(),\n this.loadSuperiorPost(),\n this.loadFlyOverBracket(),\n this.loadMonoPanel(),\n this.loadRibspanPanel(),\n this.loadRibspanBarge(),\n this.loadRibspanRidgeCapping(),\n this.loadRibspanReceiverChannel(),\n this.loadCorroPanel(),\n this.loadMonoPanelBargeCapping(),\n this.loadCorroPanelBargeCapping(),\n this.loadMonoPanelDripBargeCapping(),\n this.loadCorroPanelDripBargeCapping(),\n this.loadGutter(),\n this.loadMonoRecieverChanel(),\n this.loadCorroRecieverChanel(),\n this.loadDownPipe(),\n this.loadZFlashing(),\n this.loadBraket(),\n ]);\n }\n\n private downloadFile(fileName: string): Promise {\n return new Promise((resolve, reject) => {\n this.loader.load(\n env.modelBaseUrl + \"/assets/models/\" + fileName,\n (geometry) => {\n geometry.center();\n resolve(geometry);\n }\n );\n });\n }\n private downloadFileEx(\n fileName: string,\n vWidth: Vector3,\n vHeight: Vector3,\n vLength: Vector3,\n name: string = \"\"\n ): Promise {\n return new Promise((resolve, reject) => {\n this.loader.load(\n env.modelBaseUrl + \"/assets/models/\" + fileName,\n (geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(geometry, vWidth);\n const height = this.utils.getGeometryLength(geometry, vHeight);\n const length = this.utils.getGeometryLength(geometry, vLength);\n let object = new GeometryInfo(geometry, width, height, length, name);\n resolve(object);\n }\n );\n });\n }\n public loadExistingRoof(): Promise {\n // return this.downloadFile('existing_roof_left.stl')\n // .then((geometry) => {\n // geometry.center();\n // let width = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // this.EXISTING_ROOF.LEFT = new GeometryInfo(geometry, width, height, length);\n // return this.downloadFile('existing_roof_right.stl');\n // })\n // .then((geometry) => {\n // geometry.center();\n // let width = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // this.EXISTING_ROOF.RIGHT = new GeometryInfo(geometry, width, height, length);\n // })\n\n // return this.downloadFile('existing_roof.stl')\n // .then((geometry) => {\n // geometry.center();\n // let width = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // this.EXISTING_ROOF.LEFT = new GeometryInfo(geometry, width, height, length);\n // this.EXISTING_ROOF.RIGHT = new GeometryInfo(geometry.clone().rotateY(-Math.PI/2), width, height, length);\n // //return this.downloadFile('existing_roof_right.stl');\n // })\n\n return new Promise((resolve, reject) => {\n const geometry = new BoxBufferGeometry(3000, 20, 1800);\n\n this.EXISTING_ROOF.EXISTING_ROOF = new GeometryInfo(\n geometry,\n 1800,\n 20,\n 3000\n );\n // this.EXISTING_ROOF.RIGHT = new GeometryInfo(geometry, 1800, 20, 3000);\n resolve(geometry);\n });\n }\n public loadExistingWall(): Promise {\n // return this.downloadFile('eave_wall.stl')\n // .then((geometry) => {\n // geometry.center();\n\n // let width = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // this.EXISTING_WALL.EXISTING_WALL = new GeometryInfo(geometry, width, height, length);\n // })\n return new Promise((resolve, reject) => {\n const geometry = new BoxBufferGeometry(1000, 1000, 190);\n this.EXISTING_WALL.EXISTING_WALL = new GeometryInfo(\n geometry,\n 190,\n 1000,\n 1000\n );\n resolve(geometry);\n });\n }\n public loadEave(): Promise {\n return this.downloadFile(\"fascia_width.stl\").then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.EAVE.EAVE = new GeometryInfo(geometry, width, height, length);\n });\n }\n public loadFascia(): Promise {\n return this.downloadFile(\"fascia_depth.stl\").then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.FASCIA.FASCIA = new GeometryInfo(geometry, width, height, length);\n });\n }\n public loadRidgeCapping(): Promise {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n // this.downloadFileEx(\"Ridge Capping 10 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_100 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 12.5 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_125 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 15 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_150 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 20 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_200 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 22.5 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_225 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 25 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_250 = g;\n // }\n // ),\n this.downloadFileEx(\"Ridge Capping (Customs).stl\", vW, vH, vL).then(\n (g) => {\n this.RidgeCapping.S_Ridge_Custom = g;\n }\n ),\n ]);\n }\n public loadBeamJoint(): Promise {\n let geo = new BoxBufferGeometry(60, 105, 500);\n this.SUPERIOR_BEAM.S65x110_JOINT = new GeometryInfo(geo, 60, 105, 500, \"BSIJ110\");\n let geo1 = new BoxBufferGeometry(60, 155, 500);\n this.SUPERIOR_BEAM.S65x160_JOINT = new GeometryInfo(geo1, 60, 155, 500, \"BSIJ160\");\n let geo2 = new BoxBufferGeometry(60, 205, 500);\n this.SUPERIOR_BEAM.S65x210_JOINT = new GeometryInfo(geo2, 60, 205, 500, \"BSIJ210\");\n let geo3 = new BoxBufferGeometry(60, 255, 500);\n this.SUPERIOR_BEAM.S65x260_JOINT = new GeometryInfo(geo3, 60, 255, 500, \"BSIJ260\");\n\n return Promise.resolve()\n }\n public loadSuperiorBeam(): Promise {\n let geo = new BoxBufferGeometry(45, 140, 1000);\n this.TIMBER_BEAM.S140x45 = new GeometryInfo(geo, 45, 140, 1000, \"S45x140\");\n let geo1 = new BoxBufferGeometry(90, 140, 1000);\n this.TIMBER_BEAM.S190x45 = new GeometryInfo(geo1, 90, 140, 1000, \"S45x190\");\n let geo2 = new BoxBufferGeometry(50, 150, 1000);\n this.TIMBER_BEAM.S150x50 = new GeometryInfo(geo2, 50, 150, 1000, \"S50x150\");\n let geo3 = new BoxBufferGeometry(50, 200, 1000);\n this.TIMBER_BEAM.S200x50 = new GeometryInfo(geo3, 50, 200, 1000, \"S50x200\");\n let geo4 = new BoxBufferGeometry(75, 150, 1000);\n this.TIMBER_BEAM.S150x75 = new GeometryInfo(geo4, 75, 150, 1000, \"S75x150\");\n let geo5 = new BoxBufferGeometry(75, 200, 1000);\n this.TIMBER_BEAM.S200x75 = new GeometryInfo(geo5, 75, 200, 1000, \"S75x200\");\n let geo6 = new BoxBufferGeometry(75, 250, 1000);\n this.TIMBER_BEAM.S250x75 = new GeometryInfo(geo6, 75, 250, 1000, \"S75x250\");\n let geoEndCap = new BoxBufferGeometry(50, 150, 50);\n this.TIMBER_BEAM.S150x50_ENDCAP = new GeometryInfo(geoEndCap, 50, 150, 50, \"S150x50_ENDCAP\");\n\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"Superior Beam 65x110 (3D).stl\", vW, vH, vL, \"S65x110\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x110 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x110 (3D).stl\", vW, vH, vL, \"BSEC110\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x110_ENDCAP = g;\n }\n ),\n this.downloadFileEx(\"Superior Beam 65x160 (3D).stl\", vW, vH, vL, \"S65x160\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x160 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x160 (3D).stl\", vW, vH, vL, \"BSEC160\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x160_ENDCAP = g;\n }\n ),\n this.downloadFileEx(\"Superior Beam 65x210 (3D).stl\", vW, vH, vL, \"S65x210\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x210 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x210 (3D).stl\", vW, vH, vL, \"BSEC210\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x210_ENDCAP = g;\n }\n ),\n this.downloadFileEx(\"Superior Beam 65x260 (3D).stl\", vW, vH, vL, \"S65x260\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x260 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x260 (3D).stl\", vW, vH, vL, \"BSEC260\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x260_ENDCAP = g;\n }\n ),\n ]);\n }\n public loadSuperiorPost(): Promise {\n let geo = new BoxBufferGeometry(100, 100, 1000);\n this.SUPERIOR_POST.TIMBER = new GeometryInfo(geo, 100, 1000, 100);\n let geoTimber = new BoxBufferGeometry(65, 65, 1000);\n this.SUPERIOR_POST.CENTER_POST_TIMBER = new GeometryInfo(geoTimber, 65, 1000, 65);\n\n return this.downloadFile(\"Superior Post 65x65 (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n this.SUPERIOR_POST.S65x65 = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"Post SHS 90x3 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n this.SUPERIOR_POST.S90x90 = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadFlyOverBracket(): Promise {\n return this.downloadFile(\"Fly Over Bracket 65x3 (3D).stl\").then(\n (geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n this.FLY_OVER_BRACKET.S65x3 = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n }\n );\n }\n public loadRibspanPanel(): Promise {\n return this.downloadFile(\"Rib span 310mm (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.RIBSPAN.RIBSPAN_PANEL = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n })\n }\n public loadRibspanRidgeCapping(): Promise {\n return this.downloadFile(\"Rib span Ridge Capping (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.RIBSPAN.RIBSPAN_RIDGE_CAPPING = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n })\n }\n public loadRibspanBarge(): Promise {\n return this.downloadFile(\"Rib span Barge Capping (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.RIBSPAN.RIBSPAN_BARGE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n })\n }\n public loadRibspanReceiverChannel(): Promise {\n return this.downloadFile(\"Rib span Reciver Channel (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.RIBSPAN.RIBSPAN_RECEIVER_CHANNEL = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n })\n }\n public loadMonoPanel(): Promise {\n return this.downloadFile(\"50mm Monopanel-1 (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.MONO_PANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Monopanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.MONO_PANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Monopanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.MONO_PANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Monopanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.MONO_PANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Monopanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, 2, 0);\n this.MONO_PANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"50mm Monopanel-1 (3D)-base.stl\");\n })\n\n .then((geometry) => {\n geometry.center();\n geometry.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n );\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL.S50MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Monopanel-1 (3D)-base.stl\");\n })\n\n .then((geometry) => {\n geometry.center();\n geometry.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n );\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL.S75MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Monopanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n geometry.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n );\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL.S100MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Monopanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n geometry.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n );\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL.S125MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Monopanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n geometry.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n );\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL.S150MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroPanel(): Promise {\n return this.downloadFile(\"50mm Coropanel-1 (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"50mm Coropanel-1 (3D)-base.stl\");\n })\n\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S50MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel-1 (3D)-base.stl\");\n })\n\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S75MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S100MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S125MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S150MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadMonoPanelBargeCapping(): Promise {\n return this.downloadFile(\"50mm Monopanel Barge Capping (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadMonoPanelDripBargeCapping(): Promise {\n return this.downloadFile(\"50MM TRIMSPAN DRIP BARGE.stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75MM TRIMSPAN DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100MM TRIMSPAN DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125MM TRIMSPAN DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150MM TRIMSPAN DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroPanelBargeCapping(): Promise {\n return this.downloadFile(\"50mm Coropanel Barge Capping (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroPanelDripBargeCapping(): Promise {\n return this.downloadFile(\"50MM CORROPANEL DRIP BARGE .stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75MM CORROPANEL DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100MM CORROPANEL DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125MM CORROPANEL DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150MM CORROPANEL DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadMonoRecieverChanel(): Promise {\n return this.downloadFile(\"50mm Monopanel Reveiver Channel (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroRecieverChanel(): Promise {\n return this.downloadFile(\"50mm Coropanel Reveiver Channel (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n //geometry.rotateY(Math.PI/2)\n this.CORRO_PANEL_RECIEVER_CHANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadGutter(): Promise {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"Quad Gutter (3D).stl\", vW, vH, vL).then((g) => {\n this.GUTTER.QUAD_150 = g;\n }),\n this.downloadFileEx(\n \"End Cap Quad Gutter (3D).stl\",\n vW,\n vH,\n new Vector3(1, 0, 0)\n ).then((g) => {\n this.GUTTER.QUAD_150_END_CAP = g;\n }),\n this.downloadFileEx(\"Square Line Gutter (3D).stl\", vW, vH, vL).then(\n (g) => {\n this.GUTTER.SQUARE_LINE = g;\n }\n ),\n this.downloadFileEx(\n \"End Cap Square Line Gutter (3D).stl\",\n vW,\n vH,\n new Vector3(1, 0, 0)\n ).then((g) => {\n this.GUTTER.SQUARE_LINE_END_CAP = g;\n }),\n ]);\n }\n public loadBraket(): Promise {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"FUB Bracket 65x3_1.stl\", vW, vH, vL).then((g) => {\n this.UPSTAND_BRAKET.BRAKET_1 = g;\n }),\n this.downloadFileEx(\"FUB Bracket 65x3_2.stl\", vW, vH, vL).then((g) => {\n this.UPSTAND_BRAKET.BRAKET_2 = g;\n }),\n ]);\n }\n private loadDownPipe(): Promise {\n return this.downloadFile(\"90mm PVC (3D)-pipe.stl\")\n .then((geometry) => {\n geometry.center();\n\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, height / 2, 0);\n this.DOWNPIPE.PIPE_S90MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"90mm PVC (3D)-L.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n geometry.translate(0, height / 2, 0);\n this.DOWNPIPE.L_S90MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n private loadZFlashing() {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"50mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S50 = g;\n }),\n this.downloadFileEx(\"75mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S75 = g;\n }),\n this.downloadFileEx(\"100mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S100 = g;\n }),\n this.downloadFileEx(\"125mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S125 = g;\n }),\n this.downloadFileEx(\"150mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S150 = g;\n }),\n ]);\n }\n public getBeam(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltBeamSize.currentValue == 0 ||\n this.APP.sltBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n if (this.APP.sltBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160);\n }\n if (this.APP.sltBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210);\n }\n if (this.APP.sltBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n if (\n this.APP.sltBeamSize.currentValue == 0 ||\n this.APP.sltBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S140x45);\n }\n if (this.APP.sltBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S190x45);\n }\n if (this.APP.sltBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50);\n }\n if (this.APP.sltBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x50);\n }\n if (this.APP.sltBeamSize.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x75);\n }\n if (this.APP.sltBeamSize.currentValue == 6) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x75);\n }\n if (this.APP.sltBeamSize.currentValue == 7) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S250x75);\n }\n }\n }\n\n public getBeamJoint(): GeometryInfo {\n if (UI.beamType == 0) {\n if (\n UI.beamSize == 0 || UI.beamSize == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n } else if (UI.beamSize == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_JOINT);\n } else if (UI.beamSize == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_JOINT);\n } else if (UI.beamSize == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_JOINT);\n } else if (UI.beamSize > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n }\n }\n\n return null\n }\n\n public getHouseBeamJoint(): GeometryInfo {\n if (UI.beamType == 0) {\n if (\n UI.houseBeamSize == 0 ||\n UI.houseBeamSize == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n }\n if (UI.houseBeamSize == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_JOINT);\n }\n if (UI.houseBeamSize == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_JOINT);\n }\n if (UI.houseBeamSize == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_JOINT);\n }\n if (UI.houseBeamSize > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n }\n }\n\n return null\n }\n\n public getHouseBeam(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltHouseBeamSize.currentValue == 0 ||\n this.APP.sltHouseBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltHouseBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n if (\n this.APP.sltHouseBeamSize.currentValue == 0 ||\n this.APP.sltHouseBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S140x45);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S190x45);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x50);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x75);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 6) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x75);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 7) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S250x75);\n }\n }\n }\n public getRafterBeam(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160);\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50);\n }\n }\n public getRafterBeamEndCap(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_ENDCAP);\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50_ENDCAP);\n }\n }\n public getBeamEndCap(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltBeamSize.currentValue == 0 ||\n this.APP.sltBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_ENDCAP);\n }\n if (this.APP.sltBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_ENDCAP);\n }\n if (this.APP.sltBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_ENDCAP);\n }\n if (this.APP.sltBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_ENDCAP);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50_ENDCAP);\n }\n }\n\n public getHouseBeamEndCap(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltHouseBeamSize.currentValue == 0 ||\n this.APP.sltHouseBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_ENDCAP);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_ENDCAP);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_ENDCAP);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_ENDCAP);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltHouseBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50_ENDCAP);\n }\n }\n\n public getPost() {\n if (this.APP.sltColumnType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.S65x65);\n } else if (\n this.APP.sltColumnType.currentValue == 1 ||\n this.APP.sltColumnType.currentValue == 2\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.S90x90);\n } else {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.TIMBER);\n }\n }\n public getCenterPost() {\n if(UI.beamType == 1) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.CENTER_POST_TIMBER)\n } else {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.S65x65)\n }\n }\n public getRoofSheetPanel(): GeometryInfo {\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S50MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S75MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S100MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S125MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S150MM);\n }\n } else if (this.APP.sltRoofSheetingType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S50MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S75MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S100MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S125MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S150MM);\n }\n }\n return null;\n }\n public getRoofRibspanPanel(): GeometryInfo {\n return this.utils.cloneGeometryInfo(this.RIBSPAN.RIBSPAN_PANEL);\n }\n public getRoofBaseHeight(): number {\n const roofPanel = this.getRoofRibspanPanel()\n return _.get(roofPanel, ['height'], 0)\n }\n public getRoofBase(): GeometryInfo {\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S50MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S75MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S100MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S125MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S150MM_BASE);\n }\n } else if (this.APP.sltRoofSheetingType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S50MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S75MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S100MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S125MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S150MM_BASE);\n }\n }\n return null;\n }\n public getRibspanRidgeCapping(): GeometryInfo {\n return this.utils.cloneGeometryInfo(\n this.RIBSPAN.RIBSPAN_RIDGE_CAPPING\n );\n }\n public getRibspanBarge(): GeometryInfo {\n return this.utils.cloneGeometryInfo(\n this.RIBSPAN.RIBSPAN_BARGE\n );\n }\n public getBarge(): GeometryInfo {\n if (this.APP.sltDripBarge.currentValue) {\n if (\n this.APP.sltBargeType.currentValue == 0 ||\n this.APP.sltBargeType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S150MM\n );\n }\n } else if (this.APP.sltBargeType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S150MM\n );\n }\n }\n } else {\n if (\n this.APP.sltBargeType.currentValue == 0 ||\n this.APP.sltBargeType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S150MM\n );\n }\n } else if (this.APP.sltBargeType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S150MM\n );\n }\n }\n }\n\n return null;\n }\n public getRibspanReceiverChannel(): GeometryInfo {\n return this.utils.cloneGeometryInfo(\n this.RIBSPAN.RIBSPAN_RECEIVER_CHANNEL\n );\n }\n public getReceiverChannel(): GeometryInfo {\n if (\n this.APP.sltReceiverType.currentValue == 0 ||\n this.APP.sltReceiverType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S150MM\n );\n }\n } else if (this.APP.sltReceiverType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S150MM\n );\n }\n }\n return null;\n }\n public getGutter() {\n if (this.APP.sltGutterType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.GUTTER.SQUARE_LINE);\n } else if (\n this.APP.sltGutterType.currentValue == 1 ||\n this.APP.sltGutterType.currentValue == 2\n ) {\n return this.utils.cloneGeometryInfo(this.GUTTER.QUAD_150);\n }\n }\n public getGuterEndCap(): GeometryInfo {\n if (this.APP.sltGutterType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.GUTTER.SQUARE_LINE_END_CAP);\n } else if (\n this.APP.sltGutterType.currentValue == 1 ||\n this.APP.sltGutterType.currentValue == 2\n ) {\n return this.utils.cloneGeometryInfo(this.GUTTER.QUAD_150_END_CAP);\n }\n }\n public getRidge(): GeometryInfo {\n return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_Custom);\n // if (\n // this.APP.sltRoofPitch.currentValue == 2 ||\n // this.APP.sltRoofPitch.currentValue == 3 ||\n // this.APP.sltRoofPitch.currentValue == 5 ||\n // this.APP.sltRoofPitch.currentValue == 7.5 ||\n // this.APP.sltRoofPitch.currentValue == 10\n // ) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_100);\n // } else if (this.APP.sltRoofPitch.currentValue == 12) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_125);\n // } else if (this.APP.sltRoofPitch.currentValue == 15) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_150);\n // } else if (this.APP.sltRoofPitch.currentValue == 20) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_200);\n // } else if (this.APP.sltRoofPitch.currentValue == 22.5) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_225);\n // } else if (this.APP.sltRoofPitch.currentValue == 25) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_250);\n // }\n }\n public getDownPipe(): GeometryInfo {\n if (this.APP.sltDownpipeType.currentValue == 0) {\n return this.DOWNPIPE.PIPE_S90MM;\n }\n return null;\n }\n public getDownPipeL(): GeometryInfo {\n if (this.APP.sltDownpipeType.currentValue == 0) {\n return this.DOWNPIPE.L_S90MM;\n }\n return null;\n }\n public getZFlashing(): GeometryInfo {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S50);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S75);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S100);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S125);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S150);\n }\n\n return null;\n }\n public getDimensionLine() {\n return this.utils.cloneGeometryInfo(this.DIMENSION.LINE);\n }\n public getDimensionCap() {\n return this.utils.cloneGeometryInfo(this.DIMENSION.CAP);\n }\n public getUIControlLine() {\n return this.utils.cloneGeometryInfo(this.UI_CONTROL.LINE);\n }\n public getUpstandBraket(part: number) {\n if (part == 1) {\n return this.utils.cloneGeometryInfo(this.UPSTAND_BRAKET.BRAKET_1);\n } else if (part == 2) {\n return this.utils.cloneGeometryInfo(this.UPSTAND_BRAKET.BRAKET_2);\n }\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, PlaneBufferGeometry, BoxBufferGeometry, CubeTextureLoader } from \"three\";\nimport { Util } from \"./utils\";\nimport { environment } from 'src/environments/environment';\nimport { CONFIG as env, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { HomeComponent as AppComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo } from 'src/app/core/models';\n\nexport class GroundManager {\n private scene: Scene;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_ground: BufferGeometry;\n private geo_groundBase: GeometryInfo;\n\n private totalBaySize: number;\n\n private isReady = false;\n\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise {\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.material = MaterialManager.Instance().GROUND.clone();\n\n this.APP.sldExistingLength.addAction(this.uiChanged.bind(this));\n this.APP.sldExistingLength2.addAction(this.uiChanged.bind(this));\n this.APP.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n this.APP.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n this.APP.sldSpan.addAction(this.uiChanged.bind(this));\n this.APP.sldMultiSpan.addAction(this.uiChanged.bind(this));\n this.APP.dialogEditBay.addAction(this.uiChanged.bind(this));\n\n\n resolve();\n });\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.geo_ground = new PlaneBufferGeometry(200000, 200000);\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(this.geo_groundBase.width, this.geo_groundBase.height, this.geo_groundBase.length);\n this.geo_groundBase.geometry.translate(0,0,this.geo_groundBase.length/2);\n\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.GROUND_BASE));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n\n this.isReady = true;\n\n this.addGround();\n this.addBase();\n\n resolve();\n });\n }\n\n public addGround() {\n let mesh = new Mesh(this.geo_ground, this.material);\n mesh.userData = { type: \"GROUND\" };\n mesh.position.y = -100;\n mesh.rotation.x = - Math.PI / 2;\n\n this.scene.add(mesh);\n //Skybox\n const cubeTextureLoader = new CubeTextureLoader();\n cubeTextureLoader.setPath(environment.modelBaseUrl + '/assets/images/skybox/' );\n const cubeTexture = cubeTextureLoader.load( [\n \"cube_f.jpg\", \"cube_b.jpg\",\n \"cube_u.jpg\", \"cube_d.jpg\",\n \"cube_l.jpg\", \"cube_r.jpg\"\n ] );\n this.scene.background = cubeTexture;\n }\n\n private addBase() {\n //return new Promise((resolve, reject) => {\n // if(!this.isReady){\n // resolve();\n // return;\n // }\n\n // this.APP.patiosManager.patiosGroup.remove(...this.APP.patiosManager.patiosGroup.children.filter(o => o.userData.type == GEOMETRY_TYPE.GROUND_BASE));\n // this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n\n // let base = new Mesh(this.geo_groundBase.geometry, MaterialManager.Instance().BASE);\n // base.userData = { type: GEOMETRY_TYPE.GROUND_BASE };\n\n // let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n // let length = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.APP.sldBackOverhang.currentValue;\n\n // let extraWidth = 0;\n\n // let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n\n // base.position.set(0,0,-offsetZ);\n // base.scale.set((width + extraWidth) / this.geo_groundBase.width, 1, (length + extraWidth) / this.geo_groundBase.length);\n\n // this.APP.patiosManager.patiosGroup.add(base);\n\n\n \n // resolve();\n //});\n }\n\n private uiChanged(pre: number, cur: number) {\n this.addBase();\n }\n}\n","import { MeshLambertMaterial, TextureLoader, MeshBasicMaterial, RepeatWrapping, DoubleSide, MeshPhongMaterial, LineBasicMaterial, Color, Texture, SpriteMaterial, VertexColors, FrontSide } from \"three\";\nimport { environment as env } from 'src/environments/environment';\nimport { HomeComponent } from 'src/app-ribspan/containers/home/home.component';\nimport { UI } from \"./ui\";\n\nexport class MaterialManager {\n private textureLoader: TextureLoader;\n private APP: HomeComponent;\n\n private defaultColor = new Color(0x6D6C6E); //Basalt\n\n public DEFAULT: MeshPhongMaterial;\n public WALL: MeshLambertMaterial;\n public EAVE: MeshPhongMaterial;\n public FASCIA: MeshPhongMaterial;\n public EXISTING_ROOF: MeshPhongMaterial;\n public GROUND: MeshLambertMaterial;\n public BASE: MeshPhongMaterial;\n\n public BEAM: MeshPhongMaterial;\n public BEAM_TRANSPARENT: MeshPhongMaterial;\n public POST: MeshPhongMaterial;\n public GUTTER: MeshPhongMaterial;\n public BARGE: MeshPhongMaterial;\n public RECEIVER_CHANEL: MeshPhongMaterial;\n public DOWNPIPE: MeshPhongMaterial;\n public BRACKET: MeshPhongMaterial;\n public BRACKET_WARNING: MeshPhongMaterial;\n public FASCIA_BRACKET: MeshPhongMaterial;\n public ROOF: MeshPhongMaterial;\n public RIDGE_CAPPING: MeshPhongMaterial;\n public ROOF_BASE: MeshPhongMaterial;\n public ZFLASHING: MeshPhongMaterial;\n\n public EXISTING_WALL_L1_TEXTURE: Texture;\n public EXISTING_WALL_W1_TEXTURE: Texture;\n public EXISTING_WALL_L2_TEXTURE: Texture;\n public EXISTING_WALL_W2_TEXTURE: Texture;\n\n public TEXTURE_UI_CONTROL_CUTBEAM: Texture;\n public TEXTURE_UI_CONTROL_EXIT_CUTBEAM: Texture;\n public UI_CONTROL_CUTBEAM: SpriteMaterial\n public UI_CONTROL_EXIT_CUTBEAM: SpriteMaterial\n\n public EXISTING_ROOF_TEXTURE: {\n L1: Texture,\n L2: Texture,\n W1: Texture,\n W2: Texture\n } = {\n L1: null,\n L2: null,\n W1: null,\n W2: null\n }\n\n public DIMENSION_TEXT: MeshBasicMaterial;\n public HIGHLIGHT_DIMENSION_TEXT: MeshBasicMaterial;\n\n public MESH_OUTLINE: LineBasicMaterial;\n public BEAM_OUTLINE: LineBasicMaterial;\n\n public TEXTURE_UI_CONTROL: Texture;\n public TEXTURE_TIMBER: Texture;\n public UI_CONTROL: SpriteMaterial\n\n public TEXTURE_UI_CONTROL_DELETE: Texture;\n public UI_CONTROL_DELETE: SpriteMaterial\n\n public HIDDEN_UI_CONTROL: MeshBasicMaterial\n\n private static instance: MaterialManager;\n static Instance(): MaterialManager{\n if (!MaterialManager.instance) {\n MaterialManager.instance = new MaterialManager();\n }\n return MaterialManager.instance;\n }\n\n private constructor(){\n this.textureLoader = new TextureLoader();\n\n //default\n this.DEFAULT = new MeshPhongMaterial({\n color: 0x6D6C6E,\n side: DoubleSide\n });\n\n //Eave\n this.EAVE = new MeshPhongMaterial({\n color: new Color('white'),\n side: DoubleSide\n });\n\n //Eave\n this.FASCIA = new MeshPhongMaterial({\n color: new Color('white'),\n side: DoubleSide\n });\n\n //Ground\n var groundTexture = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/grass-dark.jpg\" );\n groundTexture.wrapS = groundTexture.wrapT = RepeatWrapping;\n groundTexture.repeat.set( 25, 25 );\n groundTexture.anisotropy = 16;\n this.GROUND = new MeshLambertMaterial({\n side: DoubleSide, \n map: groundTexture\n });\n\n //Base\n this.BASE = new MeshPhongMaterial({ color: new Color('white') });\n\n //Existing roof\n // var existingRoofTexture = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n // existingRoofTexture.wrapS = existingRoofTexture.wrapT = RepeatWrapping;\n // existingRoofTexture.repeat.set( 2, 2 );\n // existingRoofTexture.anisotropy = 16;\n this.EXISTING_ROOF = new MeshPhongMaterial({\n side: DoubleSide\n });\n\n //wall texture\n this.EXISTING_WALL_L1_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_L1_TEXTURE.wrapS = this.EXISTING_WALL_L1_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_L1_TEXTURE.anisotropy = 1;\n\n this.EXISTING_WALL_L2_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_L2_TEXTURE.wrapS = this.EXISTING_WALL_L2_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_L2_TEXTURE.anisotropy = 1;\n\n this.EXISTING_WALL_W1_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_W1_TEXTURE.wrapS = this.EXISTING_WALL_W1_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_W1_TEXTURE.anisotropy = 1;\n\n this.EXISTING_WALL_W2_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_W2_TEXTURE.wrapS = this.EXISTING_WALL_W2_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_W2_TEXTURE.anisotropy = 1;\n\n \n\n //Existing roof texture\n this.EXISTING_ROOF_TEXTURE.L1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L1.wrapS = this.EXISTING_ROOF_TEXTURE.L1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.L2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L2.wrapS = this.EXISTING_ROOF_TEXTURE.L2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L2.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W1.wrapS = this.EXISTING_ROOF_TEXTURE.W1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W2.wrapS = this.EXISTING_ROOF_TEXTURE.W2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W2.anisotropy = 1;\n\n //Wall\n this.WALL = new MeshLambertMaterial({\n side: DoubleSide, \n //map: this.BRICK_TEXTURE\n });\n\n //text\n this.DIMENSION_TEXT = new MeshBasicMaterial({ color: 0xffffff, side: DoubleSide });\n this.HIDDEN_UI_CONTROL = new MeshLambertMaterial({\n side: DoubleSide,\n color: 'white',\n transparent: true,\n opacity: 0\n })\n this.HIGHLIGHT_DIMENSION_TEXT = new MeshBasicMaterial({ color: 0xffff00, side: DoubleSide });\n\n this.MESH_OUTLINE = new LineBasicMaterial( { color: 'red' } );\n this.BEAM_OUTLINE = new LineBasicMaterial( { color: 'yellow' } );\n\n this.BARGE = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.RECEIVER_CHANEL = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.GUTTER = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //basalt\n this.DOWNPIPE = new MeshPhongMaterial({ color: new Color(0xffffff) }); //white\n this.BEAM = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.BEAM_TRANSPARENT = new MeshPhongMaterial({ color: new Color(0xE4E2D5), side: DoubleSide, transparent: true, opacity: 0.5 }); //surfmist\n this.POST = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.BRACKET = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.BRACKET_WARNING = new MeshPhongMaterial({ color: new Color(0xFF0000) }); //red: always red\n this.FASCIA_BRACKET = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.ROOF = new MeshPhongMaterial({ side: FrontSide, vertexColors: VertexColors }); //surfmist\n this.RIDGE_CAPPING = new MeshPhongMaterial({ color: new Color(0xE4E2D5) });\n this.ROOF_BASE = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.ZFLASHING = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n }\n\n public init(app: HomeComponent){\n this.APP = app;\n this.registerEvent();\n\n return Promise.all([\n this.loadTexture('cut-beam.png').then(texture => {\n this.TEXTURE_UI_CONTROL_CUTBEAM = texture\n this.UI_CONTROL_CUTBEAM = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL_CUTBEAM, sizeAttenuation: true })\n }),\n this.loadTexture('join-beam.png').then(texture => {\n this.TEXTURE_UI_CONTROL_EXIT_CUTBEAM = texture\n this.UI_CONTROL_EXIT_CUTBEAM = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL_EXIT_CUTBEAM, sizeAttenuation: true })\n }),\n\n this.loadTexture('resize-icon.png').then(texture => {\n this.TEXTURE_UI_CONTROL = texture\n this.UI_CONTROL = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL, sizeAttenuation: false })\n }),\n this.loadTexture('delete-icon.png').then(texture => {\n this.TEXTURE_UI_CONTROL_DELETE = texture\n this.UI_CONTROL_DELETE = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL_DELETE, sizeAttenuation: false })\n }),\n this.loadTexture('timber-texture.jpg').then(texture => {\n this.TEXTURE_TIMBER = texture\n this.TEXTURE_TIMBER.repeat.set(1, 0.3)\n this.TEXTURE_TIMBER.wrapS = RepeatWrapping\n this.TEXTURE_TIMBER.wrapT = RepeatWrapping\n }),\n this.existingRoofTypeChanged(null,null)\n ])\n }\n private loadTexture(name: string) {\n return new Promise((resolve, reject) => {\n this.textureLoader.load(env.modelBaseUrl + \"/assets/images/textures/\" + name, (texture) => {\n resolve(texture)\n },\n () => { },\n (err) => { reject(err) });\n })\n }\n private controlsToRegisterEvent: Array;\n private registerEvent(){\n this.APP.sltColourBeam.addAction(this.beamColorChanged.bind(this), 1);\n this.APP.sltColourPost.addAction(this.postColorChanged.bind(this), 1);\n this.APP.sltColourBarge.addAction(this.bargeColorChanged.bind(this),1);\n this.APP.sltColourGutter.addAction(this.gutterColorChanged.bind(this), 1);\n this.APP.sltColourDownpipe.addAction(this.downpipeColorChanged.bind(this), 1);\n this.APP.sltColourBracket.addAction(this.bracketColorChanged.bind(this), 1);\n this.APP.sltColourFasciaBracket.addAction(this.fasciaBracketColorChanged.bind(this), 1);\n this.APP.sltColourRoof.addAction(this.roofColorChanged.bind(this), 1);\n this.APP.sltFlatBottom.addAction(this.roofBaseColorChanged.bind(this), 1);\n this.APP.sltColourZFlashing.addAction(this.zFlashingColorChanged.bind(this), 1);\n this.APP.sltExistingRoofType.addAction(this.existingRoofTypeChanged.bind(this), 1);\n }\n private postColorChanged(pre: number, cur: string){\n if(UI.postType == 3) {\n this.POST.color = new Color(UI.postColor);\n if(this.TEXTURE_TIMBER) {\n this.POST.color = new Color(0xFFFFFF);\n this.POST.map = this.TEXTURE_TIMBER\n this.POST.map.needsUpdate = true\n this.POST.needsUpdate = true\n }\n } else {\n this.POST.color = new Color(UI.postColor);\n this.POST.map = null\n this.POST.needsUpdate = true\n }\n }\n private bargeColorChanged(pre: number, cur: string){\n this.BARGE.color = new Color(parseInt(cur));\n }\n private gutterColorChanged(pre: number, cur: string){\n this.GUTTER.color = new Color(parseInt(cur));\n }\n private downpipeColorChanged(pre: number, cur: string){\n this.DOWNPIPE.color = new Color(parseInt(cur));\n }\n private beamColorChanged(pre: number, cur: string){\n if(UI.beamType == 1) {\n this.BEAM.color = new Color(UI.beamColor);\n this.BEAM_TRANSPARENT.color = new Color(UI.beamColor);\n if(this.TEXTURE_TIMBER) {\n this.BEAM.color = new Color(0xFFFFFF);\n this.BEAM.map = this.TEXTURE_TIMBER\n this.BEAM.map.needsUpdate = true\n this.BEAM.needsUpdate = true\n\n this.BEAM_TRANSPARENT.color = new Color(0xFFFFFF);\n this.BEAM_TRANSPARENT.map = this.TEXTURE_TIMBER\n this.BEAM_TRANSPARENT.map.needsUpdate = true\n this.BEAM_TRANSPARENT.needsUpdate = true\n }\n } else {\n this.BEAM.color = new Color(UI.beamColor);\n this.BEAM.map = null\n this.BEAM.needsUpdate = true\n\n this.BEAM_TRANSPARENT.color = new Color(UI.beamColor);\n this.BEAM_TRANSPARENT.map = null\n this.BEAM_TRANSPARENT.needsUpdate = true\n }\n }\n private bracketColorChanged(pre: number, cur: string){\n this.BRACKET.color = new Color(parseInt(cur));\n }\n private fasciaBracketColorChanged(pre: number, cur: string){\n this.FASCIA_BRACKET.color = new Color(parseInt(cur));\n }\n private roofColorChanged(pre: number, cur: string){\n // this.ROOF.color = new Color(parseInt(cur));\n this.RIDGE_CAPPING.color = new Color(parseInt(cur));\n }\n private roofBaseColorChanged(pre: number, cur: string){\n this.ROOF_BASE.color = new Color(parseInt(cur));\n this.RECEIVER_CHANEL.color = new Color(parseInt(cur));\n }\n private zFlashingColorChanged(pre: number, cur: string) {\n this.ZFLASHING.color = new Color(parseInt(cur));\n }\n private existingRoofTypeChanged(pre: number, cur: number) {\n if(UI.existingRoofType == 0){\n this.EXISTING_ROOF_TEXTURE.L1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.L1.wrapS = this.EXISTING_ROOF_TEXTURE.L1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.L2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.L2.wrapS = this.EXISTING_ROOF_TEXTURE.L2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L2.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.W1.wrapS = this.EXISTING_ROOF_TEXTURE.W1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.W2.wrapS = this.EXISTING_ROOF_TEXTURE.W2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W2.anisotropy = 1;\n } else if (UI.existingRoofType == 1){\n this.EXISTING_ROOF_TEXTURE.L1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L1.wrapS = this.EXISTING_ROOF_TEXTURE.L1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.L2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L2.wrapS = this.EXISTING_ROOF_TEXTURE.L2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L2.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W1.wrapS = this.EXISTING_ROOF_TEXTURE.W1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W2.wrapS = this.EXISTING_ROOF_TEXTURE.W2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W2.anisotropy = 1;\n } \n }\n}\n","// import { DropdownInputItemModel } from \"./models\"\nexport class Objects {\n public baseColourList = [\n { id: 0x6d6c6e, value: \"Basalt\", disabled: false },\n {\n id: 0x969799,\n value: \"Bluegum\",\n disabled: false,\n },\n { id: 0xe9dcb8, value: \"Classic Cream\", disabled: false },\n { id: 0x304c3c, value: \"Cottage Green\", disabled: false },\n // { id: 0xa59f8a, value: \"Cove\", disabled: true },\n { id: 0x364152, value: \"Deep Ocean\", disabled: false },\n {\n id: 0xf9fbf1,\n value: \"Dover White\",\n disabled: false,\n },\n { id: 0xb1ada3, value: \"Dune\", disabled: false },\n { id: 0xc5c2aa, value: \"Evening Haze\", disabled: false },\n { id: 0x857e73, value: \"Gully\", disabled: false },\n { id: 0x3e434c, value: \"Ironstone\", disabled: false },\n { id: 0x6c6153, value: \"Jasper\", disabled: false },\n // { id: 0x737562, value: \"Mangrove\", disabled: true },\n { id: 0x5e1d0e, value: \"Manor Red\", disabled: false },\n { id: 0x323233, value: \"Monument\", disabled: false },\n { id: 0x000000, value: \"Night Sky\", disabled: false },\n { id: 0x7c846a, value: \"Pale Eucalypt\", disabled: false },\n { id: 0xcabfa4, value: \"Paperbark\", disabled: false },\n { id: 0xbdbfba, value: \"Shale Grey\", disabled: false },\n {\n id: 0xd2d1cb,\n value: \"Southerly\",\n disabled: false,\n },\n { id: 0xe4e2d5, value: \"Surfmist\", disabled: false },\n // { id: 0x67432e, value: \"Terrain\", disabled: true },\n { id: 0x7f7c78, value: \"Wallaby\", disabled: false },\n { id: 0xd8e5e6, value: \"White\", disabled: false },\n { id: 0x888b8a, value: \"Windspray\", disabled: false },\n { id: 0x4b4c46, value: \"Woodland Grey\", disabled: false },\n { id: 0xfcffff, value: \"Zinc\", disabled: false },\n ];\n\n public roofColourList = [\n {\n id: 0xe9dcb8,\n value: \"Classic Cream\",\n disabled: false,\n bottomValue: \"Gloss Classic Cream\",\n },\n {\n id: 0x323233,\n value: \"Monument\",\n disabled: false,\n bottomValue: \"Surfmist\",\n },\n {\n id: 0xcabfa4,\n value: \"Paperbark\",\n disabled: false,\n bottomValue: \"Gloss Paperbark\",\n },\n {\n id: 0xe4e2d5,\n value: \"Surfmist\",\n disabled: false,\n bottomValue: \"Surfmist\",\n },\n ];\n public beamColourList = [\n { id: 0x000000, value: \"Black\", beamEndCapColorCode: \"B\" },\n { id: 0xe9dcb8, value: \"Cream\", beamEndCapColorCode: \"C\" },\n { id: 0xe4e2d5, value: \"Surfmist\", beamEndCapColorCode: \"SM\" },\n { id: 0xcabfa4, value: \"Paperbark\", beamEndCapColorCode: \"M\" },\n { id: 0x323233, value: \"Monument\", beamEndCapColorCode: \"MM\" },\n ];\n public postColourList = [\n { id: 0x000000, value: \"Black\" },\n { id: 0xe9dcb8, value: \"Cream\" },\n { id: 0xe4e2d5, value: \"Surfmist\" },\n { id: 0xcabfa4, value: \"Paperbark\" },\n ];\n public rakeCutTypeList = [\n { id: 0, value: \"None\" },\n { id: 1, value: \"Left\" },\n { id: 2, value: \"Right\" },\n { id: 3, value: \"Left & Right\" },\n ];\n public rakeCutType = [\n { id: 0, value: \"None\" },\n { id: 1, value: \"Angle\" },\n { id: 2, value: \"Step\" },\n ];\n public downpipeColourList = [{ id: 0xd8e5e6, value: \"White\" }];\n public flyoverColourList = [\n { id: 0xd8e5e6, value: \"Non Standard Colour\" },\n { id: 0x000000, value: \"Black\" },\n { id: 0xe9dcb8, value: \"Cream\" },\n { id: 0xe4e2d5, value: \"Surfmist\" },\n { id: 0xcabfa4, value: \"Paperbark\" },\n ];\n public fasciaColourList = [\n { id: 0x000000, value: \"Black\" },\n { id: 0xe9dcb8, value: \"Classic Cream\" },\n { id: 0xe4e2d5, value: \"Surfmist\" },\n ];\n public existingRoofPitchList = [\n { id: 10, value: \"10\" },\n { id: 15, value: \"15\" },\n { id: 20, value: \"20\" },\n { id: 22.5, value: \"22.5\" },\n { id: 25, value: \"25\" },\n { id: 30, value: \"30\" },\n ];\n public roofPitchList = [\n { id: 2, value: \"2\" },\n { id: 3, value: \"3\" },\n { id: 5, value: \"5\" },\n { id: 7.5, value: \"7.5\" },\n { id: 10, value: \"10\" },\n ];\n public gableRoofPitchList = [\n { id: 7.5, value: \"7.5\" },\n { id: 10, value: \"10\" },\n { id: 12, value: \"12\" },\n { id: 15, value: \"15\" },\n { id: 20, value: \"20\" },\n { id: 22.5, value: \"22.5\" },\n { id: 25, value: \"25\" },\n ];\n public wallList = [{ id: 0, value: \"Bricks\" }];\n public structureTypeList = [\n { id: 0, value: \"Existing Building\" },\n { id: 1, value: \"Fly Over\" },\n { id: 2, value: \"Back Fly Over\" },\n { id: 3, value: \"To Fascia\" },\n { id: 5, value: \"Fascia Upstand\" },\n { id: 6, value: \"Back Fascia Upstand\" },\n { id: 4, value: \"Free Standing\" },\n ];\n public structureTypeListGableLR = [\n { id: 1, value: \"Fly Over\" },\n { id: 5, value: \"Fascia Upstand\" },\n { id: 4, value: \"Free Standing\" },\n ];\n public structureTypeListGableFB = [\n { id: 0, value: \"Existing Building\" },\n { id: 1, value: \"Fly Over\" },\n { id: 5, value: \"Fascia Upstand\" },\n ];\n public existingTypeList = [\n { id: 0, value: \"None\" },\n { id: 1, value: \"Left\" },\n { id: 2, value: \"Right\" },\n { id: 3, value: \"Both\" },\n ];\n public windClassList = [\n { id: 0, value: \"N2(W33)\" },\n { id: 1, value: \"N3(W41)\" },\n { id: 2, value: \"N4(W50)\" },\n // { id: 3, value: \"C1(W41)\" },\n // { id: 4, value: \"C2(W50)\" },\n // { id: 5, value: \"C3(W60)\" },\n ];\n public windClassListGable = [\n { id: 0, value: \"N2(W33)\" },\n { id: 1, value: \"N3(W41)\" },\n { id: 2, value: \"N4(W50)\" },\n ];\n public roofSheetingTypeList = [\n { id: 0, value: \"Rib Span 310mm Wide 0.48mm BMT\" },\n ];\n public bargeTypeList = [\n { id: 0, value: \"Barge Capping 0.55 for Rib and Smooth Span\" },\n ];\n public receiverTypeList = [\n {\n id: 0,\n value: \"Receiver Channel for Rib and Smooth Span roofing - 1.0mm\",\n },\n ];\n public flatBottomList = [\n { id: 0xe4e2d5, value: \"Surfmist/Off White flat bottom\" },\n { id: 0xe9dcb8, value: \"Classic Cream bottom\" },\n ];\n public downpipeTypeList = [{ id: 0, value: \"90mm PVC\" }];\n public thicknessList = [\n { id: 0, value: \"N/A\" },\n { id: 1, value: \"50mm\" },\n { id: 2, value: \"75mm\" },\n { id: 3, value: \"100mm\" },\n { id: 4, value: \"125mm\" },\n { id: 5, value: \"150mm\" },\n ];\n public gutterTypeList = [\n { id: 0, value: \"Gutter - Fitfast - Square Line with Return\" },\n // { id: 1, value: \"Quad 150 Low Front Gutter Unslotted\" },\n // { id: 2, value: \"Quad 150 Hi Front Gutter Slotted\" },\n ];\n public beamTypeList = [\n { id: 0, value: \"SUPERIOR BEAMS\" },\n // { id: 1, value: \"TIMBER\" },\n ];\n public beamSizeList = [\n { id: 0, value: \"N/A\", beamType: 0 },\n { id: 1, value: \"SB110\", beamType: 0 },\n { id: 2, value: \"SB160\", beamType: 0 },\n { id: 3, value: \"SB210\", beamType: 0 },\n // { id: 4, value: \"SB260\", beamType: 0 },\n { id: 0, value: \"N/A\", beamType: 1 },\n { id: 1, value: \"140x45 F7\", beamType: 1 },\n { id: 2, value: \"190x45 F7\", beamType: 1 },\n { id: 3, value: \"150x50 F14\", beamType: 1 },\n { id: 4, value: \"200x50 F14\", beamType: 1 },\n { id: 5, value: \"150x75 F14\", beamType: 1 },\n { id: 6, value: \"200x75 F14\", beamType: 1 },\n { id: 7, value: \"250x75 F14\", beamType: 1 },\n ];\n public columnTypeList = [\n { id: 0, value: \"Superior Post 65mm x 65mm\" },\n { id: 1, value: \"Superior 90 x 90 Aluminium Post\" },\n { id: 2, value: \"Superior Post RHS 90mm x 90mm x 3.5mm\" },\n // { id: 3, value: \"Timber\" },\n ];\n public columnTypeList2 = [\n {\n id: -1,\n value: \"N/A\",\n columnHeight: -1,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: -1,\n },\n {\n id: 0,\n value: \"Superior Post 65mm x 65mm\",\n columnHeight: 3000,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: 0,\n },\n {\n id: 2,\n value: \"Superior Post RHS 90mm x 90mm x 3.5mm\",\n columnHeight: 3600,\n baseFixingType: \"1\", // 'Post In Ground',\n idx: 2,\n },\n {\n id: 1,\n value: \"Superior 90 x 90 Aluminium Post\",\n columnHeight: 4000,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: 1,\n },\n {\n id: 2,\n value: \"Superior Post RHS 90mm x 90mm x 3.5mm\",\n columnHeight: 4000,\n baseFixingType: \"0\", // 'Dynabolt',\n idx: 3,\n },\n {\n id: 3,\n value: \"Timber\",\n columnHeight: 4000,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: 4,\n },\n ];\n public baseFixingTypeList = [\n { id: 0, value: \"Dynabolt\" },\n { id: 1, value: \"Post In Ground\" },\n ];\n public roles = {\n user: \"User\",\n customer: \"Customer\",\n admin: \"Admin\",\n };\n public cutOutList = [\n { id: 0, value: \"No\" },\n { id: 1, value: \"Yes\" },\n ];\n public roofTypeList = [\n { id: 0, value: \"Steel Roof\" },\n { id: 1, value: \"Tiled Roof\" },\n ];\n public fasciaBracketList = [\n { id: 0, value: \"None\" },\n { id: 150, value: \"150\" },\n { id: 300, value: \"300\" },\n { id: 450, value: \"450\" },\n { id: 600, value: \"600\" },\n ];\n}\n","import { Vector3 } from \"three\";\n\ntype Edge = [Vector3, Vector3]\ntype Polygon = Array;\n\nexport const PolygonUtils = {\n getVectorLength(vector): number {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);\n },\n dotProduct(v0, v1): number {\n return v0.x * v1.x + v0.y * v1.y + v0.z * v1.z;\n },\n \n /**\n * Get projected point P' of P on a segment\n * @return projected point p.\n */\n getProjectedPointOnSegment(segment: Edge, point: any): any {\n // get dot product of e1, e2\n const e1 = this.toVector(...segment);\n const e2 = this.toVector(segment[0], point);\n const valDp = this.dotProduct(e1, e2);\n // get length of vectors\n const lenLineE1 = this.getVectorLength(e1);\n const lenLineE2 = this.getVectorLength(e2);\n const cos = valDp / (lenLineE1 * lenLineE2);\n // length of v1P'\n const projLenOfLine = cos * lenLineE2;\n return new Vector3(segment[0].x + (projLenOfLine * e1.x) / lenLineE1, segment[0].y + (projLenOfLine * e1.y) / lenLineE1, segment[0].z + (projLenOfLine * e1.z) / lenLineE1)\n },\n isProjectionOnSegment(point, segment: Edge): boolean {\n const e1 = this.toVector(...segment);\n const dp = this.dotProduct(this.toVector(point, segment[1]), e1);\n const max = e1.x * e1.x + e1.y * e1.y + e1.z * e1.z;\n return dp >= 0 && dp <= max;\n },\n \n /**\n * Convert a polygon a list of edges\n * Except last point to start point\n * @param polygon\n */\n toEdgeList(polygon: Polygon): Array {\n const result: Array = [];\n for (let i = 0; i < polygon.length - 1; i++) {\n const pointA = polygon[i];\n const pointB = polygon[i === polygon.length - 1 ? 0 : i + 1];\n result.push([pointA, pointB]);\n }\n return result;\n },\n toVector(A: Vector3, B: Vector3): Vector3 {\n return new Vector3( B.x - A.x, B.y - A.y, B.z - A.z)\n },\n \n /**\n * Return the cumulated rotation around a point of another point\n * which is translating on a polygon edge.\n * The returned value is floored to deal with javscript float number imprecision.\n * So if the absolute value winding number is lower than 1, it\n * means that the rotation is null.\n * @param polygon\n * @param point\n */\n getWindingNumber(polygon: Polygon, point: any): number {\n const angles = [];\n let result: number = 0;\n for (let index = 0; index < polygon.length; index++) {\n const vertex = polygon[index];\n const nextVertex =\n index === polygon.length - 1 ? polygon[0] : polygon[index + 1];\n // Get the angle between the previous vertex, the point and the current vertex\n const angle = this.getAngle(vertex, point, nextVertex);\n angles.push(angle);\n result += angle;\n }\n return Math.floor(result);\n },\n \n /**\n * Calculates the signed (counter/clockwize) angle ABC (in radian).\n * @param A\n * @param B\n * @param C\n */\n getAngle(A: any, B: any, C: any): number {\n const v0 = { x: A.x - B.x, y: A.y - B.y, z: A.z - B.z };\n const v1 = { x: C.x - B.x, y: C.y - B.y, z: C.z - B.z };\n const angle = new Vector3(v0.x, v0.y, v0.z).angleTo(new Vector3(v1.x, v1.y, v1.z));\n // Special case, the angle cross over the complete circle\n return this.round(\n Math.abs(angle) > Math.PI\n ? angle < 0\n ? angle + 2 * Math.PI\n : angle - 2 * Math.PI\n : angle\n );\n },\n \n /**\n * Return true if a point lies on a segment\n * @param segment\n * @param point\n */\n isPointOnSegment(segment: Edge, point: any): boolean {\n const distAP = segment[0].distanceTo(point);\n const distBP = segment[1].distanceTo(point);\n const distAB = segment[1].distanceTo(segment[0]);\n return distAB.toFixed(5) === (distAP + distBP).toFixed(5);\n },\n getDistance(A: any, B: any): number {\n return Math.sqrt((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y));\n },\n \n /**\n * Workaround javascript imprecision\n */\n round(number: number) {\n return Math.round((number + Number.EPSILON) * 100) / 100;\n },\n\n getClosestPointInsidePolygon(poly: Polygon, pos: any): any {\n // Except case: Inside the polygon. Never happen.\n // // Case I\n // const wn = this.getWindingNumber(poly, pos);\n // if (Math.abs(wn) > 1) {\n // return pos;\n // }\n\n // Case II\n if (this.toEdgeList(poly).some(edge => this.isPointOnSegment(edge, pos))) {\n return pos;\n }\n\n // Case III - A\n // Get edges which faces the points.\n \n const closestPointOnEdge = this.toEdgeList(poly)\n .filter(edge => this.isProjectionOnSegment(pos, edge))\n .reduce(\n ([_pp, minDistance], edge) => {\n // Get the projected point on this edge\n const pp = this.getProjectedPointOnSegment(edge, pos);\n // Get the distance from the edge\n const distance = this.getDistance(pos, pp);\n // Return this projection if the distance is smaller\n return distance < minDistance ? [pp, distance] : [_pp, minDistance];\n },\n [undefined, Infinity] as [any | undefined, number]\n )[0];\n \n // Case III - B\n const closestVertex = poly.reduce(\n ([closestVertex, minDistance], vertex) => {\n // Get distance from vertex to target\n const distance = this.getDistance(vertex, pos);\n // Return this vertex if the distance is smaller\n return distance < minDistance\n ? [vertex, distance]\n : [closestVertex, minDistance];\n },\n [undefined, Infinity] as [any | undefined, number]\n )[0];\n if (!closestPointOnEdge) {\n return closestVertex;\n }\n // At this point we can get both an edge and a vertex.\n // Get the closest between the edge and the vertex\n return this.getDistance(pos, closestPointOnEdge) < this.getDistance(pos, closestVertex)\n ? closestPointOnEdge\n : closestVertex;\n }\n}","import { Util } from \"./utils\";\n// import { AppComponent } from '../app.component';\nimport { HomeComponent as AppComponent } from \"src/app-ribspan/containers/home/home.component\";\nimport { Scene } from \"three\";\nimport { Printing2DLine, Printing2DData } from \"src/app/core/models\";\n\nexport class Printing2DManager {\n private scene: Scene;\n private APP: AppComponent;\n private utils: Util;\n\n public constructor(app: AppComponent) {\n this.utils = new Util();\n this.APP = app;\n this.scene = this.APP.scene;\n }\n\n public print(jobInfo: any): void {\n let dimemsionGeo = this.APP.dimensionManager.getOutlines();\n let patiosOutlines = this.APP.patiosManager.getOutlines();\n let lines: Printing2DLine[] = [\n ...patiosOutlines.lines,\n ...this.APP.existingRoofManager.getOutLines().lines,\n ...this.APP.existingWallManager.getOutLines().lines,\n ...this.APP.fasciaManager.getOutLines().lines,\n ...this.APP.eaveManager.getOutLines().lines,\n ...dimemsionGeo.lines,\n ];\n\n let texts = [...dimemsionGeo.texts, ...patiosOutlines.texts];\n\n let model: Printing2DData = {\n lines: lines,\n texts: texts,\n sceenshoot: this.APP.canvas.toDataURL(),\n meshes: null,\n info: jobInfo,\n };\n\n this.APP.printService.printPDF(model).subscribe(\n (rs) => {\n const updateInfo = {\n id: jobInfo.id,\n files: {\n engineeringFile: rs.engineeringFile,\n quotationFile: rs.quotationFile,\n thumbnailFile: rs.thumbnailFile,\n },\n };\n this.APP.onUpdateJobFiles(updateInfo);\n },\n (error) => {\n this.APP.message.error(\"PDF file upload failed\");\n this.APP.isUploading = false;\n this.APP.currentStep = 0;\n }\n );\n }\n\n public printTest() {\n let dimemsionGeo = this.APP.dimensionManager.getOutlines();\n let patiosOutlines = this.APP.patiosManager.getOutlines();\n let lines: Printing2DLine[] = [\n ...patiosOutlines.lines,\n ...this.APP.existingRoofManager.getOutLines().lines,\n ...this.APP.existingWallManager.getOutLines().lines,\n ...this.APP.fasciaManager.getOutLines().lines,\n ...this.APP.eaveManager.getOutLines().lines,\n ...dimemsionGeo.lines,\n ];\n\n let texts = [...dimemsionGeo.texts, ...patiosOutlines.texts];\n\n // let meshes = this.getAllMesh(this.scene);\n // console.log('MESHES NE', meshes);\n\n let model: Printing2DData = {\n lines: lines,\n texts: texts,\n sceenshoot: this.APP.canvas.toDataURL(),\n meshes: null,\n info: {\n userId: \"5e437a5b400f7958b4cfdbf7\",\n id: \"6466fd04426553c1543c10d8\",\n uploadFolder: \"superiorsoftware_api/upload/dataFiles\",\n pathLogo: \"superiorsoftware_api/media/\",\n pathPDF: \"\",\n quoteNo: \"ABCDE20251\",\n quoteBy: \"User SPC\",\n windClass: \"N2(W33)\",\n clientName: \"TEST\",\n siteAddress: \"\",\n date: \"2023-05-19T04:36:41.152Z\",\n builder: \"SPC Dev\",\n caseType: \"A\",\n structureType: \"To Existing Building\",\n roofPitch: 2,\n roofSheetingType: \"Coolaspan Trimspan\",\n roofOverallLength: 3810,\n roofOverallWidth: 4200,\n maxSpan: 5100,\n span: 4000,\n multiSpan: 0,\n beamType: \"Superior Beam 110mm x 65mm (Surfmist)\",\n columnType: \"Superior Post 65mm x 65mm\",\n largestBay: 3810,\n maxUpliftOfBeam: 4.55,\n upliftLoadOnBeam: 1.28,\n maxPostUplift: 1.91,\n postUplift: 2.437,\n baseFixingType: \"Dynabolt\",\n footingSize: \"Min 100mm slab\",\n maxFootingHoldDown: \"16\",\n thickness: \"50mm\",\n ABNNo: \"\",\n licenseNumber: \"\",\n company: \"SPC Dev\",\n userAddress: \"43 Commerce Circuit\",\n userEmail: \"tester@gmail.com\",\n userPhone: \"0738073955\",\n bankName: \"\",\n accountNumber: \"\",\n BSBNumber: \"\",\n suburb: \"\",\n postcode: \"\",\n state: \"\",\n phone: \"\",\n email: \"\",\n baySize: 3810,\n noOfBay: 1,\n buildingHeight: 2200,\n frontOverhang: 200,\n backOverhang: 0,\n leftOverhang: 0,\n rightOverhang: 0,\n flatBottom: \"Surfmist/Off White flat bottom\",\n bargeType: \"Coolaspan Trimspan\",\n gutterType: \"Gutter Square Line\",\n zFlashingType: \"Coolaspan Trimspan\",\n downpipeType: \"90mm PVC\",\n beamSize: \"SB110\",\n colourRoof: \"Surfmist\",\n colourBarge: \"Surfmist\",\n colourGutter: \"Surfmist\",\n colourZFlashing: \"Surfmist\",\n colourPost: \"Surfmist\",\n colourBeam: \"Surfmist\",\n colourDownpipe: \"White\",\n note: \"\\n\",\n supplyType: \"Supply and Install\",\n totalPrice: 2417.88,\n deposit: 0,\n stage1: 0,\n stage2: 0,\n finalPayment: 2417.88,\n fullAddress: \"\",\n depositText: \"Deposit\",\n stage1Text: \"Stage 1\",\n stage2Text: \"Stage 2\",\n listBay: [\n {\n index: 1,\n value: 3810,\n isCut: false,\n },\n ],\n },\n };\n\n // console.log('2D PRINTING DATA', model);\n\n //return;\n\n this.APP.printService.printPDF(model).subscribe(\n (rs) => {\n // let a = document.createElement(\"a\");\n // a.href = rs.file_url;\n // a.target = '_blank';\n // document.body.appendChild(a);\n // a.click();\n // a.remove();\n },\n (error) => {\n // this.message.error(error);\n this.APP.message.error(\"PDF file upload failed\");\n this.APP.isUploading = false;\n this.APP.currentStep = 0;\n }\n );\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Object3D, Raycaster, Vector2 } from \"three\";\nimport { DragControls } from \"src/app/libs/DragControls\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home/home.component\";\nimport { MOUSE_EVENT, OBJECT_TYPE } from \"src/app/app.constants\";\nimport { TransformControls } from \"three/examples/jsm/controls/TransformControls\";\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { UI } from \"./ui\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport default class SelectionManager {\n static ins: SelectionManager\n\n mouse: Vector2;\n\n onMouseClickPtr = this.onMouseClick.bind(this)\n onMouseDownPtr = this.onMouseDown.bind(this)\n onMouseMovePtr = this.onMouseMove.bind(this)\n onMouseUpPtr = this.onMouseUp.bind(this)\n\n onDragStartPtr = this.onDragStart.bind(this)\n onDragEndPtr = this.onDragEnd.bind(this)\n onDragPtr = this.onDrag.bind(this)\n\n private raycaster: Raycaster;\n selectEnabled = true;\n debounceMouseMoveHld = undefined;\n\n dragControl: DragControls\n transformControl: TransformControls\n\n dragObjects: Object3D[] = []\n\n clickEventHandlers = []\n mouseHoverEventHandlers = []\n mouseMoveEventHandlers = []\n mouseDownEventHandlers = []\n mouseUpEventHandlers = []\n\n dragStartEventHandlers = []\n dragEndEventHandlers = []\n dragEventHandlers = []\n\n init() {\n SelectionManager.ins = this\n return new Promise(resolve => {\n this.dragControl = new DragControls(this.dragObjects, HomeComponent.ins.camera, HomeComponent.ins.renderer.domElement);\n this.transformControl = new TransformControls(HomeComponent.ins.camera, HomeComponent.ins.renderer.domElement);\n this.transformControl.addEventListener('change', () => { HomeComponent.ins.renderStatic() });\n this.transformControl.addEventListener('dragging-changed', function (event) {\n HomeComponent.ins.control.enabled = !event.value;\n });\n HomeComponent.ins.scene.add(this.transformControl)\n this.raycaster = this.dragControl.raycaster\n this.dragControl.addEventListener('dragstart', (event) => {\n HomeComponent.ins.control.enabled = false;\n this.onDragStart(event)\n });\n this.dragControl.addEventListener('drag', (event) => {\n this.onDrag(event)\n })\n this.dragControl.addEventListener('dragend', (event) => {\n HomeComponent.ins.control.enabled = true;\n this.onDragEnd(event)\n });\n console.log('drag control', this.dragControl.raycaster)\n resolve()\n })\n }\n\n enable() {\n this.mouse = new Vector2(0, 0);\n //this.raycaster = new Raycaster();\n\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.DOWN, this.onMouseDownPtr, false);\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.MOVE, this.onMouseMovePtr, false);\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.UP, this.onMouseUpPtr, false);\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.CLICK, this.onMouseClickPtr, false);\n\n\n }\n disable() {\n this.dragControl.deactivate()\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.DOWN, this.onMouseDownPtr, false);\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.MOVE, this.onMouseMovePtr, false);\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.UP, this.onMouseUpPtr, false);\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.CLICK, this.onMouseClickPtr, false);\n }\n enableTransformObject(intersects) {\n const obj = intersects.reduce((prev, cur) => {\n if (cur.distance < prev.distance\n && cur.object.name !== 'ground'\n && (!cur.object.userData || cur.object.userData.type !== 'PANEL_BACK')\n && (!cur.object.userData || cur.object.userData.type !== 'PANEL_FRONT')\n && (!cur.object.userData.wallPlane)\n ) {\n prev = cur\n }\n return prev\n }, { distance: 999999, object: null })\n\n if (!obj.object) {\n return;\n }\n\n this.transformControl.attach(obj.object)\n }\n executeRayCast() {\n this.raycaster.setFromCamera(this.mouse, HomeComponent.ins.camera);\n const objects = []\n HomeComponent.ins.scene.traverse((o) => {\n if(o.userData?.type === OBJECT_TYPE.HIGHLIGHT_BOX \n || o.userData?.type === GEOMETRY_TYPE.TEXT_COVER\n || o.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2\n || o.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1\n || o.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2\n || o.userData?.type === OBJECT_TYPE.CLICK_CONTROL_CUTOUT\n || o.userData?.type === OBJECT_TYPE.CUT_BEAM\n ){\n //if(o.type === 'Mesh'){\n objects.push(o)\n }\n })\n return this.raycaster.intersectObjects(objects, true);\n }\n executeRayCastScene(){\n this.raycaster.setFromCamera(this.mouse, HomeComponent.ins.camera);\n return this.raycaster.intersectObjects(HomeComponent.ins.scene.children, true);\n }\n onMouseDown(event) {\n //this.mouseDownEventHandlers.forEach(a => { a(event) })\n }\n onMouseMove(event) {\n event.preventDefault();\n const offsetX = HomeComponent.ins.isVisibleProperty ? 400 : 0;\n this.mouse.x =\n ((event.clientX - offsetX) / HomeComponent.ins.canvas.width) * 2 - 1;\n this.mouse.y =\n -((event.clientY - 90) / HomeComponent.ins.canvas.height) * 2 + 1;\n\n // if(this.debounceMouseMoveHld){\n // clearTimeout(this.debounceMouseMoveHld)\n // }\n\n const intersects = this.executeRayCast()\n // if(intersects.length > 0){\n // this.mouseHoverEventHandlers.forEach(a => { a(intersects) })\n // }\n\n this.mouseHoverEventHandlers.forEach(a => { a(intersects) })\n\n // //temporary treat drag = ctrl + move\n // //if(event.ctrlKey){\n // this.mouseMoveEventHandlers.forEach(a => { a(event) })\n // //}\n }\n onMouseUp(event) {\n //this.mouseUpEventHandlers.forEach(a => { a(event) })\n }\n onMouseClick(event) {\n const intersects = this.executeRayCast()\n\n if (intersects.length === 0) {\n return;\n }\n // intersects.forEach(el => console.log(el.object.userData))\n\n this.selectObject(intersects, event)\n // this.enableTransformObject(intersects)\n\n this.clickEventHandlers.forEach(a => { a(intersects) })\n }\n selectObject(intersects, event){\n if (!this.selectEnabled) {\n return\n }\n const obj = intersects.reduce((prev, cur) => {\n if (cur.distance < prev.distance\n && cur.object.type != 'TransformControlsPlane'\n && cur.object.type != 'HIGHLIGHT_BOX'\n ) {\n prev = cur\n }\n return prev\n }, { distance: 999999, object: null })\n\n if (!obj.object) {\n return;\n }\n if(!UI.enableControl) {\n return\n }\n if(obj.object.userData.type && obj.object.userData.type === GEOMETRY_TYPE.TEXT_COVER){\n const labelType = obj.object.userData.labelType\n if(!labelType){\n return\n }\n\n switch(labelType){\n case DIMENSION_LABEL_TYPE.LENGTH_1:\n case DIMENSION_LABEL_TYPE.LENGTH_2:\n case DIMENSION_LABEL_TYPE.WIDTH_1:\n case DIMENSION_LABEL_TYPE.WIDTH_2:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL:\n case DIMENSION_LABEL_TYPE.FRONT_OVERHANG:\n case DIMENSION_LABEL_TYPE.BACK_OVERHANG:\n case DIMENSION_LABEL_TYPE.LEFT_OVERHANG:\n case DIMENSION_LABEL_TYPE.RIGHT_OVERHANG:\n case DIMENSION_LABEL_TYPE.SPAN:\n case DIMENSION_LABEL_TYPE.MULTI_SPAN:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL:\n HomeComponent.ins.dialogDimension.show(true, labelType)\n break\n case DIMENSION_LABEL_TYPE.BAY:\n HomeComponent.ins.dialogDimension.show(true, labelType, { bayIndex: obj.object.userData.bayNum })\n break\n }\n }\n if(obj.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1){\n if(obj.object?.userData?.left){\n if(UI.existingType == 3){\n HomeComponent.ins.sltExistingType.setSelected(2)\n } else {\n HomeComponent.ins.sltExistingType.setSelected(0)\n }\n } else if (obj.object?.userData?.right){\n if(UI.existingType == 3){\n HomeComponent.ins.sltExistingType.setSelected(1)\n } else {\n HomeComponent.ins.sltExistingType.setSelected(0)\n }\n }\n } else if(obj.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2){\n HomeComponent.ins.sldExistingLength2.setValue(0);\n } else if(obj.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2){\n HomeComponent.ins.sldExistingWidth2.setValue(0);\n }\n if(obj.object?.userData?.type === OBJECT_TYPE.CLICK_CONTROL_CUTOUT){\n HomeComponent.ins.sltCutOut.setSelected(1);\n } else if(obj.object?.userData?.type === OBJECT_TYPE.CUT_BEAM){\n const bayIndex = obj.object?.userData.bayIndex\n UI.listBay[bayIndex].isCut = !!!UI.listBay[bayIndex].isCut\n HomeComponent.ins.dialogEditBay.onOK()\n }\n }\n onDragStart(event) {\n this.dragStartEventHandlers.forEach(a => { a(event) })\n }\n onDragEnd(event) {\n this.dragEndEventHandlers.forEach(a => { a(event) })\n }\n onDrag(event) {\n this.dragEventHandlers.forEach(a => { a(event) })\n }\n\n\n addEventListener(event, handler, dragObject?) {\n if (event === MOUSE_EVENT.CLICK) {\n if(this.clickEventHandlers.indexOf(handler) < 0){\n this.clickEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.HOVER) {\n if(this.mouseHoverEventHandlers.indexOf(handler) < 0){\n this.mouseHoverEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.DOWN) {\n if(this.mouseDownEventHandlers.indexOf(handler) < 0){\n this.mouseDownEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.MOVE) {\n if(this.mouseMoveEventHandlers.indexOf(handler) < 0){\n this.mouseMoveEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.UP) {\n if(this.mouseUpEventHandlers.indexOf(handler) < 0){\n this.mouseUpEventHandlers.push(handler)\n }\n }\n if (event == MOUSE_EVENT.DRAG_START) {\n if(this.dragStartEventHandlers.indexOf(handler) < 0){\n this.dragStartEventHandlers.push(handler)\n }\n }\n if (event == MOUSE_EVENT.DRAG_END) {\n if(this.dragEndEventHandlers.indexOf(handler) < 0){\n this.dragEndEventHandlers.push(handler)\n }\n }\n if (event == MOUSE_EVENT.DRAG) {\n if(this.dragEventHandlers.indexOf(handler) < 0){\n this.dragEventHandlers.push(handler)\n }\n \n this.dragObjects.push(dragObject)\n }\n }\n removeEventListener(event, handler) {\n if (event === MOUSE_EVENT.CLICK) {\n const idx = this.clickEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.clickEventHandlers.splice(idx, 1)\n }\n\n }\n if (event === MOUSE_EVENT.HOVER) {\n const idx = this.mouseHoverEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseHoverEventHandlers.splice(idx, 1)\n }\n }\n if (event === MOUSE_EVENT.DOWN) {\n const idx = this.mouseDownEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseDownEventHandlers.splice(idx, 1)\n }\n }\n if (event === MOUSE_EVENT.MOVE) {\n const idx = this.mouseMoveEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseMoveEventHandlers.splice(idx, 1)\n }\n }\n if (event === MOUSE_EVENT.UP) {\n const idx = this.mouseUpEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseUpEventHandlers.splice(idx, 1)\n }\n }\n }\n}","import {\n CONFIG,\n OFFSET_GUTTER_TO_WALL,\n PATIOS_ROOF_TYPE,\n} from \"src/app/app.config\";\nimport { environment } from \"src/environments/environment\";\nimport { Scene } from \"three\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CONNECTION_TYPE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport { PatiosBackFlyOverManager } from \"./back_flyover\";\nimport { ExistingBuildingManager } from \"./existing_building\";\nimport { FasciaManager } from \"./fascia/index\";\nimport { PatiosFlyOverManager } from \"./flyover\";\nimport { PatiosFreeStandingManager } from \"./free_standing\";\nimport { PatiosGableFreeStandingManager } from \"./gable_free_standing\";\nimport { PatiosGableLRFlyOverManager } from \"./gable_lr_flyover\";\nimport { GeometryManager } from \"./geometry.manager\";\nimport { UI } from \"./ui\";\nimport { GableFBExistingBuildingManager } from \"./gable_fb_existing_building\";\nimport { PatiosGableFBFlyOverManager } from \"./gable_fb_flyover\";\nimport { GableLRFasciaManager } from \"./gable_lr_fascia\";\nimport { GableFBFasciaManager } from \"./gable_fb_fascia\";\nimport _ from \"lodash\";\nimport { Util } from \"./utils\";\n\ndeclare var $;\n\nexport class UIManager {\n private scene: Scene;\n private APP: HomeComponent;\n private debouncingHandle;\n private debouncingRibspanInfoHandle;\n private debouncingOverallRoofLengthHandle;\n private debouncingTimeout = 500; //ms\n private ignoreEnableCutoutEvent = false;\n private utils: Util;\n public previousShouldSnapFasciaRoofToWall: Boolean = false;\n public shouldSnapFasciaRoofToWall: Boolean = false;\n\n // private totalBaySize: number;\n constructor(app: HomeComponent) {\n this.APP = app;\n this.scene = app.scene;\n this.utils = new Util();\n\n // Should register this event before handle any action\n this.APP.sldBackOverhang.addAction(this.onBackOverhangChanged.bind(this));\n\n this.APP.sltFasciaUpstandBrackets.addAction(\n this.onFasciaUpstandBracketChanged.bind(this)\n );\n this.APP.sldSpan.addAction(this.updateOverallValue.bind(this));\n this.APP.sldMultiSpan.addAction(this.updateOverallValue.bind(this));\n this.APP.sldLeftOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.sldRightOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.sldBackOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.sldFrontOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.dialogEditBay.addAction(this.updateOverallValue.bind(this));\n this.APP.dialogEditBay.addAction(this.onDialogEditBayChanged.bind(this));\n this.APP.sldSpan.addAction(this.onSpanChanged.bind(this));\n this.APP.sldBaySize.addAction(this.onBaySizeChanged.bind(this));\n\n this.APP.sltStructureType.addAction(this.onStructureTypeChanged.bind(this));\n this.APP.sldExistingLength2.addAction(this.onLength2Changed.bind(this));\n this.APP.sldExistingWidth1.addAction(this.onWidth1Changed.bind(this));\n this.APP.sldExistingWidth2.addAction(this.onWidth2Changed.bind(this));\n this.APP.sldBuildingHeight.addAction(\n this.onBuildingHeightChanged.bind(this)\n );\n this.APP.sldExistingWallHeight.addAction(\n this.onExistingWallHeightChanged.bind(this),\n 1\n );\n\n this.APP.sltBeamType.addAction(this.onBeamTypeChanged.bind(this));\n this.APP.sltColumnType.addAction(this.onColumnTypeChanged.bind(this));\n this.APP.sltBaseFixingType.addAction(\n this.onBaseFixingTypeChanged.bind(this)\n );\n\n this.APP.sltCutOut.addAction(this.onCutoutChanged.bind(this));\n this.APP.sltLeftCutType.addAction(this.onRakeCutLeftChanged.bind(this));\n this.APP.sltRightCutType.addAction(this.onRakeCutRightChanged.bind(this));\n [\n this.APP.sldEaveWidth,\n this.APP.sldExistingWallHeight,\n this.APP.sldFasciaDepth,\n this.APP.sldBaySize,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sltExistingType,\n this.APP.sltStructureType,\n this.APP.sltWindClass,\n this.APP.sltWallType,\n this.APP.sltExistingRoofType,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldNoOfBay,\n this.APP.dialogEditBay,\n this.APP.sltExistingRoofPitch,\n this.APP.sldRoofOverallLength,\n this.APP.sldRoofOverallWidth,\n this.APP.sldMinHeight,\n this.APP.sltLeftCutType,\n this.APP.sltRightCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltFlatBottom,\n this.APP.sltZFlashingType,\n // -----------------------\n this.APP.sltRoofSheetingType,\n this.APP.sltBaseFixingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltDownpipeType,\n this.APP.sltGutterType,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltReceiverType,\n this.APP.sltColumnType,\n this.APP.sltColourRoof,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourZFlashing,\n this.APP.sltColourPost,\n this.APP.sltColourBeam,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltColourDownpipe,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.chkRapidSetCement,\n this.APP.chkHasHouseBeam,\n ].forEach((c) => c.addAction(this.onUIChanged.bind(this), 4));\n\n [\n this.APP.dialogEditBay,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sltWindClass,\n this.APP.sldRoofOverallLength,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltBeamSize,\n ].forEach((c) => c.addAction(this.onCalcRibspanInfo.bind(this), 4));\n\n this.APP.dialogEditBay.addAction(this.setBeamSize.bind(this));\n this.APP.sldBaySize.addAction(this.setBeamSize.bind(this));\n this.APP.sldSpan.addAction(this.setBeamSize.bind(this));\n this.APP.sltWindClass.addAction(this.setBeamSize.bind(this));\n this.APP.sltBeamType.addAction(this.setBeamSize.bind(this));\n\n this.APP.sldRoofOverallLength.addAction(\n this.onRoofOverallLengthChanged.bind(this)\n );\n\n this.APP.sltWindClass.addAction(this.setMaxSpan.bind(this));\n\n [\n this.APP.sltCutOut,\n this.APP.sltStructureType,\n this.APP.sldExistingWallHeight,\n this.APP.sldExistingWidth1,\n this.APP.sldEaveWidth,\n this.APP.sltRoofPitch,\n this.APP.sltExistingType,\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n ].forEach((c) =>\n c.addAction(this.handleSnapRoofToExistingWhenCutOut.bind(this), 5)\n );\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.updateOverallValue(null, null);\n this.APP.sltStructureType.setSelected(INIT.CONNECTION_TYPE); // <= setSelected doesn't work in case value = 0, need to call onStructureTypeChanged instead\n this.onStructureTypeChanged(null, INIT.CONNECTION_TYPE);\n this.validateCutout();\n\n //this.setDefaultValueForTest();\n resolve();\n });\n }\n\n setDefaultValueForTest() {\n if (environment.production) {\n return;\n }\n\n // this.APP.sltExistingType.setSelected(1);\n // this.APP.sldExistingWidth1.setValue(2000);\n // this.APP.sldExistingLength2.setValue(3000);\n // this.APP.sldExistingWidth2.setValue(2800);\n\n setTimeout(() => {\n //this.APP.sltCutOut.setSelected(1);\n this.APP.sltStructureType.setSelected(CONNECTION_TYPE.FASCIA);\n this.APP.sltColourRoof.setSelected(0x304c3c);\n }, 1000);\n }\n\n onUIChanged(previousValue: number, currentValue: number) {\n this.validateCutout();\n this.validateRakeCut();\n this.APP.onSetMaxValue();\n if (this.debouncingHandle) {\n clearTimeout(this.debouncingHandle);\n }\n this.debouncingHandle = setTimeout(() => {\n this.onUIChangedDefer(previousValue, currentValue);\n }, this.debouncingTimeout);\n\n this.APP.renderStatic();\n }\n onCalcRibspanInfo(previousValue: number, currentValue: number) {\n if (this.debouncingRibspanInfoHandle) {\n clearTimeout(this.debouncingRibspanInfoHandle);\n }\n this.debouncingRibspanInfoHandle = setTimeout(() => {\n HomeComponent.ins.calcRibSpanInfo();\n }, this.debouncingTimeout);\n }\n onUIChangedDefer(previousValue: number, currentValue: number) {\n this.APP.onCalcPrice();\n this.APP.renderStatic();\n }\n onStructureTypeChanged(previousValue: number, currentValue: number) {\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.category === GEOMETRY_CATEGORY.PATIOS\n )\n );\n // this.APP.dimensionManager.unload();\n\n if (this.APP.patiosManager) {\n this.APP.patiosManager.destroy();\n this.APP.patiosManager = null;\n }\n\n this.APP.sldBackOverhang.isDisabled = false;\n this.APP.sldBuildingHeight.isDisabled = true;\n let _flag = false;\n const _curVal = +currentValue;\n if (_curVal === CONNECTION_TYPE.FREE_STANDING) {\n this.APP.baseFixingTypeList = this.APP.objects.baseFixingTypeList.filter(\n (f) => f.id === 1\n );\n this.APP.sltBaseFixingType.setSelected(1);\n } else {\n this.APP.baseFixingTypeList = [...this.APP.objects.baseFixingTypeList];\n }\n switch (_curVal) {\n case CONNECTION_TYPE.EXISTING:\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new GableFBExistingBuildingManager(this.APP);\n } else {\n this.APP.patiosManager = new ExistingBuildingManager(this.APP);\n }\n break;\n case CONNECTION_TYPE.FLY_OVER:\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n !this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new PatiosGableLRFlyOverManager(this.APP);\n } else if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new PatiosGableFBFlyOverManager(this.APP);\n } else {\n this.APP.patiosManager = new PatiosFlyOverManager(this.APP);\n }\n break;\n case CONNECTION_TYPE.BLACK_FLY_OVER:\n this.APP.patiosManager = new PatiosBackFlyOverManager(this.APP);\n break;\n case CONNECTION_TYPE.FASCIA:\n case CONNECTION_TYPE.BACK_FASCIA_UPSTAND:\n case CONNECTION_TYPE.FASCIA_UPSTAND:\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n !this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new GableLRFasciaManager(this.APP);\n } else if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new GableFBFasciaManager(this.APP);\n } else {\n this.APP.patiosManager = new FasciaManager(this.APP);\n }\n break;\n case CONNECTION_TYPE.FREE_STANDING:\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.APP.patiosManager = new PatiosFreeStandingManager(this.APP);\n break;\n } else {\n this.APP.patiosManager = new PatiosGableFreeStandingManager(this.APP);\n break;\n }\n }\n\n UI.oldBackOverhang = this.APP.sldBackOverhang.currentValue;\n\n this.APP.patiosManager\n .load()\n .then(() => {\n this.APP.dimensionManager.load();\n // this.APP.patiosManager.loadBracket(this.APP.flyoverBracketNumber); // số lượng bracket mặc định load lần đầu\n return this.APP.groundManager.load();\n })\n .then(() => {\n this.APP.sltFasciaUpstandBrackets.setDisable(true);\n\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n if (!this.APP.isFBRoof) {\n this.APP.sldBackOverhang.setValue(200);\n this.APP.sldBackOverhang.setMin(200);\n this.APP.sldFrontOverhang.setValue(200);\n this.APP.sldFrontOverhang.setMin(200);\n this.APP.sldBackOverhang.setDisable(false);\n this.APP.sldBackOverhang.setDisable(false);\n\n this.APP.sldLeftOverhang.setMin(0);\n this.APP.sldRightOverhang.setMin(0);\n } else {\n this.APP.sldLeftOverhang.setValue(200);\n this.APP.sldLeftOverhang.setMin(200);\n this.APP.sldRightOverhang.setValue(200);\n this.APP.sldRightOverhang.setMin(200);\n\n this.APP.sldBackOverhang.setMin(0);\n this.APP.sldFrontOverhang.setMin(0);\n }\n\n this.APP.sltLeftCutType.setSelected(0);\n this.APP.sltRightCutType.setSelected(0);\n this.APP.sltLeftCutType.setDisable(true);\n this.APP.sltRightCutType.setDisable(true);\n\n this.APP.sldMultiSpan.setValue(0);\n this.APP.sldMultiSpan.setDisable(true);\n } else {\n this.APP.sldBackOverhang.setMin(0);\n this.APP.sldFrontOverhang.setMin(0);\n\n this.APP.sltLeftCutType.setDisable(false);\n this.APP.sltRightCutType.setDisable(false);\n\n this.APP.sldMultiSpan.setDisable(false);\n }\n\n switch (_curVal) {\n case CONNECTION_TYPE.EXISTING:\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBuildingHeight.isDisabled = false;\n this.APP.sldBackOverhang.isDisabled = true;\n this.APP.sldExistingWallHeight.isDisabled = false;\n if (this.APP.sltExistingType.currentValue == 3) {\n _flag = true;\n }\n break;\n case CONNECTION_TYPE.FLY_OVER:\n this.APP.sldExistingWallHeight.isDisabled = false;\n if (this.APP.sldBackOverhang.currentValue == 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n }\n break;\n case CONNECTION_TYPE.BLACK_FLY_OVER:\n if (this.APP.sldBackOverhang.currentValue == 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n }\n this.APP.sldExistingWallHeight.isDisabled = false;\n break;\n case CONNECTION_TYPE.FASCIA:\n case CONNECTION_TYPE.BACK_FASCIA_UPSTAND:\n case CONNECTION_TYPE.FASCIA_UPSTAND:\n this.APP.sltFasciaUpstandBrackets.setSelected(\n _curVal == CONNECTION_TYPE.FASCIA_UPSTAND ||\n _curVal == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ? CONFIG.fasciaUpstandBrackets.max\n : 0\n );\n this.APP.sltUpFasciaUpstandBracket.setValue(\n _curVal == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n );\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBackOverhang.isDisabled = true;\n //Bang - 2022.03.22\n if (this.APP.sltFasciaUpstandBrackets.currentValue > 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n this.APP.sldBackOverhang.isDisabled = false;\n } else {\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBackOverhang.isDisabled = true;\n }\n this.APP.sldBuildingHeight.setValue(\n this.APP.sldExistingWallHeight.currentValue\n );\n this.APP.sldExistingWallHeight.isDisabled = false;\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n UI.existingRoofType == BUILDING_SIDE.BOTH &&\n UI.patiosRoofType == PATIOS_ROOF_TYPE.FLAT_ROOF\n ) {\n if (!this.calcShouldSnapRoofToExistingWhenCutout()) {\n this.APP.sldExistingLength.setValue(\n UI.totalBayLength + UI.eaveWidth * 2\n );\n }\n _flag = true;\n }\n this.APP.sltFasciaUpstandBrackets.setDisable(\n _curVal == CONNECTION_TYPE.FASCIA_UPSTAND ? false : true\n );\n\n if (_curVal === CONNECTION_TYPE.FASCIA) {\n this.APP.sltUpFasciaUpstandBracket.setValue(false);\n }\n break;\n case CONNECTION_TYPE.FREE_STANDING:\n if (this.APP.sldBackOverhang.currentValue == 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n }\n this.APP.sldBuildingHeight.isDisabled = false;\n this.APP.sldExistingWallHeight.isDisabled = true;\n // this.sldExistingWidth1.setValue(0);\n break;\n }\n if (this.APP.sltExistingType.currentValue == 3) {\n this.onExistingTypeChanged(null, 3);\n }\n this.APP.sldLeftOverhang.isDisabled = _flag;\n this.APP.sldRightOverhang.isDisabled = _flag;\n this.APP.patiosManager.update(null, null);\n this.setColumnType(\"\", _curVal, -1);\n this.onExistingWallHeightChanged(\n 0,\n this.APP.sldExistingWallHeight.currentValue\n );\n this.APP.renderStatic();\n });\n }\n\n updateOverallValue(pre: number, cur: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let _roofOverallWidth =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n _roofOverallWidth =\n UI.span + UI.multiSpan + UI.overhangLeft + UI.overhangRight;\n }\n\n this.APP.sldRoofOverallWidth.setValue(_roofOverallWidth);\n\n let minOverallLength = UI.overhangLeft + UI.overhangRight + 1000;\n let _roofOverallLength =\n UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n minOverallLength = UI.overhangFront + UI.overhangBack + 1000;\n _roofOverallLength =\n UI.totalBayLength + UI.overhangFront + UI.overhangBack;\n }\n // Update min of sldRoodOverallLength\n HomeComponent.ins.sldRoofOverallLength.setValue(_roofOverallLength);\n HomeComponent.ins.sldRoofOverallLength.setMin(minOverallLength);\n //this.onDialogEditBayChanged();\n //this.APP.renderStatic();\n }\n public onRoofOverallLengthChanged(previousValue, currentValue) {\n HomeComponent.ins.getRoofPercent(UI.roofOverallLength);\n console.log(\n \"👉 ~ file: ui.manager.ts:521 ~ UIManager ~ onRoofOverallLengthChanged ~ UI.roofOverallLength:\",\n UI.roofOverallLength\n );\n if (previousValue == currentValue) {\n return;\n }\n\n if (this.debouncingOverallRoofLengthHandle) {\n clearTimeout(this.debouncingOverallRoofLengthHandle);\n }\n this.debouncingOverallRoofLengthHandle = setTimeout(() => {\n HomeComponent.ins.calcPostSpacingInfoWhenOverallRoofLengthChanged();\n }, this.debouncingTimeout);\n }\n public setMaxSpan() {\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n if (UI.windClass == 0 || UI.windClass == 1) {\n this.APP.maxSpan = 8500;\n this.APP.maxSpanText = \"8500\";\n } else {\n this.APP.maxSpan = 7000;\n this.APP.maxSpanText = \"7000\";\n }\n }\n }\n\n public setBeamSize() {\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n let minBeam = 1;\n let maxBeam = 4;\n\n let width = UI.span;\n let length = this.APP.dialogEditBay.totalBaySize;\n\n if (UI.windClass == 0 || UI.windClass == 1) {\n if (width <= 4000 || length <= 4000) {\n minBeam = 1;\n } else if (width <= 7000 || length <= 6000) {\n minBeam = 2;\n } else if (width <= 8500 || length <= 8000) {\n minBeam = 3;\n } else {\n minBeam = 3;\n }\n } else {\n if (width <= 4000 || length <= 4000) {\n minBeam = 2;\n } else if (width <= 7000 || length <= 6000) {\n minBeam = 3;\n } else {\n minBeam = 3;\n }\n }\n\n this.APP.beamSizeList = this.APP.objects.beamSizeList.filter(\n (el) =>\n el.beamType == this.APP.sltBeamType.currentValue &&\n el.id >= minBeam &&\n el.id <= maxBeam\n );\n this.APP.sltBeamSize.setSelectedAndHandleEvent(minBeam);\n }\n }\n\n public onFasciaUpstandBracketChanged(prevVal: number, curVal: number): void {\n // Bang - 2022.03.22\n if (\n UI.upstandBraketType > 0 &&\n !HomeComponent.ins.sltFasciaUpstandBrackets.isDisabled\n ) {\n this.APP.sldBackOverhang.isDisabled = false;\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n } else {\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBackOverhang.isDisabled = true;\n }\n }\n\n public onWidth1Changed(prevVal: number, curVal: number): void {\n if (curVal < 620) {\n this.APP.sldExistingLength2.setValue(0);\n this.APP.sldExistingLength2Visible = false;\n } else {\n this.APP.sldExistingLength2Visible = true;\n }\n\n //change baysize when can cutout and can not cutout\n if (this.APP.sltCutOut.currentValue == 1) {\n //let cutoutCondition = this.APP.patiosManager.cutoutCondition.map(x => x.currentValue).reduce((a,b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.patiosManager.cutoutCondition && !window[\"cutout\"]) {\n this.setEnableCutout(true);\n window[\"cutout\"] = true;\n } else if (!this.APP.patiosManager.cutoutCondition) {\n this.setEnableCutout(false);\n window[\"cutout\"] = false;\n }\n }\n //this.validateCutout();\n }\n public onWidth2Changed(prevVal: number, curVal: number): void {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n if (curVal == 0) {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 2000);\n\n this.APP.setPatiosWidth(\n this.APP.dialogEditBay.totalBaySize -\n (this.APP.existingWallManager.geo_existingWallW2.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) *\n 2\n );\n } else {\n let totalExistingWidth =\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2 +\n (this.APP.existingWallManager.geo_existingWallW2.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) *\n 2;\n if (\n this.APP.sltStructureType.currentValue == 1 ||\n this.APP.sltStructureType.currentValue == 2\n ) {\n totalExistingWidth =\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2 +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2;\n }\n if (this.APP.dialogEditBay.totalBaySize < totalExistingWidth) {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 2000);\n\n this.APP.setPatiosWidth(totalExistingWidth);\n }\n }\n }\n }\n public onLength2Changed(prevVal: number, curVal: number): void {\n if (curVal < 1200) {\n this.APP.sldExistingWidth2.setValue(0);\n this.APP.sldExistingWidth2Visible = false;\n } else {\n this.APP.sldExistingWidth2Visible = true;\n }\n\n if (!prevVal) prevVal = curVal;\n let diff = curVal - prevVal;\n\n this.onAdjustListBayWhenCutOut(diff);\n }\n public onAdjustListBayWhenCutOut(diff) {\n if (UI.cutOutType == CUTOUT_ENABLE.YES) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.RIGHT\n ) {\n let baySize = UI.baySize + diff / UI.noOfBay;\n if (baySize > CONFIG.baySize.max) {\n let noOfBay = UI.noOfBay + 1;\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldNoOfBay.setValue(noOfBay);\n baySize = UI.totalBayLength / noOfBay;\n }\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldBaySize.setValue(Math.ceil(baySize));\n } else {\n let baySize =\n UI.baySize + (diff * 2) / this.APP.sldNoOfBay.currentValue;\n if (baySize > CONFIG.baySize.max) {\n let noOfBay = this.APP.sldNoOfBay.currentValue + 1;\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldNoOfBay.setValue(noOfBay);\n baySize = UI.totalBayLength / noOfBay;\n }\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldBaySize.setValue(Math.ceil(baySize));\n }\n }\n }\n public onCutoutChanged(prevVal: number, curVal: number) {\n //this.APP.patiosManager.enableCutout(curVal == 1 && this.APP.patiosManager.cutoutCondition);\n //window['baySize'] = this.APP.sldBaySize.currentValue;\n this.setEnableCutout(curVal == 1 && this.APP.patiosManager.cutoutCondition);\n }\n public onRakeCutLeftChanged(pre: number, cur: number) {\n //If left cut is ON disable left over hang\n this.APP.sldLeftOverhang.setDisable(false);\n if (cur != RAKECUT_TYPE.NONE) {\n this.APP.sldLeftOverhang.setValue(0);\n this.APP.sldLeftOverhang.setDisable(true);\n }\n\n if (cur == RAKECUT_TYPE.NONE) {\n this.APP.sldLeftCutHorizontal.setValue(0);\n }\n }\n public onRakeCutRightChanged(pre: number, cur: number) {\n //If right cut is ON disable right over hang\n this.APP.sldRightOverhang.setDisable(false);\n if (cur != RAKECUT_TYPE.NONE) {\n this.APP.sldRightOverhang.setValue(0);\n this.APP.sldRightOverhang.setDisable(true);\n }\n\n if (cur == RAKECUT_TYPE.NONE) {\n this.APP.sldRightCutHorizontal.setValue(0);\n }\n }\n\n // this is hight priority (1), must be called first to setup BUILDING HEIGHT for patios manager to use\n private onExistingWallHeightChanged(prevVal: number, curVal: number): void {\n const currentBeam = GeometryManager.Instance().getBeam();\n const _typeVal = +this.APP.sltStructureType.currentValue;\n let _buildingHeightMax = 0;\n if (_typeVal === 0) {\n // Existing Building\n _buildingHeightMax =\n curVal - EXISTING_BUILDING_CONFIG.BUILDING_HEIGHT_OFFSET;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n if (\n curVal - this.APP.sldBuildingHeight.currentValue <=\n EXISTING_BUILDING_CONFIG.BUILDING_HEIGHT_OFFSET\n ) {\n this.APP.sldBuildingHeight.setValue(_buildingHeightMax);\n }\n } else if (_typeVal === 3 || _typeVal === 5) {\n // Fascia\n _buildingHeightMax = CONFIG.eaveHeight.max;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n this.APP.sldBuildingHeight.setValue(curVal);\n } else if (_typeVal === 4) {\n _buildingHeightMax = CONFIG.height.free_standing_max;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n this.APP.sldBuildingHeight.setValue(curVal);\n } else {\n // _buildingHeightMax= CONFIG.height.max;\n _buildingHeightMax = CONFIG.eaveHeight.max;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n this.APP.sldBuildingHeight.setValue(\n curVal +\n this.APP.sldFlyOverBracketHeight.currentValue +\n currentBeam.height\n );\n }\n\n this.setColumnType(\"\", _typeVal, -1);\n this.APP.renderStatic();\n }\n\n public onExistingWallHeightChanged2(prevVal: number, curVal: number): void {}\n\n private changeToExistingTypeBoth() {\n this.setEnableCutout(\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.patiosManager.cutoutCondition\n );\n }\n private setEnableCutout(enable: boolean) {\n if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FLY_OVER ||\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n //Change patios width o day thi khong cho length1 chay theo patios width\n //set bien nay true thi length1 khong chay theo patios width\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 3000);\n\n if (enable) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.NONE) {\n this.APP.setPatiosWidth(this.APP.sldExistingLength.currentValue);\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n this.APP.setPatiosWidth(\n CONFIG.baySize.min + this.APP.sldExistingLength2.currentValue\n );\n } else {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2 +\n this.APP.sldExistingLength2.currentValue * 2\n );\n } else {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2\n );\n }\n }\n } else {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n this.APP.sltCutOut.setSelected(\"0\");\n }\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FASCIA ||\n this.APP.sltStructureType.currentValue ==\n CONNECTION_TYPE.BACK_FASCIA_UPSTAND ||\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 1000);\n\n if (enable) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n this.APP.setPatiosWidth(\n CONFIG.baySize.min + this.APP.sldExistingLength2.currentValue\n );\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n this.calcShouldSnapRoofToExistingWhenCutout()\n ) {\n this.APP.setPatiosWidth(\n UI.existingLength1 + UI.existingLength2 * 2\n );\n } else {\n this.APP.setPatiosWidth(\n UI.existingLength1 + UI.existingLength2 * 2 - UI.eaveWidth * 2\n );\n }\n }\n } else {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue -\n this.APP.sldEaveWidth.currentValue * 2\n );\n this.APP.sltCutOut.setSelected(\"0\");\n }\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.EXISTING\n ) {\n //Change patios width o day thi khong cho length1 chay theo patios width\n //set bien nay true thi length1 khong chay theo patios width\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 3000);\n\n if (enable) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n this.APP.setPatiosWidth(\n CONFIG.baySize.min + this.APP.sldExistingLength2.currentValue\n );\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2\n );\n }\n } else {\n this.APP.setPatiosWidth(this.APP.sldExistingLength.currentValue);\n this.APP.sltCutOut.setSelected(\"0\");\n }\n }\n }\n\n // When the highest point of cutout roof (To fascia) is lower eave height, we should snap this roof to wall, like existing roof\n public handleSnapRoofToExistingWhenCutOut(): void {\n this.previousShouldSnapFasciaRoofToWall = this.shouldSnapFasciaRoofToWall;\n this.shouldSnapFasciaRoofToWall =\n this.calcShouldSnapRoofToExistingWhenCutout();\n\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n UI.existingType != BUILDING_SIDE.NONE &&\n UI.cutOutType == CUTOUT_ENABLE.YES\n ) {\n this.setEnableCutout(\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n HomeComponent.ins.patiosManager.cutoutCondition\n );\n }\n }\n public calcShouldSnapRoofToExistingWhenCutout(): boolean {\n const roofBaseHeight =\n HomeComponent.ins.geometryManager.getRoofBaseHeight();\n\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n UI.existingType != BUILDING_SIDE.NONE &&\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.FLAT_ROOF\n ) {\n const cutOutRoofHeightIfSnapToExisting =\n UI.eaveHeight -\n (UI.existingWidth1 - UI.eaveWidth) * this.utils.tan(UI.patiosPitch) +\n roofBaseHeight / this.utils.cos(UI.patiosPitch);\n if (cutOutRoofHeightIfSnapToExisting < UI.eaveHeight) {\n return true;\n }\n }\n\n return false;\n }\n\n public onBackOverhangChanged() {\n UI.oldBackOverhang = UI.overhangBack;\n }\n\n public onExistingTypeChanged(prevVal: number, val: number) {\n this.APP.sldLeftOverhang.setDisable(false);\n this.APP.sldRightOverhang.setDisable(false);\n\n //this.validateCutout();\n\n if (val == 0) {\n this.alignWallToPatios(false);\n this.APP.sldExistingWidth1.setValue(0);\n this.APP.sldExistingWidth2.setValue(0);\n this.APP.sldExistingLength2.setValue(0);\n }\n if (val == 1 || val == 2) {\n this.alignWallToPatios(true);\n this.setEnableCutout(\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.patiosManager.cutoutCondition\n );\n }\n if (val == 3) {\n this.alignWallToPatios(true);\n\n this.APP.sldLeftOverhang.setValue(0);\n this.APP.sldLeftOverhang.setDisable(true);\n this.APP.sldRightOverhang.setValue(0);\n this.APP.sldRightOverhang.setDisable(true);\n\n if (\n this.APP.isFBRoof &&\n UI.structureType == CONNECTION_TYPE.EXISTING &&\n UI.existingType == BUILDING_SIDE.BOTH &&\n this.APP.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n this.APP.sldLeftOverhang.setValue(200);\n this.APP.sldRightOverhang.setValue(200);\n }\n this.changeToExistingTypeBoth();\n }\n\n const _structureType = +this.APP.sltStructureType.currentValue;\n if (_structureType === 0) {\n this.APP.sldBackOverhang.isDisabled = true;\n } else if (_structureType === 3 || _structureType === 5) {\n this.APP.sldBackOverhang.isDisabled = true;\n // Bang - 2022.03.22\n if (this.APP.sltFasciaUpstandBrackets.currentValue > 0) {\n this.APP.sldBackOverhang.isDisabled = false;\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n } else {\n this.APP.sldBackOverhang.isDisabled = true;\n }\n } else {\n this.APP.sldBackOverhang.isDisabled = false;\n }\n // Disable Length1\n this.APP.sldExistingLength.isDisabled = val === 3;\n\n //Change panel direction\n // if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n // this.APP.sltPanelDirection.setValue(PANEL_DIRECTION.RIGHT_TO_LEFT);\n // }\n // else{\n // this.APP.sltPanelDirection.setValue(PANEL_DIRECTION.LEFT_TO_RIGHT);\n // }\n }\n\n public onSpanChanged() {\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n if (!this.APP.patiosManager.ignoreBayEvent) {\n if (\n this.APP.sltStructureType.currentValue ==\n CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n this.APP.sldExistingLength.setValue(\n Math.ceil(\n UI.span +\n this.APP.sldEaveWidth.currentValue * 2 +\n 2 * FASCIA_BRACKET_FIT\n )\n );\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FLY_OVER\n ) {\n this.APP.sldExistingLength.setValue(\n UI.span - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(\n UI.span +\n UI.overhangLeft +\n UI.overhangRight +\n OFFSET_GUTTER_TO_WALL * 2\n );\n }\n }\n }\n }\n }\n\n public onDialogEditBayChanged() {\n // this.APP.patiosManager.loadBracket(5);\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n return;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n if (!this.APP.patiosManager.ignoreBayEvent) {\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA ||\n UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND ||\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n //Facia\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.patiosManager.cutoutCondition\n ) {\n if (this.calcShouldSnapRoofToExistingWhenCutout()) {\n this.APP.sldExistingLength.setValue(\n totalBaySize - UI.existingLength2 * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize - UI.existingLength2 * 2 + UI.eaveWidth * 2\n );\n }\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize + this.APP.sldEaveWidth.currentValue * 2\n );\n }\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FLY_OVER ||\n this.APP.sltStructureType.currentValue ==\n CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.APP.sldExistingLength.setValue(\n totalBaySize -\n this.APP.sldExistingLength2.currentValue * 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize - this.APP.sldExistingLength2.currentValue * 2\n );\n }\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n }\n } else {\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n this.APP.sldExistingLength.setValue(\n totalBaySize - this.APP.sldExistingLength2.currentValue * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(totalBaySize);\n }\n }\n }\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n //this.APP.setNoOfBayFromBaySize(this.APP.dialogEditBay.totalBaySize , this.APP.sldBaySize.currentValue);\n if (\n this.APP.dialogEditBay.totalBaySize <\n this.APP.sldExistingLength2.currentValue + CONFIG.baySize.min &&\n !this.ignoreEnableCutoutEvent\n ) {\n this.setEnableCutout(false);\n }\n }\n //validate rake cut\n this.onBaySizeChanged(null, null);\n\n let roofOverallLength =\n UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n roofOverallLength =\n UI.totalBayLength + UI.overhangFront + UI.overhangBack;\n }\n\n // Check beam length > 9m, 2 bay, and not cut, auto cut this\n if (\n roofOverallLength > EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM &&\n UI.listBay.length == 2\n ) {\n if (!UI.listBay[0].isCut) {\n UI.listBay[0].isCut = true;\n HomeComponent.ins.dialogEditBay.onOK();\n }\n }\n }\n public onBaySizeChanged(preVal: number, curVal: number) {\n // this.APP.patiosManager.loadBracket(this.APP.flyoverBracketNumber); // khi thay đổi UI truyền lại số lượng bracket\n //Reduce cut horizotal if totalcut larger than baymax\n let bayMax =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let totalCut =\n this.APP.sldLeftCutHorizontal.currentValue +\n this.APP.sldRightCutHorizontal.currentValue;\n\n //if(this.app)\n\n if (totalCut >= bayMax) {\n this.APP.sldLeftCutHorizontal.setValue(\n this.APP.sldLeftCutHorizontal.maxValue\n );\n this.APP.sldRightCutHorizontal.setValue(\n this.APP.sldRightCutHorizontal.maxValue\n );\n }\n }\n onBeamTypeChanged(pre, cur: number) {\n this.APP.beamSizeList = this.APP.objects.beamSizeList.filter(\n (f) => f.beamType == cur\n );\n\n this.APP.houseBeamSizeList = this.APP.objects.beamSizeList.filter(\n (f) => f.beamType == cur\n );\n if (cur === 1) {\n this.APP.sltColourBeam.setSelected(0xcabfa4);\n } else {\n this.APP.sltColourBeam.setSelected(0xe4e2d5);\n }\n }\n\n onColumnTypeChanged(pre, cur: number) {\n if (cur === 3) {\n this.APP.sltColourPost.setSelected(0xcabfa4);\n } else {\n this.APP.sltColourPost.setSelected(0xe4e2d5);\n }\n }\n onBaseFixingTypeChanged(pre, cur: number) {\n this.setColumnType(cur.toString(), -1, -1);\n if (cur === 0) {\n this.APP.chkRapidSetCement.setValue(false);\n }\n }\n onBuildingHeightChanged(pre, cur: number) {\n this.setColumnType(\"\", -1, cur);\n }\n setColumnType(\n baseFixingType: string,\n structureType: number,\n buildingHeight: number\n ) {\n // get column type list\n const _columnType = +this.APP.sltColumnType.currentValue;\n if (baseFixingType === \"\") {\n baseFixingType = this.APP.sltBaseFixingType.currentValue.toString();\n }\n if (structureType === -1) {\n structureType = this.APP.sltStructureType.currentValue;\n }\n if (buildingHeight === -1) {\n buildingHeight = this.APP.sldBuildingHeight.currentValue;\n }\n if (buildingHeight) {\n if (structureType == 4) {\n this.APP.columnTypeList = this.APP.objects.columnTypeList2.filter(\n (f) =>\n f.baseFixingType.includes(baseFixingType) &&\n f.columnHeight >= buildingHeight &&\n f.idx >= 2\n );\n } else {\n this.APP.columnTypeList = this.APP.objects.columnTypeList2.filter(\n (f) =>\n f.baseFixingType.includes(baseFixingType) &&\n f.columnHeight >= buildingHeight\n );\n }\n if (this.APP.columnTypeList.length === 0) {\n this.APP.columnTypeList = this.APP.objects.columnTypeList2.filter(\n (f) => f.id === -1\n );\n this.APP.sltColumnType.setSelected(-1);\n } else {\n if (\n this.APP.columnTypeList.findIndex(\n (value, index) => value.id === _columnType\n ) >= 0\n ) {\n this.APP.sltColumnType.setSelected(_columnType);\n } else {\n this.APP.sltColumnType.setSelected(this.APP.columnTypeList[0].id);\n }\n }\n }\n //\n }\n loadFromObject(obj) {\n var promise = new Promise((resolve, rejects) => {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n resolve();\n }, 3000);\n const _rightToLeft = obj.rightToLeft || false;\n this.APP.sltPanelDirection.setValue(_rightToLeft);\n let _structureType = obj.structureType.value.toString();\n const _fasciaBracketHeight = obj.fasciaBracketHeight || 0;\n if (_structureType == 3 && _fasciaBracketHeight > 0) {\n _structureType = \"5\";\n }\n const _hasHouseBeam = obj.hasHouseBeam || false;\n this.APP.chkHasHouseBeam.setValue(_hasHouseBeam);\n this.APP.sltStructureType.setSelected(_structureType);\n this.APP.sltExistingType.setSelected(obj.existingType.value.toString());\n this.APP.sldExistingLength.setValue(obj.existingLength);\n this.APP.sldExistingLength2.setValue(obj.existingLength2);\n this.APP.sldExistingWidth1.setValue(obj.existingWidth1);\n this.APP.sldExistingWidth2.setValue(obj.existingWidth2);\n this.APP.sldFasciaDepth.setValue(obj.fasciaDepth);\n this.APP.sldExistingWallHeight.setValue(obj.eaveHeight);\n this.APP.sldBuildingHeight.setValue(obj.buildingHeight);\n this.APP.sldEaveWidth.setValue(obj.eaveWidth);\n this.APP.sldFlyOverBracketHeight.setValue(obj.flyoverBracketHeight);\n this.APP.sldSpan.setValue(obj.span);\n this.APP.sldMultiSpan.setValue(obj.multiSpan);\n this.APP.sldBaySize.setValue(obj.baySize);\n this.APP.sldRoofOverallLength.setValue(obj.roofOverallLength);\n this.APP.sldRoofOverallWidth.setValue(obj.roofOverallWidth);\n this.APP.sldMinHeight.setValue(Math.round(obj.minHeight));\n //HACK: Xử lý lỗi cho các job cũ\n const _cutOut = obj.cutOut ? obj.cutOut.value : 0;\n this.APP.sltFasciaUpstandBrackets.setSelected(_fasciaBracketHeight);\n const _backFascia = obj.backFascia || false;\n this.APP.sltUpFasciaUpstandBracket.setValue(_backFascia);\n\n this.APP.sltWindClass.setSelected(obj.windClass.value);\n this.APP.sltBaseFixingType.setSelected(obj.baseFixingType.value);\n this.APP.sltBeamType.setSelected(obj.beamType.value);\n this.APP.sltCutOut.setSelected(_cutOut);\n\n this.APP.sltGutterType.setSelected(obj.gutterType.value);\n this.APP.sltDownpipeType.setSelected(obj.downpipeType.value);\n this.APP.sltZFlashingType.setSelected(obj.zFlashingType.value);\n this.APP.sltReceiverType.setSelected(obj.receiverType.value);\n this.APP.sltBargeType.setSelected(obj.bargeType.value);\n this.APP.sltFlatBottom.setSelected(obj.flatBottom.value);\n this.APP.sltRoofThickness.setSelected(obj.thickness.value);\n\n this.APP.sltRoofSheetingType.setSelected(obj.roofSheetingType.value);\n this.APP.sltWallType.setSelected(obj.wallType.value);\n const _existingRoofType = obj.existingRoofType\n ? obj.existingRoofType.value\n : 0;\n this.APP.sltExistingRoofType.setSelected(_existingRoofType);\n\n this.APP.sltExistingRoofPitch.setSelected(obj.existingRoofPitch);\n this.APP.sltRoofPitch.setSelected(obj.roofPitch);\n this.APP.sltColumnType.setSelected(obj.columnType.value);\n this.APP.sltBeamSize.setSelected(obj.beamSize.value);\n const _houseBeamSize = obj.hasHouseBeam\n ? obj.houseBeamSize.value\n : obj.beamSize.value;\n this.APP.sltHouseBeamSize.setSelected(_houseBeamSize);\n const _isRapidSetCement = obj.isRapidSetCement || false;\n this.APP.chkRapidSetCement.setValue(_isRapidSetCement);\n const _isDripBarge = obj.isDripBarge || false;\n this.APP.sltDripBarge.setValue(_isDripBarge);\n\n this.APP.sltColourDownpipe.setSelected(obj.colourDownpipe.value);\n this.APP.sltColourBracket.setSelected(obj.colourBracket.value);\n const _colourFasciaBracket = obj.colourFasciaBracket\n ? obj.colourFasciaBracket.value\n : 0xe4e2d50;\n this.APP.sltColourFasciaBracket.setSelected(_colourFasciaBracket);\n this.APP.sltColourZFlashing.setSelected(obj.colourZFlashing.value);\n this.APP.sltColourGutter.setSelected(obj.colourGutter.value);\n this.APP.sltColourBarge.setSelected(obj.colourBarge.value);\n this.APP.sltColourRoof.setSelected(obj.colourRoof.value);\n\n this.APP.isFBRoof = obj.isFBRoof;\n this.APP.patiosRoofType =\n obj.patiosRoofType || PATIOS_ROOF_TYPE.FLAT_ROOF;\n\n setTimeout(() => {\n this.APP.sldNoOfBay.setValue(obj.noOfBay);\n //----RakeCut\n const _leftCutType = obj.leftCutType ? obj.leftCutType.value : 0;\n const _rightCutType = obj.rightCutType ? obj.rightCutType.value : 0;\n const _leftCutVertical = obj.leftCutVertical || 0;\n const _rightCutVertical = obj.rightCutVertical || 0;\n const _leftCutHorizontal = obj.leftCutHorizontal || 0;\n const _rightCutHorizontal = obj.rightCutHorizontal || 0;\n\n this.APP.sltLeftCutType.setSelected(_leftCutType);\n this.APP.sltRightCutType.setSelected(_rightCutType);\n this.APP.sldLeftCutVertical.setValue(_leftCutVertical);\n this.APP.sldLeftCutHorizontal.setValue(_leftCutHorizontal);\n this.APP.sldRightCutVertical.setValue(_rightCutVertical);\n this.APP.sldRightCutHorizontal.setValue(_rightCutHorizontal);\n //Bang - 2021.04.06 -> Tranh loi khi default lại mau khi xay ra su kien onColumnTypeChanged()\n this.APP.sltColourPost.setSelected(obj.colourPost.value);\n this.APP.sltColourBeam.setSelected(obj.colourBeam.value);\n this.APP.sldBackOverhang.setValue(obj.backOverhang);\n this.APP.sldFrontOverhang.setValue(obj.frontOverhang);\n // this.APP.dialogEditBay.setValue(obj.listBay);\n setTimeout(() => {\n // Bang - 2022.08.15 -> Lỗi khi open lại thì Bay load về default 4400\n this.APP.dialogEditBay.setValue(obj.listBay);\n this.APP.sldRightOverhang.setValue(obj.rightOverhang);\n this.APP.sldLeftOverhang.setValue(obj.leftOverhang);\n this.APP.sldBuildingHeight.setValueAndHandleEvent(\n obj.buildingHeight,\n true\n );\n\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n this.APP.sldSpan.setValue(obj.span);\n }\n }, 300);\n //----\n }, 500);\n });\n return promise;\n }\n alignWallToPatios(enable) {\n let patiosLength =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n if (enable && this.APP.sldExistingWidth1.currentValue < 1000) {\n this.APP.sldExistingWidth1.setValue(patiosLength);\n this.APP.sldExistingWidth1.setMin(1000);\n } else if (!enable) {\n this.APP.sldExistingWidth1.setMin(0);\n }\n }\n validateCutout() {\n let cutoutCondition =\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.patiosManager.cutoutCondition &&\n this.APP.sldExistingWidth1.currentValue > 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n\n if (\n cutoutCondition &&\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF\n ) {\n this.APP.sltCutOut.setDisable(false);\n } else {\n this.APP.sltCutOut.setSelected(\"0\");\n this.APP.sltCutOut.setDisable(true);\n }\n }\n validateRakeCut() {\n let maxSpanLeft =\n this.APP.sldSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n let maxSpanRight =\n this.APP.sldSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n\n //\n if (\n this.APP.sldMultiSpan.currentValue > 0 &&\n this.APP.sldSpan.currentValue\n ) {\n maxSpanLeft =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n maxSpanRight =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n let cond =\n this.APP.sldMultiSpan.currentValue == 0 ||\n (this.APP.sldMultiSpan.currentValue > 0 &&\n this.APP.sldSpan.currentValue <\n this.APP.sldExistingWidth1.currentValue);\n if (\n cond &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n maxSpanLeft =\n this.APP.patiosManager.patiosLength -\n this.APP.sldExistingWidth1.currentValue;\n }\n if (\n cond &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n maxSpanRight =\n this.APP.patiosManager.patiosLength -\n this.APP.sldExistingWidth1.currentValue;\n }\n }\n //In case of step cut the remaining space at least 500\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n maxSpanLeft -= 500;\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n maxSpanRight -= 500;\n }\n\n let sizeLeft = this.APP.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n let sizeRight = this.APP.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n //Ensure left cut and right cut do not overlap each other\n //And can not be over first bay\n let bayMax =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let postInfo = null;\n if (this.APP.geometryManager.SUPERIOR_POST.S65x65) {\n postInfo = this.APP.geometryManager.getPost();\n }\n if (this.APP.sldNoOfBay.currentValue == 1) {\n let maxLeft1 = bayMax - sizeRight.l;\n let maxLeft2 =\n (maxLeft1 * this.APP.sldLeftCutVertical.currentValue) / sizeLeft.j;\n\n let maxRight1 = bayMax - sizeLeft.l;\n let maxRight2 =\n (maxRight1 * this.APP.sldRightCutVertical.currentValue) / sizeRight.j;\n\n let FO = this.APP.sldFrontOverhang.currentValue;\n let CHL = this.APP.sldLeftCutHorizontal.currentValue;\n let CVL = this.APP.sldLeftCutVertical.currentValue;\n let dMaxleft =\n (FO * Math.sqrt(Math.pow(CHL, 2) + Math.pow(CVL, 2))) / CVL -\n (FO * CHL) / CVL;\n\n maxLeft2 =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldLeftOverhang.currentValue -\n dMaxleft -\n (postInfo?.width || 0);\n\n let CHR = this.APP.sldRightCutHorizontal.currentValue;\n let CVR = this.APP.sldRightCutVertical.currentValue;\n let dMaxRight =\n (FO * Math.sqrt(Math.pow(CHR, 2) + Math.pow(CVR, 2))) / CVR -\n (FO * CHR) / CVR;\n\n maxRight2 =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldRightOverhang.currentValue -\n dMaxRight -\n (postInfo?.width || 0);\n\n this.APP.sldRightCutHorizontal.setMax(Math.round(maxRight2));\n this.APP.sldLeftCutHorizontal.setMax(Math.round(maxLeft2));\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n if (\n bayMax -\n this.APP.sldLeftCutHorizontal.currentValue -\n dMaxRight -\n (postInfo?.width || 0) >\n 0\n ) {\n this.APP.sldRightCutHorizontal.setMax(\n Math.round(\n bayMax -\n this.APP.sldLeftCutHorizontal.currentValue -\n dMaxRight -\n (postInfo?.width || 0)\n )\n );\n } else {\n this.APP.sldRightCutHorizontal.setMax(\n this.APP.sldRightCutHorizontal.minValue\n );\n this.APP.sltRightCutType.setSelected(\"0\");\n }\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n if (\n bayMax -\n this.APP.sldRightCutHorizontal.currentValue -\n dMaxleft -\n (postInfo?.width || 0) >\n 0\n ) {\n this.APP.sldLeftCutHorizontal.setMax(\n Math.round(\n bayMax -\n this.APP.sldRightCutHorizontal.currentValue -\n dMaxleft -\n (postInfo?.width || 0)\n )\n );\n } else {\n this.APP.sldLeftCutHorizontal.setMax(\n this.APP.sldRightCutHorizontal.minValue\n );\n this.APP.sltLeftCutType.setSelected(\"0\");\n }\n }\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldLeftCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldRightCutHorizontal.currentValue - 762)\n );\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldRightCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldLeftCutHorizontal.currentValue - 762)\n );\n }\n } else {\n let maxBayLeft =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldLeftOverhang.currentValue;\n let maxBayRight =\n this.APP.dialogEditBay.listBay[this.APP.dialogEditBay.noOfBay - 1]\n .value + this.APP.sldRightOverhang.currentValue;\n let FO = this.APP.sldFrontOverhang.currentValue;\n let CHL = this.APP.sldLeftCutHorizontal.currentValue;\n let CVL = this.APP.sldLeftCutVertical.currentValue;\n let dMaxleft =\n (FO * Math.sqrt(Math.pow(CHL, 2) + Math.pow(CVL, 2))) / CVL -\n (FO * CHL) / CVL;\n\n maxBayLeft =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldLeftOverhang.currentValue -\n dMaxleft -\n (postInfo?.width || 0);\n\n let CHR = this.APP.sldRightCutHorizontal.currentValue;\n let CVR = this.APP.sldRightCutVertical.currentValue;\n let dMaxRight =\n (FO * Math.sqrt(Math.pow(CHR, 2) + Math.pow(CVR, 2))) / CVR -\n (FO * CHR) / CVR;\n\n maxBayRight =\n this.APP.dialogEditBay.listBay[this.APP.dialogEditBay.noOfBay - 1]\n .value +\n this.APP.sldRightOverhang.currentValue -\n dMaxRight -\n (postInfo?.width || 0);\n\n this.APP.sldLeftCutHorizontal.setMax(Math.round(maxBayLeft));\n this.APP.sldRightCutHorizontal.setMax(Math.round(maxBayRight));\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldLeftCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldRightCutHorizontal.currentValue - 762)\n );\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldRightCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldLeftCutHorizontal.currentValue - 762)\n );\n }\n }\n\n //Vertical cut can not be over first span\n this.APP.sldLeftCutVertical.setMax(maxSpanLeft);\n this.APP.sldRightCutVertical.setMax(maxSpanRight);\n\n //If vertical cut is over span size reduce vertical cut\n if (this.APP.sldLeftCutVertical.currentValue > maxSpanLeft) {\n this.APP.sldLeftCutVertical.setValue(maxSpanLeft);\n }\n if (this.APP.sldRightCutVertical.currentValue > maxSpanRight) {\n this.APP.sldRightCutVertical.setValue(maxSpanRight);\n }\n //Only allow rakecut if have post\n if (this.APP.patiosManager) {\n // this.f();\n this.APP.patiosManager.firstLoad = false;\n }\n }\n\n f() {\n let postLeft = this.APP.patiosManager?.patiosGroup?.children.find(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n c.userData.position?.left\n );\n if (!postLeft) {\n this.APP.sltLeftCutType.setSelected(\"0\");\n this.APP.sltLeftCutType.setDisable(true);\n } else {\n this.APP.sltLeftCutType.setDisable(false);\n }\n\n let postRight = this.APP.patiosManager?.patiosGroup?.children.find(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n c.userData.position?.right\n );\n if (!postRight) {\n this.APP.sltRightCutType.setSelected(\"0\");\n this.APP.sltRightCutType.setDisable(true);\n } else {\n this.APP.sltRightCutType.setDisable(false);\n }\n }\n}\nexport function registerEvents(controls, action) {\n controls.forEach((control) => {\n if (HomeComponent.ins[control]) {\n HomeComponent.ins[control].addAction(action);\n }\n });\n}\nexport function unRegisterEvents(controls, action) {\n controls.forEach((control) => {\n if (HomeComponent.ins[control]) {\n HomeComponent.ins[control].removeAction(action);\n }\n });\n}\n","import { HomeComponent } from \"src/app-ribspan/containers/home\";\nimport { utils } from \"./utils\";\nexport class UI {\n public static readonly Controls = {\n SPAN: \"sldSpan\",\n MULTI_SPAN: \"sldMultiSpan\",\n OVERHANG_FRONT: \"sldFrontOverhang\",\n OVERHANG_LEFT: \"sldLeftOverhang\",\n OVERHANG_RIGHT: \"sldRightOverhang\",\n OVERHANG_BACK: \"sldBackOverhang\",\n BAYSZIE: \"sldBaySize\",\n RAKECUT_LEFT_TYPE: \"sltLeftCutType\",\n LENGTH1: \"sldExistingLength\",\n LENGTH2: \"sldExistingLength2\",\n WIDTH1: \"sldExistingWidth1\",\n WIDTH2: \"sldExistingWidth2\",\n EXISTING_TYPE: \"sltExistingType\",\n BAYS: \"dialogEditBay\",\n EAVE_WIDTH: \"sldEaveWidth\",\n STRUCTURE_TYPE: \"sltStructureType\",\n CUTOUT: \"sltCutOut\",\n PATIOS_ROOF_PITCH: \"sltRoofPitch\",\n FASCIA_DEPTH: \"sldFasciaDepth\",\n EXISTING_ROOF_PITCH: \"existingRoofPitch\",\n FLYOVER_BRAKET_HEIGHT: \"sldFlyOverBracketHeight\",\n FASCIA_UPSTAND_BRAKET: \"sltFasciaUpstandBrackets\",\n EXISTING_WALL_HEIGHT: \"sldExistingWallHeight\",\n ROOF_SHEETING_TYPE: \"sltRoofSheetingType\",\n ROOF_THICKNESS: \"sltRoofThickness\",\n };\n static getHeightByRoofPitch(isSpan): number {\n if (isSpan) {\n return (\n utils.tan(HomeComponent.ins.sltRoofPitch.currentValue) *\n HomeComponent.ins.sldSpan.currentValue\n );\n } else {\n return (\n utils.tan(HomeComponent.ins.sltRoofPitch.currentValue) *\n (HomeComponent.ins.sldSpan.currentValue +\n HomeComponent.ins.sldMultiSpan.currentValue)\n );\n }\n }\n static get noOfBays() {\n return HomeComponent.ins.sldNoOfBay.currentValue;\n }\n static get baySize() {\n return HomeComponent.ins.sldBaySize.currentValue;\n }\n static get roofColor() {\n return HomeComponent.ins.sltColourRoof.currentValue;\n }\n static get windClass() {\n return HomeComponent.ins.sltWindClass.currentValue;\n }\n\n static get rakeCutLeftType() {\n return HomeComponent.ins.sltLeftCutType.currentValue;\n }\n static get rakeCutRightType() {\n return HomeComponent.ins.sltRightCutType.currentValue;\n }\n static get eaveHeight() {\n return HomeComponent.ins.sldExistingWallHeight.currentValue;\n }\n static get existingLength1() {\n return HomeComponent.ins.sldExistingLength.currentValue;\n }\n static get existingLength2() {\n return HomeComponent.ins.sldExistingLength2.currentValue;\n }\n static get existingWidth1() {\n return HomeComponent.ins.sldExistingWidth1.currentValue;\n }\n static get existingWidth2() {\n return HomeComponent.ins.sldExistingWidth2.currentValue;\n }\n static get existingType() {\n return HomeComponent.ins.sltExistingType.currentValue;\n }\n static get height() {\n return HomeComponent.ins.sldBuildingHeight.currentValue;\n }\n static get frontHeight() {\n return (\n utils.tan(HomeComponent.ins.sltRoofPitch.currentValue) *\n (HomeComponent.ins.sldSpan.currentValue +\n HomeComponent.ins.sldMultiSpan.currentValue)\n );\n }\n static get totalBayLength() {\n return HomeComponent.ins.dialogEditBay.totalBaySize;\n }\n static get overhangLeft() {\n return HomeComponent.ins.sldLeftOverhang.currentValue;\n }\n static get overhangRight() {\n return HomeComponent.ins.sldRightOverhang.currentValue;\n }\n static get overhangFront() {\n return HomeComponent.ins.sldFrontOverhang.currentValue;\n }\n static get overhangBack() {\n return HomeComponent.ins.sldBackOverhang.currentValue;\n }\n static get span() {\n return HomeComponent.ins.sldSpan.currentValue;\n }\n static get multiSpan() {\n return +HomeComponent.ins.sldMultiSpan.currentValue;\n }\n static get rakeCutLeftHor() {\n return HomeComponent.ins.sldLeftCutHorizontal.currentValue;\n }\n static get rakeCutLeftVer() {\n return HomeComponent.ins.sldLeftCutVertical.currentValue;\n }\n static get rakeCutRightHor() {\n return HomeComponent.ins.sldRightCutHorizontal.currentValue;\n }\n static get rakeCutRightVer() {\n return HomeComponent.ins.sldRightCutVertical.currentValue;\n }\n static get structureType() {\n return +HomeComponent.ins.sltStructureType.currentValue;\n }\n static get patiosRoofType() {\n return HomeComponent.ins.patiosRoofType;\n }\n static get listBay() {\n return HomeComponent.ins.dialogEditBay.listBay;\n }\n static get cutOutType() {\n return HomeComponent.ins.sltCutOut.currentValue;\n }\n static get upstandBraketType() {\n return +HomeComponent.ins.sltFasciaUpstandBrackets.currentValue;\n }\n static get existingWallHeight() {\n return HomeComponent.ins.sldExistingWallHeight.currentValue;\n }\n static get eaveWidth() {\n return HomeComponent.ins.sldEaveWidth.currentValue;\n }\n static get patiosPitch() {\n return HomeComponent.ins.sltRoofPitch.currentValue;\n }\n static get existingRoofPitch() {\n return HomeComponent.ins.sltExistingRoofPitch.currentValue;\n }\n static get isUpFasciaUpstandardBracket() {\n return HomeComponent.ins.sltUpFasciaUpstandBracket.currentValue;\n }\n static get existingRoofType() {\n return HomeComponent.ins.sltExistingRoofType.currentValue;\n }\n static get braketHeight() {\n return HomeComponent.ins.sldFlyOverBracketHeight.currentValue;\n }\n static get existingWallLength1() {\n return HomeComponent.ins.existingWallManager.geo_existingWallL1.width;\n }\n static get existingWallW1() {\n return HomeComponent.ins.existingWallManager.geo_existingWallW1;\n }\n static get existingWallL2() {\n return HomeComponent.ins.existingWallManager.geo_existingWallL2;\n }\n static get panelDirection() {\n return HomeComponent.ins.sltPanelDirection.currentValue;\n }\n static get panelDirectionShow() {\n return HomeComponent.ins.sltPanelDirectionShow.currentValue;\n }\n static get beamLayoutShow() {\n return HomeComponent.ins.sltBeamLayoutShow.currentValue;\n }\n static get showRoof() {\n return HomeComponent.ins.btnTurnOnPanel.currentValue;\n }\n static set oldBackOverhang(value: number) {\n HomeComponent.ins.oldOverhangBack = value;\n }\n static get oldBackOverhang() {\n return HomeComponent.ins.oldOverhangBack;\n }\n static get fasciaDepth() {\n return HomeComponent.ins.sldFasciaDepth.currentValue;\n }\n\n static get beamColor() {\n return HomeComponent.ins.sltColourBeam.currentValue;\n }\n\n static get beamType() {\n return +HomeComponent.ins.sltBeamType.currentValue;\n }\n static get beamSize() {\n return +HomeComponent.ins.sltBeamSize.currentValue;\n }\n static get houseBeamSize() {\n return +HomeComponent.ins.sltHouseBeamSize.currentValue;\n }\n static get postType() {\n return +HomeComponent.ins.sltColumnType.currentValue;\n }\n static get postColor() {\n return HomeComponent.ins.sltColourPost.currentValue;\n }\n static get roofOverallLength() {\n return HomeComponent.ins.sldRoofOverallLength.currentValue;\n }\n static get panelColor() {\n return HomeComponent.ins.sltColourRoof.currentValue;\n }\n static get noOfBay() {\n return HomeComponent.ins.sldNoOfBay.currentValue;\n }\n\n static get roofSheetingType() {\n return HomeComponent.ins.sltRoofSheetingType.currentValue;\n }\n\n static get enableControl() {\n return HomeComponent.ins.btnEnableControl.currentValue;\n }\n}\n","import _ from \"lodash\";\nimport * as THREE from \"three\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Color,\n EdgesGeometry,\n Float32BufferAttribute,\n Geometry,\n Group,\n Line3,\n LineBasicMaterial,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Plane,\n PlaneBufferGeometry,\n Shape,\n ShapeBufferGeometry,\n TextBufferGeometry,\n Vector2,\n Vector3,\n} from \"three\";\nimport { CSG } from \"three-csg-ts\";\nimport {\n DIMENSION_LABEL_TYPE,\n GEOMETRY_CATEGORY,\n GEOMETRY_TYPE,\n PATIOS_ROOF_TYPE,\n} from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CONNECTION_TYPE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { HomeComponent } from \"../containers/home\";\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport {\n ColorShape,\n GeometryInfo,\n Printing2DLine,\n Printing3DGeometry,\n ViewType,\n} from \"src/app/core/models\";\nimport SelectionManager from \"./selection.manager\";\nimport { UI } from \"./ui\";\nimport { Print2DView } from \"src/app/core/models\";\nimport { PolygonUtils } from \"./polygonUtils\";\nimport * as mathjs from \"mathjs\";\nimport { BeamCapAndJointInfo } from \"./patios.manager\";\nexport class Util {\n private lineArrowGeo: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n constructor() {\n this.lineArrowGeo = new GeometryInfo();\n this.geo_gutterBack = new GeometryInfo();\n this.lineArrowGeo.geometry = new PlaneBufferGeometry(100, 30);\n this.lineArrowGeo.geometry.translate(50, 0, 0);\n this.lineArrowGeo.width = 30;\n this.lineArrowGeo.length = 100;\n }\n public reSeperateRafterPosition(\n listRafterPos,\n endMainLeftX,\n endMainRightX,\n endCutoutLeft,\n endCutoutRight\n ) {\n const mainRafter = listRafterPos.filter((el) => el.isMainRoof);\n const cutoutLeftRafter = listRafterPos.filter(\n (el) => !el.isMainRoof && el.offsetX < endMainLeftX\n );\n const cutoutRightRafter = listRafterPos.filter(\n (el) => !el.isMainRoof && el.offsetX > endMainRightX\n );\n\n const reSeperateList = [];\n if (\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n HomeComponent.ins.patiosManager.cutoutCondition\n ) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (cutoutLeftRafter.length > 0) {\n for (let i = 0; i < cutoutLeftRafter.length; i++) {\n reSeperateList.push({\n offsetX:\n endCutoutLeft +\n (i + 1) *\n ((endMainLeftX - endCutoutLeft) /\n (cutoutLeftRafter.length + 1)),\n isMainRoof: false,\n });\n }\n }\n }\n }\n\n for (let i = 0; i < mainRafter.length; i++) {\n reSeperateList.push({\n offsetX:\n endMainLeftX +\n (i + 1) * ((endMainRightX - endMainLeftX) / (mainRafter.length + 1)),\n isMainRoof: true,\n });\n }\n\n if (\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n HomeComponent.ins.patiosManager.cutoutCondition\n ) {\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n if (cutoutRightRafter.length > 0) {\n for (let i = 0; i < cutoutRightRafter.length; i++) {\n reSeperateList.push({\n offsetX:\n endMainRightX +\n (i + 1) *\n ((endCutoutRight - endMainRightX) /\n (cutoutRightRafter.length + 1)),\n isMainRoof: false,\n });\n }\n }\n }\n }\n\n return reSeperateList;\n }\n public getMaximumBeamOverhang(): number {\n if (UI.beamType == 0) {\n // 210\n if (UI.beamSize >= 3) {\n return 1500;\n } else if (UI.baySize >= 2) {\n return 1200;\n } else {\n return 900;\n }\n }\n\n return 900;\n }\n public getGeometryLength(\n geometry: THREE.BufferGeometry,\n axis: THREE.Vector3\n ): number {\n geometry.computeBoundingBox();\n let box = geometry.boundingBox;\n if (axis.x > 0) {\n return box.max.x - box.min.x;\n } else if (axis.y > 0) {\n return box.max.y - box.min.y;\n } else {\n return box.max.z - box.min.z;\n }\n }\n public getMeshLength(mesh: THREE.Mesh, axis: THREE.Vector3): number {\n let box = new Box3().setFromObject(mesh);\n if (axis.x > 0) {\n return box.max.x - box.min.x;\n } else if (axis.y > 0) {\n return box.max.y - box.min.y;\n } else {\n return box.max.z - box.min.z;\n }\n }\n public convertHexColorToRgb(hex): ColorShape {\n const color: ColorShape = {\n r: 0,\n g: 0,\n b: 0,\n };\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (result) {\n color.r = parseInt(result[1], 16) / 255;\n color.g = parseInt(result[2], 16) / 255;\n color.b = parseInt(result[3], 16) / 255;\n }\n\n return color;\n }\n public getRoofCoverPolygonForFBRoof() {\n const totalRoofLength =\n UI.span + UI.multiSpan + UI.overhangLeft + UI.overhangRight;\n const totalRoofWidth =\n UI.totalBayLength + UI.overhangFront + UI.overhangBack;\n\n const minX = -(UI.span + UI.multiSpan) / 2 - UI.overhangLeft;\n const minZ = 0;\n\n const frontLeft = new Vector3(minX, 0, minZ + totalRoofWidth);\n const frontRight = new Vector3(\n minX + totalRoofLength,\n 0,\n minZ + totalRoofWidth\n );\n const backLeft = new Vector3(minX, 0, minZ);\n const backRight = new Vector3(minX + totalRoofLength, 0, minZ);\n\n let lineFrontLeft = [frontLeft];\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofWidth - UI.rakeCutLeftVer),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofWidth),\n ];\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofWidth - UI.rakeCutLeftVer),\n new Vector3(\n minX + UI.rakeCutLeftHor,\n 0,\n minZ + totalRoofWidth - UI.rakeCutLeftVer\n ),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofWidth),\n ];\n }\n\n let lineFrontRight = [frontRight];\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofLength - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofWidth\n ),\n new Vector3(\n minX + totalRoofLength,\n 0,\n minZ + totalRoofWidth - UI.rakeCutRightVer\n ),\n ];\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofLength - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofWidth\n ),\n new Vector3(\n minX + totalRoofLength - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofWidth - UI.rakeCutRightVer\n ),\n new Vector3(\n minX + totalRoofLength,\n 0,\n minZ + totalRoofWidth - UI.rakeCutRightVer\n ),\n ];\n }\n let lineFront = [...lineFrontLeft, ...lineFrontRight];\n\n let lineBackLeft = [backLeft];\n let lineBackRight = [backRight];\n let cutoutLength = UI.existingLength2;\n if (\n UI.structureType == CONNECTION_TYPE.FLY_OVER ||\n UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n if (UI.existingType == BUILDING_SIDE.BOTH) {\n if (UI.existingWidth2 > 0) {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width;\n } else {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width * 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n }\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackLeft = [\n new Vector3(minX + cutoutLength, 0, minZ),\n new Vector3(minX + cutoutLength, 0, minZ + UI.existingWidth1),\n new Vector3(minX, 0, minZ + UI.existingWidth1),\n ];\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackRight = [\n new Vector3(minX + totalRoofWidth, 0, minZ + UI.existingWidth1),\n new Vector3(\n minX + totalRoofWidth - cutoutLength,\n 0,\n minZ + UI.existingWidth1\n ),\n new Vector3(minX + totalRoofWidth - cutoutLength, 0, minZ),\n ];\n }\n }\n\n let lineBack = [...lineBackRight, ...lineBackLeft];\n\n return [...lineFront, ...lineBack];\n }\n public getRoofCoverPolygonForLRRoof() {\n const totalRoofLength =\n UI.span + UI.multiSpan + UI.overhangFront + UI.overhangBack;\n const totalRoofWidth =\n UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n\n const minX = -UI.totalBayLength / 2 - UI.overhangLeft;\n const minZ = 0;\n\n const frontLeft = new Vector3(minX, 0, minZ + totalRoofLength);\n const frontRight = new Vector3(\n minX + totalRoofWidth,\n 0,\n minZ + totalRoofLength\n );\n const backLeft = new Vector3(minX, 0, minZ);\n const backRight = new Vector3(minX + totalRoofWidth, 0, minZ);\n\n let lineFrontLeft = [frontLeft];\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofLength - UI.rakeCutLeftVer),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofLength),\n ];\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofLength - UI.rakeCutLeftVer),\n new Vector3(\n minX + UI.rakeCutLeftHor,\n 0,\n minZ + totalRoofLength - UI.rakeCutLeftVer\n ),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofLength),\n ];\n }\n\n let lineFrontRight = [frontRight];\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofWidth - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofLength\n ),\n new Vector3(\n minX + totalRoofWidth,\n 0,\n minZ + totalRoofLength - UI.rakeCutRightVer\n ),\n ];\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofWidth - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofLength\n ),\n new Vector3(\n minX + totalRoofWidth - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofLength - UI.rakeCutRightVer\n ),\n new Vector3(\n minX + totalRoofWidth,\n 0,\n minZ + totalRoofLength - UI.rakeCutRightVer\n ),\n ];\n }\n let lineFront = [...lineFrontLeft, ...lineFrontRight];\n\n let lineBackLeft = [backLeft];\n let lineBackRight = [backRight];\n let cutoutLength = UI.existingLength2;\n let cutOutWidth = UI.existingWidth1;\n if (\n UI.structureType == CONNECTION_TYPE.FLY_OVER ||\n UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n if (UI.existingType == BUILDING_SIDE.BOTH) {\n if (UI.existingWidth2 > 0) {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width;\n } else {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width * 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n }\n } else if (UI.structureType == CONNECTION_TYPE.FASCIA) {\n const shouldSnap =\n HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout();\n if (shouldSnap) {\n cutoutLength = UI.existingLength2 + UI.eaveWidth;\n cutOutWidth = UI.existingWidth1 - UI.eaveWidth;\n }\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackLeft = [\n new Vector3(minX + cutoutLength, 0, minZ),\n new Vector3(minX + cutoutLength, 0, minZ + cutOutWidth),\n new Vector3(minX, 0, minZ + cutOutWidth),\n ];\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackRight = [\n new Vector3(minX + totalRoofWidth, 0, minZ + cutOutWidth),\n new Vector3(\n minX + totalRoofWidth - cutoutLength,\n 0,\n minZ + cutOutWidth\n ),\n new Vector3(minX + totalRoofWidth - cutoutLength, 0, minZ),\n ];\n }\n }\n\n let lineBack = [...lineBackRight, ...lineBackLeft];\n\n return [...lineFront, ...lineBack];\n }\n\n private drawBoundingBox(object: THREE.Object3D): void {\n // geometry.computeBoundingBox();\n // var box = geometry.boundingBox;\n // let cubeGeo = new THREE.BoxGeometry(10, 10, 10);\n // let cube = new THREE.Mesh(cubeGeo, new THREE.MeshBasicMaterial({ color: 0x74d00b }));\n // cube.position.set(box.min.x, box.min.y, box.min.z);\n // this.scene.add(cube);\n // cube = new THREE.Mesh(cubeGeo, new THREE.MeshBasicMaterial({ color: 0x74d00b }));\n // cube.position.set(box.max.x, box.max.y, box.max.z);\n // this.scene.add(cube);\n }\n public changeGeoColor(geo: BufferGeometry, dir: Vector3, inputColor: string) {\n geo.computeVertexNormals();\n\n let color = new Color();\n let colors = [];\n for (let i = 0; i < geo.attributes.position.count; i++) {\n let normal = geo.getAttribute(\"normal\");\n const vNormal = new Vector3(\n normal.getX(i),\n normal.getY(i),\n normal.getZ(i)\n );\n\n if (vNormal.angleTo(dir) <= Math.PI / 2) {\n color = new Color(parseInt(inputColor));\n } else {\n color = new Color(\"#BDBFBA\");\n }\n\n colors.push(color.r, color.g, color.b);\n }\n\n geo.setAttribute(\"color\", new Float32BufferAttribute(colors, 3));\n }\n private fitCameraToSelection(camera, controls, selection, fitOffset = 1.2) {\n const box = new Box3();\n\n for (const object of selection) box.expandByObject(object);\n\n const size = box.getSize(new Vector3());\n const center = box.getCenter(new Vector3());\n\n const maxSize = Math.max(size.x, size.y, size.z);\n const fitHeightDistance =\n maxSize / (2 * Math.atan((Math.PI * camera.fov) / 360));\n const fitWidthDistance = fitHeightDistance / camera.aspect;\n const distance = fitOffset * Math.max(fitHeightDistance, fitWidthDistance);\n\n const direction = controls.target\n .clone()\n .sub(camera.position)\n .normalize()\n .multiplyScalar(distance);\n\n controls.maxDistance = distance * 10;\n controls.target.copy(center);\n\n camera.near = distance / 100;\n camera.far = distance * 100;\n camera.updateProjectionMatrix();\n\n camera.position.copy(controls.target).sub(direction);\n\n controls.update();\n }\n fitCameraToObject(camera, object, offset, controls) {\n offset = offset || 1.25;\n\n const boundingBox = new THREE.Box3();\n\n // get bounding box of object - this will be used to setup controls and camera\n boundingBox.setFromObject(object);\n\n let center: THREE.Vector3;\n boundingBox.getCenter(center);\n let size: THREE.Vector3;\n boundingBox.getSize(size);\n\n // get the max side of the bounding box (fits to width OR height as needed )\n const maxDim = Math.max(size.x, size.y, size.z);\n const fov = camera.fov * (Math.PI / 180);\n let cameraZ = Math.abs((maxDim / 4) * Math.tan(fov * 2));\n\n cameraZ *= offset; // zoom out a little so that objects don't fill the screen\n\n camera.position.z = cameraZ;\n\n const minZ = boundingBox.min.z;\n const cameraToFarEdge = minZ < 0 ? -minZ + cameraZ : cameraZ - minZ;\n\n camera.far = cameraToFarEdge * 3;\n camera.updateProjectionMatrix();\n\n if (controls) {\n // set camera to rotate around center of loaded object\n controls.target = center;\n\n // prevent camera from zooming out far enough to create far plane cutoff\n controls.maxDistance = cameraToFarEdge * 2;\n\n controls.saveState();\n } else {\n camera.lookAt(center);\n }\n }\n degreesToRadians(degrees: number) {\n var pi = Math.PI;\n return this.round(degrees * (pi / 180));\n }\n round(num: number): number {\n return parseFloat(num.toFixed(3));\n }\n sin(degrees: number): number {\n return this.round(Math.sin(this.degreesToRadians(degrees)));\n }\n cos(degrees: number): number {\n return this.round(Math.cos(this.degreesToRadians(degrees)));\n }\n tan(degrees: number): number {\n return this.round(Math.tan(this.degreesToRadians(degrees)));\n }\n public createArrowLine(views: Print2DView[]): THREE.Line {\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n\n let dim = new THREE.Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n return dim;\n }\n public createText(\n textStr: string,\n views: Print2DView[],\n textParameter,\n position: Vector3\n ): Mesh {\n let textGeo = new TextBufferGeometry(textStr, textParameter);\n textGeo.center();\n\n let text = new Mesh(textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, 0),\n };\n text.position.setZ(position.z);\n text.position.setX(position.x);\n\n return text;\n }\n getOutlineGeometry(\n geo: Geometry | BufferGeometry,\n threshold: number\n ): EdgesGeometry {\n return new EdgesGeometry(geo, threshold);\n }\n getOutlineGeometryFromMesh(mesh: Mesh, threshold: number) {\n let geo = mesh.geometry.clone();\n geo.scale(mesh.scale.x, mesh.scale.y, mesh.scale.z);\n return new EdgesGeometry(geo, threshold);\n }\n getOutlineGeometryFromMeshNoScale(mesh: Mesh, threshold: number) {\n let geo = mesh.geometry.clone();\n //geo.scale(mesh.scale.x, mesh.scale.y, mesh.scale.z);\n return new EdgesGeometry(geo, threshold);\n }\n clipOutline(geo: EdgesGeometry, plane: Plane): BufferGeometry {\n let vertices = geo.getAttribute(\"position\").array;\n let newVertices = [];\n\n let intersectPoints: Vector3[] = [];\n\n for (let i = 0; i < vertices.length; i += 6) {\n let v1 = new Vector3(vertices[i], vertices[i + 1], vertices[i + 2]);\n let v2 = new Vector3(vertices[i + 3], vertices[i + 4], vertices[i + 5]);\n\n let line = new Line3(v1, v2);\n let intersectPoint = new Vector3();\n let rs = plane.intersectLine(line, intersectPoint);\n\n let dis1 = plane.distanceToPoint(v1);\n let dis2 = plane.distanceToPoint(v2);\n\n if (dis1 < 0 && dis2 < 0) continue;\n\n if (rs) {\n if (dis1 > 0) {\n newVertices.push(v1);\n } else {\n newVertices.push(v2);\n }\n\n newVertices.push(intersectPoint);\n intersectPoints.push(intersectPoint);\n } else {\n newVertices.push(v1, v2);\n }\n }\n\n for (let i = 0; i < intersectPoints.length - 1; i++) {\n newVertices.push(intersectPoints[i]);\n newVertices.push(intersectPoints[i + 1]);\n }\n\n return new BufferGeometry().setFromPoints(newVertices);\n }\n clipOutlineBasePanel(geo: EdgesGeometry, plane: Plane): BufferGeometry {\n let vertices = geo.getAttribute(\"position\").array;\n let newVertices = [];\n\n let intersectPoints: Vector3[] = [];\n\n for (let i = 0; i < vertices.length; i += 6) {\n let v1 = new Vector3(vertices[i], vertices[i + 1], vertices[i + 2]);\n let v2 = new Vector3(vertices[i + 3], vertices[i + 4], vertices[i + 5]);\n\n let line = new Line3(v1, v2);\n let intersectPoint = new Vector3();\n let rs = plane.intersectLine(line, intersectPoint);\n\n let dis1 = plane.distanceToPoint(v1);\n let dis2 = plane.distanceToPoint(v2);\n\n if (dis1 < 0 && dis2 < 0) continue;\n\n if (rs) {\n if (dis1 > 0) {\n newVertices.push(v1);\n } else {\n newVertices.push(v2);\n }\n\n newVertices.push(intersectPoint);\n intersectPoints.push(intersectPoint);\n } else {\n newVertices.push(v1, v2);\n }\n }\n\n if (HomeComponent.ins.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n if (intersectPoints.length === 4) {\n intersectPoints = this.createPolygon(intersectPoints);\n }\n }\n for (let i = 0; i < intersectPoints.length - 1; i++) {\n newVertices.push(intersectPoints[i]);\n newVertices.push(intersectPoints[i + 1]);\n }\n\n return new BufferGeometry().setFromPoints(newVertices);\n }\n public createPolygon(initPoints) {\n if (initPoints.length > 3) {\n let points = this.sortPoints(\n initPoints,\n initPoints[0].x !== initPoints[1].x ? \"x\" : \"z\"\n );\n\n let polygon = [...points.slice(0, 3)];\n points.splice(0, 3);\n this.findNextPoinst(polygon, points, 2);\n return polygon;\n } else {\n return initPoints;\n }\n }\n public findNextPoinst(polygon, restOfPoints, indexOfMaxPoint) {\n if (restOfPoints.length === 0) {\n return;\n }\n let r1 = [\n polygon[indexOfMaxPoint],\n polygon[indexOfMaxPoint === polygon.length - 1 ? 0 : indexOfMaxPoint + 1],\n ];\n let r2 = [polygon[indexOfMaxPoint - 1], polygon[indexOfMaxPoint]];\n\n let simpleMaxPolygon = [\n polygon[indexOfMaxPoint - 1],\n polygon[indexOfMaxPoint],\n polygon[indexOfMaxPoint === polygon.length - 1 ? 0 : indexOfMaxPoint + 1],\n ];\n\n let nextPoint = restOfPoints.splice(0, 1)[0];\n let closestPoint = PolygonUtils.getClosestPointInsidePolygon(\n simpleMaxPolygon,\n nextPoint\n );\n\n let isPointOnSegmentR1 = PolygonUtils.isPointOnSegment(\n r1 as [Vector3, Vector3],\n closestPoint\n );\n let isPointOnSegmentR2 = PolygonUtils.isPointOnSegment(\n r2 as [Vector3, Vector3],\n closestPoint\n );\n\n if (!(isPointOnSegmentR1 && isPointOnSegmentR2)) {\n if (isPointOnSegmentR1) {\n polygon.splice(indexOfMaxPoint + 1, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint + 1);\n }\n if (isPointOnSegmentR2) {\n polygon.splice(indexOfMaxPoint, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint);\n }\n } else {\n let r1_1 = [r1[0], nextPoint];\n let r1_2 = [r1[1], nextPoint];\n\n let inter1 = mathjs.intersect(\n this.vector3ToArray(r1_1[0]),\n this.vector3ToArray(r1_1[1]),\n this.vector3ToArray(r2[0]),\n this.vector3ToArray(r2[1])\n );\n let inter2 = mathjs.intersect(\n this.vector3ToArray(r1_2[0]),\n this.vector3ToArray(r1_2[1]),\n this.vector3ToArray(r2[0]),\n this.vector3ToArray(r2[1])\n );\n\n if (\n inter1 &&\n inter2 &&\n PolygonUtils.isPointOnSegment(\n r2 as [Vector3, Vector3],\n this.arrayToVector3(inter1)\n ) &&\n PolygonUtils.isPointOnSegment(\n r2 as [Vector3, Vector3],\n this.arrayToVector3(inter2)\n )\n ) {\n // Add point in r2\n polygon.splice(indexOfMaxPoint, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint);\n } else {\n // Add point in r1\n polygon.splice(indexOfMaxPoint + 1, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint + 1);\n }\n }\n }\n public vector3ToArray(vector) {\n return [vector.x, vector.y, vector.z];\n }\n public arrayToVector3(array) {\n return new Vector3(array[0], array[1], array[2]);\n }\n public sortPoints(points, direction) {\n let clonePoints = [...points];\n clonePoints.sort((a, b) => {\n if (a[direction] !== b[direction]) {\n return a[direction] - b[direction];\n } else {\n return a.y - b.y;\n }\n });\n\n return clonePoints;\n }\n public getOutlineRafterBeam(mesh: Mesh, lines: Printing2DLine[]) {\n let views = mesh.userData.views;\n\n mesh.updateWorldMatrix(true, true);\n let meshClone = new Mesh((mesh as Mesh).geometry);\n\n let box = new BoxHelper(meshClone);\n box.applyMatrix4(mesh.matrixWorld);\n\n box.updateWorldMatrix(true, true);\n let _geo = box[\"geometry\"].clone() as BufferGeometry;\n _geo.applyMatrix4(box.matrixWorld);\n\n let positions: any = _geo.attributes[\"position\"].array;\n let boxGeo = new BufferGeometry().setAttribute(\n \"position\",\n new Float32BufferAttribute(positions, 3)\n );\n\n this.getOutlineByViews(mesh, boxGeo, lines, views);\n }\n public getPlanVerticesOfBeam(\n mesh: Mesh,\n lines: Printing2DLine[],\n views: Print2DView[]\n ) {\n mesh.updateWorldMatrix(true, true);\n let meshClone = new Mesh((mesh as Mesh).geometry);\n\n let box = new BoxHelper(meshClone);\n box.applyMatrix4(mesh.matrixWorld);\n\n box.updateWorldMatrix(true, true);\n let _geo = box[\"geometry\"].clone() as BufferGeometry;\n _geo.applyMatrix4(box.matrixWorld);\n\n let positions: any = _geo.attributes[\"position\"].array;\n\n let boxGeo = new BufferGeometry().setAttribute(\n \"position\",\n new Float32BufferAttribute(positions, 3)\n );\n\n const vertices = this.getVerticeFromBufferGeo(boxGeo);\n\n const verticesToPrintPlanView = [];\n if (vertices.length >= 8) {\n verticesToPrintPlanView.push(vertices[0], vertices[1]);\n verticesToPrintPlanView.push(vertices[1], vertices[5]);\n verticesToPrintPlanView.push(vertices[5], vertices[4]);\n verticesToPrintPlanView.push(vertices[4], vertices[0]);\n }\n\n if (verticesToPrintPlanView.length > 0) {\n lines.push({\n vertices: verticesToPrintPlanView,\n views: views,\n objectType: mesh.userData?.type,\n });\n }\n }\n public getOutlineByViews(\n group: THREE.Object3D,\n boxGeo: BufferGeometry,\n lines: Printing2DLine[],\n views\n ) {\n let mat = (group as Mesh).material as Material;\n let outLineClip = boxGeo;\n if (mat.clippingPlanes && mat.clippingPlanes.length > 0) {\n for (let i = 0; i < mat.clippingPlanes.length; i++) {\n let clipPlane = mat.clippingPlanes[i].clone() as Plane;\n\n outLineClip = this.clipOutline(outLineClip, clipPlane);\n }\n }\n\n lines.push({\n vertices: this.getVerticeFromBufferGeo(outLineClip),\n views: views,\n objectType: group.userData?.type,\n });\n }\n public createOutline(\n mesh: Mesh,\n lines: Printing2DLine[],\n viewMesh?: Print2DView[]\n ) {\n mesh.updateWorldMatrix(true, true);\n let views = mesh.userData.views;\n if (viewMesh) {\n views = viewMesh;\n }\n //Side view\n let data = this.getEngineeringObjetOutline(mesh, views);\n\n lines.push(data.line as Printing2DLine);\n }\n public getEngineeringObjetOutline(\n obj: Object3D,\n views: Print2DView[],\n isLineSegment?: boolean\n ) {\n obj.updateWorldMatrix(true, true);\n\n let _geo = obj[\"geometry\"].clone() as BufferGeometry;\n _geo.applyMatrix4(obj.matrixWorld);\n\n let outline = this.createOutLineGeo(_geo, null, null);\n\n let objectType = \"\";\n if (obj.userData && obj.userData.type) {\n objectType = obj.userData.type;\n }\n\n let mat = new LineBasicMaterial({ color: 0x000000 });\n let outLineMesh = new LineSegments(outline, mat);\n outLineMesh.userData = { type: objectType };\n\n return {\n line: {\n vertices: this.getVerticeFromBufferGeo(outline),\n views,\n objectType: obj.userData?.type,\n },\n mesh: outLineMesh,\n };\n }\n public createOutLineGeo(geo, plane, thresholdAngle?: number) {\n let outLine: EdgesGeometry = new EdgesGeometry(geo);\n\n if (thresholdAngle) {\n outLine = new EdgesGeometry(geo, thresholdAngle);\n }\n return outLine;\n }\n public getVerticeFromBufferGeo(geo: BufferGeometry) {\n let positions = geo.attributes[\"position\"].array;\n let vertices: Vector3[] = [];\n for (let i = 0; i < positions.length; i += 3) {\n const vertex = new Vector3(\n positions[i],\n positions[i + 1],\n positions[i + 2]\n );\n vertices.push(vertex);\n }\n\n return vertices;\n }\n public getStartEndPoint(box: Box3): Vector3[] {\n let maxHeight = 0;\n let p1: Vector3;\n let p2: Vector3;\n\n if (box.max.x - box.min.x > maxHeight) {\n maxHeight = box.max.x - box.min.x;\n\n p1 = new Vector3(\n box.min.x,\n (box.max.y + box.min.y) / 2,\n (box.max.z + box.min.z) / 2\n );\n p2 = new Vector3(\n box.max.x,\n (box.max.y + box.min.y) / 2,\n (box.max.z + box.min.z) / 2\n );\n }\n if (box.max.y - box.min.y > maxHeight) {\n maxHeight = box.max.y - box.min.y;\n\n p1 = new Vector3(\n (box.max.x + box.min.x) / 2,\n box.min.y,\n (box.max.z + box.min.z) / 2\n );\n p2 = new Vector3(\n (box.max.x + box.min.x) / 2,\n box.max.y,\n (box.max.z + box.min.z) / 2\n );\n }\n if (box.max.z - box.min.z > maxHeight) {\n p1 = new Vector3(\n (box.max.x + box.min.x) / 2,\n (box.max.y + box.min.y) / 2,\n box.min.z\n );\n p2 = new Vector3(\n (box.max.x + box.min.x) / 2,\n (box.max.y + box.min.y) / 2,\n box.max.z\n );\n }\n\n return [p1, p2];\n }\n public getDimensionValue(value: number) {\n //return parseFloat(`${value/1000}`).toFixed(2) + 'm';\n return Math.round(value).toString(); //parseFloat(`${value/1000}`).toFixed(3);\n }\n\n private getAllMesh(parent: Object3D): Printing3DGeometry[] {\n let lsMesh: Printing3DGeometry[] = [];\n for (let _mesh of parent.children) {\n if (_mesh.type !== \"Mesh\" && _mesh.type !== \"Group\") {\n continue;\n }\n\n if (_mesh.type === \"Mesh\") {\n let mesh = _mesh as Mesh;\n mesh.updateWorldMatrix(true, true);\n\n if (mesh.geometry.type === \"BufferGeometry\") {\n let geo = new Geometry().fromBufferGeometry(\n mesh.geometry as BufferGeometry\n );\n geo.applyMatrix4(mesh.matrixWorld);\n lsMesh.push({\n vertices: geo.vertices,\n faces: geo.faces.map((f) => ({ a: f.a, b: f.b, c: f.c })),\n });\n } else if (mesh.geometry.type === \"Geometry\") {\n let geo = mesh.geometry as Geometry;\n geo.applyMatrix4(mesh.matrixWorld);\n lsMesh.push({\n vertices: geo.vertices,\n faces: geo.faces.map((f) => ({ a: f.a, b: f.b, c: f.c })),\n });\n }\n }\n\n if (_mesh.children && _mesh.children.length > 0) {\n lsMesh.push(...this.getAllMesh(_mesh));\n }\n }\n\n return lsMesh;\n }\n public cloneGeometryInfo(original): GeometryInfo {\n let newGeoInfo = new GeometryInfo();\n newGeoInfo.geometry = original.geometry.clone();\n newGeoInfo.width = original.width;\n newGeoInfo.length = original.length;\n newGeoInfo.height = original.height;\n newGeoInfo.name = original.name;\n return newGeoInfo;\n }\n public getHeightByAngle(\n height: number,\n length: number,\n angle: number,\n cons: number\n ) {\n let allow = cons;\n if (UI.structureType == 5 && UI.isUpFasciaUpstandardBracket) {\n allow = -cons;\n }\n return height + this.tan(angle) * length * allow;\n }\n public getHeightByAngle2(\n height: number,\n length: number,\n angle: number,\n cons: number\n ) {\n return height + (length / this.tan(angle)) * cons;\n }\n public getHypotenuseByCos(length, angle) {\n return length / this.cos(angle);\n }\n public getSceneBox() {\n let left1 = UI.existingLength1 / 2;\n let right1 = UI.existingLength1 / 2;\n let back1 = UI.existingWidth1 / 2 + 1000;\n let front1 = UI.existingWidth1 / 2;\n\n let leftCondition =\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH;\n let rightCondition =\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH;\n let eave = 1500 - UI.eaveWidth;\n\n if (UI.existingWidth1 > 0) {\n if (leftCondition) {\n left1 += eave;\n }\n if (rightCondition) {\n right1 += eave;\n }\n }\n if (UI.existingLength2 > eave) {\n if (leftCondition) {\n left1 += UI.existingLength2 - eave;\n }\n if (rightCondition) {\n right1 += UI.existingLength2 - eave;\n }\n }\n if (UI.existingWidth2 > 0) {\n if (leftCondition) {\n left1 += eave;\n }\n if (rightCondition) {\n right1 += eave;\n }\n }\n\n //Front\n if (front1 < UI.eaveWidth) {\n front1 = UI.eaveWidth - UI.existingWidth1;\n }\n if (UI.existingType != 0) {\n if (UI.existingLength2 > 0) {\n front1 += UI.eaveWidth;\n }\n if (UI.existingWidth2 > 0) {\n front1 += UI.existingWidth2;\n front1 -= UI.eaveWidth;\n }\n }\n\n let point1 = new Vector3(-left1, 0, front1);\n let point2 = new Vector3(right1, 5000, -back1);\n\n let box1 = new Box3().setFromPoints([point1, point2]);\n\n let existingHousetLeft = UI.totalBayLength / 2 + UI.overhangLeft;\n let existingHouseRight = UI.totalBayLength / 2 + UI.overhangRight;\n let existingHouseBack = UI.existingWidth1 / 2 + 1000;\n let existingHouseFront =\n UI.span + UI.multiSpan + UI.overhangFront - UI.existingWidth1 / 2;\n\n let diff = UI.existingLength1 - UI.totalBayLength;\n let translate = 0;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n translate = -diff / 2 + UI.overhangLeft;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n translate = diff / 2 - UI.overhangRight;\n } else {\n translate = 0;\n }\n\n let point3 = new Vector3(-existingHousetLeft, 0, existingHouseFront);\n let point4 = new Vector3(existingHouseRight, 5000, -existingHouseBack);\n\n let box2 = new Box3().setFromPoints([point3, point4]);\n box2.translate(new Vector3(translate, 0, 0));\n\n return box1.union(box2);\n }\n public getAllMeshDescendant(parent: Object3D): Object3D[] {\n let meshes: Object3D[] = [];\n if (!parent.children) return [];\n\n for (let child of parent.children) {\n if (child.children) {\n meshes = meshes.concat(this.getAllMeshDescendant(child));\n } else {\n meshes.push(child);\n }\n }\n\n return meshes;\n }\n public getObjectsBoundingBox(objects: Object3D[]) {\n //this function has problem that is, updateMatrixWorld() has some delay\n\n let objectCloned: Object3D[] = [];\n let box = new Box3();\n\n for (let obj of objects) {\n if (obj.children.length > 0) {\n // var objChildren = this.getChildDescendent(obj);\n objectCloned.push(...obj.children);\n } else {\n objectCloned.push(obj);\n }\n }\n\n for (let obj of objectCloned) {\n if (obj[\"geometry\"]) {\n var geo = (obj as Mesh).geometry;\n geo.computeBoundingBox();\n // var min = geo.boundingBox.min;\n // var max = geo.boundingBox.max;\n\n var objBox = geo.boundingBox.clone();\n\n obj.updateMatrixWorld();\n objBox.applyMatrix4(obj.matrixWorld);\n\n // min.x += obj.position.x;\n // min.y += obj.position.y;\n // min.z += obj.position.z;\n\n // max.x += obj.position.x;\n // max.y += obj.position.y;\n // max.z += obj.position.z;\n\n box = box.expandByPoint(objBox.min);\n box = box.expandByPoint(objBox.max);\n }\n }\n\n //objectCloned = objectCloned.filter(o => o.constructor.name == 'Mesh');\n\n // for(let obj of objectCloned){\n // //if(obj.constructor.name != 'Mesh') continue;\n // box = box.expandByObject(obj);\n // }\n\n return box;\n }\n public getObjectBoundingBox(obj: Object3D): Box3 {\n let box = new Box3();\n return box.expandByObject(obj);\n }\n public getChildDescendent(group: Object3D): Object3D[] {\n if (!group.children || group.children.length == 0) return [];\n\n let children: Object3D[] = [];\n\n for (let child of group.children) {\n children.push(child);\n if (child.children && child.children.length > 0) {\n children.push(...this.getChildDescendent(child));\n }\n }\n\n return children;\n }\n public addArrowForLine(\n line: Mesh,\n userData: any = null,\n onDragCallback = null\n ): Object3D[] {\n let box = new Box3().setFromObject(line);\n let lineLength = box.max.x - box.min.x;\n let arrowLength = 150;\n let angle = 15;\n\n if (lineLength < 300) {\n return [];\n }\n\n let y = this.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0, 0);\n shape1.lineTo(arrowLength, y);\n shape1.lineTo(arrowLength, -y);\n shape1.closePath();\n const mat = MaterialManager.Instance().DIMENSION_TEXT.clone();\n let arrow1 = new Mesh(new ShapeBufferGeometry(shape1), mat);\n arrow1.userData = {\n type: GEOMETRY_TYPE.DIMENSION_CAP,\n views: line.userData.views,\n ...userData,\n };\n arrow1.position.set(\n line.position.x - lineLength / 2,\n line.position.y,\n line.position.z\n );\n let arrow2 = arrow1.clone();\n arrow2.rotateZ(Math.PI);\n arrow2.userData = {\n type: GEOMETRY_TYPE.DIMENSION_CAP,\n views: line.userData.views,\n ...userData,\n };\n arrow2.position.set(\n line.position.x + lineLength / 2,\n line.position.y,\n line.position.z\n );\n\n if (userData?.arrowColor) {\n mat.color = new Color(userData.arrowColor);\n }\n\n if (onDragCallback) {\n SelectionManager.ins.addEventListener(\"drag\", onDragCallback, arrow1);\n SelectionManager.ins.addEventListener(\"drag\", onDragCallback, arrow2);\n }\n\n return [arrow1, arrow2];\n }\n\n public createBeamGroup(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n isHighLightBeam = false,\n beamEndCapAndJointInfo: BeamCapAndJointInfo = {\n hasStartCap: false,\n hasEndCap: false,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n ) {\n let scale = length / beamGeo.length;\n\n let mesh = new Mesh(\n beamGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BEAM_TRANSPARENT\n : MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.scale.setX(scale);\n\n let startCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let endCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n if (directionOffset < 0) {\n startCap.position.set(\n -length + beamCapGeo.length / 2 - 2,\n 0,\n beamCapGeo.width / 2\n );\n endCap.position.set(-beamCapGeo.length / 2 + 2, 0, beamCapGeo.width / 2);\n } else if (directionOffset > 0) {\n startCap.position.set(\n 0 + beamCapGeo.length / 2 - 2,\n 0,\n beamCapGeo.width / 2\n );\n endCap.position.set(\n length - beamCapGeo.length / 2 + 2,\n 0,\n beamCapGeo.width / 2\n );\n } else {\n startCap.position.set(\n -length / 2 + beamCapGeo.length / 2 - 2,\n 0,\n beamCapGeo.width / 2\n );\n endCap.position.set(\n length / 2 - beamCapGeo.length / 2 + 2,\n 0,\n beamCapGeo.width / 2\n );\n }\n\n startCap.rotateY(Math.PI / 2);\n endCap.rotateY(-Math.PI / 2);\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n beamGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n beamGroup.add(mesh);\n\n if (beamEndCapAndJointInfo.hasStartCap) {\n beamGroup.add(startCap);\n }\n if (beamEndCapAndJointInfo.hasEndCap) {\n beamGroup.add(endCap);\n }\n\n if (beamEndCapAndJointInfo.jointGeo) {\n const startJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n const endJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n if (directionOffset < 0) {\n startJoint.position.set(\n -length + beamCapGeo.length / 2 - 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n endJoint.position.set(\n -beamCapGeo.length / 2 + 2,\n 0,\n beamCapGeo.width / 2\n );\n } else if (directionOffset > 0) {\n startJoint.position.set(\n 0 + beamCapGeo.length / 2 - 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n endJoint.position.set(\n length - beamCapGeo.length / 2 + 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n } else {\n startJoint.position.set(\n -length / 2 + beamCapGeo.length / 2 - 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n endJoint.position.set(\n length / 2 - beamCapGeo.length / 2 + 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n }\n\n startJoint.rotateY(Math.PI / 2);\n endJoint.rotateY(-Math.PI / 2);\n\n if (beamEndCapAndJointInfo.hasStartJoint) {\n beamGroup.add(startJoint);\n }\n if (beamEndCapAndJointInfo.hasEndJoint) {\n beamGroup.add(endJoint);\n }\n }\n\n return beamGroup;\n }\n public getListSeperateBeamsByBaysForFbGable(\n startEndOfBayZ,\n startBeamStartZ,\n startBeamEndZ,\n startEndCutBeamZ,\n startStartCutBeamZ\n ) {\n let endOfBayZ = startEndOfBayZ;\n let beamStartZ = startBeamStartZ;\n let endCutBeamZ = startEndCutBeamZ;\n let beamEndZ = startBeamEndZ;\n let startCutBeamZ = startStartCutBeamZ;\n\n const beams = [];\n for (let i = 0; i < UI.listBay.length; i++) {\n endOfBayZ += UI.listBay[i].value;\n if (beamStartZ > endOfBayZ) {\n continue;\n }\n\n let shouldAddBeam = false;\n if (UI.listBay[i].isCut) {\n endCutBeamZ = endOfBayZ;\n shouldAddBeam = true;\n }\n if (i == UI.listBay.length - 1 || beamEndZ < endOfBayZ) {\n endCutBeamZ = beamEndZ;\n shouldAddBeam = true;\n }\n\n if (shouldAddBeam) {\n beams.push([startCutBeamZ, endCutBeamZ]);\n startCutBeamZ = endCutBeamZ;\n }\n\n if (beamEndZ < endOfBayZ) {\n break;\n }\n }\n\n return beams;\n }\n public getListSeperateBeamsByBays(\n startEndOfBayX,\n startBeamStartX,\n startBeamEndX,\n startEndCutBeamX,\n startStartCutBeamX\n ) {\n const beams = [];\n let endOfBayX = startEndOfBayX;\n let beamStartX = startBeamStartX;\n let endCutBeamX = startEndCutBeamX;\n let beamEndX = startBeamEndX;\n let startCutBeamX = startStartCutBeamX;\n\n for (let i = 0; i < UI.listBay.length; i++) {\n endOfBayX += UI.listBay[i].value;\n if (beamStartX > endOfBayX) {\n continue;\n }\n\n let shouldAddBeam = false;\n if (UI.listBay[i].isCut) {\n endCutBeamX = endOfBayX;\n shouldAddBeam = true;\n }\n if (i == UI.listBay.length - 1 || beamEndX < endOfBayX) {\n endCutBeamX = beamEndX;\n shouldAddBeam = true;\n }\n\n if (shouldAddBeam) {\n beams.push([startCutBeamX, endCutBeamX]);\n startCutBeamX = endCutBeamX;\n }\n\n if (beamEndX < endOfBayX) {\n break;\n }\n }\n\n return beams;\n }\n public createBeamGroup2(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n isHighLightBeam = false,\n beamEndCapAndJointInfo: BeamCapAndJointInfo = {\n hasStartCap: false,\n hasEndCap: false,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n ) {\n let scale = length / beamGeo.length;\n\n let mesh = new Mesh(\n beamGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BEAM_TRANSPARENT\n : MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.scale.setX(scale);\n\n let startCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let endCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n if (beamDirection == \"x\") {\n if (directionOffset < 0) {\n startCap.position.set(\n -length + beamCapGeo.length / 2 - 2,\n 0,\n beamGeoTranslationZ\n );\n endCap.position.set(-beamCapGeo.length / 2 + 2, 0, beamGeoTranslationZ);\n } else if (directionOffset > 0) {\n startCap.position.set(\n 0 + beamCapGeo.length / 2 - 2,\n 0,\n beamGeoTranslationZ\n );\n endCap.position.set(\n length - beamCapGeo.length / 2 + 2,\n 0,\n beamGeoTranslationZ\n );\n } else {\n startCap.position.set(\n -length / 2 + beamCapGeo.length / 2 - 2,\n 0,\n beamGeoTranslationZ\n );\n endCap.position.set(\n length / 2 - beamCapGeo.length / 2 + 2,\n 0,\n beamGeoTranslationZ\n );\n }\n\n startCap.rotateY(Math.PI / 2);\n endCap.rotateY(-Math.PI / 2);\n } else if (beamDirection == \"z\") {\n if (directionOffset < 0) {\n startCap.position.set(\n beamGeoTranslationZ,\n 0,\n -length + beamCapGeo.length / 2 - 2\n );\n endCap.position.set(beamGeoTranslationZ, 0, -beamCapGeo.length / 2 + 2);\n } else if (directionOffset > 0) {\n startCap.position.set(\n beamGeoTranslationZ,\n 0,\n beamCapGeo.length / 2 - 2\n );\n endCap.position.set(\n beamGeoTranslationZ,\n 0,\n length - beamCapGeo.length / 2 + 2\n );\n } else {\n startCap.position.set(\n beamGeoTranslationZ,\n 0,\n -length / 2 + beamCapGeo.length / 2 - 2\n );\n endCap.position.set(\n beamGeoTranslationZ,\n 0,\n length / 2 - beamCapGeo.length / 2 + 2\n );\n }\n\n // startCap.rotateY(Math.PI / 2);\n // endCap.rotateY(-Math.PI / 2);\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n beamGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n beamGroup.add(mesh);\n\n if (beamEndCapAndJointInfo.hasStartCap) {\n beamGroup.add(startCap);\n }\n if (beamEndCapAndJointInfo.hasEndCap) {\n beamGroup.add(endCap);\n }\n\n if (beamEndCapAndJointInfo.jointGeo) {\n const startJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n const endJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n if (beamDirection == \"x\") {\n if (directionOffset < 0) {\n startJoint.position.set(\n -length,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n endJoint.position.set(\n -beamCapGeo.length / 2 + 2,\n 0,\n beamGeoTranslationZ\n );\n } else if (directionOffset > 0) {\n startJoint.position.set(\n 0,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n endJoint.position.set(\n length,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n } else {\n startJoint.position.set(\n -length / 2,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n endJoint.position.set(\n length / 2,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n }\n\n startJoint.rotateY(Math.PI / 2);\n endJoint.rotateY(-Math.PI / 2);\n } else if (beamDirection == \"z\") {\n if (directionOffset < 0) {\n startJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n -length\n );\n endJoint.position.set(\n beamGeoTranslationZ,\n 0,\n -beamCapGeo.length / 2 + 2\n );\n } else if (directionOffset > 0) {\n startJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n 0\n );\n endJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n length\n );\n } else {\n startJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n -length / 2\n );\n endJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n length / 2\n );\n }\n }\n if (beamEndCapAndJointInfo.hasStartJoint) {\n beamGroup.add(startJoint);\n }\n if (beamEndCapAndJointInfo.hasEndJoint) {\n beamGroup.add(endJoint);\n }\n }\n\n return beamGroup;\n }\n public createGutterGroup(\n gutterGeo: GeometryInfo,\n gutterCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n hasStartCap?: boolean,\n hasEndCap?: boolean,\n clippingCsg?: CSG,\n parent?: Object3D\n ) {\n let scale = length / gutterGeo.length;\n\n let mesh = new Mesh(gutterGeo.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n mesh.scale.setX(scale);\n\n let startCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n let endCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n\n if (directionOffset < 0) {\n startCap.position.set(-length, 0, 0);\n endCap.position.set(0, 0, 0);\n } else if (directionOffset > 0) {\n startCap.position.set(0, 0, 0);\n endCap.position.set(length, 0, 0);\n } else {\n startCap.position.set(-length / 2, 0, 0);\n endCap.position.set(length / 2, 0, 0);\n }\n\n let gutterGroup = new Group();\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n gutterGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n if (clippingCsg) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n mesh.rotation.set(rot.x, rot.y, rot.z);\n }\n\n mesh.updateMatrix();\n\n const meshCliped = CSG.toMesh(\n CSG.fromMesh(mesh).subtract(clippingCsg),\n mesh.matrix\n );\n meshCliped.userData = mesh.userData;\n meshCliped.material = mesh.material;\n meshCliped.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //back to origin\n meshCliped.applyMatrix4(matrixBefore);\n gutterGroup.add(meshCliped);\n } else {\n gutterGroup.add(mesh);\n }\n\n if (hasStartCap) {\n gutterGroup.add(startCap);\n }\n if (hasEndCap) {\n gutterGroup.add(endCap);\n }\n\n return gutterGroup;\n }\n public createGutterGroupWithMesh(\n gutterMesh: Mesh,\n gutterCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n hasStartCap?: boolean,\n hasEndCap?: boolean\n ) {\n let startCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n let endCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n\n if (directionOffset < 0) {\n startCap.position.set(-length, 0, 0);\n endCap.position.set(0, 0, 0);\n } else if (directionOffset > 0) {\n startCap.position.set(0, 0, 0);\n endCap.position.set(length, 0, 0);\n } else {\n startCap.position.set(-length / 2, 0, 0);\n endCap.position.set(length / 2, 0, 0);\n }\n\n let gutterGroup = new Group();\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n gutterGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n gutterGroup.add(gutterMesh);\n\n if (hasStartCap) {\n gutterGroup.add(startCap);\n }\n if (hasEndCap) {\n gutterGroup.add(endCap);\n }\n\n return gutterGroup;\n }\n public createPositionHelper(point: Vector3, size: number) {\n let geo = new BufferGeometry();\n geo.setFromPoints([\n new Vector3(point.x - size, point.y, point.z),\n new Vector3(point.x + size, point.y, point.z),\n new Vector3(point.x, point.y - size, point.z),\n new Vector3(point.x, point.y + size, point.z),\n ]);\n return new LineSegments(geo, new LineBasicMaterial({ color: \"red\" }));\n }\n\n public getIntersection(line1: Line3, line2: Line3): Vector2 {\n let line1StartX = line1.start.x;\n let line1StartY = line1.start.y;\n let line1EndX = line1.end.x;\n let line1EndY = line1.end.y;\n let line2StartX = line2.start.x;\n let line2StartY = line2.start.y;\n let line2EndX = line2.end.x;\n let line2EndY = line2.end.y;\n\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator,\n a,\n b,\n numerator1,\n numerator2,\n result = {\n x: null,\n y: null,\n };\n denominator =\n (line2EndY - line2StartY) * (line1EndX - line1StartX) -\n (line2EndX - line2StartX) * (line1EndY - line1StartY);\n if (denominator == 0) {\n return undefined;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b;\n numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b;\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + a * (line1EndX - line1StartX);\n result.y = line1StartY + a * (line1EndY - line1StartY);\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n // if (a > 0 && a < 1) {\n // result.onLine1 = true;\n // }\n // // if line2 is a segment and line1 is infinite, they intersect if:\n // if (b > 0 && b < 1) {\n // result.onLine2 = true;\n // }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return new Vector2(result.x, result.y);\n }\n public createMesh(\n geo: BufferGeometry | Geometry,\n material: Material,\n userData: any,\n posX: number,\n posY: number,\n posZ: number,\n rotX: number,\n rotY: number,\n rotZ: number,\n scaleX: number,\n scaleY: number,\n scaleZ: number\n ): Mesh {\n let mesh = new Mesh(geo, material);\n mesh.userData = userData;\n mesh.position.set(posX, posY, posZ);\n mesh.rotation.set(rotX, rotY, rotZ);\n mesh.scale.set(scaleX, scaleY, scaleZ);\n\n return mesh;\n }\n //NOTE: for bindBuildingInfo() function\n public getInfoFromGeometry(\n app: HomeComponent,\n children: Object3D[],\n geoManager: GeometryManager,\n isCutOut: boolean,\n isRakeCut: boolean\n ): any {\n this.geo_gutterBack = geoManager.getGutter();\n\n const _roofPatios = [];\n children.map((group) => {\n _roofPatios.push(\n ...group.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n });\n if (_roofPatios.length === 0) {\n children.map((group) => {\n if (group.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(group);\n }\n if (group.type == \"Group\") {\n group.traverse((object) => {\n if (object.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(object);\n }\n });\n }\n return group;\n });\n }\n const elementArray = [];\n children.map((group) => {\n if (\n group.userData.type === GEOMETRY_TYPE.DOWNPIPE ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n ) {\n elementArray.push(group);\n }\n });\n children.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n (f.userData.type === GEOMETRY_TYPE.DOWNPIPE &&\n f.children.length > 0) ||\n (f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM &&\n f.children.length > 0) ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n );\n // return group;\n });\n _roofPatios.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL ||\n f.userData.type === GEOMETRY_TYPE.ZFLASHING\n )\n );\n return group;\n });\n let _beams = [];\n let _angleBrackets = 0;\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM)\n .map((beam) => {\n if (beam.userData.angle) {\n _angleBrackets += 2;\n }\n let _length = 0;\n let _position = null;\n if (beam.userData.category) {\n _length =\n beam.children.length > 0\n ? beam.children[0].scale.z !== 1\n ? beam.children[0].scale.z\n : beam.children[0].scale.x\n : beam.scale.x;\n _position =\n beam.children.length > 0\n ? beam.children[0].userData.position\n : beam.userData.position;\n } else {\n beam.children\n .filter((f) => f.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_BEAM)\n .map((m) => {\n _length = m.scale.x;\n _position = { back: true };\n });\n }\n _beams.push({\n length: _length,\n position: _position,\n });\n //\n _beams = _beams.map((m) => {\n return {\n ...m,\n isHouseBeam: !app.chkHasHouseBeam.currentValue\n ? false\n : m.position?.back || m.position?.cutout\n ? true\n : false,\n };\n });\n });\n\n let _internalJoints = [];\n let _normalBeamEndCaps = [];\n elementArray\n .filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_INTERNAL_BEAM\n )\n .map((beam) => {\n console.log(\"👉 ~ file: utils.ts:2219 ~ Util ~ .map ~ beam:\", beam);\n if (_.has(beam, [\"children\"])) {\n beam.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.INTERNAL_JOINT)\n .forEach((el) => {\n _internalJoints.push({\n code: el.userData.name,\n });\n });\n beam.children\n .filter(\n (el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP\n )\n .forEach((el) => {\n _normalBeamEndCaps.push({\n code: el.userData.code,\n });\n });\n }\n });\n const _jointGroupJoints = _.groupBy(_internalJoints, (el) => el.code);\n _internalJoints = [];\n Object.entries(_jointGroupJoints).forEach(([key, value]) => {\n _internalJoints.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n const _jointGroupEndCaps = _.groupBy(_normalBeamEndCaps, (el) => el.code);\n _normalBeamEndCaps = [];\n Object.entries(_jointGroupEndCaps).forEach(([key, value]) => {\n _normalBeamEndCaps.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n const _panels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL)\n .map((panel) => {\n let _length = 0;\n if (isRakeCut || isCutOut) {\n let _boxPanel = new Box3().setFromObject(panel);\n let direction = \"z\";\n if (\n HomeComponent.ins.isFBRoof &&\n HomeComponent.ins.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n direction = \"x\";\n }\n _length = _.round(\n Math.ceil(_boxPanel.max[direction] - _boxPanel.min[direction]) /\n 1000,\n 2\n );\n _length = _.min([_.round(panel.scale.z, 2), _length]);\n } else {\n _length = _.round(panel.scale.z, 2);\n }\n _panels.push({\n length: _length / this.cos(UI.patiosPitch),\n //HACK: Check\n // length: _.round(Math.ceil(_boxPanel.min.distanceTo(_boxPanel.max)) / 1000, 2)\n });\n });\n let _downpipes = 0;\n let _nozzles = 0;\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE)\n .map((downpipe) => {\n const _countDownpipe = downpipe.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE_NOZZLE\n );\n if (_countDownpipe.length === 0) {\n _downpipes++;\n } else {\n _nozzles++;\n }\n });\n\n const _gutters = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS)\n .map((gutter) => {\n _gutters.push({\n length:\n (gutter.children[0].scale.x * this.geo_gutterBack.length) / 1000,\n });\n });\n const _barges = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING)\n .map((barge) => {\n _barges.push({\n length:\n barge.scale.x != barge.scale.z && barge.scale.x != 1\n ? this.round(barge.scale.x)\n : this.round(barge.scale.z),\n });\n });\n //Drip Barge\n elementArray\n .filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n .map((drip) => {\n _barges.push({\n length:\n drip.scale.x != drip.scale.z && drip.scale.x != 1\n ? this.round(drip.scale.x)\n : this.round(drip.scale.z),\n });\n });\n\n const _zflashings = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ZFLASHING)\n .map((zflashing) => {\n _zflashings.push({\n length:\n zflashing.scale.x != zflashing.scale.z && zflashing.scale.x != 1\n ? this.round(zflashing.scale.x)\n : this.round(zflashing.scale.z),\n });\n });\n\n let _recChanels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL)\n .map((receiver_chanel) => {\n _recChanels.push({\n length:\n receiver_chanel.scale.x != receiver_chanel.scale.z &&\n receiver_chanel.scale.x != 1\n ? this.round(receiver_chanel.scale.x)\n : this.round(receiver_chanel.scale.z),\n });\n });\n let listRecChanels = _.groupBy(_recChanels, (item) => item.length);\n _recChanels = [];\n let _keys = Object.keys(listRecChanels);\n _keys.forEach((el) => {\n _recChanels.push({\n length: +el,\n qty: listRecChanels[el].length,\n });\n });\n //HACK: conflict\n const flyOverBrackets = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n !f.userData.position.cutout\n ).length;\n\n const flyOverBracketCutOuts = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n f.userData.position.cutout\n ).length;\n\n const extFlyOverBracket =\n elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET\n ).length -\n flyOverBracketCutOuts -\n flyOverBrackets;\n\n return {\n downpipes: _downpipes,\n angleBrackets: _angleBrackets,\n bottomAngleBrackets: 0,\n nozzles: _nozzles,\n extFlyoverBrackets: extFlyOverBracket,\n flyoverBrackets: flyOverBrackets,\n flyoverBracketCutOuts: flyOverBracketCutOuts,\n internalJoints: _internalJoints,\n normalBeamEndCaps: _normalBeamEndCaps,\n gutters: _gutters,\n beams: _beams,\n barges: _barges,\n zflashings: _zflashings,\n receiver_chanels: _recChanels,\n panels: _panels,\n fasciaBrackets: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET\n ).length,\n fasciaBracketCutouts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n ).length,\n fasciaBracketExts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n ).length,\n };\n }\n public getInfoFromGeometryGableRoof(\n app: HomeComponent,\n children: Object3D[],\n geoManager: GeometryManager,\n isCutOut: boolean,\n isRakeCut: boolean\n ): any {\n this.geo_gutterBack = geoManager.getGutter();\n\n let _centerPosts = [];\n _centerPosts = children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n const _patios = children.filter(\n (x) => x.userData.category === GEOMETRY_CATEGORY.PATIOS\n );\n _patios.map((value) => {\n _centerPosts.push(\n ...value.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n return value;\n });\n\n let listCenterPost = _.groupBy(_centerPosts, (item) => item.scale.y);\n\n _centerPosts = [];\n let _keys = Object.keys(listCenterPost);\n _keys.forEach((el) => {\n _centerPosts.push({\n length: _.round(+el, 2),\n qty: listCenterPost[el].length,\n });\n });\n\n const _roofPatios = [];\n children.map((group) => {\n _roofPatios.push(\n ...group.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n });\n if (_roofPatios.length === 0) {\n children.map((group) => {\n if (group.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(group);\n }\n if (group.type == \"Group\") {\n group.traverse((object) => {\n if (object.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(object);\n }\n });\n }\n return group;\n });\n }\n const elementArray = [];\n children.map((group) => {\n if (\n group.userData.type === GEOMETRY_TYPE.DOWNPIPE ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n ) {\n elementArray.push(group);\n }\n });\n children.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n (f.userData.type === GEOMETRY_TYPE.DOWNPIPE &&\n f.children.length > 0) ||\n (f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM &&\n f.children.length > 0) ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n // return group;\n });\n _roofPatios.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL ||\n f.userData.type === GEOMETRY_TYPE.ZFLASHING\n )\n );\n return group;\n });\n\n let _ridgeCapping = [];\n children.map((group) => {\n _ridgeCapping.push(\n ...group.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING\n )\n );\n });\n\n _ridgeCapping = _ridgeCapping.map((el) => {\n return {\n length: el.userData.length / 1000,\n qty: 1,\n };\n });\n\n let _beams = [];\n let _internalJoints = [];\n let _normalBeamEndCaps = [];\n let angleBrackets = 0; //Default\n let bottomAngleBrackets = 0; //Default\n elementArray\n .filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n .map((beam) => {\n // if (beam.userData.angle) {\n // _angleBrackets += 2;\n // }\n let _length = 0;\n let _name = null;\n if (beam.userData.category) {\n _length =\n beam.children.length > 0\n ? beam.children[0].scale.z !== 1\n ? beam.children[0].scale.z\n : beam.children[0].scale.x\n : beam.scale.x;\n _name = beam.userData.name || beam.children[0].userData.name;\n } else {\n beam.children\n .filter((f) => f.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_BEAM)\n .map((m) => {\n _length = m.scale.x;\n _name = beam.userData.name;\n });\n }\n _beams.push({\n length: _.round(_length, 2),\n name:\n beam.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n ? \"RF\"\n : _name,\n });\n if (_.has(beam, [\"children\"])) {\n beam.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.INTERNAL_JOINT)\n .forEach((el) => {\n _internalJoints.push({\n code: el.userData.name,\n });\n });\n beam.children\n .filter(\n (el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP\n )\n .forEach((el) => {\n _normalBeamEndCaps.push({\n code: el.userData.code,\n });\n });\n }\n if (beam.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM) {\n angleBrackets += 1;\n bottomAngleBrackets += 1;\n }\n });\n const _jointGroup = _.groupBy(_internalJoints, (el) => el.code);\n _internalJoints = [];\n Object.entries(_jointGroup).forEach(([key, value]) => {\n _internalJoints.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n const _jointGroupEndCaps = _.groupBy(_normalBeamEndCaps, (el) => el.code);\n _normalBeamEndCaps = [];\n Object.entries(_jointGroupEndCaps).forEach(([key, value]) => {\n _normalBeamEndCaps.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n let listBeam = _.groupBy(_beams, (item) => `\"${item.length}+${item.name}\"`);\n\n _beams = [];\n _keys = Object.keys(listBeam);\n _keys.forEach((el) => {\n _beams.push({\n ...listBeam[el][0],\n qty: listBeam[el].length,\n });\n });\n\n let _panels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL)\n .map((panel) => {\n let _length = 0;\n\n let direction = \"z\";\n if (\n HomeComponent.ins.isFBRoof &&\n HomeComponent.ins.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n direction = \"x\";\n }\n let _boxPanel = new Box3().setFromObject(panel);\n _length = _.round(\n Math.ceil(_boxPanel.max[direction] - _boxPanel.min[direction]) / 1000,\n 2\n );\n\n _panels.push({\n length: _length / this.cos(UI.patiosPitch),\n dir: panel.userData.dir,\n });\n });\n\n let listPanels = _.groupBy(_panels, (item) => `${item.length}-${item.dir}`);\n _panels = [];\n _keys = Object.keys(listPanels);\n _keys.forEach((el) => {\n _panels.push({\n length: +listPanels[el][0].length,\n dir: listPanels[el][0].dir,\n qty: listPanels[el].length,\n });\n });\n\n let _downpipes = 0;\n let _nozzles = 0;\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE)\n .map((downpipe) => {\n const _countDownpipe = downpipe.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE_NOZZLE\n );\n if (_countDownpipe.length === 0) {\n _downpipes++;\n } else {\n _nozzles++;\n }\n });\n\n let _gutters = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS)\n .map((gutter) => {\n _gutters.push({\n length:\n (gutter.children[0].scale.x * this.geo_gutterBack.length) / 1000,\n });\n });\n\n let listGutters = _.groupBy(_gutters, (item) => item.length);\n _gutters = [];\n _keys = Object.keys(listGutters);\n _keys.forEach((el) => {\n _gutters.push({\n length: +el,\n qty: listGutters[el].length,\n });\n });\n\n let _barges = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING)\n .map((barge) => {\n _barges.push({\n length:\n barge.scale.x != barge.scale.z && barge.scale.x != 1\n ? this.round(barge.scale.x)\n : this.round(barge.scale.z),\n });\n });\n\n //Drip Barge\n elementArray\n .filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n .map((drip) => {\n _barges.push({\n length:\n drip.scale.x != drip.scale.z && drip.scale.x != 1\n ? this.round(drip.scale.x)\n : this.round(drip.scale.z),\n });\n });\n\n let listBarges = _.groupBy(_barges, (item) => item.length);\n _barges = [];\n _keys = Object.keys(listBarges);\n _keys.forEach((el) => {\n _barges.push({\n length: +el,\n qty: listBarges[el].length,\n });\n });\n\n let _zflashings = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ZFLASHING)\n .map((zflashing) => {\n _zflashings.push({\n length:\n zflashing.scale.x != zflashing.scale.z && zflashing.scale.x != 1\n ? this.round(zflashing.scale.x)\n : this.round(zflashing.scale.z),\n });\n });\n\n let listZflashings = _.groupBy(_zflashings, (item) => item.length);\n _zflashings = [];\n _keys = Object.keys(listZflashings);\n _keys.forEach((el) => {\n _zflashings.push({\n length: +el,\n qty: listZflashings[el].length,\n });\n });\n\n let _recChanels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL)\n .map((receiver_chanel) => {\n _recChanels.push({\n length:\n receiver_chanel.scale.x != receiver_chanel.scale.z &&\n receiver_chanel.scale.x != 1\n ? this.round(receiver_chanel.scale.x)\n : this.round(receiver_chanel.scale.z),\n });\n });\n\n let listRecChanels = _.groupBy(_recChanels, (item) => item.length);\n _recChanels = [];\n _keys = Object.keys(listRecChanels);\n _keys.forEach((el) => {\n _recChanels.push({\n length: +el,\n qty: listRecChanels[el].length,\n });\n });\n\n let _rafterEndCap = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM)\n .map((beam) => {\n beam.children.forEach((el) => {\n if (el.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP) {\n _rafterEndCap.push({\n name: el.userData.name,\n });\n }\n });\n });\n\n let listRafterEndCap = _.groupBy(_rafterEndCap, (item) => item.name);\n\n _rafterEndCap = [];\n _keys = Object.keys(listRafterEndCap);\n _keys.forEach((el) => {\n _rafterEndCap.push({\n code: el,\n qty: listRafterEndCap[el].length,\n });\n });\n\n const flyOverBrackets = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n !f.userData.position.cutout\n ).length;\n const flyOverBracketCutOuts = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n f.userData.position.cutout\n ).length;\n const extFlyOverBracket =\n elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET\n ).length -\n flyOverBracketCutOuts -\n flyOverBrackets;\n\n return {\n centerPost: _centerPosts,\n downpipes: _downpipes,\n angleBrackets: angleBrackets,\n bottomAngleBrackets: bottomAngleBrackets,\n nozzles: _nozzles,\n internalJoints: _internalJoints,\n normalBeamEndCaps: _normalBeamEndCaps,\n extFlyoverBrackets: extFlyOverBracket,\n flyoverBrackets: flyOverBrackets,\n flyoverBracketCutOuts: flyOverBracketCutOuts,\n gutters: _gutters,\n beams: _beams,\n barges: _barges,\n zflashings: _zflashings,\n receiver_chanels: _recChanels,\n panels: _panels,\n ridgeCapping: _ridgeCapping,\n rafterEndCap: _rafterEndCap,\n fasciaBrackets: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET\n ).length,\n fasciaBracketCutouts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n ).length,\n fasciaBracketExts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n ).length,\n };\n }\n public getBeamRakeCutInfo(APP: HomeComponent, cutSide: BUILDING_SIDE) {\n let k, k_, j, l, m, v, a, b;\n if (cutSide == BUILDING_SIDE.LEFT) {\n k = Math.sqrt(\n Math.pow(APP.sldLeftCutHorizontal.currentValue, 2) +\n Math.pow(APP.sldLeftCutVertical.currentValue, 2)\n );\n k_ =\n (k * APP.sldFrontOverhang.currentValue) /\n APP.sldLeftCutHorizontal.currentValue;\n j =\n APP.sldLeftCutVertical.currentValue +\n k_ -\n APP.sldFrontOverhang.currentValue;\n l =\n (j * APP.sldLeftCutHorizontal.currentValue) /\n APP.sldLeftCutVertical.currentValue;\n m = Math.sqrt(Math.pow(j, 2) + Math.pow(l, 2));\n v =\n APP.sldLeftCutVertical.currentValue - APP.sldFrontOverhang.currentValue;\n\n a = j - (APP.sldSpan.currentValue + APP.sldMultiSpan.currentValue);\n b = a / this.cos(APP.sltRoofPitch.currentValue);\n } else if (cutSide == BUILDING_SIDE.RIGHT) {\n k = Math.sqrt(\n Math.pow(APP.sldRightCutHorizontal.currentValue, 2) +\n Math.pow(APP.sldRightCutVertical.currentValue, 2)\n );\n k_ =\n (k * APP.sldFrontOverhang.currentValue) /\n APP.sldRightCutHorizontal.currentValue;\n j =\n APP.sldRightCutVertical.currentValue +\n k_ -\n APP.sldFrontOverhang.currentValue;\n l =\n (j * APP.sldRightCutHorizontal.currentValue) /\n APP.sldRightCutVertical.currentValue;\n m = Math.sqrt(Math.pow(j, 2) + Math.pow(l, 2));\n v =\n APP.sldRightCutVertical.currentValue -\n APP.sldFrontOverhang.currentValue;\n\n a = j - (APP.sldSpan.currentValue + APP.sldMultiSpan.currentValue);\n b = a / this.cos(APP.sltRoofPitch.currentValue);\n }\n\n return {\n k: k == Infinity || isNaN(k) ? 0 : k,\n j: j == Infinity || isNaN(j) ? 0 : j,\n m: m == Infinity || isNaN(m) ? 0 : m,\n v: v == Infinity || isNaN(v) ? 0 : v,\n a: a == Infinity || isNaN(a) ? 0 : a,\n b: b == Infinity || isNaN(b) ? 0 : b,\n l: l == Infinity || isNaN(l) ? 0 : l,\n k_: k_ == Infinity || isNaN(k_) ? 0 : k_,\n };\n }\n public isPositive(start, end, intersection) {\n // all parameters are THREE.Vector3()\n let v1 = new THREE.Vector3().copy(end).sub(start);\n let v2 = new THREE.Vector3().copy(intersection).sub(start);\n return v1.dot(v2) >= 0;\n }\n // checks if two line segments will intersect on a point\n // when traveling in one specific direction from start to end\n // but not in the direction from end to start\n // params (THREE.Line3, THREE.Line3)\n public getIntersectionOnAPoint(\n line1,\n line2,\n isCheckIntersectIsPositiveLine = false\n ) {\n var intersection = null;\n var A = line1.start;\n var B = line1.end;\n var C = line2.start;\n var D = line2.end;\n\n // Line AB represented as a1x + b1y = c1\n var a1 = B.z - A.z;\n var b1 = A.x - B.x;\n var c1 = a1 * A.x + b1 * A.z;\n\n // Line CD represented as a2x + b2y = c2\n var a2 = D.z - C.z;\n var b2 = C.x - D.x;\n var c2 = a2 * C.x + b2 * C.z;\n\n var determinant = a1 * b2 - a2 * b1;\n\n if (determinant == 0) {\n // The lines are parallel.\n } else {\n var x = (b2 * c1 - b1 * c2) / determinant;\n var z = (a1 * c2 - a2 * c1) / determinant;\n intersection = new THREE.Vector3(x, 0, z);\n }\n\n // if there is an intersection. verify intersection occurs on the two line segments\n // when calculating from start to end\n if (intersection && isCheckIntersectIsPositiveLine) {\n var line1result = this.isPositive(line1.start, line1.end, intersection);\n var line2result = this.isPositive(line2.start, line2.end, intersection);\n if (line1result && line2result) {\n // do nothing when the intersection is not \"false\" as both results are \"true\"\n } else {\n //\n // set intersection to null when the intersection is \"false\" as one of results is \"false\"\n intersection = null;\n }\n }\n return intersection;\n }\n\n public createDownpipeGroup(\n APP: HomeComponent,\n downpipeGroup: Group,\n geoPipe: GeometryInfo,\n geoL: GeometryInfo,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n offsetZNozzle: number,\n rotationY: number,\n connectLength: number,\n pipeLength: number,\n haveNozzle: boolean\n ) {\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n downpipeGroup.position.set(offsetX, 0, offsetZ);\n\n if (APP.sltGutterType.currentValue == 0) {\n pipeLength -= 80;\n } else {\n pipeLength -= 60;\n }\n\n if (connectLength > 100) {\n if (haveNozzle) {\n pipeLength -= 250;\n\n let meshLBottom = new Mesh(\n geoL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, pipeLength, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n geoL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(0, pipeLength + 230, connectLength - 100);\n\n let meshPipeConnect = new Mesh(\n geoPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, pipeLength + 115, 50);\n meshPipeConnect.scale.set(1, (connectLength - 140) / geoPipe.height, 1);\n\n downpipeGroup.add(meshLBottom, meshLTop, meshPipeConnect);\n } else {\n pipeLength += 100;\n offsetY += 100;\n }\n }\n\n let meshPipe = new Mesh(\n geoPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(pipeLength / geoPipe.height);\n\n downpipeGroup.add(meshPipe);\n\n //Check intersec eave\n let isIntersect = false;\n let boxDownPipe = new Box3().setFromObject(downpipeGroup);\n\n for (let eave of APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n\n if (boxEave.intersectsBox(boxDownPipe)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n downpipeGroup.children = [];\n this.createDownpipeNozzle(\n APP,\n downpipeGroup,\n geoPipe,\n offsetX,\n offsetY,\n offsetZNozzle\n );\n }\n\n return downpipeGroup;\n }\n public createDownpipeNozzle(\n APP: HomeComponent,\n downpipeGroup: Group,\n geoPipe: GeometryInfo,\n posX: number,\n posY: number,\n posZ: number\n ) {\n let meshPipe = new Mesh(\n geoPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / geoPipe.height);\n meshPipe.position.set(0, posY - 100 - 100, 0);\n\n downpipeGroup.add(meshPipe);\n downpipeGroup.position.set(posX, 0, posZ);\n return downpipeGroup;\n }\n public handlerDimDragEvent(\n event,\n startPos,\n startMatrix?: Matrix4,\n startBayLength?: number\n ) {\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n event.object.position.z = 0;\n event.object.position.y = 0;\n let bayNum = obj.userData.bayNum;\n const pos = obj.position.clone();\n let bayOffset = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) < +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n let bayStartPos = -UI.totalBayLength / 2 + bayOffset;\n let bayEndPos = bayStartPos + UI.listBay[bayNum].value;\n if (\n UI.existingType == 0 ||\n UI.existingType == 3 ||\n UI.structureType == 4\n ) {\n if (event.object.position.x > bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n if (event.object.position.x < bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n }\n } else if (UI.existingType == 1) {\n if (obj.userData.right) {\n if (event.object.position.x < bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n if (event.object.position.x > bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n }\n } else if (UI.existingType == 2) {\n if (obj.userData.left) {\n if (event.object.position.x > bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n if (event.object.position.x < bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n }\n }\n let distance = HomeComponent.ins.dialogEditBay.listBay[bayNum].value;\n if (startPos.x == pos.x) {\n return;\n }\n if (obj.userData.left) {\n if (UI.existingType == 1 && UI.structureType != 4) {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const startPointOld = -totalBayStartLength / 2 + bayOffset;\n distance = pos.x - startPointOld;\n\n // const fit = distance / 2 - startBayLength / 2;\n // event.object.position.x = pos.x - fit;\n }\n } else {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const startCenter =\n -totalBayStartLength / 2 + bayOffset + startBayLength / 2;\n distance = 2 * (pos.x - startCenter);\n }\n // if(pos.x > startPos.x){\n // distance = distance + (pos.x - startPos.x);\n // } else if (pos.x < startPos.x){\n // distance = distance - (startPos.x - pos.x);\n // }\n }\n } else {\n if (UI.existingType == 2 && UI.structureType != 4) {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const endPointOld =\n -totalBayStartLength / 2 + bayOffset + startBayLength;\n distance = endPointOld - pos.x;\n }\n } else {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const startCenter =\n -totalBayStartLength / 2 + bayOffset + startBayLength / 2;\n distance = 2 * (startCenter - pos.x);\n }\n // if (pos.x > startPos.x) {\n // distance = distance - (pos.x - startPos.x);\n // } else if (pos.x < startPos.x) {\n // distance = distance + (startPos.x - pos.x);\n // }\n }\n }\n distance = Math.round(distance / 10) * 10;\n if (distance < 1000) {\n distance = 1000;\n }\n if (distance > 8000) {\n distance = 8000;\n }\n HomeComponent.ins.dialogEditBay.listBay[bayNum].value = distance;\n HomeComponent.ins.dialogEditBay.onOK();\n // if(obj.userData.left){\n // if (UI.existingType == 1 && UI.structureType != 4){\n // event.object.position.x = UI.totalBayLength + bayOffset + distance;\n // }\n // }\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 500;\n if (\n event.object.position.x >\n -UI.totalBayLength / 2 + HomeComponent.ins.sldLeftCutHorizontal.maxValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 +\n HomeComponent.ins.sldLeftCutHorizontal.maxValue;\n }\n if (event.object.position.x < -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n -UI.totalBayLength / 2 +\n HomeComponent.ins.sldLeftCutHorizontal.minValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 +\n HomeComponent.ins.sldLeftCutHorizontal.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n }\n let distance = HomeComponent.ins.sldLeftCutHorizontal.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldLeftCutHorizontal.minValue) {\n distance = HomeComponent.ins.sldLeftCutHorizontal.minValue;\n }\n if (distance > HomeComponent.ins.sldLeftCutHorizontal.maxValue) {\n distance = HomeComponent.ins.sldLeftCutHorizontal.maxValue;\n }\n HomeComponent.ins.sldLeftCutHorizontal.setValue(distance);\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 500;\n if (event.object.position.x > UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n if (\n event.object.position.x <\n UI.totalBayLength / 2 - HomeComponent.ins.sldRightCutHorizontal.maxValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 -\n HomeComponent.ins.sldRightCutHorizontal.maxValue;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n UI.totalBayLength / 2 -\n HomeComponent.ins.sldRightCutHorizontal.minValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 -\n HomeComponent.ins.sldRightCutHorizontal.minValue;\n }\n }\n let distance = HomeComponent.ins.sldRightCutHorizontal.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldRightCutHorizontal.minValue) {\n distance = HomeComponent.ins.sldRightCutHorizontal.minValue;\n }\n if (distance > HomeComponent.ins.sldRightCutHorizontal.maxValue) {\n distance = HomeComponent.ins.sldRightCutHorizontal.maxValue;\n }\n HomeComponent.ins.sldRightCutHorizontal.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n event.object.position.z = 0;\n event.object.position.y = 0;\n const pos = obj.position.clone();\n if (\n event.object.position.x <\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.maxValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.maxValue;\n }\n if (event.object.position.x > -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.minValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.minValue;\n }\n }\n let distance = HomeComponent.ins.sldLeftOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldLeftOverhang.minValue) {\n distance = HomeComponent.ins.sldLeftOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldLeftOverhang.maxValue) {\n distance = HomeComponent.ins.sldLeftOverhang.maxValue;\n }\n HomeComponent.ins.sldLeftOverhang.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n if (\n event.object.position.x >\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.maxValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.maxValue;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.minValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n }\n let distance = HomeComponent.ins.sldRightOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldRightOverhang.minValue) {\n distance = HomeComponent.ins.sldRightOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldRightOverhang.maxValue) {\n distance = HomeComponent.ins.sldRightOverhang.maxValue;\n }\n HomeComponent.ins.sldRightOverhang.setValue(distance);\n } else if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.SPAN) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n if (event.object.position.x > HomeComponent.ins.sldSpan.maxValue / 2) {\n event.object.position.x = HomeComponent.ins.sldSpan.maxValue / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < HomeComponent.ins.sldSpan.minValue / 2) {\n event.object.position.x = HomeComponent.ins.sldSpan.minValue / 2;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n }\n let distance = HomeComponent.ins.sldSpan.currentValue;\n let fit = 0;\n if (obj.userData.left) {\n if (pos.x == UI.span / 2) {\n return;\n }\n // Existing building\n if (UI.structureType == 0) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit =\n distance / 2 -\n (startMatrix.elements[14] + UI.existingWidth1 / 2) / 2;\n distance = distance - fit;\n }\n }\n // Fly over, Back fly over\n else if (UI.structureType == 1 || UI.structureType == 2) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit =\n distance / 2 -\n (startMatrix.elements[14] +\n UI.existingWidth1 / 2 +\n HomeComponent.ins.existingWallManager.geo_existingWallL1.width +\n UI.overhangBack) /\n 2;\n distance = distance - fit;\n }\n }\n //Fascia\n else if (\n UI.structureType == 3 ||\n UI.structureType == 5 ||\n UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit =\n distance / 2 -\n (startMatrix.elements[14] +\n UI.existingWidth1 / 2 -\n UI.eaveWidth) /\n 2;\n distance = distance - fit;\n }\n }\n //Free standing\n else if (UI.structureType == 4) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit = distance / 2 - startMatrix.elements[14] / 2;\n distance = distance - fit;\n }\n }\n } else {\n if (\n UI.structureType == 4 &&\n UI.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n distance = -pos.x * 2;\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n }\n distance = Math.round(distance / 100) * 100;\n\n if (distance < HomeComponent.ins.sldSpan.minValue) {\n distance = HomeComponent.ins.sldSpan.minValue;\n }\n if (distance > HomeComponent.ins.sldSpan.maxValue) {\n distance = HomeComponent.ins.sldSpan.maxValue;\n }\n if (obj.userData.left) {\n event.object.position.x = distance / 2;\n }\n HomeComponent.ins.sldSpan.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < UI.span / 2) {\n event.object.position.x = UI.span / 2;\n }\n if (\n event.object.position.x >\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.maxValue\n ) {\n event.object.position.x =\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.maxValue;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.minValue\n ) {\n event.object.position.x =\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > UI.span / 2) {\n event.object.position.x = UI.span / 2;\n }\n }\n let distance = HomeComponent.ins.sldMultiSpan.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance / 100) * 100;\n\n if (distance < HomeComponent.ins.sldMultiSpan.minValue) {\n distance = HomeComponent.ins.sldMultiSpan.minValue;\n }\n if (distance > HomeComponent.ins.sldMultiSpan.maxValue) {\n distance = HomeComponent.ins.sldMultiSpan.maxValue;\n }\n HomeComponent.ins.sldMultiSpan.setValue(distance);\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 500;\n if (\n event.object.position.x <\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.maxValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.maxValue;\n }\n if (\n event.object.position.x >\n UI.span / 2 + UI.overhangFront + UI.multiSpan\n ) {\n event.object.position.x = UI.span / 2 + UI.overhangFront + UI.multiSpan;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.span / 2 + UI.overhangFront + UI.multiSpan\n ) {\n event.object.position.x =\n UI.span / 2 + UI.overhangFront + UI.multiSpan;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.minValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.minValue;\n }\n }\n let distance = HomeComponent.ins.sldRightCutVertical.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldRightCutVertical.minValue) {\n distance = HomeComponent.ins.sldRightCutVertical.minValue;\n }\n if (distance > HomeComponent.ins.sldRightCutVertical.maxValue) {\n distance = HomeComponent.ins.sldRightCutVertical.maxValue;\n }\n HomeComponent.ins.sldRightCutVertical.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n event.object.position.z = 0;\n event.object.position.y = 0;\n const pos = obj.position.clone();\n if (event.object.position.x < UI.span / 2 + UI.multiSpan) {\n event.object.position.x = UI.span / 2 + UI.multiSpan;\n }\n if (\n event.object.position.x >\n UI.span / 2 + UI.multiSpan + HomeComponent.ins.sldFrontOverhang.maxValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.multiSpan +\n HomeComponent.ins.sldFrontOverhang.maxValue;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.span / 2 +\n UI.multiSpan +\n HomeComponent.ins.sldFrontOverhang.minValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.multiSpan +\n HomeComponent.ins.sldFrontOverhang.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > UI.span / 2 + UI.multiSpan) {\n event.object.position.x = UI.span / 2 + UI.multiSpan;\n }\n }\n let distance = HomeComponent.ins.sldFrontOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldFrontOverhang.minValue) {\n distance = HomeComponent.ins.sldFrontOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldFrontOverhang.maxValue) {\n distance = HomeComponent.ins.sldFrontOverhang.maxValue;\n }\n HomeComponent.ins.sldFrontOverhang.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BACK_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (\n event.object.position.x <\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.maxValue\n ) {\n event.object.position.x =\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.maxValue;\n }\n if (event.object.position.x > -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.minValue\n ) {\n event.object.position.x =\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.minValue;\n }\n }\n let distance = HomeComponent.ins.sldBackOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldBackOverhang.minValue) {\n distance = HomeComponent.ins.sldBackOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldBackOverhang.maxValue) {\n distance = HomeComponent.ins.sldBackOverhang.maxValue;\n }\n HomeComponent.ins.sldBackOverhang.setValue(distance);\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (\n event.object.position.x <\n -HomeComponent.ins.sldLeftCutVertical.maxValue / 2\n ) {\n event.object.position.x =\n -HomeComponent.ins.sldLeftCutVertical.maxValue / 2;\n }\n if (event.object.position.x > UI.rakeCutLeftVer / 2) {\n event.object.position.x = UI.rakeCutLeftVer / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < UI.rakeCutLeftVer / 2) {\n event.object.position.x = UI.rakeCutLeftVer / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n -HomeComponent.ins.sldLeftCutVertical.minValue / 2\n ) {\n event.object.position.x =\n -HomeComponent.ins.sldLeftCutVertical.minValue / 2;\n }\n }\n let distance = HomeComponent.ins.sldLeftCutVertical.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldLeftCutVertical.minValue) {\n distance = HomeComponent.ins.sldLeftCutVertical.minValue;\n }\n if (distance > HomeComponent.ins.sldLeftCutVertical.maxValue) {\n distance = HomeComponent.ins.sldLeftCutVertical.maxValue;\n }\n HomeComponent.ins.sldLeftCutVertical.setValue(distance);\n }\n }\n}\nexport function getBeamEndCapCode(endCapPreCode, endCapColorCode) {\n const availableCodes = [\n \"BSEC110B\",\n \"BSEC110C\",\n \"BSEC110MM\",\n \"BSEC110M\",\n \"BSEC110SM\",\n \"BSEC110W\",\n \"BSCE150B\",\n \"BSCE150C\",\n \"BSCE150P\",\n \"BSCE150W\",\n \"BSEC160B\",\n \"BSEC160C\",\n \"BSEC160MM\",\n \"BSEC160M\",\n \"BSEC160SM\",\n \"BSEC160W\",\n \"BSCE200B\",\n \"BSCE200C\",\n \"BSCE200W\",\n \"BSEC210B\",\n \"BSEC210C\",\n \"BSEC210MM\",\n \"BSEC210M\",\n \"BSEC210SM\",\n \"BSEC210W\",\n \"BSEC260B\",\n \"BSEC260C\",\n \"BSEC260MM\",\n \"BSEC260M\",\n \"BSEC260SM\",\n \"BSEC260W\",\n ];\n let code = `${endCapPreCode}${endCapColorCode}`;\n\n // Paperbark some time = P and sometime = M\n if (!availableCodes.find((el) => el == code)) {\n code = `${endCapPreCode}P`;\n }\n if (!availableCodes.find((el) => el == code)) {\n code = `${endCapPreCode}SM`;\n }\n\n return code;\n}\n// Rafter always 160\nexport function getRafterBeamEndCapCode(beamSize = 160, isTop = false) {\n if (isTop) {\n let colorCode = HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode;\n if (colorCode == \"M\" && beamSize == 160) {\n colorCode = \"P\";\n }\n\n return `BSA${beamSize}15${colorCode}`;\n } else {\n let colorCode = HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode;\n if (colorCode == \"M\" && beamSize == 160) {\n colorCode = \"P\";\n }\n\n return `BSAGB${beamSize}${colorCode}`;\n }\n}\nexport const utils = {\n tan(degrees: number): number {\n return this.round(Math.tan(this.degreesToRadians(degrees)));\n },\n degreesToRadians(degrees: number) {\n var pi = Math.PI;\n return this.round(degrees * (pi / 180));\n },\n round(num: number): number {\n return parseFloat(num.toFixed(3));\n },\n getDimensionValue(value: number) {\n //return parseFloat(`${value/1000}`).toFixed(2) + 'm';\n return Math.round(value).toString(); //parseFloat(`${value/1000}`).toFixed(3);\n },\n getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n },\n};\n","import { Mesh, MeshBasicMaterial, Object3D, DoubleSide, Vector3, Shape, ShapeBufferGeometry } from \"three\";\nimport { utils } from \"../core/utils\";\n\nexport default class ArrowControl extends Mesh {\n container: Object3D\n options: any\n mat: MeshBasicMaterial\n\n constructor(container, options: {\n pos: Vector3,\n userData: any,\n rotation?: Vector3\n }){\n let arrowLength = 500;\n let angle = 20;\n let y = utils.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0, 0,);\n shape1.lineTo(arrowLength, y);\n shape1.lineTo(arrowLength, -y);\n shape1.closePath();\n const geo = new ShapeBufferGeometry(shape1);\n geo.translate( - arrowLength, 0, 0)\n const mat = new MeshBasicMaterial({ color: 0xffff00, side: DoubleSide });\n super(geo, mat)\n\n this.position.set(options.pos.x, options.pos.y, options.pos.z)\n if(options.rotation){\n this.rotateX(options.rotation.x)\n this.rotateY(options.rotation.y)\n this.rotateZ(options.rotation.z)\n }\n\n this.userData = options.userData;\n container.add(this)\n\n this.mat = mat;\n this.container = container\n this.options = options\n }\n}","import { Mesh, MeshBasicMaterial, Object3D, DoubleSide, Vector3, Shape, ShapeBufferGeometry } from \"three\";\nimport { utils } from \"../core/utils\";\n\nexport default class ClickControl extends Mesh {\n container: Object3D\n options: any\n mat: MeshBasicMaterial\n\n constructor(container, options: {\n pos: Vector3,\n userData: any,\n rotation?: Vector3\n }){\n let arrowLength = 500;\n let angle = 30;\n let y = utils.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0,0);\n shape1.lineTo(0 , y / 2);\n shape1.lineTo(arrowLength / 2 , y / 2);\n shape1.lineTo(arrowLength / 2 , y);\n shape1.lineTo(3 / 2 * arrowLength , 0);\n shape1.lineTo(arrowLength / 2 , - y);\n shape1.lineTo(arrowLength / 2 , - y / 2);\n shape1.lineTo(0 , - y / 2);\n shape1.closePath();\n const geo = new ShapeBufferGeometry(shape1);\n const mat = new MeshBasicMaterial({ color: 0xffff00, side: DoubleSide });\n super(geo, mat)\n\n this.position.set(options.pos.x, options.pos.y, options.pos.z)\n if(options.rotation){\n this.rotateX(options.rotation.x)\n this.rotateY(options.rotation.y)\n this.rotateZ(options.rotation.z)\n }\n\n this.userData = options.userData;\n container.add(this)\n\n this.mat = mat;\n this.container = container\n this.options = options\n }\n}","import { BoxBufferGeometry, Mesh } from \"three\"\nimport { GeometryManager } from \"../core/geometry.manager\";\nimport { MaterialManager } from \"../core/material.manager\";\nimport { GeometryInfo } from \"src/app/core/models\";\nimport BaseUIControlEntity from \"./base.model\"\n\nexport class DeleteControl extends BaseUIControlEntity {\n geo: BoxBufferGeometry\n lineGeometry: GeometryInfo\n\n draw(){\n const size = 200;\n this.lineGeometry = GeometryManager.Instance().getUIControlLine();\n const deleteMaterial = MaterialManager.Instance().HIDDEN_UI_CONTROL;\n const lineMaterial = MaterialManager.Instance().HIGHLIGHT_DIMENSION_TEXT;\n this.geo = new BoxBufferGeometry(size, 10, size)\n this.mesh = new Mesh(this.geo, deleteMaterial)\n this.mesh.userData = this.options.userData\n this.mesh.position.set(this.position[0], this.position[1], this.position[2])\n if(this.rotation){\n this.mesh.rotateY(this.rotation.x);\n this.mesh.rotateY(this.rotation.y);\n this.mesh.rotateZ(this.rotation.z);\n }\n this.mesh.renderOrder = 0\n this.mesh.visible = this.visible\n\n let line1 = new Mesh(this.lineGeometry.geometry, lineMaterial);\n line1.scale.setX(size * Math.sqrt(2) / this.lineGeometry.length);\n line1.position.set(this.position[0], this.position[1], this.position[2]);\n line1.rotateX(Math.PI / 2);\n line1.rotateZ(Math.PI / 4);\n\n let line2 = line1.clone();\n line2.rotateZ(Math.PI / 2);\n\n this.container.add(this.mesh, line1, line2)\n }\n}","import { Color, Vector3, Group, Mesh, MeshBasicMaterial, Object3D, Shape, ShapeBufferGeometry, TextBufferGeometry } from \"three\";\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { MaterialManager } from \"../core/material.manager\";\nimport { GeometryInfo } from \"src/app/core/models\";\nimport SelectionManager from \"../core/selection.manager\";\nimport { utils } from \"../core/utils\";\nimport { GeometryManager } from \"../core/geometry.manager\";\n\nexport interface AddDimensionOptions {\n container: Object3D,\n start: {x: number, y: number, z: number},\n end: {x: number, y: number, z: number},\n textPos: {x: number, y: number, z: number},\n linePos: {x: number, y: number, z: number},\n lineLength: number;\n views: any,\n allowDrag: boolean,\n textParameter: any,\n labelType: string,\n fitZ: number,\n hasTextClone:boolean,\n axis: string,\n onDragCallback: (obj: Mesh) => void,\n onDragStartCallback: (obj: Mesh) => void,\n subtype?: string,\n textCloneUserData?: {},\n textCloneRotation?: Vector3,\n textCloneVisible?: boolean,\n bayNum?: number,\n textUserData?: {},\n textRotation?: {x: number, y: number, z: number},\n side?: number,\n visible?: boolean\n}\n\nexport default class Dimension extends Group {\n options: AddDimensionOptions\n mat: MeshBasicMaterial\n lineGeometry: GeometryInfo\n lineCapGeo: GeometryInfo\n meshText: Mesh\n meshBayNo: Mesh\n meshLine: Mesh\n meshCap1: Mesh\n meshCap2: Mesh\n meshTextCover: Mesh\n meshTextClone: Mesh\n meshArrow1: Mesh\n meshArrow2: Mesh\n\n static create(options: AddDimensionOptions){\n return new Dimension(options)\n }\n\n constructor(options: AddDimensionOptions){\n super()\n if(!options){\n return this;\n }\n\n this.lineGeometry = GeometryManager.Instance().getDimensionLine();\n this.lineCapGeo = GeometryManager.Instance().getDimensionCap();\n this.options = options\n\n this.mat = MaterialManager.Instance().DIMENSION_TEXT.clone();\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.mat);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: this.options.views };\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.mat);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: this.options.views };\n\n if(this.options.axis === 'x'){\n cap1.position.setX( this.options.linePos.x - this.options.lineLength/2 );\n cap2.position.setX( this.options.linePos.x + this.options.lineLength/2 );\n cap1.position.setY(this.options.linePos.y);\n cap2.position.setY(this.options.linePos.y);\n }\n \n let line = new Mesh(this.lineGeometry.geometry, this.mat);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: this.options.views };\n line.scale.setX( this.options.lineLength / this.lineGeometry.length);\n line.position.set( this.options.linePos.x, this.options.linePos.y, this.options.linePos.z)\n\n let textStr = utils.getDimensionValue(this.options.lineLength);\n const textGeo = new TextBufferGeometry(textStr, this.options.textParameter);\n textGeo.center();\n\n let text = new Mesh(textGeo, this.options.allowDrag ? MaterialManager.Instance().HIGHLIGHT_DIMENSION_TEXT : this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: this.options.views };\n if(this.options.textUserData){\n text.userData = this.options.textUserData;\n }\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n if(this.options.textCloneUserData && this.options.textCloneUserData['rotation']){\n text.userData.rotation = this.options.textCloneUserData['rotation']\n }\n text.position.set( this.options.textPos.x, this.options.textPos.y, this.options.textPos.z);\n \n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ, this.options.bayNum);\n this.add(textCover);\n this.meshTextCover = textCover;\n } else {\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ);\n this.add(textCover);\n this.meshTextCover = textCover;\n }\n\n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n const textGeoBayNo = new TextBufferGeometry(`#${this.options.bayNum + 1}`, this.options.textParameter);\n textGeoBayNo.center();\n\n let text = new Mesh(textGeoBayNo, this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: `#${this.options.bayNum + 1}`, views: [] };\n\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n if(this.options.textCloneUserData && this.options.textCloneUserData['rotation']){\n text.userData.rotation = this.options.textCloneUserData['rotation']\n }\n text.position.set( this.options.textPos.x, - this.options.textPos.y, this.options.textPos.z);\n\n this.meshBayNo = text\n this.add(this.meshBayNo);\n }\n if(this.options.subtype){\n cap1.userData['subtype'] = this.options.subtype;\n cap2.userData['subtype'] = this.options.subtype;\n line.userData['subtype'] = this.options.subtype;\n text.userData['subtype'] = this.options.subtype;\n }\n if(this.options.hasTextClone){\n let textClone = text.clone();\n textClone.userData = {...this.options.textCloneUserData, isTextClone: true};\n textClone.rotation.set( this.options.textCloneRotation.x, this.options.textCloneRotation.y, this.options.textCloneRotation.z);\n textClone.visible = this.options.textCloneVisible;\n this.meshTextClone = textClone;\n this.add(this.meshTextClone);\n }\n this.meshText = text;\n this.meshLine = line;\n this.meshCap1 = cap1;\n this.meshCap2 = cap2;\n\n this.add(this.meshText, this.meshLine, this.meshCap1, this.meshCap2);\n // this.add(text, line, cap1, cap2);\n this.addArrow();\n this.userData.groupType = this.options.labelType\n if(options.side != null && options.side != undefined){\n this.userData.side = options.side\n }\n if(options.bayNum !== undefined){\n this.userData.bayNum = options.bayNum\n }\n this.userData.views = this.options.views || []\n if(!this.options.visible){\n this.visible = this.options.visible\n }\n this.options.container.add(this);\n }\n \n update(options: AddDimensionOptions){\n this.options = options;\n if(this.options.axis === 'x'){\n this.meshCap1.position.setX( this.options.linePos.x - this.options.lineLength/2 );\n this.meshCap2.position.setX( this.options.linePos.x + this.options.lineLength/2 );\n this.meshCap1.position.setY(this.options.linePos.y);\n this.meshCap2.position.setY(this.options.linePos.y);\n }\n\n this.meshLine.scale.setX( this.options.lineLength / this.lineGeometry.length);\n this.meshLine.position.set( this.options.linePos.x, this.options.linePos.y, this.options.linePos.z)\n\n let textStr = utils.getDimensionValue(this.options.lineLength);\n const textGeo = new TextBufferGeometry(textStr, this.options.textParameter);\n textGeo.center();\n\n let text = new Mesh(textGeo, this.options.allowDrag ? MaterialManager.Instance().HIGHLIGHT_DIMENSION_TEXT : this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: this.options.views };\n if(this.options.textUserData){\n text.userData = this.options.textUserData;\n }\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n text.position.set( this.options.textPos.x, this.options.textPos.y, this.options.textPos.z);\n \n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ, this.options.bayNum);\n this.meshTextCover = textCover;\n } else {\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ);\n this.meshTextCover = textCover;\n }\n\n this.meshText = text;\n this.children = this.children.filter(el => el.userData.type != GEOMETRY_TYPE.DIMENSION_TEXT && el.userData.type != GEOMETRY_TYPE.TEXT_COVER);\n this.add(this.meshText, this.meshTextCover)\n\n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n const textGeoBayNo = new TextBufferGeometry(`#${this.options.bayNum + 1}`, this.options.textParameter);\n textGeoBayNo.center();\n\n let text = new Mesh(textGeoBayNo, this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: `#${this.options.bayNum + 1}`, views: [] };\n\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n if(this.options.textCloneUserData && this.options.textCloneUserData['rotation']){\n text.userData.rotation = this.options.textCloneUserData['rotation']\n }\n text.position.set( this.options.textPos.x, - this.options.textPos.y, this.options.textPos.z);\n\n this.meshBayNo = text\n this.add(this.meshBayNo);\n }\n\n if(this.options.hasTextClone){\n let textClone = text.clone();\n textClone.userData = {...this.options.textCloneUserData, isTextClone: true};\n textClone.rotation.set( this.options.textCloneRotation.x, this.options.textCloneRotation.y, this.options.textCloneRotation.z);\n textClone.visible = this.options.textCloneVisible;\n this.meshTextClone = textClone;\n this.children = this.children.filter(el => !el.userData.isTextClone);\n this.add(this.meshTextClone)\n }\n\n if(this.options.lineLength >= 300){\n this.meshArrow1.visible = true;\n this.meshArrow2.visible = true;\n } else {\n this.meshArrow1.visible = false;\n this.meshArrow2.visible = false;\n }\n\n if(this.options.axis === 'x'){\n this.meshArrow1.position.set( this.options.linePos.x - this.options.lineLength / 2, 0, 0);\n this.meshArrow2.position.set( this.options.linePos.x + this.options.lineLength / 2, 0, 0);\n this.meshArrow1.position.setY(this.options.linePos.y);\n this.meshArrow2.position.setY(this.options.linePos.y);\n }\n }\n\n onHover(intersects){\n // if(intersects.find(o => o.object.uuid === this.uuid)){\n // (this.material as MeshLambertMaterial).opacity = 1\n // HomeComponent.ins.renderStatic()\n // }\n // else{\n // // (this.material as MeshLambertMaterial).color = new Color('green')\n // //this.visible = false\n \n // (this.material as MeshLambertMaterial).opacity = 0\n // HomeComponent.ins.renderStatic()\n // }\n }\n onClick(intersects){\n // const obj = intersects.find(o => o.object.uuid === this.uuid)\n // if(obj){\n // HomeComponent.ins.dialogRakeCut.show(true, obj.object?.userData?.side)\n // }\n }\n\n addArrow(){\n let arrowLength = 150;\n let angle = 15;\n\n // if(this.options.lineLength < 300){\n // return ;\n // }\n \n let y = utils.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0, 0,);\n shape1.lineTo(arrowLength, y);\n shape1.lineTo(arrowLength, -y);\n shape1.closePath();\n const mat = MaterialManager.Instance().DIMENSION_TEXT.clone();\n \n let arrow1 = new Mesh(new ShapeBufferGeometry(shape1), mat);\n arrow1.userData = { views: this.options.views, type: GEOMETRY_TYPE.DIMENSION_CAP, dimType: this.options.labelType, right: true };\n let arrow2 = arrow1.clone();\n arrow2.rotateZ(Math.PI);\n arrow2.userData = { views: this.options.views, type: GEOMETRY_TYPE.DIMENSION_CAP, dimType: this.options.labelType, left: true};\n\n if( this.options.labelType === DIMENSION_LABEL_TYPE.BAY){\n arrow1.userData['bayNum'] = this.options.bayNum;\n arrow2.userData['bayNum'] = this.options.bayNum;\n }\n if(this.options.axis === 'x'){\n arrow1.position.set( this.options.linePos.x - this.options.lineLength / 2, 0, 0);\n arrow2.position.set( this.options.linePos.x + this.options.lineLength / 2, 0, 0);\n arrow1.position.setY(this.options.linePos.y);\n arrow2.position.setY(this.options.linePos.y);\n }\n\n if(this.options.allowDrag){\n mat.color = new Color('yellow');\n }\n if(this.options.subtype){\n arrow1.userData['subtype'] = this.options.subtype;\n arrow2.userData['subtype'] = this.options.subtype;\n }\n\n if(this.options.lineLength < 300){\n arrow1.visible = false;\n arrow2.visible = false;\n }\n\n this.meshArrow1 = arrow1;\n this.meshArrow2 = arrow2;\n\n this.add(this.meshArrow1, this.meshArrow2)\n // this.add(arrow1, arrow2)\n\n if(this.options.allowDrag){\n SelectionManager.ins.addEventListener('dragstart', this.options.onDragStartCallback, this.meshArrow1)\n SelectionManager.ins.addEventListener('dragstart', this.options.onDragStartCallback, this.meshArrow2)\n\n SelectionManager.ins.addEventListener('drag', this.options.onDragCallback, this.meshArrow1)\n SelectionManager.ins.addEventListener('drag', this.options.onDragCallback, this.meshArrow2)\n }\n }\n}","import { BoxBufferGeometry, Color, Mesh, MeshLambertMaterial, Object3D } from \"three\";\nimport { HIGHLIGHT_BOX_COLOR } from \"src/app/app.config\";\nimport { MOUSE_EVENT } from \"src/app/app.constants\";\nimport { HomeComponent } from \"../containers/home\";\nimport SelectionManager from \"../core/selection.manager\";\nimport { UI } from \"../core/ui\";\n\nexport default class HighLightBox extends Mesh {\n container: Object3D\n options: any\n mat: MeshLambertMaterial\n\n constructor(container, options: {\n min: {x: number, y: number, z: number},\n max: {x: number, y: number, z: number},\n userData: any\n }){\n const geo = new BoxBufferGeometry(100, 120, 100)\n geo.translate(0,50,0)\n const mat = new MeshLambertMaterial({ color: HIGHLIGHT_BOX_COLOR.GREEN, transparent: true, opacity: 0 })\n super(geo, mat)\n\n const width = options.max.x - options.min.x\n const _length = options.max.z - options.min.z\n const height = Math.abs(options.max.y - options.min.y)\n\n this.position.set(options.min.x + width/2, options.min.y, options.min.z + _length/2)\n this.scale.set(width/100, height / 120 > 0 ? height / 120 : 1, _length/100)\n \n\n this.userData = { ...options.userData, type: 'HIGHLIGHT_BOX' }\n container.add(this)\n\n SelectionManager.ins.addEventListener(MOUSE_EVENT.HOVER, (intersects) => {\n this.onHover(intersects)\n })\n SelectionManager.ins.addEventListener(MOUSE_EVENT.CLICK, (intersects) => {\n this.onClick(intersects)\n })\n\n this.mat = mat;\n this.container = container\n this.options = options\n }\n \n update(){\n this.position.set(this.options.x, this.options.y, this.options.z)\n }\n\n onHover(intersects){\n if(intersects.length == 0){\n if(!this.material || (this.material as MeshLambertMaterial).opacity == 0){\n return\n }\n }\n if(intersects.find(o => o.object.uuid === this.uuid)){\n if((this.material as MeshLambertMaterial).opacity == 1){\n return\n }\n (this.material as MeshLambertMaterial).opacity = 1\n HomeComponent.ins.renderStatic()\n }\n else{\n // (this.material as MeshLambertMaterial).color = new Color('green')\n //this.visible = false\n if((this.material as MeshLambertMaterial).opacity == 0){\n return\n }\n \n (this.material as MeshLambertMaterial).opacity = 0\n HomeComponent.ins.renderStatic()\n }\n }\n onClick(intersects){\n if(!UI.enableControl) {\n return\n }\n const obj = intersects.find(o => o.object.uuid === this.uuid)\n if(obj){\n if(obj.object?.userData?.side){\n HomeComponent.ins.dialogRakeCut.show(true, obj.object?.userData?.side)\n } else if (obj.object?.userData?.wallSide){\n HomeComponent.ins.dialogComfirm.show(true, obj.object?.userData?.wallSide)\n }\n }\n }\n}","import { Group, Mesh, MeshPhongMaterial, Vector3} from \"three\";\nimport { GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { GeometryInfo } from \"src/app/core/models\";\n\nexport interface UpstandBraketOptions {\n container: Group, \n geoBraket_1: GeometryInfo, \n geoBraket_2: GeometryInfo, \n material: MeshPhongMaterial,\n height: number,\n position: Vector3,\n rotation?: Vector3,\n userData?: {}\n}\n\n\nexport default class UpstandBraket extends Group{\n options: UpstandBraketOptions\n\n static create(options: UpstandBraketOptions){\n return new UpstandBraket(options)\n }\n\n constructor(options: UpstandBraketOptions){\n super()\n this.options = options;\n let braket1 = new Mesh(this.options.geoBraket_1.geometry, this.options.material);\n braket1.translateZ(this.options.geoBraket_2.height / 4 + this.options.geoBraket_1.width / 2);\n braket1.scale.setY(this.options.height / this.options.geoBraket_1.length);\n this.add(braket1)\n\n let braket2 = new Mesh(this.options.geoBraket_2.geometry, this.options.material);\n this.add(braket2)\n\n this.position.set( this.options.position.x, this.options.position.y, this.options.position.z);\n if(this.options.userData){\n this.userData = this.options.userData;\n } else {\n this.userData = { type: GEOMETRY_TYPE.UPSTAND_BRAKET};\n }\n\n this.options.container.add(this);\n }\n}","import { Vector3, Object3D, SpriteMaterial } from \"three\"\nimport { MaterialManager } from \"../core/material.manager\"\n\nexport default class BaseUIControlEntity{\n public size: Array\n public position: Array\n public container: Object3D\n public material: SpriteMaterial\n public rotation: Vector3\n public options\n public mesh: Object3D\n public visible = true;\n\n constructor(size: Array, position: Array, options, visible = true){\n this.size = size\n this.position = position\n this.container = options.container\n this.material = options.material ? options.material : MaterialManager.Instance().UI_CONTROL;\n this.rotation = options.rotation ? options.rotation : new Vector3;\n this.options = options\n this.visible = visible\n this.draw()\n }\n\n draw(){}\n}","import { Sprite } from \"three\"\nimport BaseUIControlEntity from \"./base.model\"\n\nexport class UIControl extends BaseUIControlEntity {\n draw(){\n this.mesh = new Sprite(this.material)\n this.mesh.userData = this.options.userData\n let scaleUniform = 1\n if(this.material.sizeAttenuation) {\n scaleUniform = 5000\n }\n\n this.mesh.scale.set(this.size[0] * scaleUniform, this.size[1] * scaleUniform, this.size[2] * scaleUniform)\n this.mesh.position.set(this.position[0], this.position[1], this.position[2])\n this.mesh.renderOrder = 0\n this.mesh.visible = this.visible\n this.container.add(this.mesh)\n }\n}","import { Component, ViewChild, ElementRef, NgZone } from '@angular/core';\nimport { Util } from './core/utils';\nimport { CONFIG, INIT } from './app.config';\nimport { Router } from '@angular/router';\nimport { AuthenticationService } from './services';\nimport { User } from './models';\n\ndeclare var $: any;\n\n@Component({\n selector: 'app',\n templateUrl: './app.component.html',\n styleUrls: ['./app.component.scss']\n})\nexport class AppComponent {\n public env = CONFIG;\n\n private utils: Util;\n private frameId: number = null;\n public loadCompleted = false;\n currentUser: User;\n public constructor(\n private ngZone: NgZone,\n private router: Router,\n private authenticationService: AuthenticationService\n ) {\n this.utils = new Util();\n this.authenticationService.currentUser.subscribe(\n x => (this.currentUser = x)\n );\n }\n logout() {\n this.authenticationService.logout();\n this.router.navigate(['/login']);\n }\n public ngAfterViewInit(): void {\n\n }\n public ngOnDestroy() {\n\n }\n}\n","
\n \n
\n\n","export const APP_VERSION = \"v2.0.9\";\nexport const RELEASE_DATE = \"2025-02-24\";\nimport { BUILDING_SIDE, CONNECTION_TYPE } from \"./app.constants\";\n\nexport const CONFIG = {\n eaveWidth: {\n min: 50,\n max: 900,\n default: 600,\n },\n eaveHeight: {\n min: 2000,\n max: 6000,\n default: 2400,\n },\n fasciaDepth: {\n min: 150,\n max: 400,\n default: 190,\n },\n baySize: {\n min: 1500,\n max: 8000,\n default: 3810,\n },\n span: {\n min: 1000,\n max: 8000,\n default: 4000,\n },\n multiSpan: {\n min: 0,\n max: 8000,\n default: 0,\n },\n height: {\n min: 1000,\n max: 5000,\n free_standing_max: 4000,\n default: 2500,\n },\n frontOverhang: {\n min: 100,\n max: 2000,\n default: 200,\n },\n backOverhang: {\n min: 0,\n max: 2000,\n default: 0,\n },\n leftOverhang: {\n min: 0,\n max: 2000,\n default: 0,\n },\n rightOverhang: {\n min: 0,\n max: 2000,\n default: 0,\n },\n flyOverBracketHeight: {\n min: 300,\n max: 700,\n default: 500,\n },\n fasciaUpstandBrackets: {\n min: 150,\n max: 600,\n default: 0,\n },\n noOfBay: {\n min: 1,\n max: 30,\n default: 1,\n },\n patiosPitch: {\n default: 2,\n },\n existingRoofPitch: {\n default: 22.5,\n },\n rakeCutVertical: {\n min: 500,\n max: 8000,\n default: 500,\n },\n rakeCutHorizontal: {\n min: 500,\n max: 8000,\n default: 500,\n },\n roofOverallLength: {\n min: 1000,\n max: 80000,\n default: 0,\n },\n roofOverallWidth: {\n min: 0,\n max: 20000,\n default: 0,\n },\n minHeight: {\n min: 0,\n max: 5000,\n default: 0,\n },\n existingLength: {\n min: 1500,\n max: 80000,\n default: 10000,\n },\n existingLength2: {\n min: 0,\n max: 20000,\n default: 0,\n },\n existingWidth: {\n min: 0,\n max: 20000,\n default: 0,\n },\n existingWidth2: {\n min: 0,\n max: 20000,\n default: 0,\n },\n columnType: {\n default: 0,\n },\n};\n\nexport const GEOMETRY_CATEGORY = {\n PATIOS: \"PATOIS\",\n};\nexport const GEOMETRY_TYPE = {\n ROOF_COVER: \"ROOF_COVER\",\n EXISTING_WALL: \"EXISTING_WALL\",\n EAVE: \"EAVE\",\n FASCIA: \"FASCIA\",\n EXISTING_ROOF: \"EXISTING_ROOF1\",\n FLY_OVER_BRACKET: \"FLY_OVER_BRACKET\",\n SUPERIOR_BEAM: \"SUPERIOR_BEAM\",\n SUPERIOR_INTERNAL_BEAM: \"SUPERIOR_INTERNAL_BEAM\",\n SUPERIOR_RAFTER_BEAM: \"SUPERIOR_RAFTER_BEAM\",\n SUPERIOR_BEAM_END_CAP: \"SUPERIOR_BEAM_END_CAP\",\n SUPERIOR_RAFTER_BEAM_END_CAP: \"SUPERIOR_RAFTER_BEAM_END_CAP\",\n SUPERIOR_POST: \"SUPERIOR_POST\",\n SUPERIOR_CENTER_POST: \"SUPERIOR_CENTER_POST\",\n ROOF_PANEL: \"ROOF_PANEL\",\n ROOF_PANEL_BASE: \"ROOF_PANEL_BASE\",\n ROOF_PANEL_BARGE_CAPPING: \"ROOF_PANEL_BARGE_CAPPING\",\n ROOF_PANEL_DRIP_BARGE_CAPPING: \"ROOF_PANEL_DRIP_BARGE_CAPPING\",\n ZFLASHING: \"ZFLASHING\",\n RECEIVER_CHANEL: \"RECEIVER_CHANEL\",\n GUTTER: \"GUTTER\",\n GUTTER_PATIOS: \"GUTTER_PATIOS\",\n ROOF_PATIOS: \"ROOF_PATIOS\",\n RIDGE_CAPPING: \"RIDGE_CAPPING\",\n DIMENSION: \"DIMENSION\",\n DIMENSION_CAP: \"DIMENSION_CAP\",\n DIMENSION_LINE: \"DIMENSION_LINE\",\n DIMENSION_LINE_RAKECUT: \"DIMENSION_LINE_RAKECUT\",\n DIRECTION_TEXT: \"DIRECTION_TEXT\",\n DIMENSION_TEXT: \"DIMENSION_TEXT\",\n MESH_OUTLINE: \"MESH_OUTLINE\",\n GROUND_BASE: \"GROUND_BASE\",\n DOWNPIPE: \"DOWNPIPE\",\n DOWNPIPE_NOZZLE: \"DOWNPIPE_NOZZLE\",\n SHEET_OUTLINE: \"SHEET_OUTLINE\",\n HIGHLIGHT_BOX: \"HIGHLIGHT_BOX\",\n TEXT_COVER: \"TEXT_COVER\",\n UPSTAND_BRAKET: \"UPSTAND_BRAKET\",\n UPSTAND_BRAKET_EXT: \"UPSTAND_BRAKET_EXT\",\n UPSTAND_BRAKET_CUTOUT: \"UPSTAND_BRAKET_CUTOUT\",\n UPSTAND_BRAKET_BEAM: \"UPSTAND_BRAKET_BEAM\",\n BEAM_OUTLINE: \"BEAM_OUTLINE\",\n INTERNAL_JOINT: \"INTERNAL_JOINT\",\n};\nexport const DIMENSION_LABEL_TYPE = {\n LENGTH_1: \"LENGTH_1\",\n LENGTH_2: \"LENGTH_2\",\n WIDTH_1: \"WIDTH_1\",\n WIDTH_2: \"WIDTH_2\",\n BAY: \"BAY\",\n RAKE_CUT_LEFT_HORIZONTAL: \"RAKE_CUT_LEFT_HORIZONTAL\",\n RAKE_CUT_LEFT_VERTICAL: \"RAKE_CUT_LEFT_VERTICAL\",\n RAKE_CUT_RIGHT_HORIZONTAL: \"RAKE_CUT_RIGHT_HORIZONTAL\",\n RAKE_CUT_RIGHT_VERTICAL: \"RAKE_CUT_RIGHT_VERTICAL\",\n FRONT_OVERHANG: \"FRONT_OVERHANG\",\n BACK_OVERHANG: \"BACK_OVERHANG\",\n LEFT_OVERHANG: \"LEFT_OVERHANG\",\n RIGHT_OVERHANG: \"RIGHT_OVERHANG\",\n SPAN: \"SPAN\",\n MULTI_SPAN: \"MULTI_SPAN\",\n EAVE_WIDTH: \"EAVE_WIDTH\",\n\n // FlyOver: Dim from ground to bottom of beam front.\n LOWER_HEIGHT_DIM: \"LOWER_HEIGHT_DIM\",\n // Braket height dim\n BRAKET_HEIGHT_DIM: \"BRAKET_HEIGHT_DIM\",\n // Dimension of existing wall height\n EAVE_HEIGHT_DIM: \"EAVE_HEIGHT_DIM\",\n // Free standing dim back.\n HIGHER_HEIGHT_DIM: \"HIGHER_HEIGHT_DIM\",\n};\nexport const HIGHLIGHT_BOX_COLOR = {\n GREEN: \"green\",\n};\nexport const DIMENSION_LOCATION = {\n FRONT_RIGHT: 1,\n PLAN_LEFT: 2,\n PLAN_RIGHT: 3,\n PLAN_BOTTOM: 4,\n LEFT_RIGHT: 5,\n RIGHT_LEFT: 6,\n};\nexport const INIT = {\n CONNECTION_TYPE: CONNECTION_TYPE.EXISTING,\n EXISTING_TYPE: BUILDING_SIDE.NONE,\n DEFAULT_BRACKET_NUMBER: 2,\n DEFAULT_BRACKET_CUTOUT_NUMBER: 2,\n};\nexport const ACTIVE_LEFT_MENU = {\n existingHouse: false,\n patiosInformation: true,\n};\nexport const PATIOS_ROOF_TYPE = {\n FLAT_ROOF: \"flat\",\n GABLE_ROOF: \"gable\",\n};\nexport const OFFSET_GUTTER_TO_WALL = 200;\nexport const STATUS_USER = [\n {\n key: \"ACTIVE\",\n text: \"Active\",\n },\n {\n key: \"DISABLE\",\n text: \"Disable\",\n },\n {\n key: \"SOFTWARE_ONLY\",\n text: \"Software Only\",\n },\n {\n key: \"ORDER_ONLY\",\n text: \"Online Ordering Only\",\n },\n];\n\nexport const PANEL_TYPE = {\n INSULATED: \"Insulated\",\n RIBSPAN: \"RibSpan\",\n};\n\nexport const STATUS_TEXT = {\n SAVE: \"Saved\",\n NEW: \"New\",\n OPEN: \"Opening\",\n COPY: \"Copying\",\n REVISE: \"Revising\",\n};\nexport const TEMPLATE = [\n {\n type: 0, // standard\n existingLength: 10000,\n existingLength2: 0,\n existingWidth1: 0,\n existingWidth2: 0,\n existingType: {\n value: 0,\n },\n baySize: 4572,\n noOfBay: 1,\n span: 2100,\n listBay: [{ index: 1, value: 4572, isCut: false }],\n cutOut: {\n value: 0,\n },\n },\n {\n type: 1, // L-shape Left\n existingLength: 10000,\n existingLength2: 0,\n existingWidth1: 3000,\n existingWidth2: 0,\n existingType: {\n value: 1,\n },\n baySize: 4572,\n noOfBay: 1,\n span: 2100,\n listBay: [{ index: 1, value: 4572, isCut: false }],\n cutOut: {\n value: 0,\n },\n },\n {\n type: 2, // L-shape Right\n existingLength: 10000,\n existingLength2: 0,\n existingWidth1: 3000,\n existingWidth2: 0,\n existingType: {\n value: 2,\n },\n baySize: 4572,\n noOfBay: 1,\n span: 2100,\n listBay: [{ index: 1, value: 4572, isCut: false }],\n cutOut: {\n value: 0,\n },\n },\n {\n type: 3, // U-shape\n existingLength: 10000,\n existingLength2: 0,\n existingWidth1: 3000,\n existingWidth2: 0,\n existingType: {\n value: 3,\n },\n baySize: 5700,\n noOfBay: 1,\n span: 2100,\n listBay: [{ index: 1, value: 6000, isCut: false }],\n cutOut: {\n value: 0,\n },\n },\n {\n type: 5, //CutOut left\n existingLength: 10000,\n existingLength2: 3000,\n existingWidth1: 3000,\n existingWidth2: 0,\n existingType: {\n value: 1,\n },\n baySize: 4500,\n span: 6000,\n noOfBay: 2,\n listBay: [\n { index: 1, value: 4500, isCut: false },\n { index: 2, value: 4500, isCut: false },\n ],\n cutOut: {\n value: 1,\n },\n },\n {\n type: 6, // Cutout Right\n existingLength: 10000,\n existingLength2: 3000,\n existingWidth1: 3000,\n existingWidth2: 0,\n existingType: {\n value: 2,\n },\n baySize: 4500,\n span: 6000,\n noOfBay: 2,\n listBay: [\n { index: 1, value: 4500, isCut: false },\n { index: 2, value: 4500, isCut: false },\n ],\n cutOut: {\n value: 1,\n },\n },\n {\n type: 7, //Cutout Left 2\n existingLength: 10000,\n existingLength2: 3000,\n existingWidth1: 3000,\n existingWidth2: 3500,\n existingType: {\n value: 1,\n },\n baySize: 4500,\n span: 6000,\n noOfBay: 2,\n listBay: [\n { index: 1, value: 4500, isCut: false },\n { index: 2, value: 4500, isCut: false },\n ],\n cutOut: {\n value: 1,\n },\n },\n {\n type: 8, //Cutout Right 2\n existingLength: 10000,\n existingLength2: 3000,\n existingWidth1: 3000,\n existingWidth2: 3500,\n existingType: {\n value: 2,\n },\n baySize: 4500,\n span: 6000,\n noOfBay: 2,\n listBay: [\n { index: 1, value: 4500, isCut: false },\n { index: 2, value: 4500, isCut: false },\n ],\n cutOut: {\n value: 1,\n },\n },\n];\n","export const EXISTING_BUILDING_CONFIG = {\n CUTOUT_ALLOW: 1500,\n CUTOUT_DEFFER_TIME_OUT: 50,\n // Offset min from top of existing height to top of patios roof\n BUILDING_HEIGHT_OFFSET: 200,\n ROOF_AND_BASE_OFFSET_X: 10, // Roof và base bị lệch\n ROOF_BASE_SUBTRACT: 60,\n BARGE_ROOF_OFFSET_Y: 20, // Khoảng cách từ roof lên barge\n BARGE_ROOF_OFFSET_X: 5, // Khoảng cách từ roof lên barge\n GUTTER_ROOF_OFFSET_Y: 15, // Khoảng cách từ roof lên barge\n GUTTER_ROOF_OFFSET_Z: 40, // Khoảng cách từ roof lên barge\n EXTRA_BRACKET_HEIGHT: 250,\n EAVE_OFFSET_BACK: 100,\n FIT_FROM_CORNER_TO_CENTER_GUTTER: 100,\n MAXIMUM_LENGTH_PER_BEAM: 9000,\n FIT_FROM_TOP_TO_CUTBEAM: 500,\n FIT_JOINT: 2.5,\n RAFTER_BEAM_SIZE: 160\n};\n\nexport const MIN_INTERNAL_BEAM_LENGTH = 200\n\nexport const RIBSPAN_PANEL_WIDTH = 310.5;\n\nexport const RIBSPAN_RECEIVER_CHANNEL_FIT = 5;\n\nexport const RIBSPAN_BARGE_FIT = 3;\n\nexport const FASCIA_BRACKET_FIT = 185.1875;\n\nexport enum RAKECUT_TYPE {\n NONE,\n ANGLE,\n STEP,\n}\n\nexport enum BUILDING_SIDE {\n NONE,\n LEFT,\n RIGHT,\n BOTH,\n}\nexport enum CUTOUT_ENABLE {\n NO,\n YES,\n}\nexport enum CONNECTION_TYPE {\n EXISTING,\n FLY_OVER,\n BLACK_FLY_OVER,\n FASCIA,\n FREE_STANDING,\n FASCIA_UPSTAND,\n BACK_FASCIA_UPSTAND,\n}\n\nexport const PANEL_DIRECTION = {\n LEFT_TO_RIGHT: false,\n RIGHT_TO_LEFT: true,\n};\nexport const MOUSE_EVENT = {\n DOWN: \"mousedown\",\n MOVE: \"mousemove\",\n UP: \"mouseup\",\n HOVER: \"hover\",\n CLICK: \"click\",\n DRAG_START: \"dragstart\",\n DRAG_END: \"dragend\",\n DRAG: \"drag\",\n};\n\nexport const OBJECT_TYPE = {\n UI_CONTROL_LEFT_RAKECUT_HORIZONTAL: \"UI_CONTROL_LEFT_RAKECUT_HORIZONTAL\",\n UI_CONTROL_LEFT_RAKECUT_VERTICAL: \"UI_CONTROL_LEFT_RAKECUT_VERTICAL\",\n UI_CONTROL_RIGHT_RAKECUT_HORIZONTAL: \"UI_CONTROL_RIGHT_RAKECUT_HORIZONTAL\",\n UI_CONTROL_RIGHT_RAKECUT_VERTICAL: \"UI_CONTROL_RIGHT_RAKECUT_VERTICAL\",\n UI_CONTROL_EDIT_WALL_LENGTH1: \"UI_CONTROL_EDIT_WALL_LENGTH1\",\n UI_CONTROL_EDIT_WALL_LENGTH2: \"UI_CONTROL_EDIT_WALL_LENGTH2\",\n UI_CONTROL_EDIT_WALL_WIDTH1: \"UI_CONTROL_EDIT_WALL_WIDTH1\",\n UI_CONTROL_EDIT_WALL_WIDTH2: \"UI_CONTROL_EDIT_WALL_WIDTH2\",\n UI_CONTROL_WIDTH1: \"UI_CONTROL_WIDTH1\",\n UI_CONTROL_WIDTH2: \"UI_CONTROL_WIDTH2\",\n UI_CONTROL_LENGTH2: \"UI_CONTROL_LENGTH2\",\n HIGHLIGHT_BOX: \"HIGHLIGHT_BOX\",\n CLICK_CONTROL_CUTOUT: \"CLICK_CONTROL_CUTOUT\",\n CUT_BEAM: \"CUT_BEAM\",\n UI_CONTROL_CUTBEAM_CONTAINER: \"UI_CONTROL_CUTBEAM_CONTAINER\"\n};\n\nexport const FIT_DIMENSION = 20\nexport const FIT_DIMENSION_FAR = 1000\nexport const FIT_DIMENSION_MEDIUM = 500\n\nexport const FIT_FLYOVER_BRAKET_ON_ROOF = 200","import { DialogAddBOMComponent } from \"./component/dialog-add-bom/dialog-add-bom.component\";\nimport { PanelBOMComponent } from \"./component/panel-bom/panel-bom.component\";\nimport { DialogBOMComponent } from \"./component/dialog-bom/dialog-bom.component\";\nimport { DialogAddCostComponent } from \"./component/dialog-add-cost/dialog-add-cost.component\";\nimport { SliderInputComponent } from \"./component/slider-input/slider-input.component\";\nimport { DropDownInputComponent } from \"./component/dropdown-input/dropdown-input.component\";\nimport { DropDownInputCustomComponent } from \"./component/dropdown-input-custom/dropdown-input-custom.component\";\nimport { SelectInputComponent } from \"./component/select-input/select-input.component\";\nimport { DialogEditBayComponent } from \"./component/dialog-edit-bay/dialog-edit-bay.component\";\nimport { DropDownColorInputComponent } from \"./component/dropdown-color-input/dropdown-color-input.component\";\nimport { SwitchInputComponent } from \"./component/switch-input/switch-input.component\";\nimport { CheckboxInputComponent } from \"./component/checkbox-input/checkbox-input.component\";\nimport { DialogRakeCutComponent } from \"./component/dialog-rakecut/dialog-rakecut.component\";\nimport { DialogDimensionComponent } from \"./component/dialog-dimension/dialog-dimension.component\";\nimport { DialogConfirmComponent } from \"./component/dialog-confirm/dialog-confirm.component\";\nimport { ToggleButtonComponent } from \"./component/toggle-button/toggle-button.component\";\n\nimport { BrowserModule } from \"@angular/platform-browser\";\nimport { BrowserAnimationsModule } from \"@angular/platform-browser/animations\";\nimport { NgModule } from \"@angular/core\";\nimport { FormsModule, ReactiveFormsModule } from \"@angular/forms\";\nimport { HttpClientModule, HTTP_INTERCEPTORS } from \"@angular/common/http\";\nimport { AppComponent } from \"./app.component\";\nimport { APP_BASE_HREF } from \"@angular/common\";\nimport { appRoutingModule } from \"./app.routing\";\nimport { JwtInterceptor, ErrorInterceptor } from \"./helpers\";\nimport { HomeComponent } from \"./containers/home\";\nimport { HomeComponent as HomeRibspanComponent } from \"src/app-ribspan/containers/home\";\nimport { LoginComponent } from \"./containers/login\";\nimport { NgZorroAntdModule, NZ_ICONS } from \"ng-zorro-antd\";\nimport { IconDefinition } from \"@ant-design/icons-angular\";\nimport * as AllIcons from \"@ant-design/icons-angular/icons\";\nimport { NZ_I18N, en_US } from \"ng-zorro-antd\";\nimport { registerLocaleData } from \"@angular/common\";\nimport { CurrencyMaskInputMode, NgxCurrencyModule } from \"ngx-currency\";\nimport en from \"@angular/common/locales/en\";\nimport { LightboxModule } from \"ngx-lightbox\";\n\nregisterLocaleData(en);\nconst antDesignIcons = AllIcons as {\n [key: string]: IconDefinition;\n};\n\nconst icons: IconDefinition[] = Object.keys(antDesignIcons).map(\n (key) => antDesignIcons[key]\n);\nexport const customCurrencyMaskConfig = {\n align: \"right\",\n allowNegative: true,\n allowZero: true,\n decimal: \".\",\n precision: 2,\n prefix: \"\",\n suffix: \"\",\n thousands: \",\",\n nullable: false,\n inputMode: CurrencyMaskInputMode.NATURAL,\n};\n@NgModule({\n declarations: [\n AppComponent,\n HomeComponent,\n HomeRibspanComponent,\n LoginComponent,\n\n DropDownInputComponent,\n ToggleButtonComponent,\n DialogConfirmComponent,\n DialogDimensionComponent,\n DialogRakeCutComponent,\n CheckboxInputComponent,\n SwitchInputComponent,\n DropDownColorInputComponent,\n DialogEditBayComponent,\n SelectInputComponent,\n DropDownInputCustomComponent,\n SliderInputComponent,\n DialogAddCostComponent,\n DialogBOMComponent,\n PanelBOMComponent,\n DialogAddBOMComponent,\n ],\n imports: [\n BrowserModule.withServerTransition({ appId: \"ng-cli-universal\" }),\n NgZorroAntdModule,\n HttpClientModule,\n ReactiveFormsModule,\n FormsModule,\n appRoutingModule,\n BrowserAnimationsModule,\n NgxCurrencyModule.forRoot(customCurrencyMaskConfig),\n LightboxModule,\n ],\n providers: [\n { provide: APP_BASE_HREF, useValue: \"/\" },\n { provide: HTTP_INTERCEPTORS, useClass: JwtInterceptor, multi: true },\n { provide: HTTP_INTERCEPTORS, useClass: ErrorInterceptor, multi: true },\n { provide: NZ_I18N, useValue: en_US },\n { provide: NZ_ICONS, useValue: icons },\n ],\n bootstrap: [AppComponent],\n})\nexport class AppModule {}\n","import { Routes, RouterModule } from '@angular/router';\n\nimport { HomeComponent } from './containers/home';\nimport { LoginComponent } from './containers/login';\nimport { HomeComponent as HomeRibspanComponent} from 'src/app-ribspan/containers/home';\n// import { AppComponent } from './app.component';\nimport { AuthGuard } from './helpers';\n\nconst routes: Routes = [\n //{ path: '', component: HomeComponent, canActivate: [AuthGuard] },\n { path: '', component: HomeComponent},\n { path: 'ribspan', component: HomeRibspanComponent},\n { path: 'login', component: LoginComponent },\n\n // otherwise redirect to home\n { path: '**', redirectTo: '' }\n];\n\nexport const appRoutingModule = RouterModule.forRoot(routes);","import { Component, Input, Output, EventEmitter } from \"@angular/core\";\n\n@Component({\n selector: \"checkbox-input\",\n template: ''\n})\nexport class CheckboxInputComponent {\n currentValue = false;\n private previousValue: boolean;\n _isDisable: boolean;\n @Input(\"disabled\") public set isDisabled(val: boolean) {\n this._isDisable = val;\n }\n @Output('onChange') onClick = new EventEmitter();\n\n private actions: Array<{\n priority: number;\n actions: Array<(previousValue: boolean, currentValue: boolean) => void>;\n }> = [];\n\n ngOnInit(): void {\n\n }\n\n public onStateChanged() {\n for (let item of this.actions) {\n item.actions.forEach(action => {\n action(this.previousValue, this.currentValue);\n });\n }\n this.onClick.emit(this);\n this.previousValue = this.currentValue;\n }\n\n public addAction(\n action: (previousValue: boolean, currentValue: boolean) => void,\n priority?: number\n ) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find(a => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n } else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n public setValue(value: boolean){\n this.currentValue = value;\n this.onStateChanged();\n }\n public setDisable(value: boolean) {\n if (value) {\n this._isDisable = true;\n }\n else {\n this.isDisabled = false;\n }\n }\n}","import { Component, EventEmitter, OnInit, Output } from \"@angular/core\";\nimport { FormBuilder, FormGroup, Validators } from \"@angular/forms\";\nimport { NzMessageService } from 'ng-zorro-antd/message';\nimport { BehaviorSubject } from \"rxjs\";\nimport { debounceTime } from 'rxjs/operators';\nimport { MaterialService } from './../../services/material.service';\nimport { PriceService } from './../../services/price.service';\n\n@Component({\n selector: \"dialog-add-bom\",\n templateUrl: \"./dialog-add-bom.component.html\",\n styleUrls: [\"./dialog-add-bom.component.scss\"],\n providers: [],\n})\nexport class DialogAddBOMComponent implements OnInit {\n @Output(\"submit\")\n _submit: EventEmitter = new EventEmitter();\n public visible = false;\n public title: string = \"Additional BOM\";\n groups = []\n inputForm: FormGroup;\n group: string = ''\n unit: string = ''\n itemNo: string = ''\n description: string = ''\n optionLists: any[] = [];\n currentOption: any = null\n searchChange$ = new BehaviorSubject('');\n get f() {\n return this.inputForm.controls;\n }\n\n constructor(\n private formBuilder: FormBuilder,\n private materialService: MaterialService,\n private priceService: PriceService,\n private message: NzMessageService,\n ) { }\n\n ngOnInit() {\n this.inputForm = this.formBuilder.group({\n itemNo: [\"\", Validators.required],\n group: '',\n dri: '',\n cutBk: '',\n description: '',\n qty: 1,\n length: 1,\n });\n this.searchChange$\n .asObservable()\n .pipe(debounceTime(500))\n .subscribe(this.getOptionList.bind(this))\n }\n\n ngAfterViewInit() {\n this.materialService.getAll().subscribe(rs => {\n if (rs.statusCode === 200) {\n this.groups = rs.data\n }\n })\n }\n\n private getOptionList(value: string) {\n if (value.length < 3) {\n this.optionLists = []\n return\n }\n const _value = value.toLowerCase()\n this.priceService.searchByQuery(this.group, _value).subscribe((rs) => {\n if (rs.statusCode === 200) {\n this.optionLists = rs.data;\n }\n })\n }\n\n fieldSelected(event: any, option: any) {\n if (event.isUserInput && option) {\n this.currentOption = { ...option, description: option.itemDescription };\n this.itemNo = option.itemNo;\n this.unit = option.uom;\n }\n }\n\n onSearch(e: Event): void {\n const value = (e.target as HTMLInputElement).value;\n this.searchChange$.next(value);\n }\n onGroupChange(value) {\n this.description = null\n this.searchChange$.next('');\n }\n\n onShow(visible: boolean, data?: any) {\n if (visible) {\n if (!data) {\n this.inputForm.setValue({\n itemNo: '',\n dri: '',\n cutBk: '',\n group: '',\n description: '',\n qty: 1,\n length: 1,\n })\n } else {\n this.inputForm.setValue({\n itemNo: data.itemNo,\n dri: data.dri,\n cutBk: data.cutBk,\n group: '',\n description: data.description,\n qty: 1,\n length: 1,\n })\n this.currentOption = data\n this.searchChange$.next(data.description);\n }\n }\n this.visible = visible;\n }\n\n onCancel() {\n this.visible = false;\n }\n onSubmit() {\n if (this.inputForm.invalid) {\n this.message.error(\"Item No. is required\");\n return;\n }\n\n const values = this.inputForm.value\n const _length = values.length;\n if (!_length || _length == 0) {\n this.message.error(\"Length > 0\");\n return;\n }\n const _qty = values.qty;\n if (!_qty || _qty == 0) {\n this.message.error(\"Qty > 0\");\n return;\n }\n const _price = {\n cutBk: values.cutBk,\n description: this.currentOption.description,\n dri: values.dri,\n idx: 0,\n itemNo: this.currentOption.itemNo,\n length: _length || 1,\n length2: _length * 1000,\n price: 0,\n qty: _qty,\n totalUom: 0,\n unitPrice: 0,\n uom: this.currentOption.uom,\n }\n this._submit.emit(_price);\n this.visible = false\n }\n}\n","\n
\n \n \n Group\n \n \n \n \n \n \n \n \n Item Description\n \n \n \n {{ option.itemDescription }} - ({{\n option.itemNo\n }})\n \n \n \n \n \n Item No.\n \n \n \n \n \n Direction\n \n \n \n \n \n \n \n \n \n Cut BK\n \n \n \n \n \n Length\n \n \n \n \n \n \n \n Qty\n \n \n \n \n \n \n\n
\n \n \n
\n
\n\n","import { Component, OnInit } from \"@angular/core\";\nimport _ from \"lodash\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { HomeComponent as HomeComponentRibSpan } from \"src/app-ribspan/containers/home\";\nimport { ICost } from \"src/app/core/models\";\nimport { Router } from \"@angular/router\";\n\n@Component({\n selector: \"dialog-add-cost\",\n templateUrl: \"./dialog-add-cost.component.html\",\n styleUrls: [\"./dialog-add-cost.component.scss\"],\n})\nexport class DialogAddCostComponent implements OnInit {\n private homeComponent: any;\n constructor(public message: NzMessageService, private router: Router) {\n if (this.router.url == \"/ribspan\") {\n this.homeComponent = HomeComponentRibSpan.ins;\n } else {\n this.homeComponent = HomeComponent.ins;\n }\n }\n isVisible: boolean = false;\n costList: ICost[] = [];\n\n ngOnInit(): void {}\n\n public show(_visible: boolean, list: ICost[]) {\n this.isVisible = _visible;\n\n if (!this.isVisible) {\n return;\n }\n this.costList = [...list];\n }\n\n onCancel(): void {\n this.isVisible = false;\n }\n\n onDelete(index): void {\n const _temp = this.costList.filter((f) => f.index !== index);\n this.costList = _temp.map((value, index) => {\n return {\n index: index + 1,\n description: value.description,\n value: value.value,\n };\n });\n }\n onNew(): void {\n const _temp = this.costList.map((value, index) => {\n return {\n index: index + 1,\n description: value.description,\n value: value.value,\n };\n });\n _temp.push({ index: _temp.length + 1, description: \"\", value: 0 });\n this.costList = [..._temp];\n }\n onSave(): void {\n const totalCost = this.costList.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.homeComponent.currentQuoteInfo.quoteInfo.costList = [...this.costList];\n this.homeComponent.currentQuoteInfo.quoteInfo.addCostInstall = _.round(\n totalCost,\n 2\n );\n if (this.costList.length > 0) {\n this.homeComponent.addCostInstallDes = this.costList[0].description;\n } else {\n this.homeComponent.addCostInstallDes = \"\";\n }\n this.homeComponent.calcQuoteInfo();\n this.isVisible = false;\n }\n}\n","\n\n
\n
\n \n
\n
\n \n \n
\n
No.
\n
Description
\n
Value Ex GST
\n
\n
\n
\n
\n #{{cost.index}}\n
\n
\n \n
\n
\n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n \n \n
\n
\n
","import { first } from \"rxjs/operators\";\nimport { JobService } from \"./../../services/job.service\";\nimport { Component, OnInit } from \"@angular/core\";\nimport _ from \"lodash\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { ExcelService } from \"src/app/services\";\nimport { Objects } from \"src/app/core/objects\";\nimport { User } from \"src/app/models\";\n\n@Component({\n selector: \"dialog-bom\",\n templateUrl: \"./dialog-bom.component.html\",\n styleUrls: [\"./dialog-bom.component.scss\"],\n})\nexport class DialogBOMComponent implements OnInit {\n constructor(\n public message: NzMessageService,\n private jobService: JobService,\n private excelService: ExcelService\n ) {\n this.objects = new Objects();\n }\n isVisibleMoreInfo: boolean = false;\n isVisible: boolean = false;\n dataBOM: any;\n jobNo: string = \"\";\n objects: Objects;\n isAdmin: boolean = false;\n currentUser: User;\n\n ngOnInit(): void {}\n\n public showTest(_visible: boolean, user: User, lstBOM, lstAddBOM, quoteInfo) {\n this.isVisible = _visible;\n this.jobNo = \"Test\";\n this.isAdmin = false;\n this.currentUser = user;\n\n if (!this.isVisible) {\n return;\n }\n this.dataBOM = {\n BOMInfo: [...lstBOM],\n quoteInfo: { ...quoteInfo },\n };\n if (lstAddBOM) {\n const _listAddBOM = lstAddBOM.map((m) => ({\n ...m,\n isAdd: true,\n }));\n this.dataBOM.BOMInfo.push(..._listAddBOM);\n }\n this.isVisibleMoreInfo = false;\n this.isVisible = true;\n }\n\n public show(\n _visible: boolean,\n id: string,\n jobNo: string,\n isAdmin: boolean,\n user: User\n ) {\n this.isVisible = _visible;\n this.jobNo = jobNo;\n this.isAdmin = isAdmin;\n this.currentUser = user;\n\n if (!this.isVisible) {\n return;\n }\n\n // Check changed before\n this.jobService\n .getBOMById(id)\n .pipe(first())\n .subscribe(\n (data) => {\n this.dataBOM = {\n BOMInfo: [...data.data.list],\n quoteInfo: { ...data.data.quoteInfo },\n };\n if (data.data.listAddBOM) {\n const _listAddBOM = data.data.listAddBOM.map((m) => ({\n ...m,\n isAdd: true,\n }));\n this.dataBOM.BOMInfo.push(..._listAddBOM);\n }\n this.isVisibleMoreInfo = false;\n this.isVisible = true;\n },\n (error) => {\n console.log(\"error :\", error);\n }\n );\n }\n\n onCancel(): void {\n this.isVisible = false;\n }\n\n onExportExcelClick(): void {\n if (!(this.isAdmin || this.currentUser.user.isExportExcel)) {\n return;\n }\n const list = [\n {\n idx: 0,\n description: \"Nett\",\n price: this.dataBOM.quoteInfo.nett || 0,\n },\n {\n idx: 1,\n description: \"Off Fascia Install\",\n price: this.dataBOM.quoteInfo.fasciaInstall || 0,\n },\n {\n idx: 2,\n description: \"Fly Over Install\",\n price: this.dataBOM.quoteInfo.flyOverInstall || 0,\n },\n {\n idx: 3,\n description: \"Install Mark up on material\",\n price: this.dataBOM.quoteInfo.installMaterial || 0,\n },\n {\n idx: 4,\n description: \"Per post install\",\n price: this.dataBOM.quoteInfo.perPostInstall || 0,\n },\n {\n idx: 5,\n description: \"Std Additional Costs\",\n price: this.dataBOM.quoteInfo.addCost || 0,\n },\n {\n idx: 6,\n description: \"Mark up on Supply Kits\",\n price: this.dataBOM.quoteInfo.supplyOnlyKits || 0,\n },\n {\n idx: 7,\n description: \"Additional Cost Install\",\n price: this.dataBOM.quoteInfo.addCostInstall || 0,\n },\n {\n idx: 8,\n description: \"GST (10.00%)\",\n price: this.dataBOM.quoteInfo.gst || 0,\n },\n {\n idx: 9,\n description: \"Total\",\n price: this.dataBOM.quoteInfo.totalPrice || 0,\n },\n ];\n this.excelService.exportExcel(\n this.dataBOM.BOMInfo,\n list,\n this.jobNo,\n this.isAdmin\n );\n }\n}\n","\n\n \n \n \n \n Idx.\n Item No.\n Qty\n Length\n Cut BK\n Dir\n Description\n UoM\n Total UoM\n Price\n Unit Price\n \n \n \n \n {{ data.idx }}\n {{ data.itemNo }}\n {{ data.qty }}\n {{ data.length }}\n {{ data.cutBk }}\n {{ data.dri }}\n {{ data.description }}\n {{ data.uom }}\n {{ data.totalUom }}\n {{ (isAdmin ? data.price : 0) | currency }}\n {{ (isAdmin ? data.unitPrice : 0) | currency }}\n \n \n \n \n \n \n \n \n \n \n Nett\n \n {{ dataBOM?.quoteInfo.nett || 0 | currency }}\n \n \n \n Off fascia install\n \n {{ dataBOM?.quoteInfo.fasciaInstall || 0 | currency }}\n \n \n \n Fly Over install\n \n {{ dataBOM?.quoteInfo.flyOverInstall || 0 | currency }}\n \n \n \n Install markup of material\n \n {{ dataBOM?.quoteInfo.installMaterial || 0 | currency }}\n \n \n \n Per post install\n \n {{ dataBOM?.quoteInfo.perPostInstall || 0 | currency }}\n \n \n \n Std addtional costs\n \n {{ dataBOM?.quoteInfo.addCost || 0 | currency }}\n \n \n \n Mark up on supply kits\n \n {{ dataBOM?.quoteInfo.supplyOnlyKits || 0 | currency }}\n \n \n \n Addional cost install\n \n {{ dataBOM?.quoteInfo.addCostInstall || 0 | currency }}\n \n \n \n GST 10%\n \n {{ dataBOM?.quoteInfo.gst || 0 | currency }}\n \n \n \n Total\n \n {{ dataBOM?.quoteInfo.totalPrice || 0 | currency }}\n \n \n \n \n
\n
\n More Information\n \n
\n
\n \n \n Export Excel\n \n \n
\n
\n \n
\n \n\n\n","import { Component, OnInit, Output, EventEmitter } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport { BUILDING_SIDE } from \"src/app/app.constants\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { HomeComponent as HomeComponentRibSpan } from \"src/app-ribspan/containers/home\";\n\n@Component({\n selector: \"dialog-confirm\",\n templateUrl: \"./dialog-confirm.component.html\",\n styleUrls: [\"./dialog-confirm.component.scss\"],\n})\nexport class DialogConfirmComponent implements OnInit {\n bayIndex: number = 0;\n public dimValue = 12000;\n public baySizeMax: number = 3000;\n @Output(\"onSubmit\") onSubmitEvent = new EventEmitter();\n @Output(\"onCancel\") onCancelEvent = new EventEmitter();\n @Output() clickOutside = new EventEmitter();\n visible: boolean = false;\n labelType: number = 0;\n title: string = \"\";\n valueType: string = \"number\";\n isShowBuilding: boolean = false;\n\n private homeComponent: any;\n\n constructor(private router: Router) {\n if (this.router.url == \"/ribspan\") {\n this.homeComponent = HomeComponentRibSpan.ins;\n } else {\n this.homeComponent = HomeComponent.ins;\n }\n }\n\n ngOnInit(): void {}\n onCancel() {\n this.onCancelEvent.emit();\n this.show(false, null);\n }\n onOK() {\n this.onSubmitEvent.emit();\n if (this.isShowBuilding) {\n if (this.labelType === BUILDING_SIDE.LEFT) {\n if (this.homeComponent.sltExistingType.currentValue == 2) {\n this.homeComponent.sltExistingType.setSelected(3);\n } else {\n this.homeComponent.sltExistingType.setSelected(1);\n }\n } else if (this.labelType === BUILDING_SIDE.RIGHT) {\n if (this.homeComponent.sltExistingType.currentValue == 1) {\n this.homeComponent.sltExistingType.setSelected(3);\n } else {\n this.homeComponent.sltExistingType.setSelected(2);\n }\n }\n } else {\n if (this.labelType === BUILDING_SIDE.LEFT) {\n if (this.homeComponent.sltExistingType.currentValue == 3) {\n this.homeComponent.sltExistingType.setSelected(2);\n } else {\n this.homeComponent.sltExistingType.setSelected(0);\n }\n } else if (this.labelType === BUILDING_SIDE.RIGHT) {\n if (this.homeComponent.sltExistingType.currentValue == 3) {\n this.homeComponent.sltExistingType.setSelected(1);\n } else {\n this.homeComponent.sltExistingType.setSelected(0);\n }\n }\n }\n this.show(false, null);\n }\n public show(_visible: boolean, labelType) {\n this.visible = _visible;\n\n if (!this.visible) {\n return;\n }\n this.labelType = labelType;\n let isShow = true;\n if (labelType === BUILDING_SIDE.LEFT) {\n if (\n this.homeComponent.sltExistingType.currentValue == 1 ||\n this.homeComponent.sltExistingType.currentValue == 3\n ) {\n isShow = false;\n } else {\n isShow = true;\n }\n } else if (labelType === BUILDING_SIDE.RIGHT) {\n if (\n this.homeComponent.sltExistingType.currentValue == 2 ||\n this.homeComponent.sltExistingType.currentValue == 3\n ) {\n isShow = false;\n } else {\n isShow = true;\n }\n }\n\n this.isShowBuilding = isShow;\n if (labelType === BUILDING_SIDE.LEFT) {\n this.title = `Are you sure you want to ${\n isShow ? \"show\" : \"hide\"\n } left wall`;\n } else if (labelType === BUILDING_SIDE.RIGHT) {\n this.title = `Are you sure you want to ${\n isShow ? \"show\" : \"hide\"\n } right wall`;\n }\n }\n}\n","
\n
\n {{ title }}\n
\n
\n \n \n
\n
\n","import {\n Component,\n OnInit,\n Output,\n EventEmitter,\n ViewChild,\n} from \"@angular/core\";\nimport { DIMENSION_LABEL_TYPE } from \"src/app/app.config\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { DropDownColorInputComponent } from \"../dropdown-color-input/dropdown-color-input.component\";\nimport { HomeComponent as HomeComponentRibSpan } from \"src/app-ribspan/containers/home\";\nimport { Router } from \"@angular/router\";\n\n@Component({\n selector: \"dialog-dimension\",\n templateUrl: \"./dialog-dimension.component.html\",\n styleUrls: [\"./dialog-dimension.component.scss\"],\n})\nexport class DialogDimensionComponent implements OnInit {\n bayIndex: number = 0;\n public dimValue = 12000;\n public baySizeMax: number = 3000;\n @Output(\"onSubmit\") onSubmitEvent = new EventEmitter();\n @Output(\"onCancel\") onCancelEvent = new EventEmitter();\n @Output() clickOutside = new EventEmitter();\n visible: boolean = false;\n labelType: string = \"\";\n title: string = \"\";\n valueType: string = \"number\";\n minValue = 1;\n maxValue = 999999;\n bayMaxValue = 8000;\n bayMinValue = 1000;\n step = 1;\n\n private homeComponent: any;\n\n constructor(private router: Router) {\n if (this.router.url == \"/ribspan\") {\n this.homeComponent = HomeComponentRibSpan.ins;\n } else {\n this.homeComponent = HomeComponent.ins;\n }\n }\n\n ngOnInit(): void {}\n onCancel() {\n this.onCancelEvent.emit();\n this.show(false, null);\n }\n onOK() {\n this.onSubmitEvent.emit();\n\n const value = this.dimValue;\n if (this.labelType === DIMENSION_LABEL_TYPE.BAY) {\n this.homeComponent.dialogEditBay.listBay[this.bayIndex].value = value;\n this.homeComponent.dialogEditBay.onOK();\n } else if (this.labelType === DIMENSION_LABEL_TYPE.LENGTH_1) {\n this.homeComponent.sldExistingLength.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.LENGTH_2) {\n this.homeComponent.sldExistingLength2.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.WIDTH_1) {\n this.homeComponent.sldExistingWidth1.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.WIDTH_2) {\n this.homeComponent.sldExistingWidth2.setValue(value);\n } else if (\n this.labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) {\n this.homeComponent.sldLeftCutHorizontal.setValue(value);\n } else if (\n this.labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) {\n this.homeComponent.sldRightCutHorizontal.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.FRONT_OVERHANG) {\n this.homeComponent.sldFrontOverhang.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.BACK_OVERHANG) {\n this.homeComponent.sldBackOverhang.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.LEFT_OVERHANG) {\n this.homeComponent.sldLeftOverhang.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.RIGHT_OVERHANG) {\n this.homeComponent.sldRightOverhang.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.SPAN) {\n this.homeComponent.sldSpan.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.MULTI_SPAN) {\n this.homeComponent.sldMultiSpan.setValue(value);\n } else if (\n this.labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) {\n this.homeComponent.sldRightCutVertical.setValue(value);\n } else if (this.labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) {\n this.homeComponent.sldLeftCutVertical.setValue(value);\n }\n\n this.show(false, null);\n }\n public show(_visible: boolean, labelType, data?) {\n this.visible = _visible;\n\n if (!this.visible) {\n return;\n }\n this.labelType = labelType;\n this.valueType = \"number\";\n this.maxValue = 999999;\n this.minValue = 1;\n if (labelType === DIMENSION_LABEL_TYPE.BAY) {\n if (data && data.bayIndex != undefined) {\n this.maxValue = this.bayMaxValue;\n this.minValue = this.bayMinValue;\n this.bayIndex = data.bayIndex;\n this.dimValue =\n this.homeComponent.dialogEditBay.listBay[data.bayIndex].value;\n this.title = `Edit bay #${this.bayIndex + 1}`;\n }\n } else if (labelType === DIMENSION_LABEL_TYPE.LENGTH_1) {\n this.title = \"Edit Length (L1)\";\n this.dimValue = this.homeComponent.sldExistingLength.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.LENGTH_2) {\n this.title = \"Edit Length (L2)\";\n this.dimValue = this.homeComponent.sldExistingLength2.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.WIDTH_1) {\n this.title = \"Edit Width (W1)\";\n this.dimValue = this.homeComponent.sldExistingWidth1.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.WIDTH_2) {\n this.title = \"Edit Width (W2)\";\n this.dimValue = this.homeComponent.sldExistingWidth2.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) {\n this.title = \"Edit Rake Cut Left Horizontal\";\n this.dimValue = this.homeComponent.sldLeftCutHorizontal.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) {\n this.title = \"Edit Rake Cut Right Horizontal\";\n this.dimValue = this.homeComponent.sldRightCutHorizontal.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.FRONT_OVERHANG) {\n this.title = \"Edit Front Overhang (O)\";\n this.dimValue = this.homeComponent.sldFrontOverhang.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.BACK_OVERHANG) {\n this.title = \"Edit Back Overhang (O2)\";\n this.dimValue = this.homeComponent.sldBackOverhang.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.LEFT_OVERHANG) {\n this.title = \"Edit Left Overhang\";\n this.dimValue = this.homeComponent.sldLeftOverhang.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.RIGHT_OVERHANG) {\n this.title = \"Edit Right Overhang\";\n this.dimValue = this.homeComponent.sldRightOverhang.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.SPAN) {\n this.title = \"Edit Span (S)\";\n this.dimValue = this.homeComponent.sldSpan.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.MULTI_SPAN) {\n this.title = \"Edit Multi Span (S1)\";\n this.dimValue = this.homeComponent.sldMultiSpan.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) {\n this.title = \"Edit Rake Cut Right Vertical\";\n this.dimValue = this.homeComponent.sldRightCutVertical.currentValue;\n } else if (labelType === DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) {\n this.title = \"Edit Rake Cut Left Vertical\";\n this.dimValue = this.homeComponent.sldLeftCutVertical.currentValue;\n }\n }\n}\n","
\n
{{ title }}
\n
\n \n \n \n
\n
\n
\n \n \n
\n ","import { Component, OnInit, Input, ViewChild, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { IBay } from 'src/app/core/models';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\n\ndeclare var $: any;\n\n@Component({\n selector: 'dialog-edit-bay',\n templateUrl: './dialog-edit-bay.component.html',\n styleUrls: ['./dialog-edit-bay.component.scss']\n})\nexport class DialogEditBayComponent implements OnInit {\n private _noOfBay: number;\n private _baySize: number;\n\n public get noOfBay(): number { return this._noOfBay; }\n public get baySize(): number { return this._baySize; }\n\n @Input('noOfBay') public set noOfBay(val: number) { this._noOfBay = val; this.onChange(); }\n @Input('baySize') public set baySize(val: number) { this._baySize = val; this.onChange(); }\n @Output('onSubmit') onSubmitEvent = new EventEmitter();\n @Output('onCancel') onCancelEvent = new EventEmitter();\n\n visible: boolean = false;\n\n public listBay: IBay[] = [];\n public listBayCached: IBay[] = [];\n public bayMaxValue = 8000;\n public bayMinValue = 1000;\n\n public previousTotalBaySize: number = this.bayMinValue;\n public get totalBaySize(): number {\n return this.listBay.reduce((total, val) => total + val.value, 0);\n }\n\n public actions: Array<(listBay: IBay[]) => void> = [];\n\n ngOnInit(): void {\n\n }\n ngAfterContentInit() {\n\n }\n\n onChange() {\n let bays: IBay[] = [];\n this.listBay = [];\n //this.listBayCached = [];\n\n for (let i = 0; i < this.noOfBay; i++) {\n //keep previous isCut value if noOfBay not changed\n let isCut = false;\n if (this.listBayCached.length > 0 && this.noOfBay == this.listBayCached.length) {\n isCut = this.listBayCached[i].isCut;\n }\n\n bays.push({ index: i + 1, value: +this.baySize, isCut });\n //this.listBay.push({ index: i + 1, value: +this.baySize, isCut: false });\n //this.listBayCached.push({ index: i + 1, value: +this.baySize, isCut: false }); \n }\n\n this.listBay = bays;\n this.listBayCached = bays;\n\n this.actions.forEach(action => {\n action(this.listBay);\n });\n\n this.previousTotalBaySize = this.totalBaySize;\n }\n\n public addAction(action: (listBay: IBay[]) => void) {\n this.actions.push(action);\n }\n public removeAction(action: any): void {\n let idx = this.actions.indexOf(action);\n if (idx !== -1) {\n this.actions.splice(idx, 1);\n }\n }\n\n onCancel() {\n this.listBay = this.listBayCached.map(b => ({ index: b.index, value: b.value, isCut: b.isCut }));\n\n this.onCancelEvent.emit();\n this.show(false);\n }\n onOK() {\n this.listBayCached = this.listBay.map(b => ({ index: b.index, value: b.value, isCut: b.isCut }));\n this.onSubmitEvent.emit();\n this.actions.forEach(action => {\n action(this.listBay);\n });\n this.show(false);\n }\n public show(_visible: boolean) {\n this.visible = _visible;\n }\n public setValue(value) {\n if (!value || !value.length || value.length == 0)\n return;\n\n this.noOfBay = value.length;\n this.listBay = value;\n this.onOK();\n }\n}\n","\n \n
\n
\n Bay #{{ bay.index }}\n
\n
\n \n \n
\n
\n Cut Beam\n
\n
\n
\n\n","import { Component, OnInit, Input, ViewChild, Output, EventEmitter, OnChanges, SimpleChanges } from '@angular/core';\nimport { BUILDING_SIDE } from 'src/app/app.constants';\nimport { HomeComponent } from 'src/app/containers/home';\nimport { HomeComponent as HomeComponentRibSpan } from 'src/app-ribspan/containers/home';\nimport { UI } from 'src/app/core/ui';\nimport { UI as UIRibSpan } from 'src/app-ribspan/core/ui';\nimport { DropDownInputComponent } from '../dropdown-input/dropdown-input.component';\nimport { Router } from '@angular/router';\n\n\n\n@Component({\n selector: 'dialog-rakecut',\n templateUrl: './dialog-rakecut.component.html',\n styleUrls: ['./dialog-rakecut.component.scss']\n})\nexport class DialogRakeCutComponent implements OnInit {\n @Output('onSubmit') onSubmitEvent = new EventEmitter();\n @Output('onCancel') onCancelEvent = new EventEmitter();\n @ViewChild('inputRakecutType') inputRakecutType = new DropDownInputComponent();\n\n selectedValue = 0\n rakecutTypes = null\n visible: boolean = false;\n side: number\n\n constructor(private router: Router){\n if(router.url == '/ribspan'){\n this.rakecutTypes = HomeComponentRibSpan.ins.objects.rakeCutType\n } else {\n this.rakecutTypes = HomeComponent.ins.objects.rakeCutType\n }\n }\n\n ngOnInit(): void {\n \n }\n ngAfterViewInit(){\n this.inputRakecutType.addAction((pre, cur) => {\n this.selectedValue = cur\n })\n }\n onCancel(){\n this.onCancelEvent.emit();\n this.show(false);\n }\n onOK(){\n if(this.router.url == '/ribspan'){\n if(this.side == BUILDING_SIDE.LEFT){\n HomeComponentRibSpan.ins.sltLeftCutType.setSelected(this.selectedValue)\n }\n if(this.side == BUILDING_SIDE.RIGHT){\n HomeComponentRibSpan.ins.sltRightCutType.setSelected(this.selectedValue)\n }\n } else {\n if(this.side == BUILDING_SIDE.LEFT){\n HomeComponent.ins.sltLeftCutType.setSelected(this.selectedValue)\n }\n if(this.side == BUILDING_SIDE.RIGHT){\n HomeComponent.ins.sltRightCutType.setSelected(this.selectedValue)\n }\n }\n\n this.onSubmitEvent.emit();\n this.show(false);\n }\n public show(_visible: boolean, side?: number){\n this.visible = _visible;\n if(this.router.url == '/ribspan'){\n if(side === BUILDING_SIDE.LEFT){\n this.inputRakecutType.setSelected(UIRibSpan.rakeCutLeftType)\n }\n if(side === BUILDING_SIDE.RIGHT){\n this.inputRakecutType.setSelected(UIRibSpan.rakeCutRightType)\n }\n } else {\n if(side === BUILDING_SIDE.LEFT){\n this.inputRakecutType.setSelected(UI.rakeCutLeftType)\n }\n if(side === BUILDING_SIDE.RIGHT){\n this.inputRakecutType.setSelected(UI.rakeCutRightType)\n }\n }\n \n this.side = side\n }\n}\n","
\n
Rake cut
\n
\n \n \n
\n
\n \n \n
\n
","import {\n Component,\n OnInit,\n Input,\n ViewChild,\n Output,\n EventEmitter,\n} from \"@angular/core\";\nimport { DropdownInputItemModel } from \"../../core/models\";\nimport _ from \"lodash\"\n\ndeclare var $: any;\n\n@Component({\n selector: \"dropdown-color-input\",\n templateUrl: \"./dropdown-color-input.component.html\",\n styleUrls: [\"./dropdown-color-input.component.scss\"],\n})\nexport class DropDownColorInputComponent implements OnInit {\n @Input(\"items\") items: Array;\n @Input(\"selected\") public selectedValue: number;\n\n public get currentItem(): DropdownInputItemModel {\n return this.items.find((c) => c.selected);\n }\n public get currentValue(): number {\n let selectedItem = this.items.find((i) => i.selected);\n if (selectedItem) return selectedItem.id;\n\n if (this.items.length > 0) return this.items[0].id;\n\n return null;\n }\n\n public get currentText(): string {\n let selectedItem = this.items.find((i) => i.selected);\n if (selectedItem) return selectedItem.value;\n\n if (this.items.length > 0) return this.items[0].value;\n\n return \"\";\n }\n\n public get currentBeamEndCapColorCode(): string {\n let selectedItem = this.items.find((i) => i.selected);\n if (selectedItem) return _.get(selectedItem, ['beamEndCapColorCode'], '');\n\n if (this.items.length > 0) return _.get(this.items, [0, 'beamEndCapColorCode'], '');\n\n return '';\n }\n\n actions: Array<{\n priority: number;\n actions: Array<(previousValue: number, currentValue: number) => void>;\n }> = [];\n isOpen = false;\n\n ngOnInit(): void {\n this.selectedValue = this.selectedValue || 0;\n this.setSelected(this.selectedValue);\n }\n ngAfterContentInit() {\n document.addEventListener(\"click\", (e) => {\n //console.log('document clicked');\n ////document.getElementsByClassName('ui.fluid.dropdown.selection')\n let container = $(\".ui.fluid.dropdown.selection\");\n //let menu = $('.menu.transition');\n if (!container.is(e.target) && container.has(e.target).length === 0) {\n this.isOpen = false;\n //$('.ui.fluid.dropdown.selection').removeClass('active visible');\n //menu.removeClass('visible');\n //menu.addClass('hidden');\n }\n\n e.stopPropagation();\n });\n }\n public addAction(\n action: (previousValue: number, currentValue: number) => void,\n priority?: number\n ) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find((a) => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n } else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n onItemSelected(item: DropdownInputItemModel) {\n this.items = this.items.map((i) => ({ ...i, selected: i.id == item.id }));\n\n for (let item of this.actions) {\n item.actions.forEach((action) => {\n action(null, this.currentValue);\n });\n }\n }\n onClick() {\n let container = $(\".ui.fluid.dropdown.selection\");\n let menu = $(\".menu.transition\");\n container.removeClass(\"active visible\");\n menu.removeClass(\"visible\");\n menu.addClass(\"hidden\");\n\n this.isOpen = !this.isOpen;\n }\n setSelected(id) {\n if (!this.items.find((i) => i.id == id)) {\n return;\n }\n\n this.items = this.items.map((i) => ({ ...i, selected: i.id == id }));\n for (let item of this.actions) {\n item.actions.forEach((action) => {\n action(null, this.currentValue);\n });\n }\n }\n public toHexColor(value: number) {\n return \"#\" + Number(value).toString(16).padStart(6, \"0\");\n }\n}\n","\n \n
\n
\n \n {{ currentText }}\n \n \n \n \n \n {{ item.value }}\n \n \n\n","import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { HomeComponent } from 'src/app/containers/home';\nimport { HomeComponent as HomeComponentRibSpan } from 'src/app-ribspan/containers/home';\nimport { SelectInputItemModel } from 'src/app/core/models';\n\ndeclare var $: any;\n\n\n@Component({\n selector: \"dropdown-input-custom\",\n templateUrl: \"./dropdown-input-custom.component.html\"\n // styleUrls: ['./dropdown-input.component.css']\n})\nexport class DropDownInputCustomComponent implements OnInit {\n _isDisable: boolean = false;\n @Input(\"disabled\") public set isDisabled(val: boolean) {\n this._isDisable = val;\n }\n @Input(\"items\") items: Array;\n @Input(\"selected\") public selectedValue: number;\n @Input(\"minCustom\") public minCustom: number;\n @Input(\"maxCustom\") public maxCustom: number;\n @Output(\"change\") onChange = new EventEmitter();\n @ViewChild(\"selectInput\", { static: true }) selectElement;\n @Input(\"hasCustom\") public hasCustom: boolean;\n\n public isShowDropDown = false;\n public customValue = 5;\n isVisibleOpenModal: boolean = false;\n previousValue: number;\n currentValue = 10;\n disableList = [];\n //actions: Array<(previousValue: number, currentValue: number) => void> = [];\n actions: Array<{\n priority: number;\n actions: Array<(previousValue: number, currentValue: number) => void>;\n }> = [];\n\n constructor(private route: Router) { }\n\n public get currentText(): string {\n let selectedItem = this.items.find(i => i.id == this.currentValue);\n if (selectedItem)\n return selectedItem.value;\n\n if (this.items.length > 0)\n return this.items[0].value;\n\n }\n public get isDisabled() {\n return this._isDisable\n }\n ngOnInit(): void {\n this.selectedValue = this.selectedValue || 0;\n this.currentValue = this.selectedValue;\n }\n ngAfterContentInit() {\n this.setSelected(this.selectedValue);\n\n document.addEventListener(\"click\", (e) => {\n let container = $(\".ui.fluid.dropdown.selection\");\n if (!container.is(e.target) && container.has(e.target).length === 0) {\n this.isShowDropDown = false;\n }\n e.stopPropagation();\n });\n }\n\n public onToggleDropDown(){\n this.isShowDropDown = !this.isShowDropDown\n }\n public addAction(\n action: (previousValue: number, currentValue: number) => void,\n priority?: number\n ) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find(a => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n } else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n\n public onValueChanged(val) {\n if(val == 99999){\n this.onClickCustomValue()\n return\n }\n this.currentValue = val;\n if(this.route.url != '/ribspan' && !HomeComponent.ins.loadCompleted){\n return\n }\n if(this.route.url == '/ribspan' && !HomeComponentRibSpan.ins.loadCompleted){\n return\n }\n for (let item of this.actions) {\n item.actions.forEach(action => {\n action(+this.previousValue, +this.currentValue);\n });\n }\n this.previousValue = val;\n }\n public setSelected(value: any) {\n this.currentValue = value;\n this.selectedValue = value;\n }\n\n public setSelectedAndHandleEvent(value: any) {\n this.currentValue = value;\n this.selectedValue = value;\n\n this.onValueChanged({target: {value: value}})\n }\n\n public setDisable(value: boolean) {\n this.isDisabled = value\n }\n public onClickCustomValue(){\n this.isVisibleOpenModal = true;\n }\n public onModalCustomOk(){\n this.onValueChanged(this.customValue)\n this.isVisibleOpenModal = false;\n }\n public onCancel(){\n this.isVisibleOpenModal = false\n }\n disabledItem(value: any) {\n if (this.disableList.length === 0) {\n return false;\n }\n return this.disableList.indexOf(value) > -1;\n }\n}\n","\n
\n \n
{{currentValue}}
\n
\n
{{i.value}}
\n
Custom value
\n
\n
\n\n\n \n","import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { SelectInputItemModel } from 'src/app/core/models';\nimport _ from \"lodash\";\ndeclare var $: any;\n\n\n@Component({\n selector: \"dropdown-input\",\n templateUrl: \"./dropdown-input.component.html\"\n // styleUrls: ['./dropdown-input.component.css']\n})\nexport class DropDownInputComponent implements OnInit {\n _isDisable: boolean;\n @Input(\"disabled\") public set isDisabled(val: boolean) {\n this._isDisable = val;\n }\n @Input(\"items\") items: Array;\n @Input(\"selected\") public selectedValue: number;\n @Output(\"change\") onChange = new EventEmitter();\n @ViewChild(\"selectInput\", { static: true }) selectElement;\n\n previousValue: number;\n currentValue = 10;\n disableList = [];\n //actions: Array<(previousValue: number, currentValue: number) => void> = [];\n actions: Array<{\n priority: number;\n actions: Array<(previousValue: number, currentValue: number) => void>;\n }> = [];\n public get currentText(): string {\n let selectedItem = this.items.find(i => i.id == this.currentValue);\n if (selectedItem)\n return selectedItem.value;\n\n if (this.items.length > 0)\n return this.items[0].value;\n\n }\n\n public get currentBeamEndCapColorCode(): string {\n let selectedItem = this.items.find((i) => i.id == this.currentValue);\n if (selectedItem) return _.get(selectedItem, ['beamEndCapColorCode'], '');\n\n if (this.items.length > 0) return _.get(this.items, [0, 'beamEndCapColorCode'], '');\n\n return '';\n }\n ngOnInit(): void {\n this.selectedValue = this.selectedValue || 0;\n this.currentValue = this.selectedValue;\n }\n ngAfterContentInit() {\n this.setSelected(this.selectedValue);\n }\n\n public addAction(\n action: (previousValue: number, currentValue: number) => void,\n priority?: number\n ) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find(a => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n } else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n\n public onValueChanged(e) {\n const val = e.target.value;\n this.currentValue = val;\n // this.currentText = e.target.options[e.target.options.selectedIndex].text;\n for (let item of this.actions) {\n item.actions.forEach(action => {\n action(+this.previousValue, +this.currentValue);\n });\n }\n // this.onChange.emit();\n this.previousValue = val;\n }\n public setSelected(value: any) {\n this.currentValue = value;\n this.selectedValue = value;\n setTimeout(() => {\n // let selectedItem = this.items.find(i => i.id == value);\n $(this.selectElement.nativeElement).dropdown(\"set selected\", value.toString());\n }, 200);\n }\n\n public setSelectedAndHandleEvent(value: any) {\n setTimeout(() => {\n // let selectedItem = this.items.find(i => i.id == value);\n $(this.selectElement.nativeElement).dropdown(\"set selected\", value.toString());\n }, 200);\n\n this.onValueChanged({target: {value: value}})\n }\n\n public setDisable(value: boolean) {\n if (value) {\n $(this.selectElement.nativeElement).parent().addClass('disabled');\n }\n else {\n $(this.selectElement.nativeElement).parent().removeClass('disabled');\n }\n }\n disabledItem(value: any) {\n if (this.disableList.length === 0) {\n return false;\n }\n return this.disableList.indexOf(value) > -1;\n }\n}\n","\n\n","import { HomeComponent } from \"src/app/containers/home\";\nimport { DialogAddBOMComponent } from \"./../dialog-add-bom/dialog-add-bom.component\";\nimport { Component, Input, OnInit, ViewChild } from \"@angular/core\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { HomeComponent as HomeComponentRibSpan } from \"src/app-ribspan/containers/home\";\nimport { Router } from \"@angular/router\";\n\n@Component({\n selector: \"panel-bom\",\n templateUrl: \"./panel-bom.component.html\",\n styleUrls: [\"./panel-bom.component.scss\"],\n})\nexport class PanelBOMComponent implements OnInit {\n private homeComponent: any;\n\n constructor(public message: NzMessageService, private router: Router) {\n if (this.router.url == \"/ribspan\") {\n this.homeComponent = HomeComponentRibSpan.ins;\n } else {\n this.homeComponent = HomeComponent.ins;\n }\n }\n @Input(\"boms\") boms: [];\n @ViewChild(\"dialogAddBOM\", { static: true })\n dialogAddBOM: DialogAddBOMComponent;\n isVisible: boolean = false;\n addBOMs: any[];\n ngOnInit(): void {}\n\n public show(_visible: boolean, id: string) {\n this.isVisible = _visible;\n\n if (!this.isVisible) {\n return;\n }\n }\n public onRefresh() {\n if (this.homeComponent.currentBuildingInfo.additionalBOM) {\n this.addBOMs = [...this.homeComponent.currentBuildingInfo.additionalBOM];\n }\n }\n onNew(): void {\n this.dialogAddBOM.onShow(true);\n }\n\n onCancel(): void {\n this.isVisible = false;\n }\n\n onDeleteBOM(data) {\n if (!this.homeComponent.currentBuildingInfo.isOpen) {\n this.homeComponent.onDeleteBOM(data);\n this.onRefresh();\n }\n }\n onCopyBOM(data) {\n if (!this.homeComponent.currentBuildingInfo.isOpen) {\n this.dialogAddBOM.onShow(true, data);\n }\n }\n\n onAddBOM(price) {\n if (!this.homeComponent.currentBuildingInfo.isOpen) {\n this.homeComponent.onAddBOM(price);\n this.onRefresh();\n }\n }\n}\n","
\n \n \n \n Idx.\n Item No.\n Qty\n Length\n Cut BK\n Dir\n Description\n UoM\n Copy\n \n \n \n \n {{ data.idx }}\n {{ data.itemNo }}\n {{ data.qty }}\n {{ data.length }}\n {{ data.cutBk }}\n {{ data.dri }}\n {{ data.description }}\n {{ data.uom }}\n \n \n \n \n \n \n \n \n \n \n
\n \n
\n \n \n \n Idx.\n Item No.\n Qty\n Length\n Description\n Cut BK\n Dri\n UoM\n Delete\n \n \n \n \n {{ data.idx }}\n {{ data.itemNo }}\n {{ data.qty }}\n {{ data.length }}\n {{ data.description }}\n {{ data.cutBk }}\n {{ data.dri }}\n {{ data.uom }}\n \n \n \n \n \n \n \n \n \n
\n","import { Component, OnInit, Input, ViewChild, Output, EventEmitter } from '@angular/core';\nimport { SelectInputItemModel } from 'src/app/core/models';\n\ndeclare var $: any;\n\n\n@Component({\n selector: \"select-input\",\n templateUrl: \"./select-input.component.html\"\n // styleUrls: ['./dropdown-input.component.css']\n})\nexport class SelectInputComponent implements OnInit {\n _isDisable: boolean;\n @Input(\"disabled\") public set isDisabled(val: boolean) {\n this._isDisable = val;\n }\n @Input(\"items\") items: Array;\n @Input(\"selected\") public selectedValue: number;\n @Output(\"change\") onChange = new EventEmitter();\n @ViewChild(\"selectInput\", { static: true }) selectElement;\n\n previousValue: number;\n currentValue = 10;\n currentText = \"\";\n //actions: Array<(previousValue: number, currentValue: number) => void> = [];\n actions: Array<{\n priority: number;\n actions: Array<(previousValue: number, currentValue: number) => void>;\n }> = [];\n\n ngOnInit(): void {\n this.selectedValue = this.selectedValue || 0;\n this.currentValue = this.selectedValue;\n }\n ngAfterContentInit() {\n this.setSelected(this.selectedValue);\n console.log('items :', this.items);\n const item = this.items.find(f => f.id === this.selectedValue);\n if (item) {\n this.currentText = item.value;\n }\n }\n\n public addAction(\n action: (previousValue: number, currentValue: number) => void,\n priority?: number\n ) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find(a => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n } else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n\n public onValueChanged(e) {\n let val = e.target.value;\n this.currentValue = val;\n this.currentText = e.target.options[e.target.options.selectedIndex].text;\n for (let item of this.actions) {\n item.actions.forEach(action => {\n action(this.previousValue, this.currentValue);\n });\n }\n\n // this.onChange.emit();\n this.previousValue = val;\n }\n public setSelected(value: any) {\n this.currentValue = value;\n this.selectedValue = value;\n const item = this.items.find(f => f.id == value);\n if (item) {\n this.currentText = item.value;\n } else {\n this.currentText = '';\n }\n // setTimeout(() => {\n // $(this.selectElement.nativeElement).dropdown(\"set selected\", value);\n // }, 200);\n }\n\n public setDisable(value: boolean) {\n this.isDisabled = value;\n }\n filterItems() {\n return this.items;\n }\n isNotSelected(value: string): boolean {\n return true;\n // return this.listOfSelectedValue.indexOf(value) === -1;\n }\n}\n","\n \n \n\n\n","import { HomeComponent } from 'src/app/containers/home';\nimport { HomeComponent as HomeComponentRibSpan } from 'src/app-ribspan/containers/home';\nimport { Component, OnInit, Input, Output, EventEmitter, AfterViewInit, ViewChild, ElementRef } from '@angular/core';\nimport { fromEvent } from 'rxjs';\nimport { map, filter, debounceTime, distinctUntilChanged } from 'rxjs/operators';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'slider-input',\n templateUrl: './slider-input.component.html',\n styleUrls: ['./slider-input.component.css']\n})\nexport class SliderInputComponent implements OnInit, AfterViewInit {\n _isDisable: boolean;\n @ViewChild('txtInput') txtInput: ElementRef;\n @Input('min') minValue: number;\n @Input('max') maxValue: number;\n @Input('step') step: number;\n @Input('default') public defaultValue: number;\n @Input('extraValue') public extraValue: number;\n @Input('disabled') public set isDisabled(val: boolean) { this._isDisable = val };\n @Output('change') onChange = new EventEmitter();\n\n _currentValue: number;\n _previousValue: number;\n\n public get previousValue(): number {\n if (this.extraValue && this.extraValue > 0) {\n return this._previousValue + this.extraValue;\n }\n else {\n return this._previousValue\n }\n };\n public get currentValue(): number {\n if (this.extraValue && this.extraValue > 0) {\n return this._currentValue + this.extraValue;\n }\n else {\n return this._currentValue\n }\n };\n public set currentValue(val: number){\n if(val >= this.minValue && val <= this.maxValue){\n this._currentValue = val;\n this.onValueChanged(val);\n }\n }\n\n actions: Array<{ priority: number, actions: Array<(previousValue: number, currentValue: number) => void> }> = [];\n\n constructor(private route: Router) { }\n\n ngOnInit() {\n this._currentValue = this.defaultValue;\n }\n ngAfterViewInit(){\n // fromEvent(this.txtInput.nativeElement, 'input').pipe(\n // // get value\n // map((event: any) => {\n // return event.target.value;\n // })\n // // // if character length greater then 2\n // // ,filter(res => res >= this.minValue && res <= this.maxValue)\n // // Time in milliseconds between key events\n // ,debounceTime(1000) \n // // If previous query is diffent from current \n // ,distinctUntilChanged()\n // // subscription for response\n // ).subscribe((_value: string) => {\n // let value = parseInt(_value);\n // if(value < this.minValue){\n // this._currentValue = this.minValue;\n // }\n // else if(value > this.maxValue){\n // this._currentValue = this.maxValue;\n // }\n // else{\n // this._currentValue = value;\n // }\n \n // this.onValueChanged({target: { value: this._currentValue }});\n // });\n }\n\n public addAction(action: (previousValue: number, currentValue: number) => void, priority?: number) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find(a => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n }\n else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n\n public onValueChanged(e, shouldEmit = false) {\n const val = e;\n this._currentValue = e;\n \n if ((val < this.minValue || val > this.maxValue) && !shouldEmit) {\n return;\n }\n\n this.onChange.emit(this);\n // for (let item of this.actions) {\n // item.actions.forEach(action => {\n // action(+this.previousValue, +this.currentValue);\n // });\n // }\n Promise.all([\n ...this.actions.map(item => item.actions.map(action => action(this.previousValue, this.currentValue)))\n ]).then(() => {\n if(this.route.url == \"/ribspan\"){\n HomeComponentRibSpan.ins.renderStatic();\n } else {\n HomeComponent.ins.renderStatic();\n }\n })\n this._previousValue = val;\n }\n\n public setValueAndHandleEvent (value: number, shouldEmit = false) {\n this.onValueChanged(value, shouldEmit)\n }\n\n public setValue(value: number) {\n this.currentValue = value;\n }\n public setMin(value: number){\n this.minValue = value;\n if(this.currentValue < this.minValue) {\n this.setValueAndHandleEvent(this.minValue, true)\n }\n }\n public setMax(value: number){\n this.maxValue = value;\n if(this.currentValue && this.currentValue > value){\n this.onValueChanged(value)\n }\n }\n\n public setDisable(value: boolean) {\n this.isDisabled = value;\n }\n\n}\n","
\n \n \n\n \n \n\n \n\n \n
\n","import { Component, OnInit } from \"@angular/core\";\n\n\n@Component({\n selector: 'switch-input',\n template: ' Left\" nzUnCheckedChildren=\"Left -> Right\" nzTooltipTitle=\"Only Admin can make this change\" nz-tooltip (ngModelChange)=\"onStateChanged()\">'\n})\nexport class SwitchInputComponent implements OnInit {\n // set _currentValue(value: boolean) {\n // this.currentValue = value ? 1 : 0;\n // }\n\n // get _currentValue(): boolean {\n // return !(this.currentValue == 0);\n // };\n\n currentValue: boolean = false;\n previousValue: boolean;\n\n actions: Array<{\n priority: number;\n actions: Array<(previousValue: boolean, currentValue: boolean) => void>;\n }> = [];\n\n ngOnInit(): void {\n\n }\n\n onStateChanged() {\n for (let item of this.actions) {\n item.actions.forEach(action => {\n action(this.previousValue, this.currentValue);\n });\n }\n\n this.previousValue = this.currentValue;\n }\n\n public addAction(\n action: (previousValue: boolean, currentValue: boolean) => void,\n priority?: number\n ) {\n priority = priority || 3;\n let actionsByPriority = this.actions.find(a => a.priority === priority);\n if (actionsByPriority) {\n actionsByPriority.actions.push(action);\n } else {\n this.actions.push({ priority: priority, actions: [action] });\n }\n\n this.actions.sort((a, b) => a.priority - b.priority);\n }\n public removeAction(action: any): void {\n for (let item of this.actions) {\n const idx = item.actions.indexOf(action);\n\n if (idx !== -1) {\n item.actions.splice(idx, 1);\n }\n }\n }\n public setValue(value: boolean) {\n this.currentValue = value;\n //this.onStateChanged();\n }\n}","import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';\nimport { HomeComponent } from 'src/app/containers/home';\nimport { HomeComponent as HomeComponentRibSpan } from 'src/app-ribspan/containers/home';\nimport { Router } from '@angular/router';\n\n@Component({\n selector: 'toggle-button',\n templateUrl: './toggle-button.component.html',\n // styleUrls: ['./toggle-button.component.scss']\n})\nexport class ToggleButtonComponent implements OnInit {\n @Input('default') public defaultValue: boolean;\n @Input('defaultContent') public set _defaultContent(val: string){\n this.defaultContent = val;\n };\n @Input('activeContent') public set _activeContent(val: string){\n this.activeContent = val;\n };\n @Input('inactiveContent') public set _inactiveContent(val: string){\n this.inactiveContent = val;\n };\n @Input('defaultShow') public set _show(val: boolean){\n this.isShow = val;\n };\n @Output('onClick') onClick = new EventEmitter();\n\n currentValue: boolean;\n previousValue: boolean;\n defaultContent: string;\n activeContent: string;\n inactiveContent: string;\n isShow: boolean = true;\n actions: Array<(previousValue: boolean, currentValue: boolean) => void> = [];\n constructor(private router: Router) { }\n\n ngOnInit() {\n this.currentValue = this.defaultValue || false;\n }\n\n public addAction(action: (previousValue: boolean, currentValue: boolean) => void) {\n this.actions.push(action);\n }\n public removeAction(action: any): void {\n let idx = this.actions.indexOf(action);\n if (idx !== -1) {\n this.actions.splice(idx, 1);\n }\n }\n onValueChanged(e){\n this.currentValue = !this.currentValue;\n this.onClick.emit(this);\n Promise.all([\n ...this.actions.map(action => action(this.previousValue, this.currentValue))\n ]).then(()=>{\n if(this.router.url == '/ribspan'){\n HomeComponentRibSpan.ins.renderStatic();\n } else {\n HomeComponent.ins.renderStatic();\n }\n })\n this.previousValue = this.currentValue;\n }\n public setValue(value: boolean) {\n this.currentValue = value;\n this.onClick.emit(this);\n Promise.all([\n ...this.actions.map(action => action(this.previousValue, this.currentValue))\n ]).then(()=>{\n if(this.router.url == '/ribspan'){\n HomeComponentRibSpan.ins.renderStatic();\n } else {\n HomeComponent.ins.renderStatic();\n }\n })\n this.previousValue = this.currentValue;\n }\n public show(value: boolean){\n this.isShow = value;\n }\n\n}\n","\n","import { Component, ElementRef, NgZone, ViewChild } from \"@angular/core\";\nimport { Router } from \"@angular/router\";\nimport _ from \"lodash\";\nimport { NzMessageService } from \"ng-zorro-antd/message\";\nimport { first } from \"rxjs/operators\";\nimport {\n BUILDING_SIDE,\n CONNECTION_TYPE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { CheckboxInputComponent } from \"src/app/component/checkbox-input/checkbox-input.component\";\nimport { DialogConfirmComponent } from \"src/app/component/dialog-confirm/dialog-confirm.component\";\nimport { DialogDimensionComponent } from \"src/app/component/dialog-dimension/dialog-dimension.component\";\nimport { DialogRakeCutComponent } from \"src/app/component/dialog-rakecut/dialog-rakecut.component\";\nimport { DropDownInputCustomComponent } from \"src/app/component/dropdown-input-custom/dropdown-input-custom.component\";\nimport { SwitchInputComponent } from \"src/app/component/switch-input/switch-input.component\";\nimport { ToggleButtonComponent } from \"src/app/component/toggle-button/toggle-button.component\";\nimport { CutOutManager } from \"src/app/core/UI/cutOut.manager\";\nimport { EditLength2Manager } from \"src/app/core/UI/editLength2.manager\";\nimport { EditWallManager } from \"src/app/core/UI/editWall.manager\";\nimport { EditWidth2Manager } from \"src/app/core/UI/editWidth2.manager\";\nimport UIRakecutManager from \"src/app/core/UI/rakecut\";\nimport { ICost } from \"src/app/core/models\";\nimport SelectionManager from \"src/app/core/selection.manager\";\nimport { UI } from \"src/app/core/ui\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxHelper,\n Color,\n DirectionalLight,\n PerspectiveCamera,\n Scene,\n WebGLRenderer,\n} from \"three\";\nimport { OrbitControls } from \"three/examples/jsm/controls/OrbitControls\";\nimport {\n ACTIVE_LEFT_MENU,\n APP_VERSION,\n CONFIG,\n GEOMETRY_CATEGORY,\n GEOMETRY_TYPE,\n INIT,\n OFFSET_GUTTER_TO_WALL,\n PANEL_TYPE,\n PATIOS_ROOF_TYPE,\n RELEASE_DATE,\n STATUS_TEXT,\n TEMPLATE,\n} from \"../../app.config\";\nimport { DialogEditBayComponent } from \"../../component/dialog-edit-bay/dialog-edit-bay.component\";\nimport { DropDownInputComponent } from \"../../component/dropdown-input/dropdown-input.component\";\nimport { SliderInputComponent } from \"../../component/slider-input/slider-input.component\";\nimport { DimensionManager } from \"../../core/dimension.manager\";\nimport { EaveManager } from \"../../core/eave.manager\";\nimport { ExistingRoofManager } from \"../../core/existing-roof.manager\";\nimport { ExistingWallManager } from \"../../core/existing-wall.manager\";\nimport { FasciaManager } from \"../../core/fascia.manager\";\nimport { GeometryManager } from \"../../core/geometry.manager\";\nimport { GroundManager } from \"../../core/ground.manager\";\nimport { MaterialManager } from \"../../core/material.manager\";\nimport { Objects } from \"../../core/objects\";\nimport { PatiosManager } from \"../../core/patios.manager\";\nimport { Printing2DManager } from \"../../core/printing2d.manager\";\nimport { UIManager } from \"../../core/ui.manager\";\nimport { Util } from \"../../core/utils\";\nimport { User } from \"../../models\";\nimport {\n AuthenticationService,\n JobService,\n PrintingService,\n} from \"../../services\";\nimport { DialogAddCostComponent } from \"./../../component/dialog-add-cost/dialog-add-cost.component\";\nimport { DialogBOMComponent } from \"./../../component/dialog-bom/dialog-bom.component\";\nimport { PanelBOMComponent } from \"./../../component/panel-bom/panel-bom.component\";\nimport { UserService } from \"./../../services/user.service\";\nimport { Album } from \"src/app/models/Album\";\nimport { Lightbox } from \"ngx-lightbox\";\nimport { CutBeamManager } from \"src/app/core/UI/cutBeam.manager\";\n\ndeclare var $: any;\n\n@Component({\n templateUrl: \"./home.component.html\",\n styleUrls: [\"./home.component.scss\"],\n})\nexport class HomeComponent {\n @ViewChild(\"rendererCanvas\", { static: true })\n public rendererCanvas: ElementRef;\n @ViewChild(\"viewerContainer\", { static: true })\n public viewerContainer: ElementRef;\n @ViewChild(\"sldEaveWidth\", { static: true })\n public sldEaveWidth: SliderInputComponent;\n @ViewChild(\"sldEaveHeight\", { static: true })\n public sldExistingWallHeight: SliderInputComponent;\n @ViewChild(\"sldFasciaDepth\", { static: true })\n public sldFasciaDepth: SliderInputComponent;\n\n @ViewChild(\"sldBaySize\", { static: true })\n public sldBaySize: SliderInputComponent;\n @ViewChild(\"sldSpan\", { static: true }) public sldSpan: SliderInputComponent;\n\n @ViewChild(\"sldExistingLength\", { static: true })\n public sldExistingLength: SliderInputComponent;\n @ViewChild(\"sldExistingLength2\", { static: true })\n public sldExistingLength2: SliderInputComponent;\n\n @ViewChild(\"sldExistingWidth1\", { static: true })\n public sldExistingWidth1: SliderInputComponent;\n @ViewChild(\"sldExistingWidth2\", { static: true })\n public sldExistingWidth2: SliderInputComponent;\n\n @ViewChild(\"sltExistingType\", { static: true })\n public sltExistingType: DropDownInputComponent;\n @ViewChild(\"sltStructureType\", { static: true })\n public sltStructureType: DropDownInputComponent;\n @ViewChild(\"sltWindClass\", { static: true })\n public sltWindClass: DropDownInputComponent;\n @ViewChild(\"sltWallType\", { static: true })\n public sltWallType: DropDownInputComponent;\n @ViewChild(\"sltExistingRoofType\", { static: true })\n public sltExistingRoofType: DropDownInputComponent;\n\n @ViewChild(\"sldMultiSpan\", { static: true })\n public sldMultiSpan: SliderInputComponent;\n @ViewChild(\"sldBuildingHeight\", { static: true })\n public sldBuildingHeight: SliderInputComponent;\n @ViewChild(\"sldFrontOverhang\", { static: true })\n public sldFrontOverhang: SliderInputComponent;\n @ViewChild(\"sldBackOverhang\", { static: true })\n public sldBackOverhang: SliderInputComponent;\n @ViewChild(\"sldLeftOverhang\", { static: true })\n public sldLeftOverhang: SliderInputComponent;\n @ViewChild(\"sldRightOverhang\", { static: true })\n public sldRightOverhang: SliderInputComponent;\n @ViewChild(\"sltRoofPitch\", { static: true })\n public sltRoofPitch: DropDownInputCustomComponent;\n @ViewChild(\"sldFlyOverBracketHeight\", { static: true })\n public sldFlyOverBracketHeight: SliderInputComponent;\n @ViewChild(\"sldNoOfBay\", { static: true })\n public sldNoOfBay: SliderInputComponent;\n @ViewChild(\"dialogEditBay\", { static: true })\n public dialogEditBay: DialogEditBayComponent;\n\n @ViewChild(\"sltPitch\", { static: true })\n public sltExistingRoofPitch: DropDownInputComponent;\n @ViewChild(\"sldRoofOverallLength\", { static: true })\n public sldRoofOverallLength: SliderInputComponent;\n @ViewChild(\"sldRoofOverallWidth\", { static: true })\n public sldRoofOverallWidth: SliderInputComponent;\n @ViewChild(\"sldMinHeight\", { static: true })\n public sldMinHeight: SliderInputComponent;\n @ViewChild(\"sltFlatBottom\", { static: true })\n public sltFlatBottom: DropDownInputComponent;\n @ViewChild(\"sltZFlashingType\", { static: true })\n public sltZFlashingType: DropDownInputComponent;\n // -----------------------\n @ViewChild(\"sltLeftCutType\", { static: true })\n public sltLeftCutType: DropDownInputComponent;\n @ViewChild(\"sltRightCutType\", { static: true })\n public sltRightCutType: DropDownInputComponent;\n @ViewChild(\"sldLeftCutVertical\", { static: true })\n public sldLeftCutVertical: SliderInputComponent;\n @ViewChild(\"sldLeftCutHorizontal\", { static: true })\n public sldLeftCutHorizontal: SliderInputComponent;\n @ViewChild(\"sldRightCutVertical\", { static: true })\n public sldRightCutVertical: SliderInputComponent;\n @ViewChild(\"sldRightCutHorizontal\", { static: true })\n public sldRightCutHorizontal: SliderInputComponent;\n // -----------------------\n @ViewChild(\"sltRoofSheetingType\", { static: true })\n public sltRoofSheetingType: DropDownInputComponent;\n @ViewChild(\"sltBaseFixingType\", { static: true })\n public sltBaseFixingType: DropDownInputComponent;\n @ViewChild(\"sltRoofThickness\", { static: true })\n public sltRoofThickness: DropDownInputComponent;\n @ViewChild(\"sltBargeType\", { static: true })\n public sltBargeType: DropDownInputComponent;\n\n @ViewChild(\"sltDownpipeType\", { static: true })\n public sltDownpipeType: DropDownInputComponent;\n @ViewChild(\"sltGutterType\", { static: true })\n public sltGutterType: DropDownInputComponent;\n @ViewChild(\"sltBeamType\", { static: true })\n public sltBeamType: DropDownInputComponent;\n @ViewChild(\"sltBeamSize\", { static: true })\n public sltBeamSize: DropDownInputComponent;\n @ViewChild(\"sltHouseBeamSize\", { static: true })\n public sltHouseBeamSize: DropDownInputComponent;\n @ViewChild(\"sltReceiverType\", { static: true })\n public sltReceiverType: DropDownInputComponent;\n @ViewChild(\"sltColumnType\", { static: true })\n public sltColumnType: DropDownInputComponent;\n\n @ViewChild(\"sltColourRoof\", { static: true })\n public sltColourRoof: DropDownInputComponent;\n @ViewChild(\"sltColourBarge\", { static: true })\n public sltColourBarge: DropDownInputComponent;\n @ViewChild(\"sltColourGutter\", { static: true })\n public sltColourGutter: DropDownInputComponent;\n @ViewChild(\"sltColourZFlashing\", { static: true })\n public sltColourZFlashing: DropDownInputComponent;\n @ViewChild(\"sltColourPost\", { static: true })\n public sltColourPost: DropDownInputComponent;\n @ViewChild(\"sltColourBeam\", { static: true })\n public sltColourBeam: DropDownInputComponent;\n @ViewChild(\"sltColourBracket\", { static: true })\n public sltColourBracket: DropDownInputComponent;\n @ViewChild(\"sltColourFasciaBracket\", { static: true })\n public sltColourFasciaBracket: DropDownInputComponent;\n @ViewChild(\"sltColourDownpipe\", { static: true })\n public sltColourDownpipe: DropDownInputComponent;\n\n @ViewChild(\"sltCutOut\", { static: true })\n public sltCutOut: DropDownInputComponent;\n @ViewChild(\"sltBeamLayoutShow\", { static: true })\n public sltBeamLayoutShow: CheckboxInputComponent;\n\n @ViewChild(\"sltPanelDirection\", { static: true })\n public sltPanelDirection: SwitchInputComponent;\n @ViewChild(\"sltPanelDirectionShow\", { static: true })\n public sltPanelDirectionShow: CheckboxInputComponent;\n @ViewChild(\"sltDripBarge\", { static: true })\n public sltDripBarge: CheckboxInputComponent;\n @ViewChild(\"sltFasciaUpstandBrackets\", { static: true })\n public sltFasciaUpstandBrackets: DropDownInputComponent;\n @ViewChild(\"sltUpFasciaUpstandBracket\", { static: true })\n public sltUpFasciaUpstandBracket: CheckboxInputComponent;\n @ViewChild(\"chkRapidSetCement\", { static: true })\n public chkRapidSetCement: CheckboxInputComponent;\n @ViewChild(\"chkHasHouseBeam\", { static: true })\n public chkHasHouseBeam: CheckboxInputComponent;\n\n @ViewChild(\"dialogRakeCut\", { static: true })\n dialogRakeCut: DialogRakeCutComponent;\n @ViewChild(\"dialogDimension\", { static: true })\n dialogDimension: DialogDimensionComponent;\n @ViewChild(\"dialogComfirm\", { static: true })\n dialogComfirm: DialogConfirmComponent;\n @ViewChild(\"dialogAddCost\", { static: true })\n dialogAddCost: DialogAddCostComponent;\n @ViewChild(\"dialogBOM\", { static: true }) dialogBOM: DialogBOMComponent;\n @ViewChild(\"panelBOM\", { static: true }) panelBOM: PanelBOMComponent;\n\n @ViewChild(\"btnTurnOffRakeCutLeft\", { static: true })\n btnTurnOffRakeCutLeft: ToggleButtonComponent;\n @ViewChild(\"btnTurnOffRakeCutRight\", { static: true })\n btnTurnOffRakeCutRight: ToggleButtonComponent;\n @ViewChild(\"btnTurnOffCutout\", { static: true })\n btnTurnOffCutout: ToggleButtonComponent;\n @ViewChild(\"btnTurnOnPanel\", { static: true })\n btnTurnOnPanel: ToggleButtonComponent;\n @ViewChild(\"btnEnableControl\", { static: true })\n btnEnableControl: ToggleButtonComponent;\n\n static ins: HomeComponent;\n\n public objects: Objects;\n public env = CONFIG;\n\n public utils: Util;\n\n public scene: THREE.Scene;\n public canvas: HTMLCanvasElement;\n public renderer: THREE.WebGLRenderer;\n public camera: THREE.PerspectiveCamera;\n public control: OrbitControls;\n // private control: TrackballControls;\n\n private frameId: number = null;\n\n public loadCompleted = false;\n\n public geometryManager: GeometryManager;\n private materialManager: MaterialManager;\n public eaveManager: EaveManager;\n public existingWallManager: ExistingWallManager;\n public fasciaManager: FasciaManager;\n public existingRoofManager: ExistingRoofManager;\n public uiManager: UIManager;\n public printingManager: Printing2DManager;\n\n public patiosManager: PatiosManager;\n\n // public flyOverManager: PatiosFlyOverManager;\n // public backFlyOverManager: PatiosBackFlyOverManager;\n // private freeStandingManager: PatiosFreeStandingManager;\n // private existingBuildingManager: ExistingBuildingManager;\n // private toFasciaManager: ToFasciaManager;\n\n // private columnAndPurlinManager: ColumnAndPurlinManager;\n // private roofManager: RoofManager;\n public groundManager: GroundManager;\n public dimensionManager: DimensionManager;\n\n public resizeEventHandle: any;\n\n public oldOverhangBack: number = 0;\n public sldExistingWidth2Visible = true;\n public sldExistingLength2Visible = true;\n currentUser: User;\n public isVisible = false;\n isVisibleMoreInfo: boolean = false;\n isVisibleOpenModal = false;\n isVisibleOpenModalRibspan = false;\n isVisibleProperty = !environment.production;\n isVisibleDiscount = false;\n isSaveAs = 0; // 0: none, 1: Copy, 2: Revised\n public addCostInstallDes = \"\";\n public isUploading = false;\n costList: ICost[] = [];\n dataOPEN: any;\n jobNoSearch = \"\";\n cusNameSearch = \"\";\n isSearching = false;\n isOpening = false;\n isPricing = false;\n isError = false;\n isAdmin = false;\n statusError = \"\";\n public statusText = STATUS_TEXT.NEW;\n maxSpan = 0;\n maxSpanText = \"\";\n public maxThickness = \"\";\n maxBaySizeText = \"\";\n maxBaySize = 0;\n maxBeamSizeText = \"\";\n beamSizeList = [];\n houseBeamSizeList = [];\n thicknessList = [];\n baseFixingTypeList = [];\n columnTypeList = [];\n public oldBuildingInfo = null;\n currentStep = 0;\n currentStepNew = 0;\n newOpenType = 0;\n existingHouseType = -1;\n roofPercent: string = \"\";\n version: string = APP_VERSION;\n releaseDate: string = RELEASE_DATE;\n rightToLeft: boolean = false;\n public flyoverBracketNumber: 3;\n public flyoverBracketNumberCutOut: 3;\n public fasciaBracketNumber: 3;\n public fasciaBracketNumberCutOut: 3;\n public currentBuildingInfo = null;\n public currentQuoteInfo = null;\n public roofHeight: number = 0;\n public upFasciaBracketList = null;\n public _patiosRoofType = PATIOS_ROOF_TYPE.FLAT_ROOF;\n public _isFBRoof: boolean = false;\n private _albums: Array = [];\n public panelType = PANEL_TYPE.INSULATED;\n\n set patiosRoofType(value: string) {\n let oldVal = this._patiosRoofType;\n this._patiosRoofType = value;\n if (oldVal != this._patiosRoofType) {\n this.uiManager.onStructureTypeChanged(\n null,\n this.sltStructureType.currentValue\n );\n this.uiManager.setBeamSize();\n this.uiManager.setMaxSpan();\n this.uiManager.validateCutout();\n }\n }\n get patiosRoofType(): string {\n return this._patiosRoofType;\n }\n\n set isFBRoof(value: boolean) {\n if (value != this._isFBRoof) {\n this._isFBRoof = value;\n this.uiManager.setBeamSize();\n this.uiManager.setMaxSpan();\n\n this.uiManager.onStructureTypeChanged(\n null,\n this.sltStructureType.currentValue\n );\n }\n }\n get isFBRoof(): boolean {\n return this._isFBRoof;\n }\n\n public get patiosBoundingBox(): Box3 {\n let boxHelper = new BoxHelper(this.patiosManager.patiosGroup);\n return boxHelper.geometry.boundingBox;\n }\n\n public APP_CONFIG = {\n activeLeftMenu: ACTIVE_LEFT_MENU,\n };\n\n public constructor(\n private ngZone: NgZone,\n public printService: PrintingService,\n private router: Router,\n private authenticationService: AuthenticationService,\n public message: NzMessageService,\n private jobService: JobService,\n private userService: UserService,\n private uiRakecutMgr: UIRakecutManager,\n public selectionMgr: SelectionManager,\n // public uiRakecutLeft: WidthManager\n public uiEditWall: EditWallManager,\n public uiEditLength2: EditLength2Manager,\n public uiEditWidth2: EditWidth2Manager,\n public uiCutout: CutOutManager,\n public uiCutBeam: CutBeamManager,\n private _lightbox: Lightbox\n ) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.geometryManager.init(this);\n this.materialManager = MaterialManager.Instance();\n this.eaveManager = new EaveManager();\n this.existingWallManager = new ExistingWallManager();\n this.fasciaManager = new FasciaManager();\n this.existingRoofManager = new ExistingRoofManager();\n this.objects = new Objects();\n this.groundManager = new GroundManager();\n this.dimensionManager = DimensionManager.Instance();\n this.printingManager = new Printing2DManager(this);\n this.authenticationService.currentUser.subscribe(\n (x) => (this.currentUser = x)\n );\n this.upFasciaBracketList = this.objects.fasciaBracketList.filter(\n (el) => el.id != 0\n );\n\n this.resizeEventHandle = this.resize.bind(this);\n\n window[\"APP\"] = this;\n\n console.log(`App version: ${APP_VERSION}`);\n console.log(`Release date: ${RELEASE_DATE}`);\n\n HomeComponent.ins = this;\n }\n logout() {\n this.authenticationService.logout();\n this.router.navigate([\"/login\"]);\n }\n public ngOnInit(): void {\n if (!this.currentUser || !this.currentUser.user) {\n this.authenticationService.logout();\n this.router.navigate([\"/login\"]);\n return;\n }\n this.initObject();\n }\n public ngAfterViewInit(): void {\n $(\".ui.accordion\").accordion();\n this.init3D().then(() => {\n this.uiManager = new UIManager(this);\n // this.sldBaySize.addAction(this.onBaySizeChanged.bind(this));\n\n this.uiRakecutMgr.init();\n\n this.geometryManager\n .loadAll()\n .then(() => {\n return Promise.all([\n this.eaveManager.init(this),\n this.existingWallManager.init(this),\n this.fasciaManager.init(this),\n this.existingRoofManager.init(this),\n this.groundManager.init(this),\n this.dimensionManager.init(this),\n this.materialManager.init(this),\n this.selectionMgr.init(),\n // this.uiRakecutLeft.init()\n this.uiEditWall.init(),\n this.uiEditLength2.init(),\n this.uiEditWidth2.init(),\n this.uiCutout.init(),\n this.uiCutBeam.init(),\n ]);\n })\n .then(() => {\n return Promise.all([\n this.existingWallManager.optimize(),\n this.eaveManager.optimize(),\n this.fasciaManager.optimize(),\n this.existingRoofManager.optimize(),\n this.groundManager.optimize(),\n this.dimensionManager.optimize(),\n ]);\n })\n .then(() => {\n return Promise.all([\n this.existingWallManager.load(),\n this.eaveManager.load(),\n this.fasciaManager.load(),\n this.existingRoofManager.load(),\n this.selectionMgr.enable(),\n // this.dimensionManager.load(),\n // this.uiRakecutLeft.load()\n this.uiEditWall.load(),\n this.uiEditLength2.load(),\n this.uiEditWidth2.load(),\n this.uiCutout.load(),\n this.uiCutBeam.load(),\n ]);\n })\n .then(() => {\n // Init for Test\n this.sltExistingType.setSelected(INIT.EXISTING_TYPE);\n this.sltRoofPitch.setSelected(CONFIG.patiosPitch.default);\n //this.sltStructureType.setSelected(INIT.CONNECTION_TYPE);\n\n this.uiManager.load();\n this.renderStatic();\n this.newOpenType = 0;\n\n this.loadCompleted = true;\n if (environment.production) {\n // if (this.isAdmin || this.currentUser.user.isTryRibSpanVer) {\n // this.isVisibleOpenModalRibspan = true;\n // } else {\n // this.isVisibleOpenModal = true;\n // }\n this.isVisibleOpenModalRibspan = true;\n }\n });\n // this.test();\n });\n }\n\n public ngOnDestroy() {\n if (this.frameId != null) {\n cancelAnimationFrame(this.frameId);\n }\n }\n\n private init3D(): Promise {\n // The first step is to get the reference of the canvas element from our HTML document\n this.canvas = this.rendererCanvas.nativeElement;\n\n this.canvas.width = this.viewerContainer.nativeElement.clientWidth;\n this.canvas.height = this.viewerContainer.nativeElement.clientHeight;\n\n this.renderer = new WebGLRenderer({\n canvas: this.canvas,\n // alpha: true, // transparent background\n antialias: true, // smooth edges\n preserveDrawingBuffer: true,\n });\n this.renderer.setSize(this.canvas.width, this.canvas.height);\n this.renderer.localClippingEnabled = true;\n // this.renderer.gammaOutput = true;\n // this.renderer.setClearColor( 0x000000 );\n // this.renderer.setPixelRatio( window.devicePixelRatio );\n // this.renderer.shadowMap.enabled = true;\n\n // create the scene\n this.scene = new Scene();\n this.scene.background = new Color(0xcce0ff);\n // this.scene.fog = new THREE.Fog(0xcce0ff, 500, 10000);\n\n // Camera\n this.camera = new PerspectiveCamera(\n 75,\n this.canvas.width / this.canvas.height,\n 100,\n 100000\n );\n this.camera.position.set(0, 1000, 12967);\n // this.camera.position.set(91.02454523941192, 18.45966896006735, 5.692036175338248);\n this.scene.add(this.camera);\n\n this.addShadowedLight(0, 0, 10000, 0xffffff, 0.7);\n this.addShadowedLight(0, 0, -10000, 0xffffff, 0.7);\n this.addShadowedLight(0, 10000, 0, 0xffffff, 0.7);\n this.addShadowedLight(0, -10000, 0, 0xffffff, 0.7);\n this.addShadowedLight(10000, 0, 0, 0xffffff, 0.7);\n this.addShadowedLight(-10000, 0, 0, 0xffffff, 0.7);\n\n // control\n // this.control = new TrackballControls(this.camera, this.renderer.domElement);\n this.control = new OrbitControls(this.camera, this.renderer.domElement);\n // this.control.enableDamping = true; // an animation loop is required when either damping or auto-rotation are enabled\n // this.control.dampingFactor = 0.05;\n // this.control.screenSpacePanning = false;\n //this.control.minDistance = 100;\n this.control.maxDistance = 50000; // max zoom\n this.control.maxPolarAngle = this.utils.degreesToRadians(90);\n\n window[\"scene\"] = this.scene;\n window[\"camera\"] = this.camera;\n\n this.animate();\n return Promise.resolve();\n }\n\n public showEditBay() {\n this.dialogEditBay.show(true);\n }\n\n private addShadowedLight(x, y, z, color, intensity): void {\n const directionalLight = new DirectionalLight(color, intensity);\n directionalLight.position.set(x, y, z);\n this.scene.add(directionalLight);\n }\n private animate(): void {\n // We have to run this outside angular zones,\n // because it could trigger heavy changeDetection cycles.\n this.ngZone.runOutsideAngular(() => {\n if (document.readyState !== \"loading\") {\n this.render();\n } else {\n window.addEventListener(\"DOMContentLoaded\", () => {\n this.render();\n });\n }\n\n window.addEventListener(\"resize\", this.resizeEventHandle);\n\n this.control.addEventListener(\"change\", this.renderStatic.bind(this));\n });\n }\n private render(): void {\n // this.frameId = requestAnimationFrame(() => {\n // this.render();\n // });\n // //this.control.update();\n // this.renderer.render(this.scene, this.camera);\n }\n public renderStatic() {\n this.renderer.render(this.scene, this.camera);\n }\n private resize(): void {\n const width = this.viewerContainer.nativeElement.clientWidth;\n const height = this.viewerContainer.nativeElement.clientHeight;\n\n this.canvas.width = width;\n this.canvas.height = height;\n\n this.camera.aspect = width / height;\n this.camera.updateProjectionMatrix();\n\n this.renderer.setSize(width, height);\n\n this.renderStatic();\n }\n round(number, precision = 0) {\n return _.round(number, precision);\n }\n public calcQuoteInfo(): Promise {\n return Promise.resolve().then(() => {\n const _quoteInfo = { ...this.currentQuoteInfo.quoteInfo };\n let _gst = 0;\n let _totalPrice = 0;\n if (this.currentQuoteInfo.clientInfo.supplyType === \"supply_only\") {\n _gst = this.round(\n ((_quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.supplyOnlyKits) *\n 10) /\n 100,\n 2\n );\n _totalPrice = this.round(\n _quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.supplyOnlyKits +\n _gst,\n 100\n );\n } else {\n _gst = this.round(\n ((_quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.fasciaInstall +\n _quoteInfo.flyOverInstall +\n _quoteInfo.installMaterial +\n _quoteInfo.perPostInstall +\n _quoteInfo.addCost) *\n 10) /\n 100,\n 2\n );\n _totalPrice = this.round(\n _quoteInfo.nett +\n _quoteInfo.addCostInstall +\n _quoteInfo.fasciaInstall +\n _quoteInfo.flyOverInstall +\n _quoteInfo.installMaterial +\n _quoteInfo.perPostInstall +\n _quoteInfo.addCost +\n _gst,\n 2\n );\n }\n const _info = {\n ...this.currentQuoteInfo.quoteInfo,\n gst: _gst,\n totalPrice: _totalPrice,\n total0: _totalPrice,\n };\n this.jobService\n .calcQuoteInfo(_info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentQuoteInfo.quoteInfo = data.data;\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n });\n // return Promise.resolve();\n }\n\n calcPayment(): void {\n /** wait for refresh value */\n const _values = { ...this.currentQuoteInfo.quoteInfo };\n let _totalPriceTmp = 0;\n let _discount = _values.discount;\n let _deposit = this.currentQuoteInfo.quoteInfo.deposit;\n let _stage1 = this.currentQuoteInfo.quoteInfo.stage1;\n let _stage2 = this.currentQuoteInfo.quoteInfo.stage2;\n let _finalPayment = 0;\n _totalPriceTmp = this.currentQuoteInfo.quoteInfo.total0;\n\n if (_values.discountPer > 0) {\n _discount = this.round((_totalPriceTmp * _values.discountPer) / 100, 2);\n }\n _totalPriceTmp -= _discount;\n if (_values.depositPer > 0) {\n _deposit = this.round((_totalPriceTmp * _values.depositPer) / 100, 2);\n } else {\n _deposit = 0;\n }\n if (_values.stage1Per > 0) {\n _stage1 = this.round((_totalPriceTmp * _values.stage1Per) / 100, 2);\n } else {\n _stage1 = 0;\n }\n if (_values.stage2Per > 0) {\n _stage2 = this.round((_totalPriceTmp * _values.stage2Per) / 100, 2);\n } else {\n _stage2 = 0;\n }\n _finalPayment = this.round(\n _totalPriceTmp - _deposit - _stage1 - _stage2,\n 2\n );\n if (_finalPayment < 0) {\n _finalPayment = 0;\n }\n // --------------\n if (\n _values.depositPer + _values.stage1Per + _values.stage2Per === 100 &&\n _finalPayment > 0\n ) {\n _stage1 = this.round(_stage1 + _finalPayment, 2);\n _finalPayment = 0;\n }\n // --------------\n if (\n this.round(_deposit + _stage1 + _stage2 + _finalPayment, 2) >\n _totalPriceTmp\n ) {\n _stage1 -=\n this.round(_deposit + _stage1 + _stage2 + _finalPayment, 2) -\n _totalPriceTmp;\n }\n //\n this.currentQuoteInfo.quoteInfo = {\n ...this.currentQuoteInfo.quoteInfo,\n totalPrice: _totalPriceTmp,\n discount: _discount,\n deposit: _deposit,\n stage1: _stage1,\n stage2: _stage2,\n finalPayment: _finalPayment,\n discountPer: _values.discountPer,\n depositPer: _values.depositPer,\n stage1Per: _values.stage1Per,\n stage2Per: _values.stage2Per,\n addCostInstall: _values.addCostInstall,\n };\n }\n getRoofPercent(value) {\n return new Promise((resolve) => {\n const _count = Math.ceil(value / 762);\n const _ret = `${this.round((value * 100) / (_count * 762), 2)}% (${\n _count * 762\n })`;\n resolve(_ret);\n }).then((value) => (this.roofPercent = value));\n }\n public onSetMaxValue(): void {\n let _maxSpan = Math.max(\n this.sldSpan.currentValue,\n this.sldMultiSpan.currentValue\n );\n\n let _maxBay =\n this.dialogEditBay.listBay.length > 0\n ? _.maxBy(this.dialogEditBay.listBay, \"value\").value\n : 0;\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n _maxSpan = this.isFBRoof ? _maxBay : _maxSpan / 2;\n }\n this.sldFrontOverhang.setMax(this.round(_maxSpan / 4));\n this.sldBackOverhang.setMax(this.round(_maxSpan / 4));\n if (this.dialogEditBay.listBay.length > 0) {\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n _maxBay = this.isFBRoof ? this.sldSpan.currentValue / 2 : _maxBay;\n this.sldLeftOverhang.setMax(this.round(_maxBay / 4));\n this.sldRightOverhang.setMax(this.round(_maxBay / 4));\n } else {\n const _fasciaUpstand = this.sltFasciaUpstandBrackets.currentValue;\n if (_fasciaUpstand != 0) {\n const _beamType = this.sltBeamType.currentValue;\n const _beamSize = this.sltBeamSize.currentText;\n const _size =\n _beamType == 1\n ? _beamSize.substring(0, 3)\n : _beamSize.substring(2, 5);\n let _sizeInt = parseInt(_size);\n if (_sizeInt) {\n let _maxValue = 1200;\n if (_sizeInt >= 210) _maxValue = 1500;\n else if (_sizeInt <= 110) _maxValue = 900;\n this.sldLeftOverhang.setMax(_maxValue);\n this.sldRightOverhang.setMax(_maxValue);\n }\n } else {\n this.sldLeftOverhang.setMax(this.round(_maxBay / 4));\n this.sldRightOverhang.setMax(this.round(_maxBay / 4));\n }\n }\n }\n }\n public onCalcPrice(): Promise {\n if (!this.currentBuildingInfo.isOpen) {\n this.isPricing = true;\n this.currentBuildingInfo.quoteInfo.totalPrice = 0;\n }\n\n const _info = {\n ...this.currentBuildingInfo,\n buildingInfo: this.bindBuildingInfo(),\n clientInfo: this.currentQuoteInfo.clientInfo,\n quoteInfo: this.currentQuoteInfo.quoteInfo,\n };\n if (!environment.production) {\n this.patiosManager.loadBracket(2);\n this.patiosManager.loadBracketCutout(2);\n return Promise.resolve();\n }\n if (\n (_info.buildingInfo.listPosts.length === 0 &&\n _info.buildingInfo.existingType.value !== 3) ||\n this.currentBuildingInfo.isOpen\n ) {\n return Promise.resolve();\n }\n const _structureType = _info.buildingInfo.structureType.value;\n if (_structureType === 0 || _structureType === 3) {\n if (\n _info.buildingInfo.existingLength +\n _info.buildingInfo.existingLength2 *\n (_info.buildingInfo.existingType.value === 3 ? 2 : 1) <\n _info.buildingInfo.roofOverallLength\n ) {\n this.isError = true;\n this.statusError =\n \"The Patios length greater than existing building. Please check existing building length.\";\n return Promise.resolve();\n }\n }\n\n if (_info.buildingInfo.minHeight < 1900) {\n this.isError = true;\n this.statusError =\n \"Min. Height Under Beam must be greater than or equal to 1900mm.\";\n return Promise.resolve();\n }\n if (_info.buildingInfo.columnType.value < 0) {\n this.isError = true;\n this.statusError = `Patios Height is over ${\n _info.buildingInfo.structureType.value === 4 ? \"3600mm\" : \"4000mm\"\n }.`;\n return Promise.resolve();\n }\n if (\n _info.buildingInfo.roofSheetingType.value === 2 &&\n _info.buildingInfo.roofPitch < 5\n ) {\n this.isError = true;\n this.statusError = `${_info.buildingInfo.roofSheetingType.text} must be greater than or equal to 5 degrees pitch`;\n return Promise.resolve();\n }\n\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n UI.span > this.maxSpan\n ) {\n this.isError = true;\n this.statusError = `Span must be less than max span!`;\n return Promise.resolve();\n }\n\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n UI.structureType == CONNECTION_TYPE.EXISTING &&\n UI.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch) >\n UI.existingWallHeight\n ) {\n this.isError = true;\n this.statusError = `Roof top must be lower eave height!`;\n return Promise.resolve();\n }\n\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n const findP2 = _info.buildingInfo.userData.centerPost.filter(\n (f) => f.length < 0.15\n );\n\n if (findP2.length > 0) {\n this.isError = true;\n this.statusError = `Length of P2 is too short, please increase the roof fall`;\n return Promise.resolve();\n }\n }\n\n this.jobService\n .calcBOMByPara(_info)\n .pipe(first())\n .subscribe(\n (data) => {\n const maxInfo = { ...data.data.maxInfo };\n if (data.statusCode === 200) {\n this.currentBuildingInfo.quoteInfo = { ...data.data.quoteInfo };\n this.currentBuildingInfo.BOMInfo = [...data.data.BOMInfo];\n this.currentBuildingInfo.additionalBOM = [\n ...data.data.additionalBOM,\n ];\n this.currentQuoteInfo.quoteInfo = { ...data.data.quoteInfo };\n this.isError = false;\n this.statusError = \"\";\n } else {\n if (data.data.error) {\n this.message.error(data.data.error);\n this.isError = true;\n this.statusError = data.data.error;\n // console.log('onCalcPrice :', data.data.error);\n } else {\n this.message.error(maxInfo.error);\n this.isError = true;\n this.statusError = maxInfo.error;\n // console.log('onCalcPrice :', _maxInfo.error);\n }\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n let _isChanged = false;\n if (maxInfo.beamSize.value === 0) {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) => f.id == 0 && f.beamType == this.sltBeamType.currentValue\n );\n this.sltBeamSize.setSelected(0);\n _isChanged = true;\n } else {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= maxInfo.minBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (this.sltBeamSize.currentValue < maxInfo.beamSize.value) {\n this.sltBeamSize.setSelected(maxInfo.beamSize.value);\n _isChanged = true;\n }\n }\n //House beam\n if (this.chkHasHouseBeam.currentValue) {\n if (maxInfo.houseBeamSize.value === 0) {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id == 0 && f.beamType == this.sltBeamType.currentValue\n );\n this.sltBeamSize.setSelected(0);\n _isChanged = true;\n } else {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= maxInfo.minHouseBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (\n this.sltHouseBeamSize.currentValue <\n maxInfo.houseBeamSize.value\n ) {\n this.sltHouseBeamSize.setSelected(\n maxInfo.houseBeamSize.value\n );\n _isChanged = true;\n }\n }\n } else {\n this.houseBeamSizeList = this.beamSizeList;\n this.sltHouseBeamSize.setSelected(this.sltBeamSize.currentValue);\n }\n\n if (_isChanged) {\n setTimeout(() => {\n this.patiosManager.load();\n }, 700);\n }\n }\n if (maxInfo.thickness.value === 0) {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id == 0\n );\n this.sltRoofThickness.setSelectedAndHandleEvent(0);\n } else {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id >= maxInfo.minThickness.value\n );\n if (this.sltRoofThickness.currentValue < maxInfo.thickness.value) {\n this.sltRoofThickness.setSelectedAndHandleEvent(\n maxInfo.thickness.value\n );\n }\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.maxSpan = maxInfo.maxSpan;\n this.maxSpanText = maxInfo.maxSpanText;\n this.maxBaySize = maxInfo.maxBaySize;\n this.maxBaySizeText = maxInfo.maxBaySizeText;\n }\n this.maxThickness = maxInfo.maxThickness;\n this.maxBeamSizeText = maxInfo.maxBeamSizeText;\n this.flyoverBracketNumber = maxInfo.flyoverBracketNumber;\n this.flyoverBracketNumberCutOut = maxInfo.flyoverBracketNumberCutOut;\n this.fasciaBracketNumber = maxInfo.fasciaBracketNumber;\n this.fasciaBracketNumberCutOut = maxInfo.fasciaBracketNumberCutOut;\n\n if ([3, 5, 6].includes(UI.structureType)) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.fasciaBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(this.fasciaBracketNumber);\n } else {\n this.patiosManager.loadBracket(this.fasciaBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n }\n } else {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.flyoverBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n }\n }\n this.isPricing = false;\n },\n (error) => {\n this.message.error(error);\n this.isError = true;\n this.statusError = error;\n this.isUploading = false;\n }\n );\n return Promise.resolve();\n }\n public onSupplyTypeChange(): Promise {\n const _info = {\n ...this.currentBuildingInfo,\n buildingInfo: this.bindBuildingInfo(),\n clientInfo: {\n ...this.currentQuoteInfo.clientInfo,\n },\n quoteInfo: this.currentQuoteInfo.quoteInfo,\n };\n if (_info.buildingInfo.listPosts.length === 0) {\n return;\n }\n this.jobService\n .calcBOMByPara(_info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentQuoteInfo.quoteInfo = data.data.quoteInfo;\n } else {\n this.message.error(data.message);\n console.log(\"onSupplyTypeChange :\", data.message);\n }\n },\n (error) => {\n this.message.error(error);\n console.log(\"onSupplyTypeChange :\", error);\n this.isUploading = false;\n }\n );\n return Promise.resolve();\n }\n onNewConnectionType(type: number): void {\n if (type == 4) {\n this.isFBRoof = false;\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n this.sltStructureType.setSelected(type);\n\n this.uiManager.onStructureTypeChanged(null, type);\n }\n // if (type < 5) {\n if (type == 4) {\n this.existingHouseType = 0;\n }\n this.initObject();\n if (type === 5 || type == 6) {\n this.currentBuildingInfo.buildingInfo.backFascia = type === 6;\n this.currentBuildingInfo.buildingInfo.fasciaBracketHeight =\n type === 5 || type === 6\n ? this.env.fasciaUpstandBrackets.max\n : this.env.fasciaUpstandBrackets.default;\n } else if (type === 3) {\n this.currentBuildingInfo.buildingInfo.fasciaBracketHeight = 0;\n }\n this.currentBuildingInfo.buildingInfo.structureType.value = type;\n //HACK: Existing Type: Alway minHeight > 1900mm\n if (type === CONNECTION_TYPE.EXISTING) {\n this.currentBuildingInfo.buildingInfo.eaveHeight =\n this.currentBuildingInfo.buildingInfo.buildingHeight +\n EXISTING_BUILDING_CONFIG.BUILDING_HEIGHT_OFFSET;\n }\n this.uiManager.loadFromObject(this.currentBuildingInfo.buildingInfo);\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n this.sltRoofPitch.setSelected(10);\n\n if (this.isFBRoof && UI.structureType == CONNECTION_TYPE.EXISTING) {\n this.sldExistingWallHeight.setValue(4000);\n }\n } else {\n this.sltRoofPitch.setSelected(2);\n }\n this.isVisibleOpenModal = false;\n this.statusText = STATUS_TEXT.NEW;\n this.isSaveAs = 0;\n }\n onNewExistingHouseType(type: number, FBRoof: boolean = false): void {\n let isReload = false;\n if (\n this.isFBRoof !== FBRoof &&\n (type == this.existingHouseType || this.existingHouseType == -1)\n ) {\n isReload = true;\n }\n this.existingHouseType = type;\n this.currentStepNew = 1;\n this.isFBRoof = FBRoof;\n if (isReload) {\n this.uiManager.onStructureTypeChanged(null, type);\n }\n }\n onShowOpenModal(type: number): void {\n this.newOpenType = type === 0 ? 0 : 1;\n this.existingHouseType = -1;\n this.currentStepNew = 0;\n this.isSearching = false;\n this.isOpening = false;\n this.isVisibleOpenModal = true;\n }\n // Save\n onShowSaveModal(): void {\n this.isVisibleDiscount = false;\n this.isVisibleMoreInfo = false;\n // Validation checks\n this.currentBuildingInfo = {\n ...this.currentBuildingInfo,\n buildingInfo: { ...this.bindBuildingInfo() },\n };\n if (this.currentBuildingInfo.isOpen && this.isSaveAs === 0) {\n this.message.error(\n 'This project could not be saved because it is existed project, please \"Save As\" to edit as new project.'\n );\n }\n if (this.isError) {\n this.message.error(this.statusError);\n return;\n }\n this.panelBOM.onRefresh();\n this.isPricing = true;\n this.jobService\n .checkData(this.currentBuildingInfo)\n .pipe(first())\n .subscribe(\n (cb) => {\n if (cb.statusCode === 200) {\n if (cb.data.status) {\n this.currentQuoteInfo = {\n clientInfo: {\n ...this.currentBuildingInfo.clientInfo,\n date:\n this.isSaveAs > 0\n ? new Date()\n : this.currentBuildingInfo.clientInfo.date,\n },\n quoteInfo: { ...this.currentBuildingInfo.quoteInfo },\n };\n this.addCostInstallDes =\n this.currentQuoteInfo.quoteInfo.costList.length > 0\n ? this.currentQuoteInfo.quoteInfo.costList[0].description\n : \"\";\n this.currentStep = 0;\n this.isUploading = false;\n if (!this.currentQuoteInfo.quoteInfo.customText) {\n this.currentQuoteInfo.quoteInfo.customText = cb.data.customText;\n }\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumber =\n cb.data.maxInfo.flyoverBracketNumber;\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumberCutOut =\n cb.data.maxInfo.flyoverBracketNumberCutOut;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumber =\n cb.data.maxInfo.fasciaBracketNumber;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumberCutOut =\n cb.data.maxInfo.fasciaBracketNumberCutOut;\n if (\n this.currentBuildingInfo._id === null &&\n this.isSaveAs === 0\n ) {\n this.jobService\n .genJobNo({ userId: this.currentUser.user._id })\n .pipe(first())\n .subscribe(\n (cbJob) => {\n if (cbJob.statusCode === 200) {\n this.isPricing = false;\n this.currentQuoteInfo.clientInfo.jobNo = cbJob.data;\n this.isVisible = true;\n this.isError = false;\n this.statusError = \"\";\n }\n },\n (error) => {\n this.message.error(error);\n this.isError = true;\n this.statusError = error;\n }\n );\n } else {\n this.isPricing = false;\n this.isVisible = true;\n }\n } else {\n this.message.error(cb.data.error);\n this.isError = true;\n this.statusError = cb.data.error;\n // console.log('onShowSaveModal :', cb.data.error);\n }\n } else {\n this.message.error(cb.message);\n this.isError = true;\n this.statusError = cb.message;\n // console.log('onShowSaveModal :', cb.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isError = true;\n this.statusError = error;\n }\n );\n // End check\n }\n\n onNext(): void {\n if (this.currentQuoteInfo.clientInfo.jobNo === \"\") {\n this.message.warning(\"Please input your Job No.!\");\n return;\n }\n if (this.currentQuoteInfo.clientInfo.cusName === \"\") {\n this.message.warning(\"Please input your Client Name!\");\n return;\n }\n this.currentStep += 1;\n }\n onPre(): void {\n this.currentStep -= 1;\n }\n onNextNew(): void {\n this.currentStepNew = 1;\n }\n onPreNew(): void {\n this.currentStepNew = 0;\n }\n onCustomTextChange(text, type) {\n let info = null;\n if (type === 0) {\n info = { depositText: text };\n } else if (type === 1) {\n info = { stage1Text: text };\n } else {\n info = { stage2Text: text };\n }\n this.userService\n .updateCustomText(this.currentUser.user._id, info)\n .subscribe((rs) => {});\n }\n onSaveAs(type: number): void {\n if (this.currentBuildingInfo._id === null) {\n this.message.warning(\n `You can't [${\n type === 1 ? \"Copy\" : \"Revised\"\n }] because [Job No.] is empty.`\n );\n return;\n }\n this.onQuickSaveAs(type, this.currentBuildingInfo._id);\n }\n onQuickSaveAs(type: number, id: any): void {\n this.isOpening = true;\n this.jobService\n .copyOrRevisedById(id, type)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = { ...data.data.list, _id: null };\n if (!this.currentBuildingInfo.quoteInfo.costList) {\n this.currentBuildingInfo.quoteInfo.costList = [];\n }\n if (!this.currentBuildingInfo.additionalBOM) {\n this.currentBuildingInfo.additionalBOM = [];\n }\n if (\n this.currentBuildingInfo.quoteInfo.costList.length === 0 &&\n this.currentBuildingInfo.quoteInfo.addCostInstall > 0\n ) {\n this.currentBuildingInfo.quoteInfo.costList.push({\n index: 1,\n description: \"\",\n value: this.currentBuildingInfo.quoteInfo.addCostInstall,\n });\n }\n this.currentQuoteInfo = {\n clientInfo: { ...data.data.list.clientInfo },\n quoteInfo: { ...data.data.list.quoteInfo },\n };\n this.currentQuoteInfo.quoteInfo.costList = [\n ...this.currentBuildingInfo.quoteInfo.costList,\n ];\n const _structureType =\n data.data.list.buildingInfo.structureType.value;\n\n this.uiManager\n .loadFromObject(data.data.list.buildingInfo)\n .then(() => {\n const _maxInfo = { ...data.data.maxInfo };\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n if (_maxInfo.beamSize.value === 0) {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id == 0 && f.beamType == this.sltBeamType.currentValue\n );\n this.sltBeamSize.setSelected(0);\n } else {\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= _maxInfo.minBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (\n this.sltBeamSize.currentValue < _maxInfo.beamSize.value\n ) {\n this.sltBeamSize.setSelected(_maxInfo.beamSize.value);\n }\n }\n //House beam\n if (this.chkHasHouseBeam.currentValue) {\n if (_maxInfo.houseBeamSize.value === 0) {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id == 0 &&\n f.beamType == this.sltBeamType.currentValue\n );\n this.sltHouseBeamSize.setSelected(0);\n } else {\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) =>\n f.id >= _maxInfo.minHouseBeamSize.value &&\n f.beamType == this.sltBeamType.currentValue\n );\n if (\n this.sltHouseBeamSize.currentValue <\n _maxInfo.houseBeamSize.value\n ) {\n this.sltHouseBeamSize.setSelected(\n _maxInfo.houseBeamSize.value\n );\n }\n }\n } else {\n this.houseBeamSizeList = this.beamSizeList;\n this.sltHouseBeamSize.setSelected(\n this.sltBeamSize.currentValue\n );\n }\n }\n\n if (_maxInfo.thickness.value === 0) {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id == 0\n );\n this.sltRoofThickness.setSelectedAndHandleEvent(0);\n } else {\n this.thicknessList = this.objects.thicknessList.filter(\n (f) => f.id >= _maxInfo.minThickness.value\n );\n if (\n this.sltRoofThickness.currentValue <\n _maxInfo.thickness.value\n ) {\n this.sltRoofThickness.setSelectedAndHandleEvent(\n _maxInfo.thickness.value\n );\n }\n }\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.maxSpan = _maxInfo.maxSpan;\n this.maxSpanText = _maxInfo.maxSpanText;\n }\n this.maxBaySize = _maxInfo.maxBaySize;\n this.maxBaySizeText = _maxInfo.maxBaySizeText;\n this.maxThickness = _maxInfo.maxThickness;\n this.maxBeamSizeText = _maxInfo.maxBeamSizeText;\n this.flyoverBracketNumber = _maxInfo.flyoverBracketNumber;\n this.flyoverBracketNumberCutOut =\n _maxInfo.flyoverBracketNumberCutOut;\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumber =\n this.flyoverBracketNumber;\n this.currentBuildingInfo.buildingInfo.flyoverBracketNumberCutOut =\n this.flyoverBracketNumberCutOut;\n this.fasciaBracketNumber = _maxInfo.fasciaBracketNumber;\n this.fasciaBracketNumberCutOut =\n _maxInfo.fasciaBracketNumberCutOut;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumber =\n this.fasciaBracketNumber;\n this.currentBuildingInfo.buildingInfo.fasciaBracketNumberCutOut =\n this.fasciaBracketNumberCutOut;\n if (_structureType == 3) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.fasciaBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.fasciaBracketNumber\n );\n } else {\n //Fascia\n this.patiosManager.loadBracket(this.fasciaBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n }\n }\n if (_structureType == 1 || _structureType == 2) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.flyoverBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.flyoverBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n }\n }\n\n this.isVisibleOpenModal = false;\n this.isSaveAs = type;\n this.statusText =\n type === 1 ? STATUS_TEXT.COPY : STATUS_TEXT.REVISE;\n this.message.info(\"Operation completed successfully!\");\n // set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n });\n } else {\n this.message.error(data.data.error);\n }\n this.isOpening = false;\n },\n (error) => {\n this.isOpening = false;\n console.log(\"error :\", error);\n }\n );\n }\n onOpenFiles(type: number): void {\n const _diff = this.compareObject();\n if (_.isEmpty(_diff) || this.currentBuildingInfo.isOpen) {\n if (!this.currentBuildingInfo.files) {\n this.message.warning(\"File does not exist.\");\n return;\n }\n let _url = \"\";\n if (type === 1) {\n _url = `${environment.uploadUrl}/${this.currentBuildingInfo.files.engineeringFile}`;\n } else {\n _url = `${environment.uploadUrl}/${this.currentBuildingInfo.files.quotationFile}`;\n }\n const _link = document.createElement(\"a\");\n _link.href = _url;\n _link.target = \"_blank\";\n\n document.body.appendChild(_link);\n _link.click();\n _link.remove();\n } else {\n this.message.warning(\"You have to save before to print\");\n }\n }\n onUpdateJobFiles(info): void {\n this.jobService\n .updateJobFiles(info.id, info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = {\n ...this.currentBuildingInfo,\n files: info.files,\n };\n this.currentStep = 3;\n this.isVisible = false;\n this.isUploading = false;\n this.message.success(data.message);\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n }\n onUpload(): void {\n const _depositPer = this.currentQuoteInfo.quoteInfo.depositPer || 0;\n const _stage1Per = this.currentQuoteInfo.quoteInfo.stage1Per || 0;\n const _stage2Per = this.currentQuoteInfo.quoteInfo.stage2Per || 0;\n if (_depositPer + _stage1Per + _stage2Per > 100) {\n this.message.error(\"% Deposit + % Stage 1 + % Stage 2 > 100%\");\n return;\n }\n this.isUploading = true;\n this.currentQuoteInfo.clientInfo.jobNo =\n this.currentQuoteInfo.clientInfo.jobNo.toUpperCase();\n const info = {\n ...this.currentBuildingInfo,\n isSaveAs: this.isSaveAs,\n clientInfo: {\n ...this.currentQuoteInfo.clientInfo,\n },\n quoteInfo: {\n ...this.currentQuoteInfo.quoteInfo,\n },\n };\n this.currentStep = 3;\n if (this.isSaveAs > 0) {\n this.currentBuildingInfo._id = null;\n }\n if (this.currentBuildingInfo._id === null) {\n // New\n this.jobService\n .createJob(info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = { ...data.data.item };\n this.currentQuoteInfo = {\n quoteInfo: { ...this.currentBuildingInfo.quoteInfo },\n clientInfo: { ...this.currentBuildingInfo.clientInfo },\n };\n let _maxSpan = _.toNumber(\n this.maxThickness.replace(\"max (capacity)\", \"\")\n );\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n _maxSpan = this.maxSpan;\n }\n const _info = {\n ...data.data.jobInfo,\n maxSpan: _maxSpan,\n listBay: data.data.item.buildingInfo.listBay,\n };\n const _jobInfo = {\n ..._info,\n uploadFolder: environment.uploadFolder,\n pathLogo: `${environment.mediaFolder}/${data.data.jobInfo.pathLogo}`,\n pathPDF:\n data.data.jobInfo.pathPDF !== \"\"\n ? `${environment.mediaFolder}/${data.data.jobInfo.pathPDF}`\n : \"\",\n };\n this.statusText = STATUS_TEXT.SAVE;\n this.isSaveAs = 0;\n //set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n if (this.sltPanelDirectionShow.currentValue) {\n this.sltPanelDirectionShow.setValue(false);\n setTimeout(() => {\n this.printingManager.print(_jobInfo);\n }, 1000);\n } else {\n this.printingManager.print(_jobInfo);\n }\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n } else {\n // Edit\n this.jobService\n .UpdateJob(this.currentBuildingInfo._id, info)\n .pipe(first())\n .subscribe(\n (data) => {\n if (data.statusCode === 200) {\n this.currentBuildingInfo = { ...data.data.item };\n this.currentQuoteInfo = {\n quoteInfo: { ...this.currentBuildingInfo.quoteInfo },\n clientInfo: { ...this.currentBuildingInfo.clientInfo },\n };\n const _maxSpan = _.toNumber(\n this.maxThickness.replace(\"max (capacity)\", \"\")\n );\n const _info = {\n ...data.data.jobInfo,\n maxSpan: _maxSpan,\n listBay: data.data.item.buildingInfo.listBay,\n };\n const _jobInfo = {\n ..._info,\n uploadFolder: environment.uploadFolder,\n pathLogo: `${environment.mediaFolder}/${data.data.jobInfo.pathLogo}`,\n pathPDF:\n data.data.jobInfo.pathPDF !== \"\"\n ? `${environment.mediaFolder}/${data.data.jobInfo.pathPDF}`\n : \"\",\n };\n this.isSaveAs = 0;\n //set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n if (this.sltPanelDirectionShow.currentValue) {\n this.sltPanelDirectionShow.setValue(false);\n setTimeout(() => {\n this.printingManager.print(_jobInfo);\n }, 1000);\n } else {\n this.printingManager.print(_jobInfo);\n }\n } else {\n this.message.error(data.message);\n }\n },\n (error) => {\n this.message.error(error);\n this.isUploading = false;\n }\n );\n }\n }\n print2D() {\n // this.sldBuildingHeight.setMax(4000);\n this.printingManager.printTest();\n\n // this.sltColumnType.setSelected(\"2\");\n\n //this.sldNoOfBay.setValue(2);\n //console.log(this.dialogEditBay.totalBaySize, this.sldExistingLength.currentValue + this.sldExistingLength2.currentValue *2 + this.existingWallManager.geo_existingWallW1.width*2 + 200);\n }\n getPosts(_groups: any) {\n let _posts = [];\n _posts = _groups.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n );\n const _patios = _groups.filter(\n (x) => x.userData.category === GEOMETRY_CATEGORY.PATIOS\n );\n _patios.map((value) => {\n _posts.push(\n ...value.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n return value;\n });\n const listPosts = [];\n _posts.reduce(function (res, value) {\n if (!res[value.scale.y]) {\n res[value.scale.y] = {\n length: value.scale.y,\n qty: 0,\n };\n listPosts.push(res[value.scale.y]);\n }\n res[value.scale.y].qty += 1;\n return res;\n }, {});\n return listPosts;\n }\n\n public bindBuildingInfo(): any {\n const groups = this.scene.children.filter(\n (x) =>\n (x.userData.category === GEOMETRY_CATEGORY.PATIOS &&\n x.children.length > 0) ||\n x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST ||\n x.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n x.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL ||\n x.userData.type === GEOMETRY_TYPE.ROOF_PANEL ||\n x.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET ||\n x.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT ||\n x.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n x.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING ||\n x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n const listPosts = this.getPosts(groups);\n let cutoutCondition =\n this.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.sltExistingType.currentValue != BUILDING_SIDE.NONE &&\n this.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n let elementArray = {\n extFlyoverBrackets: [],\n flyoverBrackets: [],\n flyoverBracketCutOuts: [],\n fasciaBrackets: [],\n fasciaBracketCutouts: [],\n };\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n elementArray = this.utils.getInfoFromGeometry(\n this,\n groups,\n this.geometryManager,\n cutoutCondition,\n rakeCutCondition\n );\n } else {\n elementArray = this.utils.getInfoFromGeometryGableRoof(\n this,\n groups,\n this.geometryManager,\n cutoutCondition,\n rakeCutCondition\n );\n }\n\n const _structureType = _.toNumber(this.sltStructureType.currentValue);\n const _existingType = _.toNumber(this.sltExistingType.currentValue);\n\n const _buildingInfo = {\n patiosRoofType: this.patiosRoofType,\n isFBRoof: this.isFBRoof,\n listPosts,\n existingType: {\n value: _existingType,\n text: this.sltExistingType.currentText,\n },\n existingLength: this.sldExistingLength.currentValue,\n existingLength2: this.sldExistingLength2.currentValue,\n existingWidth1: this.sldExistingWidth1.currentValue,\n existingWidth2: this.sldExistingWidth2.currentValue,\n existingRoofPitch: _.toNumber(this.sltExistingRoofPitch.currentValue),\n fasciaDepth: this.sldFasciaDepth.currentValue,\n eaveHeight: this.sldExistingWallHeight.currentValue,\n eaveWidth: this.sldEaveWidth.currentValue,\n wallType: {\n value: _.toNumber(this.sltWallType.currentValue),\n text: this.sltWallType.currentText,\n },\n existingRoofType: {\n value: _.toNumber(this.sltExistingRoofType.currentValue),\n text: this.sltExistingRoofType.currentText,\n },\n flyoverBracketHeight: this.sldFlyOverBracketHeight.currentValue,\n extFlyoverBracketNumber: elementArray.extFlyoverBrackets, // _extFlyoverBrackets,\n flyoverBracketNumber: elementArray.flyoverBrackets, // _flyoverBrackets,\n flyoverBracketNumberCutOut: elementArray.flyoverBracketCutOuts, // _flyoverBracketsCutOut,\n fasciaBracketHeight: _.toNumber(\n this.sltFasciaUpstandBrackets.currentValue\n ),\n fasciaBracketNumber: elementArray.fasciaBrackets,\n fasciaBracketNumberCutOut: elementArray.fasciaBracketCutouts,\n // -------------\n backFascia: this.sltUpFasciaUpstandBracket.currentValue,\n rightToLeft: this.sltPanelDirection.currentValue,\n structureType: {\n value: _structureType,\n text: this.sltStructureType.currentText,\n },\n windClass: {\n value: _.toNumber(this.sltWindClass.currentValue),\n text: this.sltWindClass.currentText,\n },\n span: this.sldSpan.currentValue,\n multiSpan: this.sldMultiSpan.currentValue,\n buildingHeight: this.sldBuildingHeight.currentValue,\n frontOverhang: this.sldFrontOverhang.currentValue,\n backOverhang: this.sldBackOverhang.currentValue,\n baySize: this.sldBaySize.currentValue,\n noOfBay: this.sldNoOfBay.currentValue,\n roofPitch: _.toNumber(this.sltRoofPitch.currentValue),\n leftOverhang: this.sldLeftOverhang.currentValue,\n rightOverhang: this.sldRightOverhang.currentValue,\n roofOverallLength: this.sldRoofOverallLength.currentValue,\n roofOverallWidth: this.sldRoofOverallWidth.currentValue,\n minHeight: this.sldMinHeight.currentValue,\n isRapidSetCement: this.chkRapidSetCement.currentValue,\n hasHouseBeam: this.chkHasHouseBeam.currentValue,\n isDripBarge: this.sltDripBarge.currentValue,\n cutOut: {\n value: _.toNumber(this.sltCutOut.currentValue),\n text: this.sltCutOut.currentText,\n },\n //--------RakeCut\n leftCutType: {\n value: _.toNumber(this.sltLeftCutType.currentValue),\n text: this.sltLeftCutType.currentText,\n },\n rightCutType: {\n value: _.toNumber(this.sltRightCutType.currentValue),\n text: this.sltRightCutType.currentText,\n },\n leftCutVertical: this.sldLeftCutVertical.currentValue,\n leftCutHorizontal: this.sldLeftCutHorizontal.currentValue,\n rightCutVertical: this.sldRightCutVertical.currentValue,\n rightCutHorizontal: this.sldRightCutHorizontal.currentValue,\n //--------\n listBay: this.dialogEditBay.listBay,\n // -----------------------------\n roofSheetingType: {\n value: _.toNumber(this.sltRoofSheetingType.currentValue),\n text: this.sltRoofSheetingType.currentText,\n },\n thickness: {\n value: _.toNumber(this.sltRoofThickness.currentValue),\n text: this.sltRoofThickness.currentText,\n },\n flatBottom: {\n value: _.toNumber(this.sltFlatBottom.currentValue),\n text: this.sltFlatBottom.currentText,\n },\n bargeType: {\n value: _.toNumber(this.sltBargeType.currentValue),\n text: this.sltBargeType.currentText,\n },\n receiverType: {\n value: _.toNumber(this.sltReceiverType.currentValue),\n text: this.sltReceiverType.currentText,\n },\n zFlashingType: {\n value: _.toNumber(this.sltZFlashingType.currentValue),\n text: this.sltZFlashingType.currentText,\n },\n downpipeType: {\n value: _.toNumber(this.sltDownpipeType.currentValue),\n text: this.sltDownpipeType.currentText,\n },\n gutterType: {\n value: _.toNumber(this.sltGutterType.currentValue),\n text: this.sltGutterType.currentText,\n },\n beamType: {\n value: _.toNumber(this.sltBeamType.currentValue),\n text: this.sltBeamType.currentText,\n },\n columnType: {\n value: _.toNumber(this.sltColumnType.currentValue),\n text: this.sltColumnType.currentText,\n },\n baseFixingType: {\n value: _.toNumber(this.sltBaseFixingType.currentValue),\n text: this.sltBaseFixingType.currentText,\n },\n beamSize: {\n value: _.toNumber(this.sltBeamSize.currentValue),\n text: this.sltBeamSize.currentText,\n },\n houseBeamSize: {\n value: _.toNumber(this.sltHouseBeamSize.currentValue),\n text: this.sltHouseBeamSize.currentText,\n },\n // ------------------------\n colourRoof: {\n value: _.toNumber(this.sltColourRoof.currentValue),\n text: this.sltColourRoof.currentText,\n },\n colourBarge: {\n value: _.toNumber(this.sltColourBarge.currentValue),\n text: this.sltColourBarge.currentText,\n },\n colourGutter: {\n value: _.toNumber(this.sltColourGutter.currentValue),\n text: this.sltColourGutter.currentText,\n },\n colourZFlashing: {\n value: _.toNumber(this.sltColourZFlashing.currentValue),\n text: this.sltColourZFlashing.currentText,\n },\n colourPost: {\n value: _.toNumber(this.sltColourPost.currentValue),\n text: this.sltColourPost.currentText,\n },\n colourBeam: {\n value: _.toNumber(this.sltColourBeam.currentValue),\n text: this.sltColourBeam.currentText,\n },\n colourBracket: {\n value: _.toNumber(this.sltColourBracket.currentValue),\n text: this.sltColourBracket.currentText,\n },\n colourFasciaBracket: {\n value: _.toNumber(this.sltColourFasciaBracket.currentValue),\n text: this.sltColourFasciaBracket.currentText,\n },\n colourDownpipe: {\n value: _.toNumber(this.sltColourDownpipe.currentValue),\n text: this.sltColourDownpipe.currentText,\n },\n userData: elementArray,\n roofHeight: this.roofHeight,\n panelType: this.panelType,\n };\n return _buildingInfo;\n }\n onOkRibspan(): void {\n this.isVisibleOpenModalRibspan = false;\n this.router.navigateByUrl(\"/ribspan\");\n }\n onCancel(): void {\n this.isVisible = false;\n this.isVisibleOpenModal = false;\n this.isSaveAs = 0;\n }\n onCancelRibspan(): void {\n this.isVisibleOpenModalRibspan = false;\n this.isVisibleOpenModal = true;\n }\n public onShowAddCostClick(): void {\n if (!this.currentBuildingInfo.isOpen) {\n const _costList = this.currentQuoteInfo.quoteInfo.costList\n ? [...this.currentQuoteInfo.quoteInfo.costList]\n : [];\n if (_costList.length === 0) {\n _costList.push({ index: 1, description: \"\", value: 0 });\n }\n this.dialogAddCost.show(true, _costList);\n }\n }\n\n compareObject(): any {\n const _temp = this.bindBuildingInfo();\n delete _temp.userData;\n delete _temp.roofHeight;\n const _old = _.clone(this.oldBuildingInfo);\n const diff = _.omitBy(_temp, function (v, k) {\n const _value = _.get(_old, k);\n const _equal = _.isEqual(v, _value);\n return _equal;\n });\n return diff;\n }\n onViewBOM(): void {\n const _diff = this.compareObject();\n if (\n (this.currentBuildingInfo._id !== null && _.isEmpty(_diff)) ||\n this.currentBuildingInfo.isOpen\n ) {\n this.dialogBOM.show(\n true,\n this.currentBuildingInfo._id,\n this.currentBuildingInfo.clientInfo.jobNo,\n this.isAdmin,\n this.currentUser\n );\n } else {\n this.message.warning(\"You have to save before to print BOM\");\n }\n }\n\n onViewBOMTest(): void {\n this.dialogBOM.showTest(\n true,\n this.currentUser,\n this.currentBuildingInfo.BOMInfo,\n this.currentBuildingInfo.additionalBOM,\n this.currentBuildingInfo.quoteInfo\n );\n }\n\n public onAddBOM(price) {\n this.currentBuildingInfo.additionalBOM.push(price);\n this.onResetIdx();\n this.onCalcPrice();\n }\n public onDeleteBOM(data) {\n this.currentBuildingInfo.additionalBOM =\n this.currentBuildingInfo.additionalBOM.filter((f) => f.idx !== data.idx);\n this.onResetIdx();\n this.onCalcPrice();\n }\n\n onResetIdx() {\n const maxIdx = _.maxBy(this.currentBuildingInfo.BOMInfo, \"idx\");\n const _maxIdx = maxIdx.idx + 1;\n this.currentBuildingInfo.additionalBOM =\n this.currentBuildingInfo.additionalBOM.map((m, index) => {\n return { ...m, idx: _maxIdx + index };\n });\n }\n\n onSearch(): void {\n this.isSearching = true;\n const info = {\n userId: this.currentUser.user._id,\n jobNo: this.jobNoSearch.toUpperCase(),\n cusName: this.cusNameSearch,\n };\n this.jobService\n .getJobByUserId(info)\n .pipe(first())\n .subscribe(\n (data) => {\n this.dataOPEN = data.data.list;\n this.isSearching = false;\n },\n (error) => {\n console.log(\"error :\", error);\n this.isSearching = false;\n }\n );\n }\n onOpenById(id: any): void {\n this.isSearching = true;\n this.jobService\n .getById(id)\n .pipe(first())\n .subscribe(\n (data) => {\n this.currentBuildingInfo = { ...data.data.list, isOpen: true };\n if (!this.currentBuildingInfo.quoteInfo.costList) {\n this.currentBuildingInfo.quoteInfo.costList = [];\n }\n if (!this.currentBuildingInfo.additionalBOM) {\n this.currentBuildingInfo.additionalBOM = [];\n }\n if (\n this.currentBuildingInfo.quoteInfo.costList.length === 0 &&\n this.currentBuildingInfo.quoteInfo.addCostInstall > 0\n ) {\n this.currentBuildingInfo.quoteInfo.costList.push({\n index: 1,\n description: \"\",\n value: this.currentBuildingInfo.quoteInfo.addCostInstall,\n });\n }\n this.currentQuoteInfo = {\n clientInfo: { ...data.data.list.clientInfo },\n quoteInfo: { ...data.data.list.quoteInfo },\n };\n this.currentQuoteInfo.quoteInfo.costList = [\n ...this.currentBuildingInfo.quoteInfo.costList,\n ];\n const _structureType =\n data.data.list.buildingInfo.structureType.value;\n this.flyoverBracketNumber =\n data.data.list.buildingInfo.flyoverBracketNumber;\n this.flyoverBracketNumberCutOut =\n data.data.list.buildingInfo.flyoverBracketNumberCutOut;\n this.fasciaBracketNumber =\n data.data.list.buildingInfo.fasciaBracketNumber || 0;\n this.fasciaBracketNumberCutOut =\n data.data.list.buildingInfo.fasciaBracketNumberCutOut || 0;\n this.uiManager\n .loadFromObject(data.data.list.buildingInfo)\n .then(() => {\n if (_structureType === 1 || _structureType === 2) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.flyoverBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.flyoverBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.flyoverBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.flyoverBracketNumberCutOut\n );\n }\n }\n if (_structureType == 3) {\n if (\n HomeComponent.ins.patiosRoofType ===\n PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n // Phan nay ve braket cua mai gable phia sau\n // this.patiosManager.loadBracket(this.fasciaBracketNumberCutOut);\n this.patiosManager.loadBracket(UI.span >= 4000 ? 3 : 2);\n\n // Phan nay ve braket cua mai cutout\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumber\n );\n\n // Load braket mai chiu luc\n this.patiosManager.loadSideGableBracket(\n this.fasciaBracketNumber\n );\n } else {\n this.patiosManager.loadBracket(this.fasciaBracketNumber);\n this.patiosManager.loadBracketCutout(\n this.fasciaBracketNumberCutOut\n );\n }\n }\n this.isVisibleOpenModal = false;\n this.statusText = STATUS_TEXT.COPY;\n this.isSearching = false;\n // set oldValue\n this.oldBuildingInfo = _.clone(\n this.currentBuildingInfo.buildingInfo\n );\n //\n });\n },\n (error) => {\n console.log(\"error :\", error);\n this.isSearching = false;\n }\n );\n }\n\n onOpenPropertyClick(): void {\n this.isVisibleProperty = !this.isVisibleProperty;\n setTimeout(() => {\n this.resizeEventHandle();\n }, 300);\n }\n onRoofSheetingTypeChanged(): void {\n this.sltBargeType.setSelected(this.sltRoofSheetingType.currentValue);\n this.sltReceiverType.setSelected(this.sltRoofSheetingType.currentValue);\n this.sltZFlashingType.setSelected(this.sltRoofSheetingType.currentValue);\n }\n\n private initObject() {\n this.isAdmin =\n this.currentUser.user.roles === this.objects.roles.admin ? true : false;\n if (this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.maxSpan = this.env.span.max;\n }\n this.maxBaySize = this.env.baySize.max;\n this.beamSizeList = this.objects.beamSizeList.filter(\n (f) => f.beamType == 0\n );\n this.houseBeamSizeList = this.objects.beamSizeList.filter(\n (f) => f.beamType == 0\n );\n this.thicknessList = [...this.objects.thicknessList];\n this.baseFixingTypeList = [...this.objects.baseFixingTypeList];\n const _template = TEMPLATE.find(\n (f) =>\n f.type === (this.existingHouseType === -1 ? 1 : this.existingHouseType)\n );\n // Old Job\n this.currentBuildingInfo = {\n _id: null,\n userId: this.currentUser.user._id,\n isOpen: false,\n buildingInfo: {\n ..._template,\n patiosRoofType: this.patiosRoofType,\n isFBRoof: this.isFBRoof,\n existingRoofPitch: this.env.existingRoofPitch.default,\n fasciaDepth: this.env.fasciaDepth.default,\n eaveHeight: this.env.eaveHeight.default,\n eaveWidth: this.env.eaveWidth.default,\n flyoverBracketHeight: this.env.flyOverBracketHeight.default,\n fasciaBracketHeight: this.env.fasciaUpstandBrackets.default,\n backFascia: false,\n hasHouseBeam: false,\n multiSpan: this.env.multiSpan.default,\n buildingHeight: this.env.height.default,\n frontOverhang: this.env.frontOverhang.default,\n backOverhang: this.env.backOverhang.default,\n roofOverallLength: this.env.baySize.default,\n roofPitch: 2,\n leftOverhang: this.env.leftOverhang.default,\n rightOverhang: this.env.rightOverhang.default,\n //RakeCut\n leftCutType: {\n value: 0,\n },\n rightCutType: {\n value: 0,\n },\n leftCutVertical: this.env.rakeCutVertical.default,\n leftCutHorizontal: this.env.rakeCutHorizontal.default,\n rightCutVertical: this.env.rakeCutVertical.default,\n rightCutHorizontal: this.env.rakeCutHorizontal.default,\n //\n rightToLeft: false,\n roofOverallWidth:\n this.env.span.default +\n this.env.frontOverhang.default +\n this.env.backOverhang.default,\n minHeight: 0,\n colourDownpipe: {\n value: 14214630,\n },\n colourBracket: {\n value: 15000277,\n },\n colourFasciaBracket: {\n value: 15000277,\n },\n colourBeam: {\n value: 15000277,\n },\n colourPost: {\n value: 15000277,\n },\n colourZFlashing: {\n value: 15000277,\n },\n colourGutter: {\n value: 15000277,\n },\n colourBarge: {\n value: 15000277,\n },\n colourRoof: {\n value: 15000277,\n },\n beamSize: {\n value: 1,\n },\n houseBeamSize: {\n value: 1,\n },\n baseFixingType: {\n value: 0,\n },\n columnType: {\n value: 0,\n },\n beamType: {\n value: 0,\n },\n gutterType: {\n value: 0,\n },\n downpipeType: {\n value: 0,\n },\n zFlashingType: {\n value: 0,\n },\n receiverType: {\n value: 0,\n },\n bargeType: {\n value: 0,\n },\n flatBottom: {\n value: 15000277,\n },\n thickness: {\n value: 1,\n },\n roofSheetingType: {\n value: 0,\n },\n windClass: {\n value: 0,\n },\n structureType: {\n value: 3,\n },\n wallType: {\n value: 0,\n },\n roofType: {\n value: 0,\n },\n panelType: this.panelType,\n },\n clientInfo: {\n jobNo: \"\",\n cusName: \"\",\n address: \"\",\n suburb: \"\",\n state: \"\",\n postcode: \"\",\n email: \"\",\n phone: \"\",\n supplyType: \"supply_install\",\n date: new Date(),\n },\n quoteInfo: {\n nett: 0,\n total0: 0,\n totalPrice: 0,\n discountPer: 0,\n discount: 0,\n depositPer: 0,\n stage1Per: 0,\n stage2Per: 0,\n deposit: 0,\n stage1: 0,\n stage2: 0,\n finalPayment: 0,\n addCostInstall: 0,\n userNote: \"\",\n note: \"\",\n gst: 0,\n fasciaInstall: 0,\n flyOverInstall: 0,\n installMaterial: 0,\n supplyOnlyKits: 0,\n perPostInstall: 0,\n addCost: 0,\n costList: [],\n customText: null,\n },\n additionalBOM: [],\n };\n // Current Job\n this.currentQuoteInfo = { ...this.currentBuildingInfo };\n // this.dataBOM = { quoteInfo: { ...this.currentBuildingInfo.quoteInfo } };\n }\n onApplyToAll(): void {\n this.sltColourBarge.setSelected(this.sltColourRoof.currentValue);\n this.sltColourZFlashing.setSelected(this.sltColourRoof.currentValue);\n this.sltColourGutter.setSelected(this.sltColourRoof.currentValue);\n }\n\n public setPatiosWidth(totalWidth: number) {\n let realWidth = totalWidth;\n if (\n UI.structureType == CONNECTION_TYPE.EXISTING &&\n UI.existingType == BUILDING_SIDE.BOTH &&\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.isFBRoof\n ) {\n realWidth =\n totalWidth -\n UI.overhangLeft -\n UI.overhangRight -\n OFFSET_GUTTER_TO_WALL * 2;\n }\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND &&\n UI.existingType == BUILDING_SIDE.BOTH &&\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.isFBRoof\n ) {\n realWidth = Math.ceil(totalWidth - 2 * FASCIA_BRACKET_FIT);\n }\n let baySize = realWidth;\n let noOfBay = 1;\n if (realWidth > CONFIG.baySize.max) {\n noOfBay = Math.ceil(realWidth / CONFIG.baySize.max);\n baySize = Math.ceil(realWidth / noOfBay);\n }\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.isFBRoof &&\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n this.sldSpan.setValueAndHandleEvent(realWidth, true);\n }\n if (\n this.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF ||\n (this.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.isFBRoof)\n ) {\n this.sldBaySize.setValue(baySize);\n this.sldNoOfBay.setValue(noOfBay);\n }\n }\n public onBtnRakeCutLeftClick(e) {\n HomeComponent.ins.sltLeftCutType.setSelected(0);\n }\n public onBtnRakeCutRightClick(e) {\n HomeComponent.ins.sltRightCutType.setSelected(0);\n }\n public onBtnCutoutClick(e) {\n HomeComponent.ins.sltCutOut.setSelected(0);\n }\n public onsltUpFasciaUpstandBracketChange(e) {\n if (UI.upstandBraketType == 0 && UI.isUpFasciaUpstandardBracket) {\n HomeComponent.ins.sltFasciaUpstandBrackets.setSelected(150);\n HomeComponent.ins.patiosManager.load();\n }\n }\n\n onShowThumbnailClick(data): void {\n this._albums.length = 0;\n var _url = `${environment.uploadUrl}/${data.files.thumbnailFile}`;\n const album: Album = {\n src: _url,\n caption: `${data?.clientInfo?.cusName} [#${data?.clientInfo?.jobNo}]`,\n thumb: _url,\n };\n\n this._albums.push(album);\n this._lightbox.open(this._albums, 0);\n }\n}\n","
\n
\n \n
\n \n \n
\n \n
\n
\n \n
\n {{\n currentBuildingInfo ? currentBuildingInfo.clientInfo.jobNo : \"Empty\"\n }}\n
\n
\n
\n \n Status: {{ isPricing ? \"Pricing\" : statusText }}...\n \n (Error: {{ statusError }})\n \n \n
\n
\n \n
\n \n
\n
\n
\n\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n BETA\n
\n
\n
\n
\n
\n
\n
\n \n\n\n\n \n \n \n New\n \n \n \n \n \n \n\n \n \n \n \n
\n \n
\n

Patios Roof Type:

\n
\n
\n \n \n \n \n \n \n
\n
\n
\n\n \n
\n \n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n
\n \n
\n
\n
\n \n
\n
\n
\n \n \n\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n \n
\n \n
\n
\n
\n
\n
\n
\n \n
\n \n
\n
\n
\n
\n
\n
\n \n \n
\n \n \n
\n \n
\n
\n
\n
\n
\n

EXISTING BUILDING

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

FLY OVER

\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n

BACK FLY OVER

\n
\n
\n
\n
\n \n \n
\n \n
\n
\n
\n
\n
\n

TO FASCIA

\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n

FASCIA UPSTAND BRACKET

\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n

BACK FASCIA

\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n 0\"\n >\n \n Back\n \n \n
\n
\n \n \n Open\n \n
\n
\n

Job No.:

\n
\n
\n \n
\n
\n
\n

Client Name:

\n
\n
\n \n
\n
\n
\n \n \n Search\n \n \n
\n
\n \n \n \n \n Quote No.\n Quote Date\n Client Name\n User Name\n Prod.\n Total Price\n Action\n \n \n \n \n {{ data.clientInfo.jobNo }}\n {{ data.clientInfo.date | date : \"dd/MM/yyyy\" }}\n {{ data.clientInfo.cusName }}\n {{ data.userId.fullName }}\n \n {{\n data?.buildingInfo?.panelType\n }}\n \n \n {{\n data?.buildingInfo?.panelType\n }}\n \n \n {{ data.quoteInfo.totalPrice | currency }}\n \n \n \n
\n Switch to RibSpan\n
\n \n \n
\n \n \n
\n \n \n
\n \n
\n \n \n
\n \n
\n \n \n \n \n \n
\n \n
\n\n\n\n \n \n \n \n \n \n \n \n \n \n \n
\n
\n

Job No.

\n
\n
\n \n
\n
\n
\n

Date

\n
\n
\n \n \n
\n
\n \n
\n
\n

Client Name

\n
\n
\n \n
\n
\n
\n

Site Address

\n
\n
\n \n
\n
\n \n
\n
\n

Suburb

\n
\n
\n \n
\n
\n
\n

State

\n
\n
\n \n
\n
\n \n
\n
\n

Postcode

\n
\n
\n \n
\n
\n
\n

Email Address

\n
\n
\n \n
\n
\n \n
\n
\n

Phone

\n
\n
\n \n
\n
\n
\n

Supply Type

\n
\n
\n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n
\n Quote Includes\n

{{ currentQuoteInfo.quoteInfo.note }}

\n
\n \n \n
\n Note\n \n
\n
\n Price\n \n \n
\n Nett\n
\n
\n {{ currentQuoteInfo.quoteInfo.nett | currency }}\n
\n
\n \n \n
\n Off Fascia Install\n
\n
\n {{\n currentQuoteInfo.quoteInfo.fasciaInstall | currency\n }}\n
\n \n \n \n
\n Fly Over Install\n
\n
\n {{\n currentQuoteInfo.quoteInfo.flyOverInstall | currency\n }}\n
\n \n \n \n
\n Install Mark up on material\n
\n
\n {{\n currentQuoteInfo.quoteInfo.installMaterial | currency\n }}\n
\n \n \n \n
\n Per post install\n
\n
\n {{\n currentQuoteInfo.quoteInfo.perPostInstall | currency\n }}\n
\n \n \n \n
\n Std Additional Costs\n
\n
\n {{ currentQuoteInfo.quoteInfo.addCost | currency }}\n
\n \n \n \n
\n Mark up on Supply Kits\n
\n
\n {{\n currentQuoteInfo.quoteInfo.supplyOnlyKits | currency\n }}\n
\n \n \n
\n
\n Additional Cost Install\n
\n
\n \n \n \n Add More\n \n \n {{ addCostInstallDes }}\n
\n
\n {{\n currentQuoteInfo.quoteInfo.addCostInstall | currency\n }}\n
\n
\n \n
\n
\n GST\n
\n
\n {{ currentQuoteInfo.quoteInfo.gst | currency }}\n
\n
\n \n
\n
\n Total Price\n
\n \n
\n {{ currentQuoteInfo.quoteInfo.totalPrice | currency }}\n
\n
\n \n
\n
\n

\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ currentQuoteInfo.quoteInfo.deposit | currency }}\n
\n
\n \n
\n
\n

\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ currentQuoteInfo.quoteInfo.stage1 | currency }}\n
\n
\n \n
\n
\n

\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n {{ currentQuoteInfo.quoteInfo.stage2 | currency }}\n
\n
\n \n
\n
\n Final Payment\n
\n
\n \n
\n
\n {{\n currentQuoteInfo.quoteInfo.finalPayment | currency\n }}\n
\n
\n \n \n
\n Discount\n
\n
\n \n \n \n
\n
\n \n
\n
\n \n \n \n 0\"\n >{{ currentQuoteInfo.quoteInfo.discount | currency }}\n
\n \n \n \n\n \n
\n \n
\n
\n

Uploading, Please wait...

\n
\n
\n
\n
\n
\n 0 && currentStep < 3\"\n >\n \n Previous\n \n \n Next Step\n \n \n 0)\n \"\n >\n \n {{ isUploading ? \"Uploading...\" : \"Save & Upload\" }}\n \n
\n
\n 0)\n \"\n >More Information\n 0)\n \"\n nzCheckedChildren=\"Show\"\n nzUnCheckedChildren=\"Hide\"\n class=\"margin-right-5\"\n >\n
\n
\n\n\n\n
\n
\n
\n \n Existing House Detail\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0 &&\n sldExistingLength2Visible\n ? ''\n : 'none'\n \"\n >\n \n \n \n 0 &&\n sldExistingWidth2Visible\n ? ''\n : 'none'\n \"\n >\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Existing House
- Roof Type:\n \n
- Type:\n \n
- Length (L1):\n \n
- Width (W1):\n \n
- Length (L2):\n \n
- Width (W2):\n \n
Pitch:\n \n
Fascia depth:\n \n
Eave Height:\n \n \n
Eave Width:\n \n
Wall Type:\n \n
Cutout:\n \n
\n
\n
\n \n Patios Information\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Connection Type:\n \n
Superior Flyover Bracket:\n \n \n \n
Fascia Upstand Brackets:\n \n \n
Up Fascia Upstandard Bracket:\n \n \n \n
Wind Class:\n \n
Span (S):\n \n \n
\n {{ maxSpanText }}\n
\n
Multi Span (S2):\n \n
Patios Height (H):\n \n
Front Overhang (O):\n \n
Back Overhang (O2):\n \n
Bay Size - Nominal (B):\n \n
\n {{ maxBaySizeText }}\n
\n
No Of Bay:\n \n
Roof Pitch:\n \n
\n {{\n patiosRoofType === \"flat\"\n ? \"Beam Left Overhang:\"\n : \"Left Overhang:\"\n }}\n \n \n
\n {{\n patiosRoofType === \"flat\"\n ? \"Beam Right Overhang:\"\n : \"Right Overhang:\"\n }}\n \n \n
Roof Overall Length:\n \n \n \n {{ sldRoofOverallLength.currentValue }}
\n
\n {{ roofPercent }}\n
\n \n
Roof Overall Width:\n \n {{\n sldRoofOverallWidth.currentValue\n }}\n
Min. Height Under Beam:\n \n {{ sldMinHeight.currentValue }}\n
Rake Cut
- Left Cut\n \n \n
+ Vertical\n \n
+ Horizontal\n \n
- Right Cut\n \n \n
+ Vertical\n \n
+ Horizontal\n \n
\n
\n
\n \n Material Detail\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Roof Sheeting Type:\n \n \n
Thickness:\n \n \n
\n {{ maxThickness }}\n
\n
Flat Bottom Colour:\n \n \n
Barge Type:\n \n \n
Drip Barge:\n \n
Receiver Type:\n \n \n
Z Flashing Type:\n \n \n
Downpipe Type:\n \n \n
Gutter Type:\n \n \n
Beam Type:\n \n \n
Beam Size:\n \n \n
\n {{ maxBeamSizeText }}\n
\n
\n House Beam Size:\n \n \n
Column Type:\n \n \n
Base Fixing Type:\n \n \n
\n Rapid Set Cement:\n (5 bags per post)\n \n \n \n
\n \n
\n \n Color Selections\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Roof:\n \n \n \n
Barge:\n \n \n
Gutter:\n \n \n
Z Flashing:\n \n \n
Post:\n \n \n
Beam:\n \n \n
Flyover Bracket:\n \n \n
Fascia Upstand Bracket:\n \n \n
Downpipe:\n \n \n
\n \n Apply To All\n \n
\n \n \n \n\n\n \n\n\n
\n
\n
\n
\n \n
Options
\n \n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
- Panel Direction
- Panel Layout\n \n
- Beam Layout\n \n
- Edit Bay\n \n
\n
\n
\n
\n
\n
\n

\n Total Price:\n {{\n currentBuildingInfo.quoteInfo.totalPrice | currency\n }}\n

\n
\n
\n \n \n \n \n \n
\n \n
\n
\n SPC Software:\n {{ version }}\n
\n
\n\n\n\n\n\n\n\n\n\n\n
\n \n
\n","export * from './home.component';","export * from './login.component';","import { Component, OnInit } from '@angular/core';\nimport { Router, ActivatedRoute } from '@angular/router';\nimport { FormBuilder, FormGroup, Validators } from '@angular/forms';\nimport { first } from 'rxjs/operators';\nimport { AuthenticationService } from '../../services';\nimport { NzMessageService } from 'ng-zorro-antd/message';\nimport { STATUS_USER } from '../../app.config';\nimport { environment } from 'src/environments/environment';\nimport * as CryptoJS from 'crypto-js';\n\n@Component({\n templateUrl: 'login.component.html',\n styleUrls: ['login.component.scss']\n})\nexport class LoginComponent implements OnInit {\n loginForm: FormGroup;\n loading = false;\n submitted = false;\n returnUrl: string;\n error = '';\n loginType = 'SOFTWARE';\n signUpUrl: string;\n backendUrl: string;\n\n constructor(\n private formBuilder: FormBuilder,\n private route: ActivatedRoute,\n private router: Router,\n private message: NzMessageService,\n private authenticationService: AuthenticationService\n ) {\n // redirect to home if already logged in\n if (this.authenticationService.currentUserValue) {\n this.router.navigate(['/']);\n window.location.replace('/');\n }\n }\n\n ngOnInit() {\n this.loginForm = this.formBuilder.group({\n userName: ['', Validators.required],\n password: ['', Validators.required],\n loginType: [this.loginType, Validators.required],\n });\n\n // get return url from route parameters or default to '/'\n this.returnUrl = this.route.snapshot.queryParams['returnUrl'] || '/';\n this.signUpUrl = environment.backendUrl + 'login?ref=SIGN_UP';\n }\n\n // convenience getter for easy access to form fields\n get f() { return this.loginForm.controls; }\n\n onEncrypt = (plainText: string): string => {\n const b64 = CryptoJS.AES.encrypt(plainText, 'spc@2020').toString();\n const e64 = CryptoJS.enc.Base64.parse(b64);\n return e64.toString(CryptoJS.enc.Hex);\n }\n\n onSubmit() {\n this.submitted = true;\n\n // stop here if form is invalid\n if (this.loginForm.invalid) {\n\n if (this.loginForm.value.userName === '') {\n this.message.error('Username is required')\n return;\n }\n if (this.loginForm.value.password === '') {\n this.message.error('Password is required')\n return;\n }\n }\n this.loading = true;\n if (this.loginForm.value.loginType === 'BACKEND') {\n const _userName = this.onEncrypt(this.loginForm.value.userName);\n const _password = this.onEncrypt(this.loginForm.value.password);\n window.location.href = environment.backendUrl + `login?e=${_userName}&p=${_password}`;\n } else {\n this.authenticationService.login(this.f.userName.value, this.f.password.value)\n .pipe(first())\n .subscribe(\n data => {\n const _status = data.data.user.status;\n if ([STATUS_USER[0].key, STATUS_USER[2].key].includes(_status)) {\n window.location.replace(this.returnUrl);\n } else {\n this.loading = false;\n this.error = 'Unauthorized';\n }\n },\n error => {\n this.error = error;\n this.loading = false;\n });\n }\n }\n}\n","
\n
\n
\n
THE FUTURE IN INSULATED ROOFING AND PANELS
\n \n
\n\n
\n
\n
\n \n
\n
\n

\n \n
\n LOG-IN TO YOUR ACCOUNT\n
\n

\n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n \n \n
\n
\n
\n \n
\n
\n \n \n \n \n
\n
\n \n
{{error}}
\n
\n
\n
\n New to us? Sign Up\n
\n
\n\n
\n
\n
\n
\n Superior Panel Construction is one of Australia’s leading suppliers
of high quality insulated roofing and\n wall cladding panels.\n
\n
\n
\n
\n\n
\n\n
\n
\n \n
\n
\n \n Copyright @ 2020 - SUPERIOR PANEL CONSTRUCTION. All Rights Reserved.\n
\n
\n \n
\n","import { Injectable } from \"@angular/core\";\nimport { BUILDING_SIDE, CONNECTION_TYPE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG, FASCIA_BRACKET_FIT, FIT_FLYOVER_BRAKET_ON_ROOF, OBJECT_TYPE } from \"src/app/app.constants\";\nimport { Vector3 } from \"three\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app/core/ui\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport ArrowControl from \"src/app/models/ArrowControl.model\";\nimport { MaterialManager } from \"../material.manager\";\nimport { PATIOS_ROOF_TYPE } from \"src/app/app.config\";\nimport _ from \"lodash\"\nimport { Util } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { BaseManager } from \"src/app/core/base.manager\";\nimport { UIControl } from \"src/app/models/uicontrol.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class CutBeamManager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE,\n UI.Controls.SPAN,\n UI.Controls.MULTI_SPAN,\n UI.Controls.OVERHANG_FRONT,\n UI.Controls.BAYS,\n UI.Controls.OVERHANG_RIGHT,\n UI.Controls.EAVE_WIDTH,\n UI.Controls.STRUCTURE_TYPE,\n UI.Controls.CUTOUT,\n UI.Controls.PATIOS_ROOF_PITCH,\n UI.Controls.FASCIA_DEPTH,\n UI.Controls.EXISTING_ROOF_PITCH,\n UI.Controls.FLYOVER_BRAKET_HEIGHT,\n UI.Controls.FASCIA_UPSTAND_BRAKET,\n UI.Controls.EXISTING_WALL_HEIGHT,\n UI.Controls.ROOF_SHEETING_TYPE,\n UI.Controls.ROOF_THICKNESS\n ]\n \n userData = undefined;\n offset = 200;\n addControlOptions = undefined;\n private utils: Util;\n\n constructor(private selMgr: SelectionManager){\n super()\n this.utils = new Util();\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.CUT_BEAM }\n this.addControlOptions = {\n container: this.container,\n userData: { type: OBJECT_TYPE.CUT_BEAM }\n }\n })\n }\n \n load(): Promise{\n return new Promise(resolve => {\n this.container.children = [];\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n let offsetX = - UI.totalBayLength / 2;\n\n if (UI.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF && HomeComponent.ins.isFBRoof) {\n offsetX = UI.span / 2;\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX += UI.eaveWidth\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX -= UI.eaveWidth\n }\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n if(UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX += UI.eaveWidth + FASCIA_BRACKET_FIT\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX -= UI.eaveWidth + FASCIA_BRACKET_FIT\n }\n }\n let diff = UI.existingLength1 - UI.span;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (diff / 2 + UI.existingLength2)\n } else {\n offsetX -= (diff / 2)\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (- diff / 2 - UI.existingLength2)\n } else {\n offsetX -= (- diff / 2)\n }\n }\n\n offsetZ = - UI.existingWidth1 / 2;\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n offsetZ += UI.eaveWidth\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n offsetZ += UI.eaveWidth + FASCIA_BRACKET_FIT\n } else if(\n UI.structureType == CONNECTION_TYPE.FLY_OVER\n || UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n offsetZ -= 65\n }\n\n let offsetY = EXISTING_BUILDING_CONFIG.FIT_FROM_TOP_TO_CUTBEAM;\n if(UI.structureType == CONNECTION_TYPE.FLY_OVER) {\n offsetY += UI.eaveHeight + 150 + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n } else if(UI.structureType == CONNECTION_TYPE.EXISTING) {\n offsetY += UI.height\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType + 150\n }\n\n for (let i = 0; i < UI.listBay.length; i++) {\n offsetZ += UI.listBay[i].value\n if (i == UI.listBay.length - 1) {\n return\n }\n\n if (UI.listBay[i].isCut) {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_EXIT_CUTBEAM;\n } else {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_CUTBEAM;\n }\n\n new UIControl(\n [0.08,0.08,0.08], \n [offsetX + this.offset, offsetY, offsetZ], \n {\n ...this.addControlOptions,\n userData: {\n type: OBJECT_TYPE.CUT_BEAM,\n bayIndex: i\n }\n }\n );\n }\n } else {\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n offsetZ += UI.eaveWidth\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n offsetZ += UI.eaveWidth + FASCIA_BRACKET_FIT\n }\n\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT && !HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()) {\n offsetX += UI.eaveWidth\n } else if (UI.existingType == BUILDING_SIDE.RIGHT && !HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()) {\n offsetX -= UI.eaveWidth\n }\n } else if(\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n || UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ) {\n if(UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX += UI.eaveWidth + FASCIA_BRACKET_FIT\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX -= UI.eaveWidth + FASCIA_BRACKET_FIT\n }\n }\n let diff = UI.existingLength1 - UI.totalBayLength;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (diff / 2 + UI.existingLength2)\n } else {\n offsetX -= (diff / 2)\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n if(UI.cutOutType == CUTOUT_ENABLE.YES) {\n offsetX -= (- diff / 2 - UI.existingLength2)\n } else {\n offsetX -= (- diff / 2)\n }\n }\n\n if(UI.structureType == CONNECTION_TYPE.FREE_STANDING && UI.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF) {\n offsetZ = (UI.span + UI.multiSpan) / 2\n }\n\n let offsetY = EXISTING_BUILDING_CONFIG.FIT_FROM_TOP_TO_CUTBEAM;\n if(UI.patiosRoofType == PATIOS_ROOF_TYPE.FLAT_ROOF) {\n if(UI.structureType == CONNECTION_TYPE.EXISTING) {\n offsetY += UI.height - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FLY_OVER) {\n offsetY += UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER) {\n offsetY += UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n offsetY += UI.eaveHeight - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType + 100 - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n } else if(UI.structureType == CONNECTION_TYPE.FREE_STANDING) {\n offsetY += UI.height - 100 - this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)\n }\n } else {\n if(UI.structureType == CONNECTION_TYPE.FLY_OVER) {\n offsetY += UI.eaveHeight + 150 + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n } else if(UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n offsetY += UI.eaveHeight + +UI.upstandBraketType + 150\n } else if(UI.structureType == CONNECTION_TYPE.FREE_STANDING) {\n offsetY += UI.eaveHeight\n }\n }\n\n\n for (let i = 0; i < UI.listBay.length; i++) {\n offsetX += UI.listBay[i].value\n if (i == UI.listBay.length - 1) {\n return\n }\n \n if (UI.listBay[i].isCut) {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_EXIT_CUTBEAM;\n } else {\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_CUTBEAM;\n }\n \n new UIControl(\n [0.08,0.08,0.08], \n [offsetX, offsetY, offsetZ + this.offset], \n {\n ...this.addControlOptions,\n userData: {\n type: OBJECT_TYPE.CUT_BEAM,\n bayIndex: i\n }\n }\n );\n }\n }\n }\n\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n \n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height;\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { OBJECT_TYPE } from \"src/app/app.constants\";\nimport { Vector3 } from \"three\";\nimport { BaseManager } from \"src/app/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app/core/ui\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport ClickControl from \"src/app/models/ClickControl.model\";\nimport { PATIOS_ROOF_TYPE } from \"src/app/app.config\";\n\n@Injectable({ providedIn: 'root' })\nexport class CutOutManager extends BaseManager {\n controls = [\n 'sldEaveWidth',\n 'sldExistingWallHeight',\n 'sldFasciaDepth',\n 'sldBaySize',\n 'sldExistingLength',\n 'sldExistingLength2',\n 'sldExistingWidth1',\n 'sldExistingWidth2',\n 'sltExistingType',\n 'sltStructureType',\n 'sltWindClass',\n 'sltWallType',\n 'sltExistingRoofType',\n 'sldMultiSpan',\n 'sldBuildingHeight',\n 'sldFrontOverhang',\n 'sldBackOverhang',\n 'sldLeftOverhang',\n 'sldRightOverhang',\n 'sltRoofPitch',\n 'sldFlyOverBracketHeight',\n 'sldNoOfBay',\n 'dialogEditBay',\n 'sltExistingRoofPitch',\n 'sldRoofOverallLength',\n 'sldRoofOverallWidth',\n 'sldMinHeight',\n 'sltLeftCutType',\n 'sltRightCutType',\n 'sldLeftCutVertical',\n 'sldLeftCutHorizontal',\n 'sldRightCutVertical',\n 'sldRightCutHorizontal',\n 'sltFlatBottom',\n 'sltZFlashingType',\n 'sltRoofSheetingType',\n 'sltBaseFixingType',\n 'sltRoofThickness',\n 'sltBargeType',\n 'sltDownpipeType',\n 'sltGutterType',\n 'sltBeamType',\n 'sltBeamSize',\n 'sltReceiverType',\n 'sltColumnType',\n 'sltColourRoof',\n 'sltColourBarge',\n 'sltColourGutter',\n 'sltColourZFlashing',\n 'sltColourPost',\n 'sltColourBeam',\n 'sltColourBracket',\n 'sltColourFasciaBracket',\n 'sltColourDownpipe',\n 'sltFasciaUpstandBrackets',\n ]\n \n userData = undefined;\n offset = 200;\n startX = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.CLICK_CONTROL_CUTOUT }\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF){\n return\n }\n\n let cutoutCondition =\n HomeComponent.ins.sltExistingType.currentValue != 0 &&\n HomeComponent.ins.patiosManager.cutoutCondition &&\n HomeComponent.ins.sldExistingWidth1.currentValue > 0 &&\n HomeComponent.ins.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n let offsetZ = UI.span + UI.multiSpan + UI.overhangFront - UI.existingWidth1 / 2 - (UI.span + UI.multiSpan + UI.overhangFront - UI.existingWidth1) / 2 ;\n if(UI.cutOutType == 0){\n if(UI.existingType == 1 || UI.existingType == 3){\n new ClickControl(\n this.container, \n { \n pos: new Vector3(- UI.existingLength1 / 2 - this.offset, 0, offsetZ),\n userData: {...this.userData, left: true},\n rotation: new Vector3(Math.PI / 2, 0, Math.PI)\n }\n );\n }\n if(UI.existingType == 2 || UI.existingType == 3){\n new ClickControl(\n this.container, \n { \n pos: new Vector3( UI.existingLength1 / 2 + this.offset, 0, offsetZ),\n userData: {...this.userData, right: true},\n rotation: new Vector3(Math.PI / 2, 0, 0)\n }\n );\n }\n }\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { MOUSE_EVENT, OBJECT_TYPE } from \"src/app/app.constants\";\nimport { UIControl } from \"src/app/models/uicontrol.model\";\nimport { Object3D, Sprite, Vector2, Vector3 } from \"three\";\nimport { BaseManager } from \"src/app/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app/core/ui\";\nimport {DragControls} from 'three/examples/jsm/controls/DragControls'\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { MaterialManager } from \"../material.manager\";\nimport ArrowControl from \"src/app/models/ArrowControl.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class EditLength2Manager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE\n ]\n \n userData = undefined;\n offset = 400;\n startX = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.UI_CONTROL_LENGTH2 }\n this.selMgr.addEventListener( 'dragstart', ( event ) => {\n this.startX = event.object.position.x;\n });\n this.selMgr.addEventListener ( 'drag', this.onDrag.bind(this), this.container)\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n if(UI.existingLength2){\n return\n }\n if( (UI.existingType == 1 || UI.existingType == 3) && UI.existingWidth1 > 620){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3(- UI.existingLength1 / 2 - this.offset, 0, UI.existingWidth1 / 2),\n userData: {...this.userData, left: true},\n rotation: new Vector3(Math.PI / 2, 0, 0)\n }\n );\n }\n if( (UI.existingType == 2 || UI.existingType == 3) && UI.existingWidth1 > 620){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3( UI.existingLength1 / 2 + this.offset, 0, UI.existingWidth1 / 2),\n userData: {...this.userData, right: true},\n rotation: new Vector3(Math.PI / 2, 0, Math.PI)\n }\n );\n }\n }\n\n onDrag(event){\n if(event.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_LENGTH2){\n event.object.position.y = 0;\n if(event.object?.userData?.left){\n event.object.position.z = UI.existingWidth1 / 2;\n if(event.object.position.x > - UI.existingLength1 / 2 - this.offset){\n event.object.position.x = - UI.existingLength1 / 2 - this.offset;\n return\n }\n }\n if(event.object?.userData?.right){\n event.object.position.z = UI.existingWidth1 / 2;\n if(event.object.position.x < UI.existingLength1 / 2 + this.offset){\n event.object.position.x = UI.existingLength1 / 2 + this.offset;\n return\n }\n }\n let distance = Math.floor(event.object.position.x - UI.existingLength1 / 2 - this.offset);\n if(event.object?.userData?.left){\n distance = Math.floor(- UI.existingLength1 / 2 - this.offset - event.object.position.x);\n }\n \n if (distance > HomeComponent.ins.sldExistingLength2.maxValue){\n distance = HomeComponent.ins.sldExistingLength2.maxValue\n } else if (distance < HomeComponent.ins.sldExistingLength2.minValue){\n distance = HomeComponent.ins.sldExistingLength2.minValue\n }\n HomeComponent.ins.sldExistingLength2.setValue(distance);\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { OBJECT_TYPE } from \"src/app/app.constants\";\nimport { BaseManager } from \"src/app/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app/core/ui\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { MaterialManager } from \"../material.manager\";\nimport { DeleteControl } from \"src/app/models/DeleteControl.model\";\n@Injectable({ providedIn: 'root' })\nexport class EditWallManager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE\n ]\n \n addControlOptions = undefined;\n offset = 1000;\n offsetY = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.addControlOptions = {\n container: this.container,\n userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH1 }\n }\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n this.addControlOptions.material = MaterialManager.Instance().UI_CONTROL_DELETE;\n if(UI.existingType == 1 || UI.existingType == 3){\n if(UI.existingWidth1){\n let x = - UI.existingLength1 / 2 - this.offset - 200;\n if(UI.existingLength2){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - 200;\n }\n if(UI.existingWidth2 && UI.existingWidth2 >= 600){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset - 200;\n } else if(UI.existingWidth2 && UI.existingWidth2 < 600){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset / 2 - 200;\n } \n let z = 0;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1, left: true }});\n }\n if(UI.existingLength2){\n let x = - UI.existingLength1 / 2 - UI.existingLength2 / 2;\n let z = - UI.existingWidth1 / 2 - this.offset;\n new DeleteControl([0.06,0.06,0.06], [ x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2, left: true }});\n }\n if(UI.existingWidth2){\n let x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset / 2 - 200;\n if(UI.existingWidth2 > 600){\n x = - UI.existingLength1 / 2 - UI.existingLength2 - this.offset - 200;\n }\n let z = UI.existingWidth1 / 2 + UI.existingWidth2 / 2;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2, left: true }});\n }\n }\n if(UI.existingType == 2 || UI.existingType == 3){\n if(UI.existingWidth1){\n let x = UI.existingLength1 / 2 + this.offset + 200;\n if(UI.existingLength2){\n x = UI.existingLength1 / 2 + UI.existingLength2 + 200;\n }\n if(UI.existingWidth2){\n x = UI.existingLength1 / 2 + UI.existingLength2 + this.offset + 200;\n }\n let z = 0;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1, right: true }});\n }\n if(UI.existingLength2){\n let x = UI.existingLength1 / 2 + UI.existingLength2 / 2;\n let z = - UI.existingWidth1 / 2 - this.offset;\n new DeleteControl([0.06,0.06,0.06], [ x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2, right: true }});\n }\n if(UI.existingWidth2){\n let x = UI.existingLength1 / 2 + UI.existingLength2 + this.offset + 200;\n let z = UI.existingWidth1 / 2 + UI.existingWidth2 / 2;\n new DeleteControl([0.06,0.06,0.06], [x, this.offsetY, z], {...this.addControlOptions, userData: { type: OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2, right: true }});\n }\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { MOUSE_EVENT, OBJECT_TYPE } from \"src/app/app.constants\";\nimport { UIControl } from \"src/app/models/uicontrol.model\";\nimport { Object3D, Sprite, Vector2, Vector3 } from \"three\";\nimport { BaseManager } from \"src/app/core/base.manager\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"src/app/core/ui\";\nimport {DragControls} from 'three/examples/jsm/controls/DragControls'\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { MaterialManager } from \"../material.manager\";\nimport ArrowControl from \"src/app/models/ArrowControl.model\";\n\n@Injectable({ providedIn: 'root' })\nexport class EditWidth2Manager extends BaseManager {\n controls = [\n UI.Controls.LENGTH1,\n UI.Controls.LENGTH2,\n UI.Controls.WIDTH1,\n UI.Controls.WIDTH2,\n UI.Controls.EXISTING_TYPE\n ]\n \n userData = undefined;\n offset = 400;\n startX = 0;\n\n constructor(private selMgr: SelectionManager){\n super()\n }\n\n init(): Promise {\n return super.init().then(() => {\n this.userData = { type: OBJECT_TYPE.UI_CONTROL_WIDTH2 }\n this.selMgr.addEventListener( 'dragstart', ( event ) => {\n this.startX = event.object.position.x;\n });\n this.selMgr.addEventListener ( 'drag', this.onDrag.bind(this), this.container)\n })\n }\n\n \n\n load(): Promise{\n return new Promise(resolve => {\n this.addControl();\n HomeComponent.ins.renderStatic();\n\n resolve()\n })\n }\n \n addControl(){\n this.container.children = [];\n if(UI.existingWidth2){\n return\n }\n if( (UI.existingType == 1 || UI.existingType == 3) && UI.existingLength2 >= 1200){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3(- UI.existingLength1 / 2 - UI.existingLength2, 0, UI.existingWidth1 / 2 + this.offset),\n userData: {...this.userData, left: true},\n rotation: new Vector3(Math.PI / 2, 0, - Math.PI / 2)\n }\n );\n }\n if( (UI.existingType == 2 || UI.existingType == 3) && UI.existingLength2 >= 1200){\n new ArrowControl(\n this.container, \n { \n pos: new Vector3( UI.existingLength1 / 2 + UI.existingLength2, 0, UI.existingWidth1 / 2 + this.offset),\n userData: {...this.userData, right: true},\n rotation: new Vector3(Math.PI / 2, 0, - Math.PI / 2)\n }\n );\n }\n }\n\n onDrag(event){\n if(event.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_WIDTH2){\n event.object.position.y = 0;\n if(event.object?.userData?.left){\n event.object.position.x = - UI.existingLength1 / 2 - UI.existingLength2;\n if(event.object.position.z < UI.existingWidth1 / 2 + this.offset){\n event.object.position.z = UI.existingWidth1 / 2 + this.offset;\n return\n }\n }\n if(event.object?.userData?.right){\n event.object.position.x = UI.existingLength1 / 2 + UI.existingLength2;\n if(event.object.position.z < UI.existingWidth1 / 2 + this.offset){\n event.object.position.z = UI.existingWidth1 / 2 + this.offset;\n return\n }\n }\n let distance = Math.floor(event.object.position.z - UI.existingWidth1 / 2 - this.offset);\n \n if (distance > HomeComponent.ins.sldExistingWidth2.maxValue){\n distance = HomeComponent.ins.sldExistingWidth2.maxValue\n } else if (distance < HomeComponent.ins.sldExistingWidth2.minValue){\n distance = HomeComponent.ins.sldExistingWidth2.minValue\n }\n HomeComponent.ins.sldExistingWidth2.setValue(distance);\n }\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport HighLightBox from \"src/app/models/HighlightBox\";\nimport SelectionManager from \"../selection.manager\";\nimport { UI } from \"../ui\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport default class UIRakecutManager {\n box1: HighLightBox\n updateFnc = this.update.bind(this)\n constructor(private selMgr: SelectionManager){\n\n }\n public init(){\n // HomeComponent.ins.sldBuildingHeight.addAction(this.updateFnc)\n // HomeComponent.ins.sltRoofPitch.addAction(this.updateFnc)\n \n // this.box1 = new HighLightBox(HomeComponent.ins.scene, {\n // x: -(UI.totalBayLength / 2 + UI.overhangLeft), \n // y: UI.height - UI.frontHeight, \n // z: UI.span + UI.multiSpan, \n // selectionManager: this.selMgr\n // })\n }\n\n update(){\n this.box1.position.set(-(UI.totalBayLength / 2 + UI.overhangLeft), UI.height, UI.span + UI.multiSpan)\n }\n}","// import { AppComponent } from \"src/app/app.component\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Matrix4,\n Mesh,\n Vector3,\n} from \"three\";\nimport { PatiosBackFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"../../app.config\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndPurlinManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosBackFlyOverManager;\n private downpipeGroup: Group;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n public geo_superiorHouseBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_houseBeamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private totalBaySize: number;\n public extraOffsetZ: number;\n\n private frontPostHeight: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, backFlyOverManager: PatiosBackFlyOverManager) {\n this.APP = app;\n this.MANAGER = backFlyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = backFlyOverManager.patiosGroup;\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight = this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight / 2, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_superiorHouseBeam = this.geometryManager.getHouseBeam();\n this.geo_superiorHouseBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorHouseBeam.length / 2,\n this.geo_superiorHouseBeam.height / 2,\n this.geo_superiorHouseBeam.width / 2\n );\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_houseBeamEndCap = this.geometryManager.getHouseBeamEndCap();\n this.geo_houseBeamEndCap.geometry.translate(\n 0,\n this.geo_houseBeamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n\n //test\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.downpipeGroup.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n this.totalBaySize = UI.totalBayLength;\n this.cutoutExistingBothLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n this.addBeamAngelRakecut();\n this.addBeamStepRakecut();\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n this.addSuperiorBeam({ cutout: true });\n }\n if (UI.multiSpan > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPostOrBracket(offsetX, {\n front: true,\n first,\n last,\n left: first,\n right: last,\n });\n\n if (UI.multiSpan > 0) {\n this.addPostOrBracket(offsetX, {\n multiSpan: true,\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n offsetX = -this.totalBaySize / 2;\n first = true;\n last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPostAngleRakecut(offsetX, {\n first,\n last,\n left: first,\n right: last,\n });\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n //this.getSection();\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n this.addPostStepRakecut();\n //this.addDownPipe();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n this.geo_bracket.width\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n this.geo_bracket.width;\n }\n\n return fitX;\n }\n private getBraketMaterial(height: number) {\n if (height > HomeComponent.ins.sldFlyOverBracketHeight.maxValue) {\n return MaterialManager.Instance().BRACKET_WARNING;\n } else {\n return MaterialManager.Instance().BRACKET;\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n\n public houseBeamHeight() {\n return this.geo_superiorBeam.height - this.geo_superiorHouseBeam.height;\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n\n //objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n private addGround() {\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n let offsetZ =\n UI.existingWidth1 / 2 +\n this.extraOffsetZ +\n this.APP.sldBackOverhang.currentValue;\n let width = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(0, 0, -offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (UI.existingType == 1) {\n base.position.setX(offsetX);\n }\n if (UI.existingType == 2) {\n base.position.setX(-offsetX);\n }\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n postOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n if (UI.multiSpan > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n }\n\n this.frontPostHeight = UI.eaveHeight + this.getBracketHeight(UI.span);\n scalePostY = this.frontPostHeight / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span + UI.multiSpan) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n let exceedMoveBackLimit = false;\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutLeftVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n postOffsetX -= UI.overhangLeft;\n bracketOffsetX -= UI.overhangLeft;\n postOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n }\n\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n postOffsetX += UI.overhangRight;\n bracketOffsetX += UI.overhangRight;\n postOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutRightVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n }\n\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n //End rakecut\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(\n scaleBracketY * this.geometryManager.FLY_OVER_BRACKET.S65x3.height\n )\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (\n meshBracket.userData.position.left &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n meshBracket.userData.position.right &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n if (UI.existingType == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (UI.existingType == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n public addPostOrBracketBack(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -this.totalBaySize / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = this.totalBaySize / (this.numberOfBracketBack - 1);\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketBack - 1);\n } else {\n offsetX += this.APP.sldExistingLength2.currentValue - extraWalWidth;\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketBack - 1);\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n bracketDistance =\n (UI.totalBayLength -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketBack - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketBack - 1);\n }\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX += this.cutoutExistingBothLength - extraWalWidth;\n bracketDistance =\n (this.APP.sldExistingLength.currentValue + extraWalWidth * 2) /\n (this.numberOfBracketBack - 1);\n }\n }\n\n for (let i = 0; i < this.numberOfBracketBack; i++) {\n if (i == this.numberOfBracketBack - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (UI.braketHeight + this.houseBeamHeight()) / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(scaleBracketY * this.geo_bracket.height)\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (i == 0 && (UI.existingType == 1 || UI.existingType == 3)) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0) / 2\n );\n } else if (last && (UI.existingType == 2 || UI.existingType == 3)) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -this.totalBaySize / 2;\n let offsetXR = this.totalBaySize / 2;\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let bracketDistance =\n (this.APP.sldExistingLength2.currentValue - extraWalWidth) /\n (this.numberOfBracketCutout - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n this.APP.sldExistingLength2.currentValue /\n (this.numberOfBracketCutout - 1);\n }\n\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL - this.geo_bracket.width;\n\n if (first) {\n } else if (last) {\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(\n scaleBracketY * this.geometryManager.FLY_OVER_BRACKET.S65x3.height\n )\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (UI.existingType == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n first = true;\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(\n scaleBracketY * this.geometryManager.FLY_OVER_BRACKET.S65x3.height\n )\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n meshBracket.userData.views = views;\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (UI.existingType == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n public addPostAngleRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n //let height = (this.APP.sldBuildingHeight.currentValue - this.getHeightByRoofPitch(true) - (this.beamInfo.height));\n let postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n let bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n let scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n let scaleBracketY =\n this.getBracketHeight(UI.span + UI.multiSpan) / this.geo_bracket.height;\n let offsetY = UI.eaveHeight;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.first) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(scaleBracketY * this.geo_bracket.height)\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.last) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorPost.width,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(scaleBracketY * this.geo_bracket.height)\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorBeam.width,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n }\n private addPostStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let offsetXL = -UI.totalBayLength / 2 + fitX;\n let offsetXR = UI.totalBayLength / 2 - this.geo_superiorPost.width + fitX;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ -\n this.geo_superiorPost.width;\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let posts: Array = [];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postFront.position.set(offsetXL, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postBack.position.set(offsetXL, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n //this.scene.add(postBack);\n posts.push(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postFront.position.set(offsetXR, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postBack.position.set(offsetXR, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n //this.scene.add(postBack);\n posts.push(postBack);\n }\n\n for (let post of posts) {\n let boxPost = new Box3().setFromObject(post);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n let height =\n post.scale.y * this.geo_superiorPost.height - UI.eaveHeight;\n let scaleY = height / this.geo_bracket.height;\n\n let bracket = new Mesh(\n this.geo_bracket.geometry,\n this.getBraketMaterial(height)\n );\n bracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n bracket.position.set(post.position.x, UI.eaveHeight, post.position.z);\n bracket.scale.setY(scaleY);\n this.scene.add(bracket);\n } else {\n this.scene.add(post);\n }\n }\n }\n public addSuperiorBeam(userDataPos: any) {\n let offsetZ = 0;\n let offsetY = 0;\n let offsetX = -this.totalBaySize / 2 - UI.overhangLeft;\n\n let beamLength = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = UI.eaveHeight + this.getBracketHeight(UI.span);\n offsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (UI.multiSpan > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.houseBeamHeight();\n // offsetZ = -(UI.span/2 - this.geometryManager.FLY_OVER_BRACKET.S65x3.width - 200);\n offsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue;\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n offsetX += UI.overhangLeft;\n beamLength -= UI.overhangLeft;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue;\n }\n\n //offsetX -= UI.overhangRight;\n beamLength -= UI.overhangRight;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX +=\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n beamLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2;\n }\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY = UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan);\n offsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorBeam.width -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.cutout) {\n offsetY =\n UI.eaveHeight +\n this.getBracketHeight(UI.existingWidth1) +\n this.houseBeamHeight();\n offsetZ = UI.existingWidth1 - UI.existingWidth1 / 2 - this.extraOffsetZ;\n // offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + ( this.geo_bracket?.width || 0)/2\n //scaleX = (this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2))/2/this.geo_superiorBeam.length;\n beamLength =\n this.APP.sldExistingLength2.currentValue -\n this.APP.existingWallManager.geo_existingWallW1.width;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n }\n\n beamLength +=\n UI.overhangLeft +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n offsetX =\n this.totalBaySize / 2 +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width;\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n offsetX =\n this.totalBaySize / 2 +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n offsetX -=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n beamLength +=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n } else if (UI.existingType == BUILDING_SIDE.BOTH) {\n beamLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2 -\n this.APP.existingWallManager.geo_existingWallW1.width -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK +\n this.geo_bracket.width +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n }\n\n //rake cut\n if (\n (UI.multiSpan <= 0 && userDataPos.front) ||\n (UI.multiSpan > 0 && userDataPos.multiSpan)\n ) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX += this.beamLeftCutSizeInfo.l;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX += UI.rakeCutLeftHor;\n beamLength -= UI.rakeCutLeftHor;\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n beamLength -= UI.rakeCutRightHor;\n }\n }\n\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n if (userDataPos.front || userDataPos.multiSpan) {\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoHouseBeamJoint\n );\n } else {\n this.cutStandardBeamToEqualLengthBeam(\n userDataPos.back || userDataPos.cutout\n ? this.geo_superiorHouseBeam\n : this.geo_superiorBeam,\n userDataPos.back || userDataPos.cutout\n ? this.geo_houseBeamEndCap\n : this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n userDataPos.back || userDataPos.cutout\n ? this.geoHouseBeamJoint\n : this.geoBeamJoint\n );\n }\n\n //Add one more beam cutout right\n if (userDataPos.cutout && UI.existingType == 3) {\n offsetX = UI.totalBayLength / 2 - beamLength;\n\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorHouseBeam,\n this.geo_houseBeamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoHouseBeamJoint\n );\n }\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo\n ) {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2 + fitX;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngelRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetZ =\n UI.multiSpan + UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n );\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamLeftCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamLeftCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n -this.totalBaySize / 2 - UI.overhangLeft + this.beamLeftCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(-rotX, rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamRightCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamRightCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n this.totalBaySize / 2 + UI.overhangRight - this.beamRightCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(-rotX, -rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n );\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n );\n }\n\n let beamLength = UI.rakeCutLeftHor + this.geo_superiorPost.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutLeft.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n beamLength + this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n beamGroup.position.set(offsetXL + fitX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n );\n }\n\n let beamLength = UI.rakeCutRightHor + this.geo_superiorPost.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutRight.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -(beamLength + this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -(this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n beamGroup.position.set(offsetXR + fitX, offsetY, offsetZ);\n //beamGroup.rotateY(Math.PI);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n\n this.scene.add(beamGroup);\n }\n }\n public getBracketHeight(offset): number {\n return (\n this.utils.tan(UI.patiosPitch) * offset +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, MeshBasicMaterial, Line3, Points, PointsMaterial, BufferGeometry } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosBackFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { FIT_DIMENSION, FIT_DIMENSION_FAR, BUILDING_SIDE, PANEL_DIRECTION, RAKECUT_TYPE, FIT_FLYOVER_BRAKET_ON_ROOF } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosBackFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosFlyOverBraketHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, manager: PatiosBackFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI / 2, Math.PI, -Math.PI / 2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosFlyOverBraketHeightDim = new Group();\n this.dimensionPatiosFlyOverBraketHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFlyOverBraketHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n );\n\n loader.load(environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n resolve();\n })\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosFlyOverBraketHeightDim.children = this.dimensionPatiosFlyOverBraketHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n // this.dimensionPatiosPlanBottom.remove(...this.dimensionPatiosPlanBottom.children);\n // this.dimensionPatiosPlanRight.remove(...this.dimensionPatiosPlanRight.children);\n // this.dimensionPatiosPlanLeft.remove(...this.dimensionPatiosPlanLeft.children);\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.remove(...this.dimensionPatiosFrontBottom.children);\n this.dimensionPatiosFrontRight.remove(...this.dimensionPatiosFrontRight.children);\n this.dimensionPatiosLeftBottom.remove(...this.dimensionPatiosLeftBottom.children);\n this.dimensionPatiosLeftRight.remove(...this.dimensionPatiosLeftRight.children);\n this.dimensionPatiosLeftLeft.remove(...this.dimensionPatiosLeftLeft.children);\n this.dimensionPatiosRightBottom.remove(...this.dimensionPatiosRightBottom.children);\n this.dimensionPatiosRightLeft.remove(...this.dimensionPatiosRightLeft.children);\n this.dimensionPatiosRightRight.remove(...this.dimensionPatiosRightRight.children);\n this.dimensionPlanMiddle.remove(...this.dimensionPlanMiddle.children);\n this.dimensionPlanMidleLeft.remove(...this.dimensionPlanMidleLeft.children);\n\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionFlyOverBraketHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n //Set dimesion of groups base on patios bounding box and existing house bounding boxes\n //to make sure there is no intersection\n //var offset = this.calulateBoundingBox();\n //this.dimensionPatiosPlanRight.position.setX(offset.right);\n //this.dimensionPatiosPlanLeft.position.setX(offset.left);\n //this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // //let existingHouseDimBox = new Box3().setFromObject(existingHouseDimLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n \n //this.getOutlines();\n\n this.APP.dimensionManager.draw();\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height\n }\n private drawDimensionFlyOverBraketHeightDim(){\n const bracketHeight =(UI.braketHeight + this.MANAGER.columnAndPurlinManager.houseBeamHeight())\n const offsetZBackPos = - UI.existingWidth1 / 2 - this.MANAGER.columnAndPurlinManager.extraOffsetZ - FIT_DIMENSION_FAR;\n\n this.dimensionPatiosFlyOverBraketHeightDim.position.set(0, UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfExistingRoof() - FIT_FLYOVER_BRAKET_ON_ROOF + bracketHeight / 2, offsetZBackPos);\n\n let textStr = this.utils.getDimensionValue(bracketHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: bracketHeight,\n container: this.dimensionPatiosFlyOverBraketHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n textRotation: new Vector3(Math.PI, 0, 0),\n labelType: DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosFlyOverBraketHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionLowerHeightDim(){\n const frontPostHeight = UI.eaveHeight +\n this.MANAGER.columnAndPurlinManager.getBracketHeight(UI.span + UI.multiSpan)\n const offsetZFrontPos = UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.MANAGER.columnAndPurlinManager.extraOffsetZ + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, frontPostHeight / 2, offsetZFrontPos);\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, 0) };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n text.position.set(-200, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n }\n else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2 - this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, -1000);\n let hand1 = new Vector3(-50, 0, -950);\n let hand2 = new Vector3(50, 0, -950);\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + ' degree';\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, Math.PI / 2, 0) };\n text.position.setZ(-500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n }\n private drawDimensionPatiosPlanBottom() {\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance3 - this.APP.sldExistingWidth1.currentValue/2;\n //if(this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue){\n // offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2;\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // offsetZ += 500;\n // }\n //}\n\n //let offsetZ = this.box.max.z + this.dimensionDistance2;\n\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n //this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n // let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n // cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n // cap2.position.setX(offsetX);\n // this.dimensionPatiosPlanBottom.add(cap2);\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true } }\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = -this.APP.dialogEditBay.totalBaySize/2 + this.APP.sldLeftCutHorizontal.currentValue/2 - this.APP.sldLeftOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL)\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = this.APP.dialogEditBay.totalBaySize/2 - this.APP.sldRightCutHorizontal.currentValue/2 + this.APP.sldRightOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500-200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL)\n }\n \n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n\n //let _dimensionDistane = this.dimensionDistance2;\n //if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // if(this.APP.sldExistingWidth1.currentValue > 0){\n // _dimensionDistane = this.dimensionDistance;\n // }\n //}\n\n //let offsetDimensionX = this.getOffsetLeft(this.dimensionPatiosPlanRight) + this.dimensionDistance2; //this.box.max.x + this.dimensionDistance2;\n //let offsetDimensionX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n //}\n\n //if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n let offsetX = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2 \n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let extraDistance = 0;\n //----Rake cut\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ = dimLength/2 + UI.multiSpan / 2 + this.APP.sldFrontOverhang.currentValue - this.APP.sldRightCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3( 0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL)\n }\n //----End rake cut\n\n\n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n //this.dimensionPatiosPlanRight.position.set(this.MANAGER.boundingBox.max.x + this.dimensionDistance2, 0, offsetDimensionZ);\n // let offsetDimensionX = this.getOffsetLeft(this.dimensionPatiosPlanRight);\n //this.dimensionPatiosPlanRight.position.set(0, 0, offsetDimensionZ);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT, extraDistance);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n \n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n const dimLength = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue))\n\n let offsetLength = dimLength / 2;\n let scaleLength = dimLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(dimLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, -Math.PI / 2) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n //reposition the dimension\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n\n let dimOffsetY = (UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue))) / 2;\n dimension.position.set(dimBox.max.x + extraDistance, dimOffsetY, 0);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n // dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.dimensionPatiosLeftRight.position.y;\n dimension.position.setY(dimOffsetY);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0));\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height + (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0));\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft() {\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n \n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n \n return textCover\n }\n\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n \n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n\n private calulateBoundingBox(){\n //this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n // let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n // planRightBox.min.x = patiosBox.max.x;\n // planRightBox.max.x = patiosBox.max.x + 500;\n // planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n // let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n // let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n // planBottomBox.min.z = patiosBox.max.z;\n // planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n // planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n // if(planRightBox.intersectsBox(objBox)){\n // intersectBox = true;\n // planRightBox.translate(new Vector3(100,0,0))\n // }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n // if(planBottomBox.intersectsBox(objBox)){\n // intersectBox = true;\n // planBottomBox.translate(new Vector3(0,0,100))\n // }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x };\n }\n}\n","import { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { Box3, Group, Vector3 } from \"three\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { Printing2DGeometry } from \"../models\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { ColumnAndPurlinManager } from \"./column-and-purlin.manager\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { RoofManager } from \"./roof.manager\";\n\nexport class PatiosBackFlyOverManager implements PatiosManager {\n public columnAndPurlinManager: ColumnAndPurlinManager;\n private roofManager: RoofManager;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n //private existingTypeChangedEventtHandle: any;\n public dimesionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n patiosWidth: number;\n patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n private APP: AppComponent;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.columnAndPurlinManager = new ColumnAndPurlinManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.columnAndPurlinManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.columnAndPurlinManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndPurlinManager.numberOfBracketBack = bracketQuantity;\n this.columnAndPurlinManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndPurlinManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndPurlinManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {}\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndPurlinManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n\n public destroy(): void {\n this.columnAndPurlinManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndPurlinManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndPurlinManager.load(),\n ]).then(() => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n //test\n // this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPRE'));\n // let boxHelper = new Box3Helper(this.boundingBox);\n // boxHelper.userData = { type: 'BOX_HELPRE' };\n // this.APP.scene.add(boxHelper);\n\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport HighLightBox from \"src/app/models/HighlightBox\";\nimport {\n BoxBufferGeometry,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n MeshLambertMaterial,\n Object3D,\n Plane,\n Vector3,\n} from \"three\";\nimport { CSG } from \"three-csg-ts\";\nimport { PatiosBackFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"../../app.config\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosBackFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBase: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingFront: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n //private geo_roofPanelBargeCappingBack: BufferGeometry;\n private geo_gutterFront: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n\n private roofGroup: Group;\n\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n private geo_downPipe: GeometryInfo;\n\n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private cutoutExistingBothLength: number;\n\n constructor(app: AppComponent, backFlyOverManager: PatiosBackFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = backFlyOverManager;\n this.scene = new Group();\n backFlyOverManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.geo_RoofPanel = this.geometryManager.getRoofSheetPanel();\n this.geo_RoofPanel.geometry.translate(\n this.geo_RoofPanel.width / 2 + 2,\n this.geo_RoofPanel.height / 2 - 1,\n this.geo_RoofPanel.length / 2\n );\n\n this.geo_roofPanelBase = this.geometryManager.getRoofBase();\n this.geo_roofPanelBase.geometry.translate(\n this.geo_roofPanelBase.width / 2,\n this.geo_roofPanelBase.height / 2,\n this.geo_roofPanelBase.length / 2\n );\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.rotateY(Math.PI);\n this.zFlashingGeo.geometry.translate(this.zFlashingGeo.length, -3, 0);\n\n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_roofPanelBargeCappingLeft.width / 2 - 3,\n this.geo_roofPanelBargeCappingLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_roofPanelBargeCappingLeft.length / 2\n );\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingRight.geometry.translate(\n -this.geo_roofPanelBargeCappingLeft.width / 2 + 3,\n this.geo_roofPanelBargeCappingLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_roofPanelBargeCappingLeft.length / 2\n );\n\n this.geo_roofPanelBargeCappingFront = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingFront.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.geo_roofPanelBargeCappingLeft.length / 2,\n this.geo_roofPanelBargeCappingLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_roofPanelBargeCappingLeft.width / 2\n );\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_bargeRakecutLeft.width / 2,\n this.geo_bargeRakecutLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_bargeRakecutLeft.length / 2\n );\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry.translate(\n -this.geo_bargeRakecutRight.width / 2,\n this.geo_bargeRakecutRight.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_bargeRakecutRight.length / 2\n );\n\n //Gutter\n this.geo_gutterFront = this.geometryManager.getGutter();\n this.geo_gutterFront.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_gutterFront.length / 2,\n -20,\n this.geo_gutterFront.width / 2\n );\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_bargeCutoutLeftHor.length / 2,\n this.geo_bargeCutoutLeftHor.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_bargeCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_bargeCutoutRightHor.length / 2,\n this.geo_bargeCutoutRightHor.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_bargeCutoutRightHor.width / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE\n )\n );\n\n //test\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"RAKECUT\")\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"HELPER\")\n );\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.roofLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n const _roofLength =\n Math.pow(this.roofLength, 2) +\n Math.pow(this.getHeightByRoofPitch({ isMultiSpan: true }), 2);\n this.cutoutExistingBothLength =\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2;\n\n this.addRoof();\n this.addCutout();\n this.addAngelRakeCut();\n this.addStepRakecut();\n if (UI.rakeCutLeftType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft),\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT },\n });\n }\n if (UI.rakeCutRightType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT },\n });\n }\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetFront =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue;\n let offsetBack =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldBackOverhang.currentValue;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), offsetBack);\n\n // let helper = new PlaneHelper(clipingPlaneLeft, 10000, 0xffff00);\n // helper.name = \"HELPER\";\n // helper.userData = { type: 'HELPER' };\n // this.APP.scene.add(helper);\n\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [\n clipingPlaneLeft,\n clipingPlaneRight,\n ];\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.roofWidth = width;\n this.roofLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width / this.geo_RoofPanel.width);\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n //panel direction\n let panelDirectionOfset = 1;\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.geo_RoofPanel.width;\n panelDirectionOfset = -1;\n } else if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT\n ) {\n offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n }\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = true;\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n totalPanelLength += this.geo_RoofPanel.width;\n let isOver =\n totalPanelLength <\n this.APP.sldExistingLength2.currentValue -\n this.APP.existingWallManager.geo_existingWallW1.width -\n 100;\n\n this.addRoofSheeting(offsetX, [this.csg_cutoutLeft]);\n this.addRoofSheetingBase(offsetX, last, [this.csg_cutoutLeft]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n totalPanelLength += this.geo_RoofPanel.width;\n let isOver =\n totalPanelLength >=\n this.roofWidth -\n this.APP.sldExistingLength2.currentValue +\n this.geo_RoofPanel.width;\n cuted =\n totalPanelLength >=\n this.roofWidth - this.APP.sldExistingLength2.currentValue &&\n !isOver;\n\n this.addRoofSheeting(offsetX, [this.csg_cutoutRight]);\n this.addRoofSheetingBase(offsetX, last, [this.csg_cutoutRight]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n totalPanelLength += this.geo_RoofPanel.width;\n let isOver =\n totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 =\n totalPanelLength >=\n this.roofWidth -\n this.APP.sldExistingLength2.currentValue +\n this.geo_RoofPanel.width;\n let flag =\n totalPanelLength >=\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n // if (!cuted && !isOver) {\n // this.addRoofSheetingBase(offsetX, last, this.csg_cutoutLeft);\n // this.addRoofSheeting(offsetX, true, this.csg_cutoutLeft);\n // cuted = true;\n // }\n // else if (!cuted2 && flag) {\n // this.addRoofSheetingBase(offsetX, last, this.csg_cutoutRight);\n // this.addRoofSheeting(offsetX, true, this.csg_cutoutRight);\n // cuted2 = true;\n // }\n // else {\n // this.addRoofSheetingBase(offsetX, last, []);\n // this.addRoofSheeting(offsetX, false, []);\n // }\n\n this.addRoofSheeting(offsetX, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n this.addRoofSheetingBase(offsetX, last, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n } else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, []);\n this.addRoofSheetingBase(offsetX, last, []);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n\n this.addZFlashing();\n this.addBargeCapping();\n this.addBargeAngelRakecut();\n this.addBargeStepRakecut();\n this.addGutter();\n\n //this.getOutLines();\n this.showPanelOutline();\n //this.showPanelOutLineTest();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private getHeightByRoofPitch(userDataPos: any): number {\n if (userDataPos.isSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else if (userDataPos.isMultiSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.roofLength\n );\n }\n }\n public getOutLines(): Printing2DGeometry {\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views,\n });\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false) return;\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().MESH_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public showPanelOutLineTest() {\n // if(this.APP.sltPanelDirectionShow.currentValue == false)\n // return;\n\n //console.log('show layout');\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n let flag = false;\n\n //for (let i = 0; i < objs.length-1; i+=2)\n //for(let o of objs)\n {\n // let o1 = objs[i];\n // let o2 = objs[i+1];\n\n // o1.material = objs[i].material.clone();\n // o2.material = objs[i+1].material.clone();\n\n // if(flag){\n // o1.material.color = new Color('gray');\n // o2.material.color = new Color('gray');\n // }\n // else{\n // o1.material.color = new Color('white');\n // o2.material.color = new Color('white');\n // }\n\n // flag = !flag;\n\n let o = objs[7];\n //let newGeo = BufferGeometryUtils.toTrianglesDrawMode(new BufferGeometry().fromGeometry((o as Mesh).geometry), TrianglesDrawMode);\n\n let tmpGeo = (o as Mesh).geometry as Geometry;\n tmpGeo.computeFaceNormals();\n tmpGeo.mergeVertices();\n tmpGeo.computeVertexNormals();\n //let simpifiedGeo = this.modifier.modify(tmpGeo, Math.floor(tmpGeo.vertices.length * 0.9));\n\n // let simplified = o.clone() as Mesh;\n // simplified.material = (simplified.material as MeshPhongMaterial).clone();\n // simplified.material.flatShading = true;\n\n //const count = Math.floor( newGeo.attributes['position'].count * 0.9 ); // number of vertices to remove\n //newGeo = this.modifier.modify( newGeo, count );\n\n // var rs = ((o as Mesh).geometry as Geometry).mergeVertices();\n // console.log('result merge vertice', rs);\n\n //let newMesh = new Mesh(simpifiedGeo);\n\n //let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(newMesh, 90);\n\n //o.updateWorldMatrix(true, true);\n //outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n // if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n // outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n // outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n // }\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n // this.APP.scene.add( line );\n\n // const wireframe = new WireframeGeometry( simpifiedGeo );\n // let line2 = new LineSegments( wireframe );\n // line2.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n // line2.material.depthTest = false;\n // line2.material.opacity = 0.25;\n // line2.material.transparent = true;\n\n // o.updateMatrixWorld();\n // line2.applyMatrix4(o.matrixWorld);\n\n // line2.translateY(1000);\n\n // this.APP.scene.add(line2);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n return simplifiedGeo;\n }\n public addRoof() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PATIOS,\n };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldBackOverhang.currentValue +\n this.extraOffsetZ\n );\n\n this.roofGroup.position.setY(offsetY);\n this.roofGroup.position.setZ(offsetZ);\n this.roofGroup.rotateX(\n this.utils.degreesToRadians(-this.APP.sltRoofPitch.currentValue)\n );\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(-offsetX);\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndPurlinManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(offsetX);\n }\n\n this.scene.add(this.roofGroup);\n }\n public addRoofSheeting(offsetX: number, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n offsetSheet = 30;\n } else {\n offsetSheet = 12;\n }\n\n let scaleZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_RoofPanel.length;\n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL,\n views: views,\n };\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n public addRoofSheetingBase(offsetX: number, isLast: boolean, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(\n this.geo_roofPanelBase.geometry,\n MaterialManager.Instance().ROOF_BASE\n );\n let offsetZ = UI.isUpFasciaUpstandardBracket ? EXISTING_BUILDING_CONFIG.ROOF_BASE_SUBTRACT : 0;\n let scaleZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue -\n 60) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL_BASE,\n views: views,\n };\n if (isLast) {\n mesh.userData.last = true;\n }\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n 0,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n\n addBargeCappingCutRight() {\n //right\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 20) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_roofPanelBargeCappingLeft.length;\n let mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(offsetRight);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //back\n let offsetLeft = offsetRight + this.APP.sldExistingLength2.currentValue;\n let scaleX =\n this.APP.sldExistingLength2.currentValue /\n this.geo_roofPanelBargeCappingFront.length;\n let offsetZ =\n this.APP.sldExistingWidth1.currentValue +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 10;\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingFront.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(offsetLeft);\n mesh.position.setZ(offsetZ);\n mesh.rotateY(Math.PI);\n mesh.scale.setX(scaleX);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n addBargeCappingCutLeft() {\n //left\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 50) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_roofPanelBargeCappingLeft.length;\n let mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(-offsetLeft);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //back\n let scaleX =\n this.APP.sldExistingLength2.currentValue /\n this.geo_roofPanelBargeCappingFront.length;\n let offsetZ =\n this.APP.sldExistingWidth1.currentValue +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 10;\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingFront.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(-offsetLeft);\n mesh.position.setZ(offsetZ);\n mesh.rotateY(Math.PI);\n mesh.scale.setX(scaleX);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n private addBargeCapping() {\n let mesh: Mesh;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXF = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth;\n let offsetXL2 = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n let offsetXR1 =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width +\n 100;\n let offsetXR2 =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n let offsetZFront =\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let bargeFrontLength = this.roofWidth;\n\n let scaleCutoutVer =\n this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue +\n this.geo_roofPanelBargeCappingLeft.width,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n //let scaleCutoutHor = (this.APP.sldExistingLength2.currentValue - extraWallWidth) / this.geo_bargeCutoutLeftHor.length;\n\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let offsetY = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n bargeLeftLength -= this.APP.sldExistingWidth1.currentValue;\n offsetZL += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n\n let bargeCutoutHorLength =\n this.APP.sldExistingLength2.currentValue +\n this.APP.sldLeftOverhang.currentValue -\n extraWallWidth;\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetXL1 += extraWallWidth;\n //scaleCutoutHor = (this.APP.sldExistingLength2.currentValue ) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength += extraWallWidth;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXL1 =\n -this.APP.sldExistingLength.currentValue / 2 -\n this.APP.existingWallManager.geo_existingWallW1.width -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n //scaleCutoutHor = ((this.roofWidth - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2 - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n offsetXL1 +=\n this.APP.sldLeftOverhang.currentValue -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n\n //scaleCutoutHor = bargeCutoutHorLength/this.geo_bargeCutoutLeftHor.length;\n\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout Ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n bargeRightLength -= this.APP.sldExistingWidth1.currentValue;\n let bargeCutoutHorLength =\n this.APP.sldExistingLength2.currentValue +\n this.APP.sldRightOverhang.currentValue -\n extraWallWidth;\n offsetZR += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetXR1 -= extraWallWidth;\n //scaleCutoutHor = (this.APP.sldExistingLength2.currentValue ) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength += extraWallWidth;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXR1 =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n //scaleCutoutHor = ((this.roofWidth - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2 - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) / this.geo_bargeCutoutLeftHor.length;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n offsetXR1 -=\n this.APP.sldRightOverhang.currentValue -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n this.APP.sltExistingType.currentValue == 3\n ) {\n }\n\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n offsetXF += this.APP.sldLeftCutHorizontal.currentValue;\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n bargeFrontLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n bargeFrontLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n\n let scaleXF = bargeFrontLength / this.geo_roofPanelBargeCappingFront.length;\n let scaleZLeft =\n this.utils.getHypotenuseByCos(\n bargeLeftLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight =\n this.utils.getHypotenuseByCos(\n bargeRightLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n\n //right\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //front\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingFront.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXF, 0, offsetZFront + 2);\n mesh.scale.setX(scaleXF);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n private addBargeAngelRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n\n let offsetX =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldLeftCutHorizontal.currentValue;\n let mesh = new Mesh(\n this.geo_bargeRakecutLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n\n let offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldRightCutHorizontal.currentValue;\n let mesh = new Mesh(\n this.geo_bargeRakecutRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(-rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n }\n private addBargeStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (this.APP.sldLeftCutVertical.currentValue +\n this.geo_roofPanelBargeCappingLeft.width) /\n this.geo_roofPanelBargeCappingLeft.length;\n let scaleX =\n this.APP.sldLeftCutHorizontal.currentValue /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZ - this.geo_roofPanelBargeCappingLeft.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(-offsetXL, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (this.APP.sldRightCutVertical.currentValue +\n this.geo_roofPanelBargeCappingLeft.width) /\n this.geo_roofPanelBargeCappingLeft.length;\n let scaleX =\n this.APP.sldRightCutHorizontal.currentValue /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n offsetZ - this.geo_roofPanelBargeCappingLeft.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(offsetXR, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n }\n public addGutter() {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = -100;\n let offsetY = this.geo_roofPanelBase.height - 25;\n let gutterLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n //cutout\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n gutterLength -= this.APP.sldExistingLength2.currentValue;\n } else {\n offsetX += this.APP.sldExistingLength2.currentValue - extraWallWidth;\n gutterLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n offsetX += this.APP.sldLeftOverhang.currentValue;\n gutterLength -= this.APP.sldLeftOverhang.currentValue;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n gutterLength -= this.APP.sldExistingLength2.currentValue;\n } else {\n gutterLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n //offsetX -= this.APP.sldRightOverhang.currentValue;\n gutterLength -= this.APP.sldRightOverhang.currentValue;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX +=\n this.cutoutExistingBothLength -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n gutterLength =\n this.APP.sldExistingLength.currentValue + extraWallWidth * 2;\n }\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //back\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterFront,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n\n this.addDownPipe(gutterGroup, gutterLength);\n\n this.roofGroup.add(gutterGroup);\n }\n private addDownPipe(gutterGroup: Group, gutterLength: number) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(100, -190, this.geo_downPipe.width / 2 + 20);\n\n gutterGroup.add(meshPipe);\n }\n public addZFlashing() {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = 0;\n\n let scaleX =\n (this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue) /\n this.zFlashingGeo.length;\n let flashingLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n //cutout\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n flashingLength -= this.APP.sldExistingLength2.currentValue;\n } else {\n offsetX += this.APP.sldExistingLength2.currentValue - extraWallWidth;\n flashingLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n\n offsetX += this.APP.sldLeftOverhang.currentValue;\n flashingLength -= this.APP.sldLeftOverhang.currentValue;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n flashingLength -= this.APP.sldExistingLength2.currentValue;\n } else {\n flashingLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n //offsetX += this.APP.sldRightOverhang.currentValue;\n flashingLength -= this.APP.sldRightOverhang.currentValue;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX +=\n this.cutoutExistingBothLength -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n flashingLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2;\n }\n }\n\n // if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n // offsetX += (this.APP.sldLeftCutHorizontal.currentValue);\n // flashingLength -= this.APP.sldLeftCutHorizontal.currentValue;\n // }\n // if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n // flashingLength -= this.APP.sldRightCutHorizontal.currentValue;\n // }\n\n scaleX = flashingLength / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n scale: mesh.scale,\n };\n\n this.roofGroup.add(mesh);\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n\n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n public getRoofOffsetY() {\n return (\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geometryManager.getBeam().height -\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldBackOverhang.currentValue\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldExistingWidth1,\n\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.dialogEditBay,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTOUT\")\n );\n\n let offsetX =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 100;\n let offsetY = 0;\n let offsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.APP.existingWallManager.geo_existingWallL2.width -\n this.APP.sldBackOverhang.currentValue;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue +\n this.APP.sldBackOverhang.currentValue +\n 5000) /\n 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n // if(this.APP.sltExistingType.currentValue == 3){\n // offsetX -= 100;\n // }\n\n if (\n this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutLeft = new Mesh(\n this.geo_cutoutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutRight = new Mesh(\n this.geo_cutoutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n private addAngelRakeCut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100;\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n this.extraOffsetZ -\n this.APP.sldExistingWidth1.currentValue / 2;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(5, 5, 5);\n this.mesh_rakecutLeft.rotateY(angle);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(5, 5, 5);\n this.mesh_rakecutRight.rotateY(-angle);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n private addStepRakecut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100; //this.APP.sldExistingWallHeight.currentValue;\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n this.extraOffsetZ -\n this.APP.sldExistingWidth1.currentValue / 2;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(5, 5, 5);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(5, 5, 5);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Observable, Subject } from \"rxjs\";\nimport { debounce, debounceTime, map, takeLast } from \"rxjs/operators\";\nimport { Group, Material, Object3D } from \"three\";\nimport { GeometryManager } from \"src/app/core/geometry.manager\";\nimport { MaterialManager } from \"src/app/core/material.manager\";\nimport { HomeComponent } from \"src/app/containers/home\";\nimport { registerEvents } from \"./ui.manager\";\nexport interface IManager {\n init: () => Promise\n optimize: () => Promise\n load: () => Promise\n onUIChange: () => void\n // calculate: () => Promise\n}\nexport class BaseManager implements IManager {\n controls = []\n controlsReload = []\n\n onUIChangePtr = this.onUIChange.bind(this)\n onGeometryChangePtr = this.onGeometryChange.bind(this)\n\n APP: HomeComponent\n geometryManager: GeometryManager;\n materialMgr = MaterialManager.Instance()\n container: Group = undefined\n subject: Subject\n \n constructor() {\n this.geometryManager = GeometryManager.Instance();\n\n this.subject = new Subject()\n this.subject.pipe(debounceTime(500)).subscribe(() => { \n console.log('subject debounce run')\n this.optimize().then(() => {this.load()}).then(()=>{\n HomeComponent.ins.renderStatic();\n })\n })\n }\n\n init(): Promise {\n this.APP = HomeComponent.ins\n\n return new Promise(resolve => {\n this.container = new Group()\n HomeComponent.ins.scene.add(this.container)\n registerEvents(this.controls, this.onUIChangePtr)\n registerEvents(this.controlsReload, this.onGeometryChangePtr)\n resolve()\n })\n }\n\n load(): Promise {\n return new Promise((resolve) => {\n this.container.children = []\n\n resolve()\n })\n }\n optimize(): Promise { return Promise.resolve() }\n // calculate(): Promise{ return Promise.resolve() }\n onUIChange(): void {\n this.load()\n }\n onGeometryChange(): void {\n this.subject.next()\n }\n\n\n registerEvents(controls, handler){\n controls.forEach(ctrl => {\n ctrl.addAction(handler)\n });\n }\n}","import { Box3, BoxBufferGeometry, FontLoader, Geometry, Group, Line, Line3, Material, Matrix4, Mesh, Object3D, Scene, TextBufferGeometry, TextGeometryParameters, Vector3 } from \"three\";\nimport { environment as env } from '../../environments/environment';\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE, PATIOS_ROOF_TYPE } from '../app.config';\nimport { BUILDING_SIDE, CONNECTION_TYPE, EXISTING_BUILDING_CONFIG } from '../app.constants';\nimport { HomeComponent as AppComponent, HomeComponent } from '../containers/home/home.component';\nimport Dimension, { AddDimensionOptions } from '../models/Dimension';\nimport { GeometryManager } from './geometry.manager';\nimport { MaterialManager } from './material.manager';\nimport { GeometryInfo, LineType, Print2DText, Printing2DGeometry, Printing2DLine, ViewType } from './models';\nimport { UI } from \"./ui\";\nimport { Util } from \"./utils\";\n\n// declare var KIEU_GABLE = {\n// NONE: -1,\n// FRONT: 0,\n// BACK: 1,\n// BOTH: 2\n// }\n\nexport class DimensionManager {\n private scene: Scene;\n private material: Material;\n private APP: AppComponent;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private materialManager: MaterialManager;\n\n private dimensionPlanLeft: Object3D;\n private dimensionPlanTop: Object3D;\n private dimensionFrontLeft: Object3D;\n private dimensionFrontTop: Object3D;\n private dimensionLeftLeft: Object3D;\n private dimensionLeftTop: Object3D;\n\n private dimensionEaveHeight: Object3D;\n \n private dimensionRightTop: Object3D;\n private dimensionRightRight: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private box: Box3;\n private startPos: Vector3;\n\n private font: any;\n private isReady = false;\n private textParameter: TextGeometryParameters;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n\n private static instance: DimensionManager;\n static Instance(): DimensionManager{\n if (!DimensionManager.instance) {\n DimensionManager.instance = new DimensionManager();\n }\n return DimensionManager.instance;\n }\n\n private constructor() {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise{\n this.APP = app;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n\n this.dimensionPlanTop = new Group();\n this.dimensionPlanTop.rotation.set(Math.PI/2,Math.PI,0);\n this.dimensionPlanTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.scene.add(this.dimensionPlanTop);\n\n this.dimensionPlanLeft = new Group();\n this.dimensionPlanLeft.rotation.set(-Math.PI/2, 0, -Math.PI/2);\n this.dimensionPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION, position: { planLeft: true } };\n this.scene.add(this.dimensionPlanLeft);\n\n this.dimensionEaveHeight = new Group();\n this.dimensionEaveHeight.rotation.set(0, -Math.PI/2, Math.PI/2);\n this.dimensionEaveHeight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.scene.add(this.dimensionEaveHeight);\n\n this.dimensionRightTop = new Group(); \n this.dimensionRightTop.rotation.set(0,-Math.PI/2,0);\n this.dimensionRightTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionRightTop.visible = false;\n this.scene.add(this.dimensionRightTop);\n\n this.dimensionRightRight = new Group();\n this.dimensionRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionRightRight.visible = false;\n this.scene.add(this.dimensionRightRight);\n\n this.dimensionLeftTop = new Group(); \n this.dimensionLeftTop.rotation.set(0,-Math.PI/2,0);\n this.dimensionLeftTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionLeftTop.visible = false;\n this.scene.add(this.dimensionLeftTop);\n\n this.dimensionLeftLeft = new Group();\n this.dimensionLeftLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionLeftLeft.visible = false;\n this.scene.add(this.dimensionLeftLeft);\n\n this.dimensionFrontTop = new Group();\n this.dimensionFrontTop.rotation.set(0,Math.PI,0);\n this.dimensionFrontTop.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionFrontTop.visible = false;\n this.scene.add(this.dimensionFrontTop);\n\n this.dimensionFrontLeft = new Group();\n this.dimensionFrontLeft.rotation.set(0,0,Math.PI/2);\n this.dimensionFrontLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionFrontLeft.visible = false;\n this.scene.add(this.dimensionFrontLeft);\n\n //test\n // [\n // this.dimensionPlanTop,\n // this.dimensionPlanLeft,\n // this.dimensionRightTop,\n // this.dimensionRightRight,\n // this.dimensionLeftTop,\n // this.dimensionLeftLeft,\n // this.dimensionFrontTop,\n // this.dimensionFrontLeft\n // ].forEach(d => {d.visible = true});\n\n // app.sldSpan.addAction(this.onUIChanged.bind(this));\n // app.sldMultiSpan.addAction(this.onUIChanged.bind(this));\n // app.sldFrontOverhang.addAction(this.onUIChanged.bind(this));\n // app.sldExistingWidth1.addAction(this.onUIChanged.bind(this));\n // app.sldExistingWidth2.addAction(this.onUIChanged.bind(this));\n // app.sldExistingLength.addAction(this.onUIChanged.bind(this));\n // app.sldExistingLength2.addAction(this.onUIChanged.bind(this));\n // app.sltExistingType.addAction(this.onUIChanged.bind(this));\n // app.sldExistingWallHeight.addAction(this.onUIChanged.bind(this));\n // app.dialogEditBay.addAction(this.onUIChanged.bind(this));\n // app.sltStructureType.addAction(this.onUIChanged.bind(this));\n // app.sldLeftOverhang.addAction(this.onUIChanged.bind(this));\n // app.sldRightOverhang.addAction(this.onUIChanged.bind(this));\n\n return new Promise((resolve, reject) => {\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n var loader = new FontLoader();\n loader.load( env.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this)\n }\n\n this.isReady = true;\n this.draw(); \n\n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPlanTop);\n this.scene.remove(this.dimensionPlanLeft);\n this.scene.remove(this.dimensionRightTop);\n this.scene.remove(this.dimensionRightRight);\n this.scene.remove(this.dimensionLeftTop);\n this.scene.remove(this.dimensionLeftLeft);\n this.scene.remove(this.dimensionFrontTop);\n this.scene.remove(this.dimensionFrontLeft);\n this.scene.remove(this.dimensionEaveHeight);\n }\n \n public draw(){\n if (!this.isReady) {\n return;\n }\n\n // this.dimensionPlanTop.children = [];\n // this.dimensionPlanLeft.children = [];\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter( el =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_1\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2\n );\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter( el =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_1\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_2\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH\n );\n this.dimensionEaveHeight.children = this.dimensionEaveHeight.children.filter( el =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM\n );\n this.dimensionFrontTop.children = [];\n this.dimensionFrontLeft.children = [];\n this.dimensionLeftTop.children = [];\n this.dimensionLeftLeft.children = [];\n this.dimensionRightTop.children = [];\n this.dimensionRightRight.children = [];\n\n this.scene.remove(...this.scene.children.filter(c => c.userData.type == GEOMETRY_TYPE.DIRECTION_TEXT));\n\n this.box = this.utils.getSceneBox();\n \n this.addText(\"LEFT\", {position: {trai: true}});\n this.addText(\"RIGHT\", {position: {phai: true}});\n this.addText(\"FRONT\", {position: {truoc: true}});\n this.addText(\"BACK\", {position: {sau: true}});\n\n if(UI.structureType == CONNECTION_TYPE.FREE_STANDING){\n this.dimensionPlanTop.children = [];\n this.dimensionPlanLeft.children = [];\n this.dimensionEaveHeight.children = [];\n return;\n }\n\n this.drawDimensionPlanTop({length1: true}); \n if(this.APP.sldExistingLength2.currentValue > 0){\n this.drawDimensionPlanTop({length2: true});\n } else {\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter(el => el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2)\n }\n \n this.drawDimensionPlanLeft({eaveWidth: true});\n //WIDTH 1 AND WIDTH 2 IN LEFT\n if(this.APP.sltExistingType.currentValue != 0 && this.APP.sltExistingType.currentValue != 4){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n this.drawDimensionPlanLeft({width1: true});\n } else {\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter(el => \n el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_1\n )\n }\n if(this.APP.sldExistingWidth2.currentValue > 0){\n this.drawDimensionPlanLeft({width2: true});\n } else {\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter(el => \n el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_2\n )\n }\n } else {\n this.dimensionPlanLeft.children = this.dimensionPlanLeft.children.filter(el => \n el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_1\n && el.userData?.groupType !== DIMENSION_LABEL_TYPE.WIDTH_2\n )\n }\n\n this.drawDimensionEaveHeight();\n \n this.drawDimensionFrontTop();\n this.drawDimensionFrontLeft();\n\n this.drawDimensionLeftTop();\n this.drawDimensionLeftLeft();\n \n this.drawDimensionRightTop();\n this.drawDimensionRightRight();\n\n let offset = this.calulateBoundingBox();\n this.dimensionPlanLeft.position.setX(offset.left);\n\n //this.getOutlines();\n }\n\n private drawDimensionPlanTop(userDataPos){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance;\n this.dimensionPlanTop.position.setZ(-offsetZ);\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n if(userDataPos.length1){\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let scaleX = this.APP.sldExistingLength.currentValue/this.lineGeo.length;\n\n // NO delete\n //if(this.APP.sltExistingType.currentValue == 1 && this.APP.sldExistingWidth1.currentValue > 0){\n // cap1.position.setX(-offsetX);\n \n // offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.existingWallManager.geo_existingWallW1.width;\n // cap2.position.setX(offsetX);\n \n // scaleX = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width)/this.lineGeo.length;\n // line.scale.setX(scaleX);\n // line.position.setX(this.APP.existingWallManager.geo_existingWallW1.width/2);\n //}\n //else if(this.APP.sltExistingType.currentValue == 2 && this.APP.sldExistingWidth1.currentValue > 0){\n // cap1.position.setX(offsetX);\n \n // offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.existingWallManager.geo_existingWallW1.width;\n // cap2.position.setX(-offsetX);\n \n // scaleX = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width)/this.lineGeo.length;\n // line.scale.setX(scaleX);\n // line.position.setX(-this.APP.existingWallManager.geo_existingWallW1.width/2);\n //}\n //else if(this.APP.sltExistingType.currentValue == 3 && this.APP.sldExistingWidth1.currentValue > 0){\n // offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.existingWallManager.geo_existingWallW1.width;\n // cap1.position.setX(offsetX);\n // cap2.position.setX(-offsetX);\n \n // scaleX = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width*2)/this.lineGeo.length;\n // line.scale.setX(scaleX);\n //}\n \n let textStr = this.utils.getDimensionValue(this.APP.sldExistingLength.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: this.APP.sldExistingLength.currentValue,\n container: this.dimensionPlanTop,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.LENGTH_1,\n hasTextClone: true,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false\n }\n let dim = this.dimensionPlanTop.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_1) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n else if(userDataPos.length2){\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue;\n let textOffsetX = this.APP.sldExistingLength2.currentValue/2 + this.APP.sldExistingLength.currentValue/2;\n let scaleX = this.APP.sldExistingLength2.currentValue/this.lineGeo.length;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingLength2.currentValue);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n let options : AddDimensionOptions = {... this.options,\n container: this.dimensionPlanTop,\n views: views,\n textPos: new Vector3( textOffsetX, -200, 0),\n linePos: new Vector3( textOffsetX, 0, 0),\n lineLength: this.APP.sldExistingLength2.currentValue,\n labelType: DIMENSION_LABEL_TYPE.LENGTH_2,\n hasTextClone: true,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n side: BUILDING_SIDE.LEFT\n }\n let dim = this.dimensionPlanTop.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side == BUILDING_SIDE.LEFT) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n } else {\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter(el => el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2 || (el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side !== BUILDING_SIDE.LEFT))\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n let options : AddDimensionOptions = {... this.options,\n container: this.dimensionPlanTop,\n views: views,\n textPos: new Vector3( -textOffsetX, -200, 0),\n linePos: new Vector3( -textOffsetX, 0, 0),\n lineLength: this.APP.sldExistingLength2.currentValue,\n labelType: DIMENSION_LABEL_TYPE.LENGTH_2,\n hasTextClone: true,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n side: BUILDING_SIDE.RIGHT\n }\n let dim = this.dimensionPlanTop.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side == BUILDING_SIDE.RIGHT) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n } else {\n this.dimensionPlanTop.children = this.dimensionPlanTop.children.filter(el => el.userData?.groupType !== DIMENSION_LABEL_TYPE.LENGTH_2 || (el.userData?.groupType == DIMENSION_LABEL_TYPE.LENGTH_2 && el.userData?.side !== BUILDING_SIDE.RIGHT))\n }\n }\n }\n onDimDrag(event){\n if(event.object.userData?.dimType == DIMENSION_LABEL_TYPE.LENGTH_1){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < - HomeComponent.ins.sldExistingLength.maxValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingLength.maxValue / 2\n } else if (event.object.position.x > HomeComponent.ins.sldExistingLength.maxValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingLength.maxValue / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < HomeComponent.ins.sldExistingLength.minValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingLength.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - HomeComponent.ins.sldExistingLength.minValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingLength.minValue / 2\n }\n }\n\n let distance = HomeComponent.ins.sldExistingLength.currentValue;\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue + 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue - 2 * (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue - 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength.currentValue + 2 * (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingLength.minValue){\n distance = HomeComponent.ins.sldExistingLength.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingLength.maxValue){\n distance = HomeComponent.ins.sldExistingLength.maxValue\n }\n if(HomeComponent.ins.sldExistingLength._isDisable){\n HomeComponent.ins.sldExistingLength.setValue(UI.existingLength1);\n } else {\n HomeComponent.ins.sldExistingLength.setValue(distance);\n }\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.LENGTH_2 ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if(this.startPos.x < 0){\n if (event.object.position.x < - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.maxValue){\n event.object.position.x = - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.maxValue\n } \n if (event.object.position.x > - UI.existingLength1 / 2){\n event.object.position.x = - UI.existingLength1 / 2\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.minValue){\n event.object.position.x = - UI.existingLength1 / 2 - HomeComponent.ins.sldExistingLength2.minValue\n }\n }\n if(event.object.userData?.left){\n if(event.object.position.x < - UI.existingLength1 / 2){\n event.object.position.x = - UI.existingLength1 / 2\n }\n }\n }\n if(this.startPos.x > 0){\n if (event.object.position.x > UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.maxValue){\n event.object.position.x = UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.maxValue\n } \n if (event.object.position.x < UI.existingLength1 / 2){\n event.object.position.x = UI.existingLength1 / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.minValue){\n event.object.position.x = UI.existingLength1 / 2 + HomeComponent.ins.sldExistingLength2.minValue\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > UI.existingLength1 / 2){\n event.object.position.x = UI.existingLength1 / 2\n }\n }\n }\n let distance = HomeComponent.ins.sldExistingLength2.currentValue;\n if(this.startPos.x < 0){\n // RIGHT\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (pos.x - this.startPos.x);\n } else if (obj.position.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (- pos.x + this.startPos.x);\n }\n }\n } else if(this.startPos.x > 0){\n // LEFT\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingLength2.currentValue + (- pos.x + this.startPos.x);\n }\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingLength2.minValue){\n distance = HomeComponent.ins.sldExistingLength2.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingLength2.maxValue){\n distance = HomeComponent.ins.sldExistingLength2.maxValue\n }\n HomeComponent.ins.sldExistingLength2.setValue(distance);\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.WIDTH_1 ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < - HomeComponent.ins.sldExistingWidth1.maxValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWidth1.maxValue / 2\n } else if (event.object.position.x > HomeComponent.ins.sldExistingWidth1.maxValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWidth1.maxValue / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < HomeComponent.ins.sldExistingWidth1.minValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWidth1.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - HomeComponent.ins.sldExistingWidth1.minValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWidth1.minValue / 2\n }\n }\n let distance = HomeComponent.ins.sldExistingWidth1.currentValue;\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue + 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue - 2 * (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue - 2 * (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth1.currentValue + 2 * (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingWidth1.minValue){\n distance = HomeComponent.ins.sldExistingWidth1.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingWidth1.maxValue){\n distance = HomeComponent.ins.sldExistingWidth1.maxValue\n }\n HomeComponent.ins.sldExistingWidth1.setValue(distance);\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.WIDTH_2 ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < UI.existingWidth1 / 2){\n event.object.position.x = UI.existingWidth1 / 2\n } else if (event.object.position.x > UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.maxValue){\n event.object.position.x = UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.maxValue\n }\n if(event.object.userData?.left){\n if(event.object.position.x < UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.minValue / 2){\n event.object.position.x = UI.existingWidth1 / 2 + HomeComponent.ins.sldExistingWidth2.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > UI.existingWidth1 / 2){\n event.object.position.x = UI.existingWidth1 / 2\n }\n }\n let distance = HomeComponent.ins.sldExistingWidth2.currentValue;\n if(obj.userData?.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue + (pos.x - this.startPos.x);\n } else if (obj.position.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWidth2.currentValue + (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingWidth2.minValue){\n distance = HomeComponent.ins.sldExistingWidth2.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingWidth2.maxValue){\n distance = HomeComponent.ins.sldExistingWidth2.maxValue\n }\n HomeComponent.ins.sldExistingWidth2.setValue(distance);\n } else if ( event.object.userData?.dimType == DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM ){\n const obj = event.object as Mesh\n obj.position.z = 0\n obj.updateMatrixWorld()\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < - HomeComponent.ins.sldExistingWallHeight.maxValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWallHeight.maxValue / 2\n } else if (event.object.position.x > HomeComponent.ins.sldExistingWallHeight.maxValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWallHeight.maxValue / 2\n }\n if(event.object.userData?.left){\n if(event.object.position.x < HomeComponent.ins.sldExistingWallHeight.minValue / 2){\n event.object.position.x = HomeComponent.ins.sldExistingWallHeight.minValue / 2\n }\n }\n if(event.object.userData?.right){\n if(event.object.position.x > - HomeComponent.ins.sldExistingWallHeight.minValue / 2){\n event.object.position.x = - HomeComponent.ins.sldExistingWallHeight.minValue / 2\n }\n }\n let distance = HomeComponent.ins.sldExistingWallHeight.currentValue;\n if(obj.userData.left){\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue + (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue - (- pos.x + this.startPos.x);\n }\n } else {\n if(pos.x > this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue - (pos.x - this.startPos.x);\n } else if (pos.x < this.startPos.x){\n distance = HomeComponent.ins.sldExistingWallHeight.currentValue + (- pos.x + this.startPos.x);\n }\n }\n distance = Math.round(distance / 10) * 10;\n if(distance < HomeComponent.ins.sldExistingWallHeight.minValue){\n distance = HomeComponent.ins.sldExistingWallHeight.minValue;\n }\n if(distance > HomeComponent.ins.sldExistingWallHeight.maxValue){\n distance = HomeComponent.ins.sldExistingWallHeight.maxValue\n }\n HomeComponent.ins.sldExistingWallHeight.setValue(distance);\n }\n this.startPos = event.object.position.clone()\n }\n private drawDimensionEaveHeight() {\n let _dimensionDistane = this.dimensionDistance2;\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.RIGHT){\n _dimensionDistane = this.dimensionDistance;\n }\n\n let dimensionOffsetX = this.box.min.x - this.dimensionDistance2;\n if (UI.structureType == CONNECTION_TYPE.FASCIA || UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND) {\n if (UI.existingType == 2) {\n dimensionOffsetX -= UI.eaveWidth;\n }\n }\n this.dimensionEaveHeight.position.set(dimensionOffsetX, UI.eaveHeight / 2, -UI.existingWidth1 / 2);\n\n let textStr = this.utils.getDimensionValue(UI.eaveHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: UI.eaveHeight,\n container: this.dimensionEaveHeight,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: true\n }\n let dimBay = this.dimensionEaveHeight.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n }\n private drawDimensionPlanLeft(userDataPos){\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n _dimensionDistane = this.dimensionDistance;\n }\n\n //let dimensionOffsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue + _dimensionDistane;\n let dimensionOffsetX = this.box.min.x - this.dimensionDistance2;\n\n if (this.APP.sltStructureType.currentValue == 3 || this.APP.sltStructureType.currentValue == 5) {\n if (this.APP.sltExistingType.currentValue == 2) {\n dimensionOffsetX -= this.APP.sldEaveWidth.currentValue;\n }\n }\n\n //if(this.APP.sltExistingType.currentValue == 2){\n // dimensionOffsetX -= this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPlanLeft.position.setX(dimensionOffsetX);\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n if(userDataPos.eaveWidth){\n\n let textStr = this.utils.getDimensionValue(this.APP.sldEaveWidth.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: this.APP.sldEaveWidth.currentValue,\n container: this.dimensionPlanLeft,\n views: views,\n textPos: this.APP.sltExistingType.currentValue == 0 ? new Vector3(this.APP.sldEaveWidth.currentValue/2, - 200, 0) : new Vector3( - this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue/2, 200, 0),\n linePos: this.APP.sltExistingType.currentValue == 0 ? new Vector3(this.APP.sldEaveWidth.currentValue/2, 0, 0) : new Vector3( - this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue/2, 400, 0),\n labelType: DIMENSION_LABEL_TYPE.EAVE_WIDTH,\n hasTextClone: false,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: this.APP.sldEaveWidth.currentValue.toString(), views: views, rotation: new Vector3(0,Math.PI/2,0) },\n allowDrag: false,\n visible: false\n }\n let dim = this.dimensionPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n\n if(userDataPos.width1){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n let scaleZ = this.APP.sldExistingWidth1.currentValue/this.lineGeo.length;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingWidth1.currentValue);\n let options : AddDimensionOptions = {... this.options,\n lineLength: this.APP.sldExistingWidth1.currentValue,\n container: this.dimensionPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.WIDTH_1,\n hasTextClone: false,\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: this.APP.sldExistingWidth1.currentValue.toString(), views: views, rotation: new Vector3(0,Math.PI/2,0) }\n }\n let dim = this.dimensionPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_1) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n if(userDataPos.width2){\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingWidth2.currentValue);\n let options : AddDimensionOptions = {... this.options,\n container: this.dimensionPlanLeft,\n views: views,\n textPos: new Vector3( this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue/2, -200, 0),\n linePos: new Vector3( this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue/2, 0, 0),\n lineLength: this.APP.sldExistingWidth2.currentValue,\n labelType: DIMENSION_LABEL_TYPE.WIDTH_2,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,Math.PI/2,0) },\n textCloneRotation: new Vector3(Math.PI,Math.PI,0),\n textCloneVisible: false\n }\n let dim = this.dimensionPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.WIDTH_2) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n }\n private drawDimensionFrontLeft(){\n // if(this.APP.sltExistingType.currentValue == 0){\n // return;\n // }\n\n let dimensionOffsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue + this.dimensionDistance2;\n\n if(this.APP.sltExistingType.currentValue == 2){\n dimensionOffsetX -= this.APP.sldExistingLength2.currentValue;\n }\n \n this.dimensionFrontLeft.position.set(-dimensionOffsetX,this.APP.sldExistingWallHeight.currentValue/2,0);\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue/2;\n let scaleY = this.APP.sldExistingWallHeight.currentValue/this.lineGeo.length;\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n if(this.APP.sltExistingType.currentValue == 0)\n views = null;\n \n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleY);\n\n let textStr = this.utils.getDimensionValue(this.APP.sldExistingWallHeight.currentValue);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, rotation: new Vector3(0,0,Math.PI/2), views: views };\n text.position.setY(200);\n \n this.dimensionFrontLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionFrontTop(){ \n if(this.APP.sltExistingType.currentValue == 0){\n return;\n }\n \n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue + EXISTING_BUILDING_CONFIG.EXTRA_BRACKET_HEIGHT + this.dimensionDistance2;\n \n if (this.APP.sltStructureType.currentValue == 0 || this.APP.sltStructureType.currentValue == 3 || this.APP.sltStructureType.currentValue == 5) {\n if (this.APP.sldExistingWidth1.currentValue == 0) {\n offsetY = this.APP.sldBuildingHeight.currentValue + this.dimensionDistance2;\n }\n }\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.EXISTING){\n offsetY = UI.existingWallHeight + this.dimensionDistance2\n }\n }\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FREE_STANDING){\n offsetY = this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 + this.dimensionDistance2\n }\n }\n\n this.dimensionFrontTop.position.setY(offsetY);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPlanTop.children.forEach( dimGroup => {\n dimGroup.children.forEach(c => {\n let clone = c.clone();\n clone.visible = false;\n clone.userData['views'] = views;\n \n if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, Math.PI, 0);\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionFrontTop.add(clone);\n })\n })\n }\n private drawDimensionLeftTop() {\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue + EXISTING_BUILDING_CONFIG.EXTRA_BRACKET_HEIGHT + this.dimensionDistance2\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.EXISTING){\n offsetY = UI.existingWallHeight + this.dimensionDistance2\n }\n }\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FREE_STANDING){\n offsetY = this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 + this.dimensionDistance2\n }\n }\n this.dimensionLeftTop.position.setY(offsetY);\n //this.dimensionTopLeft.position.setY(-1000);\n\n let views = [];\n\n \n this.dimensionPlanLeft.children.forEach( dimGroup => {\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n } else if(dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n views = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n } else {\n views = [];\n }\n dimGroup.children.forEach(c => {\n let clone = c.clone();\n clone.userData['views'] = views;\n \n if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible && dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n clone.position.setY(c.position.y + 400);\n } else if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionLeftTop.add(clone);\n })\n })\n }\n private drawDimensionRightTop(){\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue + EXISTING_BUILDING_CONFIG.EXTRA_BRACKET_HEIGHT + this.dimensionDistance2\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.EXISTING){\n offsetY = UI.existingWallHeight + this.dimensionDistance2\n }\n }\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && !this.APP.isFBRoof){\n if(UI.structureType === CONNECTION_TYPE.FLY_OVER){\n offsetY = UI.eaveHeight\n + UI.braketHeight\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FASCIA_UPSTAND){\n offsetY = UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2)\n + this.dimensionDistance2\n }\n if(UI.structureType === CONNECTION_TYPE.FREE_STANDING){\n offsetY = this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 + this.dimensionDistance2\n }\n }\n this.dimensionRightTop.position.setY(offsetY);\n //this.dimensionTopRight.position.setY(-1000);\n let views = [];\n\n this.dimensionPlanLeft.children.forEach( dimGroup => {\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n } else if(dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n } else {\n views = [];\n }\n dimGroup.children.forEach(c => {\n let clone = c.clone();\n clone.userData['views'] = views;\n if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible && dimGroup.userData.groupType == DIMENSION_LABEL_TYPE.EAVE_WIDTH){\n clone.position.setY(c.position.y + 400);\n clone.rotation.set(0, Math.PI, 0);\n clone.visible = false;\n } else if(views.length != 0 && c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, Math.PI, 0);\n clone.visible = false;\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionRightTop.add(clone);\n })\n })\n }\n private drawDimensionLeftLeft(){\n let dimenstionOffsetY = this.APP.sldExistingWallHeight.currentValue/2;\n let dimenstionOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2 + 500;\n\n this.dimensionLeftLeft.position.set(0,dimenstionOffsetY,-dimenstionOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionFrontLeft.children.forEach(c => {\n let clone = c.clone();\n //clone.visible = false;\n clone.userData['views'] = views;\n\n if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, 0,-Math.PI);\n clone.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n clone.userData['rotation'] = new Vector3(Math.PI/2,0,0)\n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n\n this.dimensionLeftLeft.add(clone);\n })\n }\n private drawDimensionRightRight(){\n let dimenstionOffsetY = this.APP.sldExistingWallHeight.currentValue/2;\n let dimenstionOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2 + 500;\n\n this.dimensionRightRight.position.set(0,dimenstionOffsetY,-dimenstionOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionFrontLeft.children.forEach(c => {\n let clone = c.clone();\n clone.userData['views'] = views;\n if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && c.visible){\n \n clone.userData['rotation'] = new Vector3(-Math.PI/2,0,0)\n clone.position.setY(-c.position.y);\n clone.rotation.set(0, Math.PI,-Math.PI);\n //clone.visible = false;\n \n } else if(c.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && !c.visible){\n return;\n }\n this.dimensionRightRight.add(clone);\n })\n }\n\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER__'));\n let existingHouseObjs = this.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n let existingHouseBox = this.APP.utils.getObjectsBoundingBox(existingHouseObjs);\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPlanLeft);\n planLeftBox.min.x = existingHouseBox.min.x - 500;\n planLeftBox.max.x = existingHouseBox.min.x;\n planLeftBox.max.y = 10000;\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER__'};\n // this.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planFrontBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n let patiosBox = this.APP.patiosManager.boundingBox;\n if(patiosBox && planLeftBox.max.x > patiosBox.min.x){\n planLeftBox.translate(new Vector3(patiosBox.min.x - planLeftBox.max.x - 100, 0, 0));\n }\n\n let dimPatiosLeft = this.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.left);\n if(dimPatiosLeft && planLeftBox.max.x > dimPatiosLeft.position.x){\n planLeftBox.translate(new Vector3(dimPatiosLeft.position.x - planLeftBox.max.x, 0, 0));\n }\n \n return { left: planLeftBox.min.x };\n }\n\n private addText(text: string, userData: any){\n let textMesh: Mesh;\n\n let parameter = {\n font: this.font,\n size: 500,\n height: 5,\n curveSegments: 12\n };\n\n if(userData.position.trai){\n var geometry = new TextBufferGeometry( text, parameter).center().rotateY(-Math.PI/2).rotateZ(-Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setX(this.box.min.x - this.textDistance);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n else if(userData.position.phai){\n var geometry = new TextBufferGeometry( text, parameter).center().rotateY(Math.PI/2).rotateZ(Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setX(this.box.max.x + this.textDistance);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n else if(userData.position.truoc){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.textDistance;\n let totalSpanSize = this.APP.sldSpan.currentValue \n + this.APP.sldMultiSpan.currentValue \n + this.APP.sldBackOverhang.currentValue \n + this.APP.sldFrontOverhang.currentValue\n + this.textDistance;\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF && this.APP.isFBRoof){\n totalSpanSize = UI.totalBayLength + this.textDistance;\n }\n \n if(this.APP.sldExistingWidth1.currentValue/2 < totalSpanSize){\n offsetZ = totalSpanSize;\n }\n\n var geometry = new TextBufferGeometry( text, parameter).center().rotateX(-Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setZ(offsetZ);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n else if(userData.position.sau){\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.textDistance;\n\n if(this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF){\n offsetZ = (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue ) / 2 + this.APP.sldFrontOverhang.currentValue + this.textDistance;\n }\n\n var geometry = new TextBufferGeometry( text, parameter).center().rotateY(Math.PI).rotateX(Math.PI/2);\n textMesh = new Mesh(geometry, MaterialManager.Instance().DIMENSION_TEXT);\n textMesh.position.setZ(-offsetZ);\n textMesh.userData = {...userData, type: GEOMETRY_TYPE.DIRECTION_TEXT};\n }\n \n this.listText.push(textMesh);\n this.scene.add(textMesh);\n }\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPlanTop.children, \n ...this.dimensionPlanLeft.children, \n ...this.dimensionFrontTop.children,\n ...this.dimensionFrontLeft.children,\n ...this.dimensionLeftLeft.children,\n ...this.dimensionLeftTop.children,\n ...this.dimensionRightTop.children,\n ...this.dimensionRightRight.children\n ]){\n if(!dim.userData.views){\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + 10);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n private onUIChanged(preVal: number, curVal: number): void{\n this.draw();\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, MeshPhongMaterial, Plane, Geometry, LineSegments } from \"three\";\nimport { Util } from \"./utils\";\nimport { CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { HomeComponent as AppComponent } from '../containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry, Printing2DGeometryType } from './models';\n\nexport class EaveManager {\n private scene: Scene;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_eaveWidth1: BufferGeometry;\n private geo_eaveWidth2: BufferGeometry;\n private geo_eaveLength1: GeometryInfo;\n\n public backOverhang = 100;\n\n //private matW1: Material;\n //private clippingPlaneW1: Plane;\n\n public listEave: Object3D[];\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.listEave = [];\n }\n\n public init(app: AppComponent): Promise{\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.material = MaterialManager.Instance().EAVE.clone();\n //this.matW1 = MaterialManager.Instance().EAVE.clone();\n\n app.sldBaySize.addAction(this.uiChanged.bind(this));\n app.sldSpan.addAction(this.uiChanged.bind(this));\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldEaveWidth.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n \n let scaleX = CONFIG.eaveWidth.default/this.geometryManager.EAVE.EAVE.width;\n let scaleZ = CONFIG.span.default/this.geometryManager.EAVE.EAVE.length;\n \n let translateX = this.geometryManager.EAVE.EAVE.width/2;\n let translateY = this.geometryManager.EAVE.EAVE.height/2;\n let translateZ = this.geometryManager.EAVE.EAVE.length/2;\n\n \n this.geo_eaveWidth1 = this.geometryManager.EAVE.EAVE.geometry\n .clone()\n .translate(translateX,translateY,translateZ)\n\n this.geo_eaveWidth2 = this.geometryManager.EAVE.EAVE.geometry\n .clone()\n .translate(translateX,translateY,translateZ)\n \n\n let _scaleX = CONFIG.baySize.default/this.geometryManager.EAVE.EAVE.length;\n let _scaleZ = CONFIG.eaveWidth.default/this.geometryManager.EAVE.EAVE.width;\n\n this.geo_eaveLength1 = new GeometryInfo();\n this.geo_eaveLength1.geometry = this.geometryManager.EAVE.EAVE.geometry\n .clone()\n .rotateY(Math.PI/2)\n .translate(0,translateY,translateX)\n \n // this.geo_eaveLength1.length = env.baySize.default;\n // this.geo_eaveLength1.width = env.eaveWidth.default;\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.EAVE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'EAVE_OUTLINE'));\n this.listEave = [];\n\n // if(this.APP.sldExistingLength2.currentValue == 0){\n // this.clippingPlaneW1 = new Plane(new Vector3(0,0,-1), this.APP.sldExistingWidth1.currentValue/2);\n // this.matW1.clippingPlanes = [this.clippingPlaneW1];\n // }\n // else{\n // this.matW1.clippingPlanes = [];\n // }\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n\n this.addEave({length1: true});\n if(this.APP.sldExistingLength2.currentValue > 0){\n this.addEave({length2: true});\n }\n if(this.APP.sldExistingWidth1.currentValue > 0){\n this.addEave({width1: true});\n }\n if(this.APP.sldExistingWidth2.currentValue > 0){\n this.addEave({width2: true});\n }\n\n //this.getOutLines();\n\n resolve();\n });\n }\n\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.EAVE );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMesh((o as Mesh), 10);\n outlineGeo.translate(o.position.x, o.position.y + 5000, o.position.z);\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"EAVE_OUTLINE\"};\n // this.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n }\n \n public addEave(userDataPos: any){\n let mesh: Mesh;\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n \n let backOverhangL1 = this.APP.existingWallManager.geo_existingWallL1.width + this.backOverhang;\n let backOverhangL2 = this.APP.existingWallManager.geo_existingWallL2.width + this.backOverhang;\n let backOverhangW1 = this.APP.existingWallManager.geo_existingWallW1.width + this.backOverhang;\n let backOverhangW2 = this.APP.existingWallManager.geo_existingWallW2.width + this.backOverhang;\n \n if(userDataPos.length1){\n //let mat = new MeshPhongMaterial({ transparent: true, opacity: 0.8});\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + backOverhangL1;\n let scaleX = this.APP.sldExistingLength.currentValue/this.geometryManager.EAVE.EAVE.length;\n let scaleZ = (this.APP.sldEaveWidth.currentValue + backOverhangL1)/this.geometryManager.EAVE.EAVE.width;\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n mesh = new Mesh(this.geo_eaveLength1.geometry, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ);\n mesh.scale.set(scaleX,1,scaleZ);\n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n else if(userDataPos.length2){\n let views = [\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS });\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 - backOverhangL2;\n let scaleX = this.APP.sldExistingLength2.currentValue/this.geometryManager.EAVE.EAVE.length;\n let scaleZ = (this.APP.sldEaveWidth.currentValue + backOverhangL2)/this.geometryManager.EAVE.EAVE.width;\n \n mesh = new Mesh(this.geo_eaveLength1.geometry, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(-offsetX - this.APP.sldExistingLength2.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ);\n mesh.scale.set(scaleX,1,scaleZ);\n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 - backOverhangL2;\n let scaleX = this.APP.sldExistingLength2.currentValue/this.geometryManager.EAVE.EAVE.length;\n let scaleZ = (this.APP.sldEaveWidth.currentValue + backOverhangL2)/this.geometryManager.EAVE.EAVE.width;\n \n mesh = new Mesh(this.geo_eaveLength1.geometry, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(offsetX + this.APP.sldExistingLength2.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ);\n mesh.scale.set(scaleX,1,scaleZ);\n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n }\n else if(userDataPos.width1){\n //let mat = new MeshPhongMaterial({color: new Color('blue'), transparent: true, opacity: 0.8});\n let offsetX = this.APP.sldExistingLength.currentValue/2 + backOverhangW1;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + backOverhangL1;\n let scaleX = (this.APP.sldEaveWidth.currentValue + backOverhangW1)/this.geometryManager.EAVE.EAVE.width;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + backOverhangL1)/this.geometryManager.EAVE.EAVE.length;\n\n if(this.APP.sldExistingLength2.currentValue <= 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue + backOverhangL1)/this.geometryManager.EAVE.EAVE.length;\n if(scaleZ <= 0)\n scaleZ = 0.01;\n }\n\n let views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(-offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ);\n mesh.scale.set(scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ);\n mesh.scale.set(-scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n }\n else if(userDataPos.width2){\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue + backOverhangW2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 - backOverhangL2;\n let scaleX = (this.APP.sldEaveWidth.currentValue + backOverhangW2)/this.geometryManager.EAVE.EAVE.width;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + backOverhangL2)/this.geometryManager.EAVE.EAVE.length;\n\n let views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth2, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.set(-offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_eaveWidth2, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.EAVE, position: userDataPos, views: views };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(-scaleX,1,scaleZ); \n this.scene.add(mesh);\n this.listEave.push(mesh);\n }\n }\n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, Plane, PlaneHelper, MeshPhongMaterial, DoubleSide, Geometry, BoxGeometry, LineSegments, Matrix4, Box3, BoxHelper, Box3Helper } from \"three\";\nimport { Util } from \"./utils\";\nimport { CONFIG as env, GEOMETRY_TYPE } from '../app.config';\nimport { HomeComponent as AppComponent } from '../containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry, Printing2DGeometryType } from './models';\n\nexport class ExistingRoofManager {\n private scene: Scene;\n private APP: AppComponent;\n\n private material: Material;\n private materialL1: MeshPhongMaterial;\n private materialL2L: MeshPhongMaterial;\n private materialL2R: MeshPhongMaterial;\n private materialW1L: MeshPhongMaterial;\n private materialW1R: MeshPhongMaterial;\n private materialW2L: MeshPhongMaterial;\n private materialW2R: MeshPhongMaterial;\n\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_existingWallL: BufferGeometry;\n private geo_existingWallW: BufferGeometry;\n\n // private geo_clipingW1BL: Geometry;\n // private geo_clipingW1BR: Geometry;\n // private geo_clipingW1FL: Geometry;\n // private geo_clipingW1FR: Geometry;\n\n // private geo_clipingL1L: Geometry;\n // private geo_clipingL1R: Geometry;\n\n // private geo_clipingL2LL: Geometry;\n // private geo_clipingL2RL: Geometry;\n // private geo_clipingL2LR: Geometry;\n // private geo_clipingL2RR: Geometry;\n\n // private geo_clipingW2BL: Geometry;\n // private geo_clipingW2BR: Geometry;\n\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise{\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.materialL1 = MaterialManager.Instance().EXISTING_ROOF.clone();\n \n this.materialL2L = MaterialManager.Instance().EXISTING_ROOF.clone();\n this.materialL2R = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n this.materialW1L = MaterialManager.Instance().EXISTING_ROOF.clone();\n this.materialW1R = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n this.materialW2L = MaterialManager.Instance().EXISTING_ROOF.clone();\n this.materialW2R = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n this.material = MaterialManager.Instance().EXISTING_ROOF.clone();\n\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldEaveWidth.addAction(this.uiChanged.bind(this));\n app.sldFasciaDepth.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n app.sltExistingRoofPitch.addAction(this.uiChanged.bind(this));\n app.sltExistingRoofType.addAction(this.uiReloadChange.bind(this))\n\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n let translateWidth = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/2 - 60;\n let translateHeight = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height/2;\n\n this.geo_existingWallL = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.geometry\n .clone()\n .translate(0,translateHeight,-translateWidth)\n //.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n this.geo_existingWallW = this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.geometry\n .clone()\n .translate(0,translateHeight,-translateWidth)\n .rotateY(Math.PI/2)\n //.rotateZ(-this.utils.degreesToRadians(22.5));\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == \"HELPER\"));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == \"OUTLINE\"));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.EXISTING_ROOF));\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n\n //----cliping geo-----\n let clipingWidth = 5000;\n let clipingLength = 10000;\n let clipingHeight = 10000;\n \n \n \n // let mat = MaterialManager.Instance().DEFAULT.clone();\n // mat.opacity = 0.7;\n // mat.transparent = true;\n // let mesh = new Mesh(this.geo_clipingW1BL, mat);\n // mesh.userData = { type: 'HELPER' };\n // this.APP.scene.add(mesh);\n\n //----\n\n this.materialL1.clippingPlanes = [];\n this.materialW1L.clippingPlanes = [];\n this.materialW1R.clippingPlanes = [];\n\n this.materialW2L.clippingPlanes = [];\n this.materialW2R.clippingPlanes = [];\n\n this.materialL2L.clippingPlanes = [];\n this.materialL2R.clippingPlanes = [];\n\n // this.geo_clipingW1BL = null;\n // this.geo_clipingW1BR = null;\n // this.geo_clipingW1FL = null;\n // this.geo_clipingW1FR = null;\n\n // this.geo_clipingL1L = null;\n // this.geo_clipingL1R = null;\n\n // this.geo_clipingL2LL = null;\n // this.geo_clipingL2RL = null;\n // this.geo_clipingL2LR = null;\n // this.geo_clipingL2RR = null;\n\n // this.geo_clipingW2BL = null;\n // this.geo_clipingW2BR = null;\n\n\n // if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n // if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n // this.geo_clipingL1L = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingL1L.translate(0,0,clipingLength/2);\n // this.geo_clipingL1L.rotateY(-(Math.PI/4));\n // this.geo_clipingL1L.translate(-this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n\n // this.geo_clipingW1BL = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingW1BL.translate(0,0,-clipingLength/2);\n // this.geo_clipingW1BL.rotateY(-(Math.PI/4));\n // this.geo_clipingW1BL.translate(-this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n\n // // let mat = MaterialManager.Instance().DEFAULT.clone();\n // // mat.opacity = 0.7;\n // // mat.transparent = true;\n // // let mesh = new Mesh(this.geo_clipingL1L, mat);\n // // mesh.userData = { type: 'HELPER' };\n // // this.APP.scene.add(mesh);\n // }\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // this.geo_clipingL1R = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingL1R.translate(0,0,clipingLength/2);\n // this.geo_clipingL1R.rotateY(Math.PI/4);\n // this.geo_clipingL1R.translate(this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n\n // this.geo_clipingW1BR = new BoxGeometry(clipingWidth, clipingHeight, clipingLength);\n // this.geo_clipingW1BR.translate(0,0,-clipingLength/2);\n // this.geo_clipingW1BR.rotateY(Math.PI/4);\n // this.geo_clipingW1BR.translate(this.APP.sldExistingLength.currentValue/2,0,-this.APP.sldExistingWidth1.currentValue/2);\n // }\n // }\n\n\n\n this.addExistingRoof({length1: true});\n \n if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n let dis = this.getClipingPlaneDistance();\n let planeL1L = new Plane( new Vector3(1,0,-1).normalize(), dis );\n let planeW1L = new Plane( new Vector3(-1,0,1).normalize(), -dis );\n\n let planeL1R = new Plane( new Vector3(-1,0,-1).normalize(), dis );\n let planeW1R = new Plane( new Vector3(1,0,1).normalize(), -dis );\n\n \n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n this.materialL1.clippingPlanes.push(planeL1L);\n this.materialW1L.clippingPlanes.push(planeW1L);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n this.materialL1.clippingPlanes.push(planeL1R);\n this.materialW1R.clippingPlanes.push(planeW1R);\n }\n\n this.addExistingRoof({width1: true});\n }\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n let dis = this.getClipingPlaneDistance();\n let planeW2L = new Plane( new Vector3(-1,0,1).normalize(), -dis );\n let planeL2L = new Plane( new Vector3(1,0,-1).normalize(), dis );\n\n let planeW2R = new Plane( new Vector3(1,0,1).normalize(), -dis );\n let planeL2R = new Plane( new Vector3(-1,0,-1).normalize(), dis );\n \n var p1 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, -this.APP.sldExistingWidth1.currentValue/2);\n var p2 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, this.APP.sldExistingWidth1.currentValue/2);\n var p3 = new Vector3(-(this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue), 0, this.APP.sldExistingWidth1.currentValue/2);\n \n var v = new Vector3().subVectors(p2,p1);\n var v2 = new Vector3().subVectors(p3,p2);\n var v2p = v2.clone().multiplyScalar(-1);\n\n planeW2L.translate(v).translate(v2);\n planeW2R.translate(v).translate(v2p);\n planeL2L.translate(v).translate(v2);\n planeL2R.translate(v).translate(v2p);\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n this.materialW2L.clippingPlanes.push(planeW2L);\n this.materialL2L.clippingPlanes.push(planeL2L);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n this.materialW2R.clippingPlanes.push(planeW2R);\n this.materialL2R.clippingPlanes.push(planeL2R);\n }\n\n this.addExistingRoof({width2: true});\n }\n if(this.APP.sldExistingLength2.currentValue >= this.APP.sldEaveWidth.currentValue + 500){\n let dis = this.getClipingPlaneDistance();\n let planeW1L = new Plane( new Vector3(1,0,-1).normalize(), dis );\n let planeL2L = new Plane( new Vector3(-1,0,1).normalize(), -dis );\n\n let planeW1R = new Plane( new Vector3(-1,0,-1).normalize(), dis );\n let planeL2R = new Plane( new Vector3(1,0,1).normalize(), -dis );\n \n var p1 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, -this.APP.sldExistingWidth1.currentValue/2);\n var p2 = new Vector3(-this.APP.sldExistingLength.currentValue/2, 0, this.APP.sldExistingWidth1.currentValue/2);\n var v = p2.sub(p1);\n\n planeW1L.translate(v);\n planeW1R.translate(v);\n planeL2L.translate(v);\n planeL2R.translate(v);\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n this.materialW1L.clippingPlanes.push(planeW1L);\n this.materialL2L.clippingPlanes.push(planeL2L);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n this.materialW1R.clippingPlanes.push(planeW1R);\n this.materialL2R.clippingPlanes.push(planeL2R);\n }\n\n this.addExistingRoof({length2: true});\n }\n\n //this.getOutLines();\n\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.EXISTING_ROOF );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0,5000,0);\n\n let views = [];\n\n if(o.userData.position.length1){ \n for(let plane of this.materialL1.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n );\n }\n if(o.userData.position.length2){\n if(o.userData.position.left){\n for(let plane of this.materialL2L.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n if(o.userData.position.right){\n for(let plane of this.materialL2R.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS })\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n );\n }\n if(o.userData.position.width1){\n if(o.userData.position.left){\n for(let plane of this.materialW1L.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n if(o.userData.position.right){\n for(let plane of this.materialW1R.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n );\n }\n if(o.userData.position.width2){\n if(o.userData.position.left){\n for(let plane of this.materialW2L.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n if(o.userData.position.right){\n for(let plane of this.materialW2R.clippingPlanes){\n let _plane = plane.clone() as Plane;\n _plane.translate(new Vector3(0,5000,0));\n outlineGeo = this.utils.clipOutline(outlineGeo, _plane);\n }\n }\n\n views.push(\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n );\n }\n \n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1]-5000, vertices[i+2]));\n }\n return simplifiedGeo;\n }\n\n private getClipingPlaneDistance(): number{\n let AC, BC;\n AC = BC = this.APP.sldExistingWidth1.currentValue/2;\n let CD = this.APP.sldExistingLength.currentValue/2;\n let angle = 45;\n\n let BD = BC - CD;\n let CE = AC * this.utils.sin(angle);\n\n let DG = (BD*CE)/BC;\n\n //let n: Vector3 = new Vector3(1,0,-1).normalize();\n // let clipingPlane = new Plane( n, -DG );\n // let helper = new PlaneHelper(clipingPlane, 10000, 0xffff00);\n // helper.userData = { type: 'HELPER' }\n // this.scene.add(helper);\n\n return -DG;\n } \n \n public addExistingRoof(userDataPos: any) {\n let mesh: Mesh;\n let extraLength = 2500;\n if(userDataPos.width1){\n let offsetX = this.APP.sldExistingLength.currentValue/2;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = 0;\n //let scaleZ = (this.APP.sldExistingWidth1.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.W1;\n tt.repeat.set((this.APP.sldExistingWidth1.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n this.materialW1L.map = tt;\n this.materialW1R.map = tt;\n\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n // offsetZ = this.APP.sldEaveWidth.currentValue/2;\n // }\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW1L);\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n \n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n \n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n\n if(this.APP.sldExistingLength2.currentValue > 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue/2 - extra/2);\n mesh.scale.set(1,1,scaleZ);\n }\n \n\n //------clip-----\n // if(this.geo_clipingW1BL){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1BL);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1L);\n // }\n // if(this.geo_clipingW1FL){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1FL);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1L);\n // }\n //--------------\n\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW1R);\n mesh.rotateY(Math.PI);\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n\n if(this.APP.sldExistingLength2.currentValue > 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue/2 - extra/2);\n mesh.scale.set(1,1,scaleZ);\n }\n \n\n //------clip-----\n // if(this.geo_clipingW1BR){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1BR);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1R);\n // }\n // if(this.geo_clipingW1FR){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingW1FR);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialW1R);\n // }\n //--------------\n\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n this.scene.add(mesh);\n }\n }\n if(userDataPos.width2){\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue/2;\n //let scaleZ = (this.APP.sldExistingWidth2.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.W2;\n tt.repeat.set((this.APP.sldExistingWidth2.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n this.materialW2L.map = tt;\n this.materialW2R.map = tt;\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW2L);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n \n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallW, this.materialW2R);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n mesh.rotateY(Math.PI);\n mesh.rotateZ(-this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.x - box.min.x;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ - extra/2);\n mesh.scale.set(1,1,scaleZ);\n \n this.scene.add(mesh);\n }\n }\n else if(userDataPos.length1){\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.L1;\n tt.repeat.set((this.APP.sldExistingLength.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n this.materialL1.map = tt;\n\n \n \n mesh = new Mesh(this.geo_existingWallL, this.materialL1);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: userDataPos };\n mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n\n\n let offsetX = 0;\n\n let box = new Box3().setFromObject(mesh);\n let width = box.max.z - box.min.z;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n //let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n let scaleX = (this.APP.sldExistingLength.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n if(this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue){\n if(this.APP.sltExistingType.currentValue == 1){\n offsetX = -extra/2;\n }\n else if(this.APP.sltExistingType.currentValue == 2){\n offsetX = extra/2;\n }\n else{\n //offsetX = -extra/2;\n scaleX = (this.APP.sldExistingLength.currentValue + extra*2)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n }\n else{\n extra = 0;\n scaleX = (this.APP.sldExistingLength.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2 ;\n\n\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ + this.APP.sldEaveWidth.currentValue);\n mesh.scale.setX(scaleX);\n \n\n //------clip-----\n // if(this.geo_clipingL1L){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingL1L);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialL1);\n // console.log(\"cut LEFT\");\n // }\n // if(this.geo_clipingL1R){\n // let clipingObj = this.CSG.fromGeometry(this.geo_clipingL1R);\n // let clipedMesh = this.CSG.fromMesh(mesh).subtract(clipingObj);\n // mesh = this.CSG.toMesh(clipedMesh, this.materialL1);\n // console.log(\"cut RIHGT\");\n // }\n //--------------\n\n \n \n this.scene.add(mesh);\n }\n else if(userDataPos.length2){\n // let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.L2;\n // tt.repeat.set((this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n // this.materialL2L.map = tt;\n // this.materialL2R.map = tt;\n\n // let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2;\n // let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n // let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n\n // //let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n // if(this.APP.sldExistingWidth2.currentValue <= this.APP.sldEaveWidth.currentValue){\n // // if(this.APP.sltExistingType.currentValue == 1){\n // // offsetX -= extraLength;\n // // }\n // // else if(this.APP.sltExistingType.currentValue == 2){\n // // offsetX -= extraLength;\n // // }\n // offsetX -= extraLength;\n // }\n\n // if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n // mesh = new Mesh(this.geo_existingWallL, this.materialL2L);\n // mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n // mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue/2 - extraLength/2);\n // mesh.position.setY(offsetY);\n // mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n // mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n // let box = new Box3().setFromObject(mesh);\n // let width = box.max.x - box.min.x;\n // let scaleX = (this.APP.sldExistingLength2.currentValue + width)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n // mesh.scale.setX(scaleX);\n // this.scene.add(mesh);\n // }\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // mesh = new Mesh(this.geo_existingWallL, this.materialL2R);\n // mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n // mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue/2 + extraLength/2);\n // mesh.position.setY(offsetY);\n // mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n // mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n // let box = new Box3().setFromObject(mesh);\n // let width = box.max.x - box.min.x;\n // let scaleX = (this.APP.sldExistingLength2.currentValue + width)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n // mesh.scale.setX(scaleX);\n // this.scene.add(mesh);\n // }\n\n let tt = MaterialManager.Instance().EXISTING_ROOF_TEXTURE.L2;\n tt.repeat.set((this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/1000/2, this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.width/1000/2);\n\n this.materialL2L.map = tt;\n this.materialL2R.map = tt;\n\n let offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.APP.sldFasciaDepth.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n\n //let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extraLength)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n\n if(this.APP.sldExistingWidth2.currentValue <= this.APP.sldEaveWidth.currentValue){\n // if(this.APP.sltExistingType.currentValue == 1){\n // offsetX -= extraLength;\n // }\n // else if(this.APP.sltExistingType.currentValue == 2){\n // offsetX -= extraLength;\n // }\n //offsetX -= extraLength;\n }\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallL, this.materialL2L);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, left: true} };\n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n let box = new Box3().setFromObject(mesh);\n let width = box.max.z - box.min.z;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n \n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n mesh.position.setX(-offsetX + this.APP.sldEaveWidth.currentValue/2 - extra/2);\n scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n mesh.scale.setX(scaleX);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_existingWallL, this.materialL2R);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_ROOF, position: {...userDataPos, right: true} };\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue/2);\n mesh.position.setY(offsetY);\n mesh.position.setZ(offsetZ + this.APP.sldEaveWidth.currentValue);\n mesh.rotateX(this.utils.degreesToRadians(this.APP.sltExistingRoofPitch.currentValue));\n let box = new Box3().setFromObject(mesh);\n let width = box.max.z - box.min.z;\n let extra = width - this.APP.sldEaveWidth.currentValue;\n let scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n mesh.position.setX(offsetX - this.APP.sldEaveWidth.currentValue/2 + extra/2);\n scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue + extra)/this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.length;\n }\n mesh.scale.setX(scaleX);\n this.scene.add(mesh);\n }\n }\n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n public uiReloadChange(preVal: number, curVal): void {\n this.optimize().then(() => { this.load() });\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, MeshPhongMaterial, DoubleSide, Geometry, LineSegments, Group } from \"three\";\nimport { Util } from \"./utils\";\nimport { HomeComponent as AppComponent } from '../containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry, Printing2DGeometryType } from './models';\nimport { CONFIG as env, GEOMETRY_TYPE } from '../app.config';\nimport HighLightBox from \"../models/HighlightBox\";\nimport { BUILDING_SIDE } from \"../app.constants\";\nimport { UI } from \"./ui\";\n\nexport class ExistingWallManager {\n private scene: Scene;\n private container: Group;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n public geo_existingWallW1: GeometryInfo;\n public geo_existingWallL1: GeometryInfo;\n public geo_existingWallL2: GeometryInfo;\n public geo_existingWallW2: GeometryInfo;\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise {\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.container = new Group();\n this.scene.add(this.container);\n this.material = MaterialManager.Instance().DEFAULT.clone();\n\n // app.sldBaySize.addAction(this.changeLength.bind(this));\n // app.sldSpan.addAction(this.changeSpan.bind(this));\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n \n resolve();\n });\n }\n public optimize() : Promise {\n return new Promise((resolve, reject) => {\n\n let scaleX = env.baySize.default / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n let scaleY = env.eaveHeight.default / this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n let scaleZ = env.span.default / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n\n let translateWidth = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width / 2;\n let translateHeight = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height / 2;\n let translateLength = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length / 2;\n\n this.geo_existingWallW1 = new GeometryInfo();\n this.geo_existingWallW1.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .rotateY(Math.PI / 2)\n .translate(0, translateHeight, 0);\n this.geo_existingWallW1.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallW1.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallW1.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n this.geo_existingWallW2 = new GeometryInfo();\n this.geo_existingWallW2.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .rotateY(Math.PI / 2)\n .translate(0, translateHeight, translateLength);\n this.geo_existingWallW2.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallW2.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallW2.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n this.geo_existingWallL1 = new GeometryInfo();\n this.geo_existingWallL1.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .translate(0, translateHeight, translateWidth);\n this.geo_existingWallL1.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallL1.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallL1.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n //front\n this.geo_existingWallL2 = new GeometryInfo();\n this.geo_existingWallL2.geometry = this.geometryManager.EXISTING_WALL.EXISTING_WALL.geometry\n .clone()\n .translate(-translateLength, translateHeight, -translateWidth);\n this.geo_existingWallL2.width = this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n this.geo_existingWallL2.length = this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n this.geo_existingWallL2.height = this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.container.children = [];\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.EXISTING_WALL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == \"EXISTING_WALL_OUTLINE\"));\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n \n this.addEaveWall({length1: true});\n if (this.APP.sldExistingLength2.currentValue > 0) {\n this.addEaveWall({length2: true});\n }\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n this.addEaveWall({width1: true});\n }\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.addEaveWall({width2: true});\n }\n \n new HighLightBox(this.container, {\n min: {\n x: - UI.existingLength1 / 2 - 150 - (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 + 75, \n },\n max: {\n x: - UI.existingLength1 / 2 + 150 - (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: UI.eaveHeight + 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 - 225,\n },\n userData: { wallSide: BUILDING_SIDE.LEFT }\n })\n \n new HighLightBox(this.container, {\n min: {\n x: UI.existingLength1 / 2 + 150 + (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 + 75, \n },\n max: {\n x: UI.existingLength1 / 2 - 150 + (this.APP.sldExistingWidth1.currentValue / 2 ? this.geometryManager.EXISTING_WALL.EXISTING_WALL.width : 0), \n y: UI.eaveHeight + 200, \n z: - this.APP.sldExistingWidth1.currentValue / 2 - 225,\n },\n userData: { wallSide: BUILDING_SIDE.RIGHT }\n })\n \n //this.getOutLines();\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.EXISTING_WALL );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMesh((o as Mesh), 10);\n outlineGeo.translate(o.position.x, o.position.y + 5000, o.position.z);\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"EXISTING_WALL_OUTLINE\"};\n // this.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n }\n public addEaveWall(userDataPos: any) {\n let mesh: Mesh;\n let scaleY = this.APP.sldExistingWallHeight.currentValue / this.geometryManager.EXISTING_WALL.EXISTING_WALL.height;\n\n if (userDataPos.width1) {\n let tt = MaterialManager.Instance().EXISTING_WALL_W1_TEXTURE;\n tt.repeat.set(this.APP.sldExistingWidth1.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width / 2;\n let offsetZ = this.geo_existingWallW1.width/2;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.geo_existingWallW1.width) / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n\n let views = [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n ]\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW1.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, left: true}, views: [...views, { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(-offsetX);\n mesh.position.setZ(-offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW1.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, right: true}, views: [...views, { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(offsetX);\n mesh.position.setZ(-offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n } else if (userDataPos.length1) {\n let tt = MaterialManager.Instance().EXISTING_WALL_L1_TEXTURE;\n tt.repeat.set(this.APP.sldExistingLength.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width; //this.APP.sldSpan.currentValue/2;\n let scaleX = this.APP.sldExistingLength.currentValue / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n\n let views = [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ]\n\n mesh = new Mesh(this.geo_existingWallL1.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: userDataPos, views: views };\n mesh.position.setZ(-offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setX(scaleX);\n\n this.scene.add(mesh);\n } else if (userDataPos.length2) {\n let tt = MaterialManager.Instance().EXISTING_WALL_L2_TEXTURE;\n tt.repeat.set(this.APP.sldExistingLength2.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2;\n let scaleX = (this.APP.sldExistingLength2.currentValue - this.geometryManager.EXISTING_WALL.EXISTING_WALL.width) / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n if (scaleX == 0)\n scaleX = 0.1;\n\n let views = [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_existingWallL2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, left: true}, views: views };\n mesh.position.setX(-offsetX);\n mesh.scale.setY(scaleY);\n mesh.position.setZ(offsetZ);\n mesh.scale.setX(scaleX);\n this.scene.add(mesh);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_existingWallL2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, right: true}, views: views };\n mesh.position.setX(offsetX);\n mesh.scale.setY(scaleY);\n mesh.position.setZ(offsetZ);\n mesh.scale.setX(-scaleX);\n this.scene.add(mesh);\n }\n\n //mesh.visible = !(this.APP.sldExistingLength2.currentValue == 0);\n } else if (userDataPos.width2) {\n let tt = MaterialManager.Instance().EXISTING_WALL_W2_TEXTURE;\n tt.repeat.set(this.APP.sldExistingWidth2.currentValue / 1024 / 2, this.APP.sldExistingWallHeight.currentValue / 1024 / 2);\n\n let mat = new MeshPhongMaterial({\n side: DoubleSide,\n map: tt\n });\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.APP.sldExistingLength2.currentValue + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width/2;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 - this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n let scaleZ = (this.APP.sldExistingWidth2.currentValue + this.geo_existingWallL2.width) / this.geometryManager.EXISTING_WALL.EXISTING_WALL.length;\n if (scaleZ == 0)\n scaleZ = 0.1;\n\n let views = [ \n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, left: true}, views: [...views, { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(-offsetX);\n mesh.position.setZ(offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n mesh = new Mesh(this.geo_existingWallW2.geometry, mat);\n mesh.userData = { type: GEOMETRY_TYPE.EXISTING_WALL, position: {...userDataPos, right: true}, views: [...views, { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }] };\n mesh.position.setX(offsetX);\n mesh.position.setZ(offsetZ);\n mesh.scale.setY(scaleY);\n mesh.scale.setZ(scaleZ);\n this.scene.add(mesh);\n }\n\n //mesh.visible = !(this.APP.sldExistingWidth2.currentValue == 0);\n }\n //this.scene.add(mesh);\n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n}\n","import {\n Scene,\n Mesh,\n Object3D,\n Material,\n Group,\n FontLoader,\n TextBufferGeometry,\n PlaneBufferGeometry,\n Vector3,\n BoxHelper,\n Box3Helper,\n Matrix4,\n Box3,\n Geometry,\n LineSegments,\n LineBasicMaterial,\n Color,\n BoxBufferGeometry,\n Line,\n Line3,\n BufferGeometry,\n Points,\n PointsMaterial,\n} from \"three\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { Util } from \"../utils\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n ViewType,\n LineType,\n IBay,\n Printing2DGeometry,\n Printing2DLine,\n Print2DText,\n Printing2DGeometryType,\n} from \"../models\";\nimport {\n GEOMETRY_TYPE,\n DIMENSION_LOCATION,\n DIMENSION_LABEL_TYPE,\n} from \"src/app/app.config\";\nimport { environment } from \"src/environments/environment\";\nimport { ExistingBuildingManager } from \".\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport {\n FIT_DIMENSION,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { UI } from \"../ui\";\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport { CONFIG as conf } from \"../../app.config\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: ExistingBuildingManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n private geometryManager: GeometryManager;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any;\n private textParameter: any;\n\n private isReady = false;\n\n private box: Box3;\n\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, manager: ExistingBuildingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n //this.dimensionPatiosPlanRight,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n this.isReady = true;\n this.draw();\n\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPatiosLowerHeightDim,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosLowerHeightDim.children =\n this.dimensionPatiosLowerHeightDim.children.filter(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay\n .map((b) => b.value)\n .reduce((sum, current) => sum + current);\n // for (let b of this.APP.dialogEditBay.listBay) {\n // this.totalBaySize += b.value;\n // }\n\n this.box = this.utils.getSceneBox();\n // let boxHelper = new Box3Helper(this.MANAGER.boundingBox);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.scene.add(boxHelper);\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // //let existingHouseDimBox = new Box3().setFromObject(existingHouseDimLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim() {\n const frontPostHeight = this.utils.getHeightByAngle(\n UI.height - this.MANAGER.postAndBeamManager.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n const offsetZFrontPos = UI.span + UI.multiSpan + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(\n 0,\n frontPostHeight / 2,\n offsetZFrontPos\n );\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [],\n },\n allowDrag: false,\n };\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0; //this.totalBaySize / 2;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n text.position.set(-200, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n } else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + \" degree\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, Math.PI / 2, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n\n //console.log(dim);\n }\n\n private drawDimensionPatiosPlanBottom() {\n //let offsetX = -(this.totalBaySize + this.APP.sldLeftOverhang.currentValue*2 + this.APP.sldRightOverhang.currentValue)/2;\n let offsetX = -this.totalBaySize / 2;\n let offsetZ = this.box.max.z + this.dimensionDistance2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue / 2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2;\n //}\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n },\n };\n let dimBay = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n -this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftCutHorizontal.currentValue / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldRightCutHorizontal.currentValue / 2 +\n this.APP.sldRightOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500 - 200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n );\n }\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldLeftOverhang.currentValue,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldRightOverhang.currentValue,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue / 2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n //let offsetDimensionX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + _dimensionDistane;\n //if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n // if (this.APP.sldExistingLength.currentValue > )\n //}\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n\n //}\n\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // offsetDimensionX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimSpan = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n let offsetX =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(\n this.APP.sldMultiSpan.currentValue\n );\n\n let optionsMul: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n 0,\n 0\n ),\n textPos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n -200,\n 0\n ),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimMul = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) as Dimension;\n if (!dimMul) {\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN\n );\n }\n\n let extraDistance = 0;\n\n //----Rake cut\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ =\n dimLength / 2 +\n UI.overhangFront +\n UI.multiSpan / 2 -\n UI.rakeCutRightVer / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3(0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n );\n }\n //----End rake cut\n\n let offsetRight =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2; // + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n this.APP.sldFrontOverhang.currentValue,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n this.APP.sldBackOverhang.currentValue,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT,\n extraDistance\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n let dimOffsetX = this.box.max.x;\n //let dimOffsetX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height / 2;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // dimOffsetX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z; //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2;\n //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n\n this.APP.sldEaveWidth,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n // patiosBox = this.APP.utils.getObjectsBoundingBox(\n // this.MANAGER.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n\n // let patiosBoxHelper = new Box3Helper(patiosBox);\n // patiosBoxHelper.userData = {type: location};\n // this.scene.add(patiosBoxHelper);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n // for(let i = 0; i < 100; i++){\n // let intersectBox = false;\n // for(let o of objs){\n // let objBox = this.APP.utils.getObjectBoundingBox(o);\n // if(dimBox.intersectsBox(objBox)){\n // intersectBox = true;\n // dimBox.translate(new Vector3(100,0,0))\n // }\n // }\n\n // if(!intersectBox)\n // break;\n // }\n\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n dimBox.translate(new Vector3(objBox.max.x - dimBox.min.x, 0, 0));\n }\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z);\n }\n }\n}\n","import { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"../models\";\nimport { Group, Box3, Box3Helper, BoxHelper, Vector3 } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { SliderInputComponent } from \"src/app/component/slider-input/slider-input.component\";\nimport {\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { environment } from \"src/environments/environment\";\n\nexport class ExistingBuildingManager implements PatiosManager {\n private APP: AppComponent;\n patiosGroup: Group;\n public boundingBox: Box3;\n public postAndBeamManager: PostAndBeamManager;\n private roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n\n private updateEventHandle: any;\n private controlsToRegisterEvent: Array;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public patiosLength: number;\n public patiosWidth: number;\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {}\n loadBracketCutout(bracketQuantity: number): void {}\n loadSideGableBracket(bracketQuantity: number): void {}\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sldBuildingHeight,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.btnTurnOnPanel,\n this.APP.sltBeamLayoutShow,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n //let cutoutCondition = this.cutoutCondition.map(x => x.currentValue).reduce((a,b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.sltExistingType.currentValue == 1) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n -diff / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 + this.APP.sldLeftOverhang.currentValue\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n diff / 2 -\n this.APP.sldRightOverhang.currentValue +\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 - this.APP.sldRightOverhang.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if(!environment.production){\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n Vector3,\n BufferGeometry,\n BoxHelper,\n Geometry,\n LineSegments,\n BoxBufferGeometry,\n Group,\n Object3D,\n Matrix4,\n Line,\n Points,\n PointsMaterial,\n Box3,\n Box3Helper,\n} from \"three\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"../../app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport {\n GeometryInfo,\n Printing2DGeometryType,\n Printing2DLine,\n Printing2DGeometry,\n Print2DView,\n ViewType,\n LineType,\n} from \"../models\";\nimport { ExistingBuildingManager } from \".\";\nimport { group } from \"console\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private frontPostHeight: number;\n private totalBaySize: number;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private MANAGER: ExistingBuildingManager;\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, existingManager: ExistingBuildingManager) {\n this.APP = app;\n this.MANAGER = existingManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = existingManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiCHangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n //this.APP.dialogEditBay,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltCutOut,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, env.height.default / this.postInfo.height, 1);\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = UI.totalBayLength;\n this.roofWidth = UI.overhangLeft + UI.overhangRight + this.totalBaySize;\n this.enableCutout = this.MANAGER.cutoutCondition;\n this.addBeam({ isMultiSpan: false });\n this.addBeam({ isMultiSpan: true });\n this.addBeamAngleRakecut(BUILDING_SIDE.LEFT);\n this.addBeamAngleRakecut(BUILDING_SIDE.RIGHT);\n this.addBeamStepRakecut();\n this.addGround();\n let offsetX = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let offsetXOrigin = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n\n let idx = 0;\n this.addPost(offsetX, { isMultiSpan: false, left: true });\n this.addPost(offsetX, { isMultiSpan: true, left: true });\n\n this.APP.dialogEditBay.listBay.forEach((m) => {\n offsetX += m.value;\n if (idx === this.APP.dialogEditBay.listBay.length - 1) {\n offsetX -= this.postInfo.width;\n this.addPost(offsetX, { isMultiSpan: false, right: true });\n this.addPost(offsetX, { isMultiSpan: true, right: true });\n this.addPostAngleRakecut(offsetXOrigin, { left: true });\n this.addPostAngleRakecut(offsetX, { right: true });\n } else {\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: false,\n });\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: true,\n });\n }\n idx++;\n });\n\n this.addPostStepRakecut();\n this.addDownPipe();\n this.addDownPipeStepRakecut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private addDownPipeStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetX = -this.totalBaySize / 2 + 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutLeftVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutLeftVer;\n\n this.downpipeStepRakeCutGroupLeft.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupLeft.add(meshPipe);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetX = this.totalBaySize / 2 - 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutRightVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutRightVer;\n\n this.downpipeStepRakeCutGroupRight.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupRight.add(meshPipe);\n }\n }\n private addDownPipe() {\n let offsetZ = UI.span + UI.multiSpan + 100 - UI.existingWidth1 / 2;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n\n //Rakecut\n //Downpipe will be in left\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX = -this.totalBaySize / 2 + this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX =\n -this.totalBaySize / 2 +\n UI.rakeCutLeftHor +\n EXISTING_BUILDING_CONFIG.FIT_FROM_CORNER_TO_CENTER_GUTTER;\n }\n }\n //Downpipe will be in right\n else {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX = this.totalBaySize / 2 - this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetX =\n this.totalBaySize / 2 -\n UI.rakeCutRightHor -\n EXISTING_BUILDING_CONFIG.FIT_FROM_CORNER_TO_CENTER_GUTTER;\n }\n }\n\n let pipeLength =\n this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n ) + this.geo_roofBase.height;\n\n this.downpipeGroup = this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n 0,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n pipeLength,\n true\n );\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addGround() {\n let offsetX = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetZ = -UI.existingWidth1 / 2;\n let width = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n public addPost(offsetX: number, userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n\n const _existingType = +this.APP.sltExistingType.currentValue;\n\n let _flag = false;\n if (userDataPos.left && UI.overhangLeft > 0) {\n _flag = true;\n } else if (userDataPos.right && UI.overhangRight > 0) {\n _flag = true;\n }\n\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (_existingType === 1 || _existingType === 3) &&\n userDataPos.left &&\n UI.existingWidth1 >= UI.span\n ) {\n return;\n }\n if (\n (_existingType === 2 || _existingType === 3) &&\n userDataPos.right &&\n UI.existingWidth1 >= UI.span\n ) {\n return;\n }\n } else if (!_flag) {\n if (\n (_existingType === 1 || _existingType === 3) &&\n userDataPos.left &&\n UI.existingWidth1 >= UI.span + UI.multiSpan\n ) {\n return;\n }\n if (\n (_existingType === 2 || _existingType === 3) &&\n userDataPos.right &&\n UI.existingWidth1 >= UI.span + UI.multiSpan\n ) {\n return;\n }\n }\n let views: Print2DView[] = [];\n\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let offsetZ = -UI.existingWidth1 / 2;\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n // offsetZ += this.geometryManager.EXISTING_WALL.EXISTING_WALL.width;\n let scaleY = 0;\n let length = 0;\n\n if (userDataPos.isMultiSpan) {\n length =\n UI.height - this.getHeightByRoofPitch(false) - this.beamInfo.height;\n scaleY = length / this.postInfo.height;\n } else {\n length =\n UI.height - this.getHeightByRoofPitch(true) - this.beamInfo.height;\n scaleY = length / this.postInfo.height;\n }\n this.frontPostHeight = length;\n // scaleY -= this.geometryManager.SUPERIOR_BEAM.S65x160.height;\n\n let exceedMoveBackLimit = false;\n\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX -= UI.overhangLeft;\n offsetZ -= this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n }\n }\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX += UI.overhangRight;\n offsetZ -= this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n }\n }\n }\n //End rakecut\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n public addPostAngleRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let height =\n UI.height - this.getHeightByRoofPitch(true) - this.beamInfo.height;\n let offsetZ =\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan - this.beamInfo.width / 2;\n\n let scaleY = height / this.postInfo.height;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.left) {\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(offsetX + this.beamLeftCutSizeInfo.l, 0, offsetZ);\n postLeft.scale.setY(scaleY);\n\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postLeft);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.right) {\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postRight.position.set(\n offsetX - this.beamRightCutSizeInfo.l,\n 0,\n offsetZ\n );\n postRight.scale.setY(scaleY);\n\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postRight);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postRight);\n }\n }\n }\n }\n private addPostStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.postInfo.width / 2;\n\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n\n let scaleYB = scaleYF;\n let offsetZB = offsetZF;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(offsetXL + this.postInfo.width / 2, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(offsetXL + this.postInfo.width / 2, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 - this.postInfo.width;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.postInfo.width / 2;\n\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n\n let scaleYB = scaleYF;\n let offsetZB = offsetZF;\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.postInfo.height;\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(offsetXR + this.postInfo.width / 2, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(offsetXR + this.postInfo.width / 2, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n }\n public addBeam(userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n //const mesh = new Mesh(this.beamInfo.geometry, MaterialManager.Instance().BEAM);\n\n let offsetZ = -UI.existingWidth1 / 2;\n let offsetY = 0;\n let scaleX = this.roofWidth / this.beamInfo.length;\n let beamLength = this.roofWidth;\n\n if (userDataPos.isMultiSpan) {\n offsetY = UI.height - this.getHeightByRoofPitch(false);\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetY = UI.height - this.getHeightByRoofPitch(true);\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetXR = this.totalBaySize / 2 + UI.overhangRight;\n\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n //Cutout - in case of multi span & apply only the back beam\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.enableCutout &&\n !userDataPos.isMultiSpan\n ) {\n if (UI.span <= UI.existingWidth1) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n scaleX =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.beamInfo.length;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n scaleX =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.beamInfo.length;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n scaleX =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue * 2) /\n this.beamInfo.length;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2;\n }\n }\n }\n\n //rake cut - apply only the front beam\n if (UI.multiSpan <= 0 || (UI.multiSpan > 0 && userDataPos.isMultiSpan)) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.beamLeftCutSizeInfo.l;\n scaleX =\n (this.roofWidth - this.beamLeftCutSizeInfo.l) / this.beamInfo.length;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetXL += UI.rakeCutLeftHor;\n scaleX = (this.roofWidth - UI.rakeCutLeftHor) / this.beamInfo.length;\n beamLength -= UI.rakeCutLeftHor;\n }\n\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetXR -= this.beamRightCutSizeInfo.l;\n scaleX =\n (this.roofWidth - this.beamRightCutSizeInfo.l) / this.beamInfo.length;\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetXR -= UI.rakeCutRightHor;\n scaleX = (this.roofWidth - UI.rakeCutRightHor) / this.beamInfo.length;\n beamLength -= UI.rakeCutRightHor;\n }\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngleRakecut(cutSide: BUILDING_SIDE) {\n if (\n cutSide == BUILDING_SIDE.LEFT &&\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n if (\n cutSide == BUILDING_SIDE.RIGHT &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let beamSizeInfo = this.utils.getBeamRakeCutInfo(this.APP, cutSide);\n\n let offsetX = -this.totalBaySize / 2 - UI.overhangLeft + beamSizeInfo.l;\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n\n let offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n let beamLength = beamSizeInfo.m;\n let scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n\n //beam lenght can not go behind existing wall\n if (\n cutSide == BUILDING_SIDE.LEFT &&\n UI.rakeCutLeftVer + beamSizeInfo.k_ > this.MANAGER.patiosLength\n ) {\n beamLength -= beamSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n } else if (\n cutSide == BUILDING_SIDE.RIGHT &&\n UI.rakeCutRightVer + beamSizeInfo.k_ > this.MANAGER.patiosLength\n ) {\n beamLength -= beamSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n }\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let rotYL = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n let rotYR = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n const mesh = new Mesh(\n this.beamRakecutInfoLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(0, rotYL, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(cutSide, matrix);\n }\n\n beamGroup.rotation.set(rotX, rotYL, 0);\n if (UI.beamType == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n offsetX = this.totalBaySize / 2 + UI.overhangRight - beamSizeInfo.l;\n const mesh = new Mesh(\n this.beamRakecutInfoRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(0, -rotYR, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(cutSide, matrix);\n }\n\n beamGroup.rotation.set(rotX, -rotYR, 0);\n if (UI.beamType == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n let offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n\n let beamLength = UI.rakeCutLeftHor + this.postInfo.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft + this.postInfo.width;\n }\n\n let beamGroup;\n\n if (UI.beamType == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ = UI.span + UI.multiSpan - UI.existingWidth1 / 2;\n let offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n let beamLength = UI.rakeCutRightHor + this.postInfo.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.postInfo.width;\n }\n\n let beamGroup;\n\n if (UI.beamType == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n }\n private addPostForBeamAngelRakecut(\n cutSide: BUILDING_SIDE,\n beamMatrix: Matrix4\n ) {\n let inf = this.utils.getBeamRakeCutInfo(this.APP, cutSide);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n let p1 = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(inf.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(1, 0, 0).multiplyScalar(inf.l)\n );\n let angle = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n\n let ver = (Math.cos(angle) * inf.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n -UI.totalBayLength / 2 + UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(p3, dir.multiplyScalar(inf.m / 2));\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postLeft.position.set(pMid2.x, 0, pMid2.z);\n postLeft.scale.setY(scaleY);\n this.scene.add(postLeft);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n let p1 = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(inf.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(-1, 0, 0).multiplyScalar(inf.l)\n );\n let angle = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n\n let ver = (Math.cos(angle) * inf.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(p3, dir.multiplyScalar(inf.m / 2));\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.height - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postRight.position.set(pMid2.x, 0, pMid2.z);\n postRight.scale.setY(scaleY);\n this.scene.add(postRight);\n }\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n return this.utils.tan(UI.patiosPitch) * UI.span;\n } else {\n return this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n }\n }\n}\n","import { Mesh, Vector3, Material, Plane, Geometry, BufferGeometry, Group, BoxBufferGeometry, MeshLambertMaterial, BoxHelper, Matrix4, PlaneHelper, Points, PointsMaterial, Color, PlaneBufferGeometry, DoubleSide, Object3D, LineSegments, Line3, Line } from 'three';\nimport { Util } from '../utils';\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from '../../app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RAKECUT_TYPE } from '../../app.constants';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Print2DView, ViewType, LineType } from '../models';\nimport { ExistingBuildingManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport HighLightBox from 'src/app/models/HighlightBox';\nimport { UI } from '../ui';\nimport SelectionManager from '../selection.manager';\nimport { BufferGeometryUtils } from 'three/examples/jsm/utils/BufferGeometryUtils'\nimport _ from 'lodash'\nimport { distance } from 'mathjs';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: ExistingBuildingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private roofInfo: GeometryInfo;\n private roofBaseInfo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private receiverCutoutRightVer2: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutLeftVer2: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n private roofGroup: Group;\n\n private eventHandleId: any;\n\n // Var\n private roofLengthPlus: number;\n private roofWidth: number;\n private roofLength: number;\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n\n constructor(app: AppComponent, existingManager: ExistingBuildingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = existingManager;\n this.scene = new Group();\n existingManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofSheetPanel();\n this.roofInfo.geometry\n .translate(this.roofInfo.width / 2, -1, this.roofInfo.length / 2);\n\n this.roofBaseInfo = this.geometryManager.getRoofBase();\n this.roofBaseInfo.geometry\n .translate(this.roofBaseInfo.width / 2, this.roofBaseInfo.height / 2, this.roofBaseInfo.length / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(-this.zFlashingRakecutRightGeo.length, 0, 0);\n\n // Barge capping - left\n this.bargeLeftInfo = this.geometryManager.getBarge();\n this.bargeLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(this.bargeLeftInfo.width / 2 - 3, this.bargeLeftInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeLeftInfo.length / 2);\n\n // Barge capping - right\n this.bargeRightInfo = this.geometryManager.getBarge();\n this.bargeRightInfo.geometry\n .translate(-this.bargeLeftInfo.width / 2 + 3, this.bargeLeftInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeLeftInfo.length / 2);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutRightHor.length / 2, this.receiverCutoutRightHor.height / 2, this.receiverCutoutRightHor.width / 2);\n\n \n //Vertical Barge cutout left 2\n this.receiverCutoutLeftVer2 = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer2.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer2.width / 2, this.receiverCutoutLeftVer2.height / 2, this.receiverCutoutLeftVer2.length / 2);\n\n //Vertical cutout right 2\n this.receiverCutoutRightVer2 = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer2.geometry\n .translate(-this.receiverCutoutRightVer2.width / 2, this.receiverCutoutRightVer2.height / 2, this.receiverCutoutRightVer2.length / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 + 2, this.geo_receiverChanel.width / 2);\n\n // Gutter\n let gtExtraOffsetY = 0;\n if (this.APP.sltGutterType.currentValue == 1 || this.APP.sltGutterType.currentValue == 2) {\n gtExtraOffsetY = 20;\n }\n\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL \n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS\n || x.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n || x.userData.type === GEOMETRY_TYPE.HIGHLIGHT_BOX));\n\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type === 'ROOF_OUTLINE'));\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.roofLength = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n const _roofLength = Math.pow(this.roofLength, 2) + Math.pow(this.getHeightByRoofPitch({ isMultiSpan: true }), 2);\n this.roofLengthPlus = Math.sqrt(_roofLength);\n this.roofWidth = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n\n \n\n this.addRoofGroup();\n this.addCutout();\n if(UI.rakeCutLeftType == 0){\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft), \n y: 0, \n z: UI.span + UI.multiSpan + UI.overhangFront, \n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300, \n y: 0, \n z: UI.span + UI.multiSpan + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT }\n })\n }\n if(UI.rakeCutRightType == 0){\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300, \n y: 0, \n z: UI.span + UI.multiSpan + UI.overhangFront, \n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT }\n })\n }\n\n //Add angle rakecut\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE){\n this.addAngleRakeCut(BUILDING_SIDE.LEFT);\n }\n if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n this.addAngleRakeCut(BUILDING_SIDE.RIGHT);\n }\n\n //Add step rakecut\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP){\n this.addStepRakecut(BUILDING_SIDE.LEFT);\n }\n if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP){\n this.addStepRakecut(BUILDING_SIDE.RIGHT);\n }\n \n\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n\n let roofPanelCount = Math.ceil(this.roofWidth / this.roofInfo.width);\n this.enableCutout = this.MANAGER.cutoutCondition;\n\n //clipping plane\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR);\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n\n //panel direction\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetXL = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.roofInfo.width;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = true;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBase(offsetXL, [this.csg_cutoutLeft] );\n this.addRoof(offsetXL, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n this.addRoofBase(offsetXL, [this.csg_cutoutRight] );\n this.addRoof(offsetXL, [this.csg_cutoutRight] );\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n let flag = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n //cuted2 = totalPanelLength >= this.APP.sldExistingLength2.currentValue + this.roofWidth && !isOver;\n\n // if (!cuted && !isOver) {\n // this.addRoofBase(offsetXL, true, isOver || isOver2, this.csg_cutoutLeft);\n // this.addRoof(offsetXL, true, isOver || isOver2, this.csg_cutoutLeft);\n // cuted = true;\n // }\n // else if (!cuted2 && flag) {\n // this.addRoofBase(offsetXL, true, isOver || isOver2, this.csg_cutoutRight);\n // this.addRoof(offsetXL, true, isOver || isOver2, this.csg_cutoutRight);\n // cuted2 = true;\n // }\n // else {\n // this.addRoofBase(offsetXL, false, isOver || isOver2, null);\n // this.addRoof(offsetXL, false, isOver || isOver2, null);\n // }\n\n this.addRoofBase(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoof(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else {\n //clipping plane\n // const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR); // (this.APP.sldBaySize.currentValue / 2) + this.APP.sldRightOverhang.currentValue );\n // this.material.clippingPlanes = [clipingPlane];\n // MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlane];\n\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofBase(offsetXL, []);\n this.addRoof(offsetXL, []);\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n\n\n this.addZFlashing();\n this.addZFlashingAngleRakeCut();\n this.addZFlashingStepRakeCut();\n this.addBarge();\n this.addBargeStepRakecut();\n this.addGutter();\n this.addGutterAngelRakecut();\n this.addGutterStepRakecut();\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n //this.getOutLines();\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n \n public addRoofGroup() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n //let offsetX = -this.APP.sldLeftOverhang.currentValue;\n let offsetY = this.APP.sldBuildingHeight.currentValue;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2;\n\n this.roofGroup.position.set(0, offsetY, offsetZ);\n this.roofGroup.rotation.set(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n\n this.scene.add(this.roofGroup);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroup.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS);\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n\n //var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n //line.userData = {type: \"ROOF_OUTLINE\"};\n //this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroup.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n}\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoof(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n let scaleZ = this.roofLengthPlus / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet//this.APP.sldBuildingHeight.currentValue + this.roofBaseInfo.height - offsetSheet;\n let offsetZ = 0;//(-this.APP.sldExistingWidth1.currentValue / 2) ; // + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width; // -(this.APP.sldExistingWidth1.currentValue / 2);\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - this.APP.sldExistingWidth1.currentValue) / this.roofInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n mesh.position.set(offsetX, offsetY, offsetZ);\n //mesh.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL, views: views };\n \n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n \n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //Cai nay bi delay\n //this.roofGroup.updateMatrixWorld();\n //mesh.applyMatrix4(this.roofGroup.matrixWorld);\n\n //cho no cung he toa do => cai nay khong delay\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroup.position.z);\n\n // let helper = new BoxHelper(mesh);\n // helper.userData = { type: 'HELPER' };\n // this.APP.scene.add(helper);\n\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if(cutoutCondition){\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n if(rakeCutCondition){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n }\n else {\n this.roofGroup.add(mesh);\n }\n }\n private addAngleRakeCut(cutSide: BUILDING_SIDE) {\n let offsetXL = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = -100;\n\n let offsetZ = this.MANAGER.patiosLength - this.APP.sldExistingWidth1.currentValue / 2;\n\n let angle;\n\n if(cutSide == BUILDING_SIDE.LEFT){\n angle = Math.atan(this.APP.sldLeftCutHorizontal.currentValue / this.APP.sldLeftCutVertical.currentValue);\n }\n else if(cutSide == BUILDING_SIDE.RIGHT){\n angle = Math.atan(this.APP.sldRightCutHorizontal.currentValue / this.APP.sldRightCutVertical.currentValue);\n }\n \n const _offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n //- this.APP.sldExistingWidth1.currentValue/2\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let _rotY;\n if(cutSide == BUILDING_SIDE.LEFT){\n _rotY = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n }\n else if(cutSide == BUILDING_SIDE.RIGHT){\n _rotY = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n }\n let _angle = (Math.PI - _rotY)/2;\n\n let hypotenuse = Math.sqrt(Math.pow(this.MANAGER.patiosLength, 2) + Math.pow(this.MANAGER.patiosWidth, 2));\n let scaleLength = hypotenuse/1000;\n let scaleWidth = this.MANAGER.patiosLength * this.MANAGER.patiosWidth / hypotenuse/1000;\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n this.mesh_rakecutLeft = new Mesh(this.geo_rakecutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutLeft.position.set(offsetXL + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ - this.APP.sldLeftCutVertical.currentValue);\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutLeft.rotateY(angle);\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n //cut gutter csg\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n this.meshCutGutterLeft1 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterLeft1.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterLeft1.position.set(offsetXL + this.APP.sldLeftCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterLeft1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft1.rotation.set(0,_angle,0);\n this.meshCutGutterLeft1.updateMatrix();\n this.csgCutGutterLeft1 = CSG.fromMesh(this.meshCutGutterLeft1);\n //this.APP.scene.add(this.meshCutGutterLeft1);\n\n this.meshCutGutterLeft2 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterLeft2.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterLeft2.position.set(offsetXL + this.APP.sldLeftCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterLeft2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft2.rotation.set(0,_angle + Math.PI,0);\n this.meshCutGutterLeft2.updateMatrix();\n this.csgCutGutterLeft2 = CSG.fromMesh(this.meshCutGutterLeft2);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n this.mesh_rakecutRight = new Mesh(this.geo_rakecutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutRight.position.set(offsetXR + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ - this.APP.sldRightCutVertical.currentValue);\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutRight.rotateY(-angle);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n\n\n //cut gutter\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200)/500;\n this.meshCutGutterRight1 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterRight1.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterRight1.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterRight1.rotation.set(0,-_angle,0);\n this.meshCutGutterRight1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight1.updateMatrix();\n this.csgCutGutterRight1 = CSG.fromMesh(this.meshCutGutterRight1);\n\n this.meshCutGutterRight2 = new Mesh(this.geoCutGutter, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.meshCutGutterRight2.userData = {category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTGUTTER'};\n this.meshCutGutterRight2.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, 0, _offsetZ);\n this.meshCutGutterRight2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight2.rotation.set(0,-(_angle + Math.PI),0);\n this.meshCutGutterRight2.updateMatrix();\n this.csgCutGutterRight2 = CSG.fromMesh(this.meshCutGutterRight2);\n //this.APP.scene.add(this.meshCutGutterRight2);\n }\n }\n private addStepRakecut(cutSide: BUILDING_SIDE) {\n let offsetXL = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let offsetY = -100;//this.APP.sldExistingWallHeight.currentValue;\n // let offsetY = this.utils.getHeightByAngle(\n // this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue, \n // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, \n // this.APP.sltRoofPitch.currentValue, \n // 1\n // );\n\n let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue - this.APP.sldExistingWidth1.currentValue / 2;\n \n\n if (cutSide == BUILDING_SIDE.LEFT) {\n let scaleLength = (this.APP.sldLeftCutVertical.currentValue + 100)/1000;\n let scaleWidth = (this.APP.sldLeftCutHorizontal.currentValue + 100)/1000;\n\n this.mesh_rakecutLeft = new Mesh(this.geo_rakecutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutLeft.position.set(offsetXL + this.APP.sldLeftCutHorizontal.currentValue, offsetY, offsetZ - this.APP.sldLeftCutVertical.currentValue);\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n let scaleLength = (this.APP.sldRightCutVertical.currentValue + 100)/1000;\n let scaleWidth = (this.APP.sldRightCutHorizontal.currentValue + 100)/1000;\n\n this.mesh_rakecutRight = new Mesh(this.geo_rakecutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_rakecutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'RAKECUT' };\n\n this.mesh_rakecutRight.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, offsetY, offsetZ - this.APP.sldRightCutVertical.currentValue);\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n\n public addRoofBase(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n let scaleZ = (this.roofLengthPlus - CONST.ROOF_BASE_SUBTRACT) / this.roofBaseInfo.length;\n const offsetY = 0//this.APP.sldBuildingHeight.currentValue// + (this.geometryManager.MONO_PANEL.S50MM_BASE.height);\n let offsetZ = 0//(-this.APP.sldExistingWidth1.currentValue / 2) ; // + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width; // -(this.APP.sldExistingWidth1.currentValue / 2);\n\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - CONST.ROOF_BASE_SUBTRACT - this.APP.sldExistingWidth1.currentValue) / this.roofBaseInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroup.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n \n if(cutoutCondition){\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n if(rakeCutCondition){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n }\n else {\n this.roofGroup.add(mesh);\n }\n }\n private addBarge() {\n let mesh: Mesh;\n\n let offsetXB = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue;\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZLeft = 0;\n let offsetZRight = 0;\n\n let scaleXB = this.roofWidth / this.geo_receiverChanel.length;\n let scaleCutoutVer = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue + this.receiverCutoutLeftHor.width, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n let scaleCutoutHor = this.APP.sldExistingLength2.currentValue / this.receiverCutoutLeftHor.length;\n let scaleZLeft = this.roofLength / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLength;\n let scaleZRight = this.roofLength / this.bargeRightInfo.length;\n let bargeRightLength = this.roofLength;\n\n let offsetY = 0\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //cutout\n if (this.APP.sltCutOut.currentValue == 1\n && this.APP.sldExistingLength2.currentValue > 0\n && this.enableCutout\n && (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3)) {\n scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue) / this.geo_receiverChanel.length;\n scaleZLeft = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n bargeLeftLength = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n \n offsetXB += this.APP.sldExistingLength2.currentValue;\n offsetZLeft += this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n mesh = new Mesh(this.receiverCutoutLeftHor.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n\n //cutout Ver\n mesh = new Mesh(this.receiverCutoutLeftVer.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltCutOut.currentValue == 1\n && this.APP.sldExistingLength2.currentValue > 0\n && this.enableCutout\n && (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3)) {\n scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue) / this.geo_receiverChanel.length;\n scaleZRight = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue) / this.bargeRightInfo.length;\n bargeRightLength = this.utils.getHypotenuseByCos(this.roofLength - this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n offsetZRight += this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue, this.APP.sltRoofPitch.currentValue);\n mesh = new Mesh(this.receiverCutoutRightHor.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n\n //cutout ver\n mesh = new Mesh(this.receiverCutoutRightVer.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltCutOut.currentValue == 1\n && this.APP.sldExistingLength2.currentValue > 0\n && this.enableCutout\n && (this.APP.sltExistingType.currentValue == 3)) {\n scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue * 2) / this.geo_receiverChanel.length;\n }\n\n //Rake cut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue\n }\n\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue\n }\n\n scaleZLeft = bargeLeftLength/this.bargeLeftInfo.length;\n scaleZRight = bargeRightLength/this.bargeRightInfo.length;\n\n //left\n if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3)\n && ((this.APP.sldExistingWidth2.currentValue == 0 && this.APP.sldExistingWidth1.currentValue > scaleZLeft * this.receiverCutoutLeftVer2.length \n || this.APP.sldExistingWidth2.currentValue > 0 && this.APP.sldExistingWidth2.currentValue > scaleZLeft * this.receiverCutoutLeftVer2.length))) {\n mesh = new Mesh(this.receiverCutoutLeftVer2.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXL2, offsetY, offsetZLeft);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n } else {\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZLeft);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n }\n \n\n //right\n if ((this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3)\n && ((this.APP.sldExistingWidth2.currentValue == 0 && this.APP.sldExistingWidth1.currentValue > scaleZRight * this.receiverCutoutRightVer2.length \n || this.APP.sldExistingWidth2.currentValue > 0 && this.APP.sldExistingWidth2.currentValue > scaleZRight * this.receiverCutoutRightVer2.length))) {\n mesh = new Mesh(this.receiverCutoutRightVer2.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXR2, offsetY, offsetZRight);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n } else {\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZRight);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n }\n\n\n // back\n mesh = new Mesh(this.geo_receiverChanel.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(offsetXB, offsetY, 0);\n mesh.scale.setX(scaleXB);\n //FIXED: BARGE -> RECEIVER_CHANCEL\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroup.add(mesh);\n }\n private addBargeStepRakecut() {\n if(!(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP || this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP)){\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let offsetXL = this.APP.dialogEditBay.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue;\n let offsetXR = this.APP.dialogEditBay.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetZL = this.utils.getHypotenuseByCos(this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldLeftCutVertical.currentValue, this.APP.sltRoofPitch.currentValue);\n let offsetZR = this.utils.getHypotenuseByCos(this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldRightCutVertical.currentValue, this.APP.sltRoofPitch.currentValue);\n let scaleZL = (this.APP.sldLeftCutVertical.currentValue) / this.bargeLeftInfo.length;\n let scaleZR = (this.APP.sldRightCutVertical.currentValue) / this.bargeRightInfo.length;\n //let scaleX = (this.APP.sldRakeCutHorizontal.currentValue) / this.bargeLeftInfo.length;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n bargeVer.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n bargeVer.position.set(-offsetXL + this.APP.sldLeftCutHorizontal.currentValue, 0, offsetZL);\n bargeVer.scale.set(1, 1, scaleZL);\n\n // let bargeHor = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(-offsetXL, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n bargeVer.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n bargeVer.position.set(offsetXR - this.APP.sldRightCutHorizontal.currentValue, 0, offsetZR);\n bargeVer.scale.set(1, 1, scaleZR);\n\n // let bargeHor = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(offsetXR, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n }\n public addGutter() {\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const offsetY = this.roofBaseInfo.height - 25;\n\n let gutterLength = this.roofWidth;\n let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXL += (this.APP.sldLeftCutHorizontal.currentValue - exLength);\n gutterLength -= (this.APP.sldLeftCutHorizontal.currentValue - exLength);\n }\n else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n\n if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n gutterLength -= (this.APP.sldRightCutHorizontal.currentValue - exLength);\n }\n else if(this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP){\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n \n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n let gutterMesh = new Mesh(this.gutterInfo.geometry, MaterialManager.Instance().GUTTER);\n gutterMesh.scale.setX(gutterLength/this.gutterInfo.length);\n gutterMesh.updateMatrix();\n let matrixBefore = gutterMesh.matrix.clone();\n\n gutterMesh.position.set(offsetXL, offsetY, offsetZ);\n gutterMesh.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n gutterMesh.updateMatrix();\n\n let meshClipped = CSG.toMesh(CSG.fromMesh(gutterMesh).subtract(this.csgCutGutterLeft1), gutterMesh.matrix);\n meshClipped = CSG.toMesh(CSG.fromMesh(meshClipped).subtract(this.csgCutGutterRight1), gutterMesh.matrix);\n meshClipped.applyMatrix4(new Matrix4().getInverse(gutterMesh.matrix));\n meshClipped.applyMatrix4(matrixBefore);\n meshClipped.material = gutterMesh.material;\n meshClipped.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n\n let gutterGroup = this.utils.createGutterGroupWithMesh(meshClipped, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, false, false);\n\n this.roofGroup.add(gutterGroup);\n }\n else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE){\n {\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, false, true, this.csgCutGutterLeft1, this.roofGroup);\n\n this.roofGroup.add(gutterGroup);\n }\n \n }\n else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n {\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, false, this.csgCutGutterRight1, this.roofGroup);\n\n this.roofGroup.add(gutterGroup);\n }\n }\n else{\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, true);\n this.roofGroup.add(gutterGroup);\n }\n }\n \n public addGutterAngelRakecut(){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE){\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let exLength = 300\n let rc_offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let rc_offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const rc_offsetZL = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldLeftCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetZR = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldRightCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetY = this.roofBaseInfo.height - 25;\n\n\n let rc_rotYL = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n let rc_lengthL = exLength + Math.sqrt(Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) + Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2));\n let rc_rotYR = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n let rc_lengthR = exLength + Math.sqrt(Math.pow(this.APP.sldRightCutVertical.currentValue, 2) + Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2));\n\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE){\n let gutterRakecutGroupLeft = this.utils.createGutterGroup(this.gutterRakecutLeftInfo, this.geo_gutterCap,\n rc_lengthL, new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL), new Vector3(0, -rc_rotYL, 0), views, 1, true, false,\n this.csgCutGutterLeft2, this.roofGroup);\n let gutterRakecutGroupRight = this.utils.createGutterGroup(this.gutterRakecutRightInfo, this.geo_gutterCap,\n rc_lengthR, new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR), new Vector3(0, rc_rotYR, 0), views, 1, true, false,\n this.csgCutGutterRight2, this.roofGroup);\n\n this.roofGroup.add(gutterRakecutGroupLeft, gutterRakecutGroupRight);\n }\n else{\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(this.gutterRakecutLeftInfo, this.geo_gutterCap,\n rc_lengthL, new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL), new Vector3(0, -rc_rotYL, 0), views, 1, true, false,\n this.csgCutGutterLeft2, this.roofGroup);\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(this.gutterRakecutRightInfo, this.geo_gutterCap,\n rc_lengthR, new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR), new Vector3(0, rc_rotYR, 0), views, 1, true, false,\n this.csgCutGutterRight2, this.roofGroup);\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n }\n }\n public addGutterStepRakecut() {\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP){\n return;\n }\n\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const offsetZL = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldLeftCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetZR = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldRightCutVertical.currentValue\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetY = this.roofBaseInfo.height - 25;\n\n\n //let scaleX = length / this.gutterRakecutLeftInfo.length;\n\n //let rotYL = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n //let rotYR = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n //let rotX = this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue);\n\n //let extraAngle = (Math.PI - (rotY + Math.PI / 2)) / 2;\n //let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n //let length = exLength + Math.sqrt(Math.pow(this.APP.sldRakeCutVertical.currentValue, 2) + Math.pow(this.APP.sldRakeCutHorizontal.currentValue, 2));\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //Step rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldLeftCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap, gutterLength, \n new Vector3(offsetXL, offsetY, offsetZL),\n new Vector3(0, 0, 0),\n views, 1, true, true);\n \n this.roofGroup.add(gutterHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldRightCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap, gutterLength, \n new Vector3(offsetXR - this.APP.sldRightCutHorizontal.currentValue, offsetY, offsetZR),\n new Vector3(0, 0, 0),\n views, 1, true, true);\n \n this.roofGroup.add(gutterHor);\n }\n }\n public addZFlashing() {\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let flashingLength = this.roofWidth;\n \n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n offsetX += (this.APP.sldLeftCutHorizontal.currentValue);\n flashingLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n flashingLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n \n\n let scaleX = flashingLength / this.zFlashingGeo.length;\n \n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroup.add(mesh);\n }\n public addZFlashingAngleRakeCut(){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE){\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n \n const offsetY = this.roofBaseInfo.height - 25;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n \n const offsetZ = (\n this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n + 50\n - this.APP.sldLeftCutVertical.currentValue\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let rotY = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n let length = Math.sqrt(Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) + Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2));\n\n let scaleX = length/this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.rotation.set(0, -rotY, 0);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, views: views };\n\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n \n const offsetZ = (\n this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n + 50\n - this.APP.sldRightCutVertical.currentValue\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let rotY = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n let length = Math.sqrt(Math.pow(this.APP.sldRightCutVertical.currentValue, 2) + Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2));\n let scaleX = length/this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingRakecutRightGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.rotation.set(0, rotY, 0);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, views: views};\n\n this.roofGroup.add(mesh);\n }\n }\n public addZFlashingStepRakeCut(){\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP){\n return;\n }\n \n const offsetY = this.roofBaseInfo.height - 25;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n const offsetX = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n \n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldLeftCutVertical.currentValue\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const length = this.APP.sldLeftCutHorizontal.currentValue;\n const scaleX = length/this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, views: views };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n \n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n const offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n \n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n - this.APP.sldRightCutVertical.currentValue\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const length = this.APP.sldRightCutHorizontal.currentValue;\n const scaleX = length/this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingRakecutRightGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, views: views };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n \n this.roofGroup.add(mesh);\n }\n }\n private getHeightByRoofPitch(userDataPos: any): number {\n if (userDataPos.isSpan) {\n return this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.APP.sldSpan.currentValue;\n } else if (userDataPos.isMultiSpan) {\n return this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n } else {\n return this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.roofLength;\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiCHangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sltRoofPitch,\n //this.APP.dialogEditBay,\n //this.APP.sltCutOut,\n //this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldEaveWidth\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltReceiverType\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n}\n\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, Plane, Geometry, LineSegments } from \"three\";\nimport { Util } from \"./utils\";\nimport { HomeComponent as AppComponent } from '../containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo, Printing2DLine, ViewType, LineType, Printing2DGeometry, Printing2DGeometryType } from './models';\nimport { GEOMETRY_TYPE } from '../app.config';\n\nexport class FasciaManager {\n private scene: Scene;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_fasciaW1: BufferGeometry;\n private geo_fasciaW2: BufferGeometry;\n private geo_fasciaL1: BufferGeometry;\n\n // private matW1: Material;\n // private clippingPlaneW1: Plane;\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise{\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.material = MaterialManager.Instance().FASCIA.clone();\n //this.matW1 = MaterialManager.Instance().EAVE.clone();\n\n app.sldExistingWallHeight.addAction(this.uiChanged.bind(this));\n app.sldEaveWidth.addAction(this.uiChanged.bind(this));\n app.sldFasciaDepth.addAction(this.uiChanged.bind(this));\n app.sldExistingLength.addAction(this.uiChanged.bind(this));\n app.sldExistingLength2.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n app.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n app.sltExistingType.addAction(this.uiChanged.bind(this));\n app.sltStructureType.addAction(this.uiChanged.bind(this));\n\n resolve();\n });\n }\n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n let translateWidth = this.geometryManager.FASCIA.FASCIA.width/2;\n let translateHeight = this.geometryManager.FASCIA.FASCIA.height/2;\n let translateLength = this.geometryManager.FASCIA.FASCIA.length/2;\n \n this.geo_fasciaW1 = this.geometryManager.FASCIA.FASCIA.geometry\n .clone()\n .translate(translateWidth,translateHeight,translateLength);\n\n this.geo_fasciaL1 = this.geometryManager.FASCIA.FASCIA.geometry\n .clone()\n .rotateY(Math.PI/2)\n .translate(0,translateHeight,-translateWidth)\n \n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.FASCIA));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'FASCIA_OUTLINE'));\n\n // if(this.APP.sldExistingLength2.currentValue == 0){\n // this.clippingPlaneW1 = new Plane(new Vector3(0,0,-1), this.APP.sldExistingWidth1.currentValue/2);\n // this.matW1.clippingPlanes = [this.clippingPlaneW1];\n // }\n // else{\n // this.matW1.clippingPlanes = [];\n // }\n\n if(this.APP.sltStructureType.currentValue == 4){\n resolve();\n return;\n }\n\n this.addFascia({length1: true});\n if(this.APP.sldExistingLength2.currentValue > 0){\n this.addFascia({length2: true});\n }\n if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n this.addFascia({width1: true});\n }\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n this.addFascia({width2: true});\n }\n\n //this.getOutLines();\n resolve();\n });\n }\n\n public getOutLines(): Printing2DGeometry{\n let objs = this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.FASCIA );\n let lsGeometries: Printing2DLine[] = [];\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMesh((o as Mesh), 10);\n outlineGeo.translate(o.position.x, o.position.y + 5000, o.position.z);\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"FASCIA_OUTLINE\"};\n // this.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000 , vertices[i+2]));\n }\n return simplifiedGeo;\n }\n \n public addFascia(userDataPos: any){\n let mesh: Mesh;\n \n let offsetX = this.APP.sldExistingLength.currentValue/2 - this.APP.sldEaveWidth.currentValue;\n let offsetY = this.APP.sldExistingWallHeight.currentValue + this.geometryManager.EAVE.EAVE.height;\n let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n let scaleX = this.APP.sldExistingLength.currentValue/this.geometryManager.FASCIA.FASCIA.length;\n let scaleY = this.APP.sldFasciaDepth.currentValue/this.geometryManager.FASCIA.FASCIA.height;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.geometryManager.FASCIA.FASCIA.width)/this.geometryManager.FASCIA.FASCIA.length;\n \n\n if(userDataPos.width1){\n if(this.APP.sldExistingLength2.currentValue <= 0){\n scaleZ = (this.APP.sldExistingWidth1.currentValue - this.APP.sldEaveWidth.currentValue + this.geometryManager.FASCIA.FASCIA.width)/this.geometryManager.FASCIA.FASCIA.length;\n if(scaleZ <= 0)\n scaleZ = 0.01;\n }\n\n let views = [ \n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(-offsetX-this.geometryManager.FASCIA.FASCIA.width);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ + this.APP.sldEaveWidth.currentValue - this.geometryManager.FASCIA.FASCIA.width);\n mesh.scale.set(1,scaleY,scaleZ);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ + this.APP.sldEaveWidth.currentValue - this.geometryManager.FASCIA.FASCIA.width);\n mesh.scale.set(1,scaleY,scaleZ);\n this.scene.add(mesh);\n }\n }\n else if(userDataPos.width2){\n let _offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue - this.APP.sldEaveWidth.currentValue;\n let _offsetY = this.APP.sldExistingWallHeight.currentValue + this.geometryManager.EAVE.EAVE.height;\n let _offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue - this.geometryManager.FASCIA.FASCIA.width;\n \n let _scaleY = this.APP.sldFasciaDepth.currentValue/this.geometryManager.FASCIA.FASCIA.height;\n let _scaleZ = (this.APP.sldExistingWidth2.currentValue - this.APP.sldEaveWidth.currentValue + this.geometryManager.FASCIA.FASCIA.width)/this.geometryManager.FASCIA.FASCIA.length;\n\n let views = [ \n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.set(-(_offsetX + this.geometryManager.FASCIA.FASCIA.width), _offsetY, _offsetZ);\n mesh.scale.set(1,_scaleY,_scaleZ);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n mesh = new Mesh(this.geo_fasciaW1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.set(_offsetX, _offsetY, _offsetZ);\n mesh.scale.set(1,_scaleY,_scaleZ);\n this.scene.add(mesh);\n }\n }\n else if(userDataPos.length1){\n let offsetX = 0;\n if(this.APP.sldExistingWidth1.currentValue >= this.APP.sldEaveWidth.currentValue){\n if(this.APP.sltExistingType.currentValue == 1){\n offsetX = this.APP.sldEaveWidth.currentValue/2;\n scaleX = (this.APP.sldExistingLength.currentValue - this.APP.sldEaveWidth.currentValue)/this.geometryManager.FASCIA.FASCIA.length;\n }\n else if(this.APP.sltExistingType.currentValue == 2){\n offsetX = -this.APP.sldEaveWidth.currentValue/2;\n scaleX = (this.APP.sldExistingLength.currentValue - this.APP.sldEaveWidth.currentValue)/this.geometryManager.FASCIA.FASCIA.length;\n }\n else if(this.APP.sltExistingType.currentValue == 3){\n offsetX = 0;\n scaleX = (this.APP.sldExistingLength.currentValue - this.APP.sldEaveWidth.currentValue*2)/this.geometryManager.FASCIA.FASCIA.length;\n }\n }\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_fasciaL1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(offsetX);\n mesh.position.setY(offsetY);\n mesh.position.setZ(-offsetZ+this.APP.sldEaveWidth.currentValue);\n mesh.scale.set(scaleX,scaleY,1);\n this.scene.add(mesh);\n }\n else if(userDataPos.length2){\n let _offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2 - this.APP.sldEaveWidth.currentValue/2;\n let _offsetY = this.APP.sldExistingWallHeight.currentValue + this.geometryManager.EAVE.EAVE.height;\n let _offsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldEaveWidth.currentValue;\n let _scaleX = (this.APP.sldExistingLength2.currentValue + this.APP.sldEaveWidth.currentValue)/this.geometryManager.FASCIA.FASCIA.length;\n let _scaleY = this.APP.sldFasciaDepth.currentValue/this.geometryManager.FASCIA.FASCIA.height;\n\n if(this.APP.sldExistingWidth2.currentValue >= this.APP.sldEaveWidth.currentValue){\n _offsetX = this.APP.sldExistingLength.currentValue/2 + this.APP.sldExistingLength2.currentValue/2 - this.APP.sldEaveWidth.currentValue;\n _scaleX = this.APP.sldExistingLength2.currentValue/this.geometryManager.FASCIA.FASCIA.length;\n }\n\n let views = [ \n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n if(this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_fasciaL1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(-_offsetX);\n mesh.position.setY(_offsetY);\n mesh.position.setZ(_offsetZ);\n mesh.scale.set(_scaleX,_scaleY,1);\n this.scene.add(mesh);\n }\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n views.push({ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS });\n mesh = new Mesh(this.geo_fasciaL1, this.material);\n mesh.userData = { type: GEOMETRY_TYPE.FASCIA, position: userDataPos, views: views };\n mesh.position.setX(_offsetX);\n mesh.position.setY(_offsetY);\n mesh.position.setZ(_offsetZ);\n mesh.scale.set(_scaleX,_scaleY,1);\n this.scene.add(mesh);\n }\n }\n \n \n \n }\n\n public uiChanged(preVal: number, curVal): void {\n this.load();\n }\n}\n","import {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport {\n FIT_DIMENSION,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { FasciaManager } from \".\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: FasciaManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any;\n private textParameter: any;\n private isReady = false;\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n private geometryManager: GeometryManager;\n private offsetBraketZ: number = 0;\n\n constructor(app: AppComponent, manager: FasciaManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n\n this.isReady = true;\n this.draw();\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosLowerHeightDim.children =\n this.dimensionPatiosLowerHeightDim.children.filter(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.offsetBraketZ = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetBraketZ =\n this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n }\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if (existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left) {\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim() {\n let offsetYBraket = 0;\n if (+UI.upstandBraketType !== 0) {\n offsetYBraket =\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n this.MANAGER.postAndBeamManager.geoBraket_1.width *\n this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n offsetYBraket -=\n this.MANAGER.postAndBeamManager.beamInfo.width *\n this.utils.tan(UI.patiosPitch);\n }\n\n const frontPostHeight =\n UI.eaveHeight -\n this.getHeightByRoofPitch(true) -\n this.MANAGER.postAndBeamManager.beamInfo.height +\n offsetYBraket;\n\n const offsetZFrontPos =\n UI.span + UI.multiSpan + UI.eaveWidth + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(\n 0,\n frontPostHeight / 2,\n offsetZFrontPos\n );\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [],\n },\n allowDrag: false,\n };\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * UI.span;\n } else {\n return this.utils.tan(UI.patiosPitch) * UI.span;\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n } else {\n return this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n }\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n text.position.set(-100, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n } else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n if (UI.isUpFasciaUpstandardBracket) {\n origin = new Vector3(0, 0, 1000);\n head = new Vector3(0, 0, 0);\n hand1 = new Vector3(-50, 0, 50);\n hand2 = new Vector3(50, 0, 50);\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + \" degree\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, Math.PI / 2, 0),\n };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 + this.APP.sldEaveWidth.currentValue - this.APP.sldExistingWidth1.currentValue / 2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2;\n //}\n\n let offsetZ =\n this.box.max.z +\n this.dimensionDistance2 +\n this.APP.sldEaveWidth.currentValue;\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n },\n };\n let dimBay = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n offsetX += b.value;\n }\n\n //rakecut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n -this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftCutHorizontal.currentValue / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldRightCutHorizontal.currentValue / 2 +\n this.APP.sldRightOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500 - 200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n );\n }\n //End rakecut\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldLeftOverhang.currentValue,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldRightOverhang.currentValue,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.offsetBraketZ;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n //let offsetDimensionX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // offsetDimensionX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimSpan = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n // let offsetX = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n\n // let scaleLength = this.APP.sldMultiSpan.currentValue / this.lineGeo.length;\n dimLength += this.APP.sldMultiSpan.currentValue;\n let textStr = this.utils.getDimensionValue(\n this.APP.sldMultiSpan.currentValue\n );\n let optionsMul: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n 0,\n 0\n ),\n textPos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n -200,\n 0\n ),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimMul = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) as Dimension;\n if (!dimMul) {\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN\n );\n }\n\n let extraDistance = 0;\n\n //----Rake cut\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ =\n dimLength / 2 +\n UI.multiSpan / 2 +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3(0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n );\n }\n //----End rake cut\n\n let offsetRight =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2; // + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n this.APP.sldFrontOverhang.currentValue,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n this.APP.sldBackOverhang.currentValue,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT,\n extraDistance\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n let dimOffsetX =\n this.totalBaySize / 2 +\n this.APP.patiosManager.patiosGroup.position.x +\n _dimensionDistane;\n let dimOffsetY = height / 2;\n if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n dimOffsetX =\n this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n }\n\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n if (UI.isUpFasciaUpstandardBracket) {\n dimOffsetY +=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n // dimOffsetY -= (this.MANAGER.roofManager.geoBraket_2.height / 4 + this.MANAGER.roofManager.geoBraket_1.width) * this.utils.tan(UI.patiosPitch) + this.MANAGER.roofManager.geoBraket_2.height / 4 * this.utils.tan(UI.patiosPitch);\n } else {\n dimOffsetY -=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n }\n dimOffsetY += this.MANAGER.postAndBeamManager.beamInfo.height;\n\n dimOffsetY += +UI.upstandBraketType;\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = +dimOffsetY.toFixed(0);\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n // let dimOffsetY = this.utils.getHeightByAngle(this.APP.sldExistingWallHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n if (UI.isUpFasciaUpstandardBracket) {\n dimOffsetY +=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n // dimOffsetY -= (this.MANAGER.roofManager.geoBraket_2.height / 4 + this.MANAGER.roofManager.geoBraket_1.width) * this.utils.tan(UI.patiosPitch) + this.MANAGER.roofManager.geoBraket_2.height / 4 * this.utils.tan(UI.patiosPitch);\n } else {\n dimOffsetY -=\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue);\n }\n dimOffsetY += +UI.upstandBraketType;\n dimOffsetY += this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z; //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.APP.sldEaveWidth.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue / 2;\n //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = this.APP.sldExistingWallHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport { Box3, Group, Vector3 } from \"three\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport { HomeComponent as AppComponent, HomeComponent } from \"../../containers/home/home.component\";\nimport { Printing2DGeometry } from \"../models\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { UI } from \"../ui\";\n\nexport class FasciaManager implements PatiosManager {\n public patiosGroup: Group;\n public boundingBox: Box3;\n private APP: AppComponent;\n public postAndBeamManager: PostAndBeamManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n\n private updateEventHandle: any;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private controlsToRegisterEvent: Array;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [\n this.APP.sldEaveWidth,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n ]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraket(bracketQuantity);\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraketCutOut(bracketQuantity);\n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number): void {\n let diff = UI.existingLength1 - UI.totalBayLength;\n\n this.patiosWidth = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n this.patiosLength = UI.span + UI.multiSpan + UI.overhangFront;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n const shouldSnap = HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.cutoutCondition) {\n this.patiosGroup.position.setX( -diff / 2 - UI.existingLength2 + (shouldSnap ? 0 : UI.eaveWidth));\n } else {\n this.patiosGroup.position.setX(-diff / 2 + UI.eaveWidth);\n }\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n const shouldSnap = HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()\n if (UI.cutOutType == CUTOUT_ENABLE.YES && this.cutoutCondition) {\n this.patiosGroup.position.setX(diff / 2 + UI.existingLength2 - (shouldSnap ? 0 : UI.eaveWidth));\n } else {\n this.patiosGroup.position.setX(diff / 2 - UI.eaveWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, this.APP.sldEaveWidth.currentValue));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n box.translate(new Vector3(this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n box.translate(new Vector3(-this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import _ from \"lodash\";\nimport UpstandBraket, {\n UpstandBraketOptions,\n} from \"src/app/models/UpstandBraket.model\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Vector3,\n} from \"three\";\nimport { FasciaManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"../../app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: FasciaManager;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private existingTypeLeftX: number;\n private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private frontPostHeight: number;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n public geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private geoBraketExtL_2: GeometryInfo;\n private geoBraketExtR_2: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private geoHouseBeam: GeometryInfo;\n private geoHouseBeamEndCap: GeometryInfo;\n\n private offsetYBraket = 0;\n private offsetBraketZ = 0;\n\n k: number;\n k_: number;\n j: number;\n l: number;\n m: number;\n v: number;\n\n constructor(app: AppComponent, fasciaManager: FasciaManager) {\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = fasciaManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, scalePostHeight, 1);\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBraketExtL_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtL_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateY(-Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtL_2.geometry.translate(\n -this.geoBraketExtL_2.height / 2,\n this.geoBraketExtL_2.length / 2,\n this.geoBraketExtL_2.height / 3 - this.geoBraket_1.width / 2\n );\n //Right\n this.geoBraketExtR_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtR_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateY(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtR_2.geometry.translate(\n this.geoBraketExtR_2.height / 2,\n this.geoBraketExtR_2.length / 2,\n this.geoBraketExtR_2.height / 3 - this.geoBraket_1.width / 2\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoHouseBeam = this.geometryManager.getHouseBeam();\n this.geoHouseBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geoHouseBeam.length / 2,\n -this.geoHouseBeam.height / 2,\n 0\n );\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n this.geoHouseBeamEndCap = this.geometryManager.getHouseBeamEndCap();\n this.geoHouseBeamEndCap.geometry.translate(\n 0,\n -this.geoHouseBeamEndCap.height / 2,\n 0\n );\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofWidth = UI.overhangLeft + UI.overhangRight + this.totalBaySize;\n this.existingType = +this.APP.sltExistingType.currentValue;\n this.existingTypeLeftX = 0;\n this.existingTypeRightX = 0;\n if (this.existingType === 1 || this.existingType === 3) {\n this.existingTypeLeftX = UI.eaveWidth;\n }\n if (this.existingType === 2 || this.existingType === 3) {\n this.existingTypeRightX = UI.eaveWidth;\n }\n this.offsetYBraket = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetYBraket =\n +UI.upstandBraketType +\n this.geoBeam.height +\n this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n this.offsetYBraket -=\n this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n this.offsetBraketZ = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetBraketZ = this.geoBraket_2.height / 4;\n }\n this.addBeam({ isMultiSpan: false });\n this.addBeam({ isMultiSpan: true });\n this.addBeamAngelRakecut();\n this.addBeamStepRakecut();\n this.addGround();\n let offsetX = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let offsetXOrigin = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let idx = 0;\n this.addPost(offsetX, { isMultiSpan: false, left: true });\n this.addUpstandBraketExt({ isMultiSpan: false, left: true });\n this.addPost(offsetX, { isMultiSpan: true, left: true });\n this.addUpstandBraketExt({ isMultiSpan: true, left: true });\n\n this.APP.dialogEditBay.listBay.map((m) => {\n offsetX += m.value;\n if (idx === this.APP.dialogEditBay.listBay.length - 1) {\n offsetX -= this.postInfo.width;\n this.addPost(offsetX, { isMultiSpan: false, right: true });\n this.addUpstandBraketExt({ isMultiSpan: false, right: true });\n this.addPost(offsetX, { isMultiSpan: true, right: true });\n this.addUpstandBraketExt({ isMultiSpan: true, right: true });\n this.addPostAngelRakecut(offsetX, { right: true });\n this.addPostAngelRakecut(offsetXOrigin, { left: true });\n } else {\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: false,\n });\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: true,\n });\n }\n idx++;\n });\n\n //this.addTest();\n this.addDownPipe();\n this.addDownPipeStepRakecut();\n this.addPostStepRakecut();\n //this.getSection();\n this.addUpstandBeam();\n this.addUpstandBraket();\n this.addUpstandBraketCutOut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private houseBeamHeight() {\n return this.geoBeam.height - this.geoHouseBeam.height;\n }\n\n public addUpstandBeam() {\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let pos = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + this.offsetYBraket + this.houseBeamHeight(),\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2\n );\n let totalLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n pos.setX(pos.x + UI.existingLength2);\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n }\n }\n let views: Print2DView[];\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n this.cutStandardBeamToEqualLengthBeam(\n this.geoHouseBeam,\n this.geoHouseBeamEndCap,\n totalLength,\n pos,\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n this.geoHouseBeamJoint\n );\n // Beam cutout\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n let offsetHeightCutout = +this.offsetYBraket + this.houseBeamHeight();\n if (UI.isUpFasciaUpstandardBracket) {\n offsetHeightCutout +=\n UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n } else {\n offsetHeightCutout -=\n UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n }\n\n if (offsetHeightCutout < 0) {\n return;\n }\n if (UI.existingType == 1 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.geoHouseBeam,\n this.geoHouseBeamEndCap,\n UI.existingLength2,\n new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n this.geoHouseBeamJoint\n );\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.geoHouseBeam,\n this.geoHouseBeamEndCap,\n UI.existingLength2,\n new Vector3(\n UI.totalBayLength / 2 - UI.existingLength2 + UI.overhangRight,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n this.geoHouseBeamJoint\n );\n }\n }\n }\n\n public addUpstandBraket(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET\n )\n );\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = UI.upstandBraketType + this.houseBeamHeight();\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n let distance = 1000;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n\n if (UI.existingType == 0) {\n let startX =\n -bayMainLength / 2 > -UI.existingLength1 / 2\n ? -bayMainLength / 2\n : -UI.existingLength1 / 2;\n let endX =\n bayMainLength / 2 < UI.existingLength1 / 2\n ? bayMainLength / 2\n : UI.existingLength1 / 2;\n distance = (endX - startX) / (numOfBraket - 1);\n offsetX = startX;\n } else if (UI.existingType == 1) {\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n distance =\n (UI.existingLength1 - UI.eaveWidth - _bracketOffsetXExt) /\n (numOfBraket - 1);\n }\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX =\n -bayMainLength / 2 + UI.existingLength2 / 2 + _bracketOffsetXExt;\n }\n } else if (UI.existingType == 2) {\n offsetX = -bayMainLength / 2;\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n offsetX =\n -bayMainLength / 2 +\n (bayMainLength - UI.existingLength1 + UI.eaveWidth);\n distance =\n (UI.existingLength1 - _bracketOffsetXExt - UI.eaveWidth) /\n (numOfBraket - 1);\n }\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n } else if (UI.existingType == 3) {\n distance = (bayMainLength - _bracketOffsetXExt * 2) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n }\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetX;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth - UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetX += distance;\n }\n }\n\n public addUpstandBraketCutOut(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n )\n );\n if (HomeComponent.ins.sltCutOut._isDisable || UI.cutOutType == 0) {\n return;\n }\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = UI.upstandBraketType + this.houseBeamHeight();\n\n if (UI.isUpFasciaUpstandardBracket) {\n height += UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n } else {\n height -= UI.existingWidth1 * this.utils.tan(UI.patiosPitch);\n }\n\n if (height < 0) {\n return;\n }\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n if (UI.existingType == 1 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangLeft : 0;\n let distance =\n (UI.existingLength2 - UI.eaveWidth - UI.overhangLeft + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ = -UI.totalBayLength / 2 - _offsetZ + _bracketOffsetXExt;\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangRight : 0;\n let distance =\n (UI.existingLength2 - (UI.overhangRight + UI.eaveWidth) + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ =\n UI.totalBayLength / 2 -\n UI.existingLength2 +\n UI.eaveWidth +\n UI.overhangRight -\n _bracketOffsetXExt;\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n }\n private addDownPipe() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth +\n 100 -\n UI.existingWidth1 / 2 +\n this.offsetBraketZ;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n //Rakecut\n //Downpipe will be in left\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX = -this.totalBaySize / 2 + this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX = -this.totalBaySize / 2 + UI.rakeCutLeftHor + UI.overhangFront;\n }\n }\n //Downpipe will be in right\n else {\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetX = this.totalBaySize / 2 - this.beamRightCutSizeInfo.l;\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetX = this.totalBaySize / 2 - UI.rakeCutRightHor - UI.overhangFront;\n }\n }\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.offsetYBraket;\n\n this.downpipeGroup = this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n 0,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n true\n );\n }\n private addDownPipeStepRakecut() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetX = -this.totalBaySize / 2 + 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutLeftVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30 +\n this.offsetYBraket;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.eaveWidth +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutLeftVer +\n this.offsetBraketZ;\n\n this.downpipeStepRakeCutGroupLeft.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupLeft.add(meshPipe);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetX = this.totalBaySize / 2 - 50;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutRightVer,\n UI.patiosPitch,\n -1\n ) +\n this.geometryManager.getRoofBase().height -\n 30 +\n this.offsetYBraket;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n UI.eaveWidth +\n 40 -\n UI.existingWidth1 / 2 -\n UI.rakeCutRightVer +\n this.offsetBraketZ;\n\n this.downpipeStepRakeCutGroupRight.position.set(offsetX, 0, offsetZ);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeStepRakeCutGroupRight.add(meshPipe);\n }\n }\n private addGround() {\n let offsetX = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetZ = -UI.existingWidth1 / 2 - UI.overhangBack;\n let width = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue +\n UI.eaveWidth;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ + this.offsetBraketZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private getRoofHeight() {\n const _height = this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n );\n return UI.eaveHeight - _height;\n }\n private updateUI() {\n this.APP.roofHeight = this.getRoofHeight();\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let braketGroup = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n );\n\n for (let g of braketGroup) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n g.children[1] as Mesh,\n 60\n );\n g.children[1].updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(g.children[1].matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: simplifiedGeo.vertices,\n views: g.userData.views,\n });\n\n g.children[0].updateMatrix();\n let objCloned = g.children[0].clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(g.children[0].matrix));\n\n let box = new BoxHelper(objCloned);\n\n g.children[0].updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(g.children[0].matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo1 = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo1.vertices,\n views: g.userData.views,\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n public addPost(offsetX: number, userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n // // let _flag = false;\n // if (userDataPos.left && UI.overhangLeft > 0 && this.APP.sltExistingType.currentValue == 1) {\n // // _flag = true;\n // return;\n // } else if (userDataPos.right && UI.overhangRight > 0 && this.APP.sltExistingType.currentValue == 2) {\n // // _flag = true;\n // return;\n // }\n const condition = UI.span + UI.eaveWidth;\n if (!userDataPos.isMultiSpan) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n } else {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n }\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let offsetZ = -UI.existingWidth1 / 2 + UI.eaveWidth;\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n let scaleY = 0;\n let length = 0;\n if (userDataPos.isMultiSpan) {\n length =\n UI.eaveHeight -\n this.getHeightByRoofPitch(false) -\n this.beamInfo.height +\n this.offsetYBraket;\n scaleY = length / this.postInfo.height;\n } else {\n length =\n UI.eaveHeight -\n this.getHeightByRoofPitch(true) -\n this.beamInfo.height +\n this.offsetYBraket;\n scaleY = length / this.postInfo.height;\n }\n this.frontPostHeight = length;\n // scaleY -= this.geometryManager.SUPERIOR_BEAM.S65x160.height;\n\n //in case of multi span & apply to back post only\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (\n UI.span + UI.eaveWidth > UI.existingWidth1 &&\n UI.span + UI.eaveWidth < UI.existingWidth1 + UI.eaveWidth\n ) {\n if (this.APP.sltExistingType.currentValue == 1 && userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == 2 &&\n userDataPos.right\n ) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n if (userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n }\n if (userDataPos.right) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n }\n }\n }\n }\n\n let exceedMoveBackLimit = false;\n\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.left) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX -= UI.overhangLeft;\n offsetZ -= this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n console.log(\n \"EXCEED_LIMIT LEFT\",\n UI.rakeCutLeftVer,\n this.beamLeftCutSizeInfo.k_,\n this.MANAGER.patiosLength\n );\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n }\n }\n }\n\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n //Move front post to back\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.isMultiSpan && userDataPos.right) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetX += UI.overhangRight;\n offsetZ -= this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n console.log(\n \"EXCEED_LIMIT RIGHT\",\n UI.rakeCutRightVer,\n this.beamLeftCutSizeInfo.k_,\n this.MANAGER.patiosLength\n );\n exceedMoveBackLimit = true;\n }\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleY =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n }\n }\n }\n //End rakecut\n\n if (exceedMoveBackLimit) {\n //console.log(\"EXCEED_LIMIT\");\n return;\n }\n\n mesh.position.set(offsetX, 0, offsetZ + this.offsetBraketZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n\n private addUpstandBraketExt(userDataPos: any) {\n if (\n UI.upstandBraketType == 0 ||\n UI.listBay.length == 0 ||\n UI.existingType == 0 ||\n (userDataPos.isMultiSpan && UI.multiSpan == 0)\n ) {\n return;\n }\n if (\n (this.existingType == 1 && userDataPos.right) ||\n (this.existingType == 2 && userDataPos.left)\n ) {\n return;\n }\n let _flag = false;\n\n const condition = UI.span + UI.eaveWidth;\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n } else if (!_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n }\n if (!_flag) {\n return;\n }\n // if (userDataPos.left && UI.overhangLeft > 0 || userDataPos.right && UI.overhangRight > 0)\n // return;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5; // + this.geoBraket_1.width / 4;\n let height = 0;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n const _cond1 =\n UI.existingWidth1 < condition &&\n UI.existingWidth1 + UI.existingWidth2 > condition;\n const _cond2 =\n userDataPos.isMultiSpan &&\n UI.existingWidth1 < condition + UI.multiSpan &&\n UI.existingWidth1 + UI.existingWidth2 > condition + UI.multiSpan;\n\n if (UI.existingType == 1) {\n offsetX = -bayMainLength / 2;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -bayMainLength / 2 + UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX -= UI.existingLength2;\n }\n offsetX += _bracketOffsetXExt;\n } else if (UI.existingType == 2) {\n offsetX = bayMainLength / 2 - this.geoBraket_1.width;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX += UI.existingLength2;\n }\n offsetX -= _bracketOffsetXExt;\n } else if (UI.existingType == 3) {\n offsetX =\n (-bayMainLength / 2) * (userDataPos.left ? 1 : -1) -\n (userDataPos.right ? this.geoBraket_1.width : 0);\n if ((!userDataPos.isMultiSpan && _cond1) || _cond2) {\n offsetX -=\n UI.existingLength2 * (userDataPos.left ? 1 : -1) +\n (userDataPos.right ? this.geoBraket_1.width : 0);\n }\n offsetX += _bracketOffsetXExt * (userDataPos.left ? 1 : -1);\n }\n let offsetZ =\n -UI.existingWidth1 / 2 +\n UI.eaveWidth -\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width / 2);\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n if (userDataPos.isMultiSpan) {\n height = this.offsetYBraket - this.getHeightByRoofPitch(false);\n } else {\n height = this.offsetYBraket - this.getHeightByRoofPitch(true);\n }\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2:\n UI.existingType == 2 ? this.geoBraketExtR_2 : this.geoBraketExtL_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n if (UI.existingType == 1) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtL_2 };\n } else if (UI.existingType == 2) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtR_2 };\n } else {\n optionBrakets = {\n ...optionBrakets,\n geoBraket_2: userDataPos.right\n ? this.geoBraketExtR_2\n : this.geoBraketExtL_2,\n };\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n offsetX,\n UI.existingWallHeight,\n offsetZ + this.offsetBraketZ\n ),\n userData: { type: GEOMETRY_TYPE.UPSTAND_BRAKET_EXT },\n });\n }\n\n public addPostAngelRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let height =\n UI.eaveHeight -\n this.getHeightByRoofPitch(false) -\n this.beamInfo.height +\n this.offsetYBraket;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth -\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2;\n\n let scaleY = height / this.postInfo.height;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.left) {\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n 0,\n offsetZ + this.offsetBraketZ\n );\n postLeft.scale.setY(scaleY);\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postLeft);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postLeft);\n }\n }\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.right) {\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postRight.position.set(\n offsetX - this.beamRightCutSizeInfo.l,\n 0,\n offsetZ + this.offsetBraketZ\n );\n postRight.scale.setY(scaleY);\n let isIntersect = false;\n let boxPost = new Box3().setFromObject(postRight);\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersect = true;\n }\n });\n\n if (!isIntersect) {\n this.scene.add(postRight);\n }\n }\n }\n }\n private addPostStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n let offsetZF =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth -\n UI.existingWidth1 / 2 -\n this.postInfo.width / 2;\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2;\n\n let scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n\n let scaleYB = scaleYF;\n\n let offsetZB = offsetZF;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(\n offsetXL + this.postInfo.width / 2,\n 0,\n offsetZF + this.offsetBraketZ\n );\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(\n offsetXL + this.postInfo.width / 2,\n 0,\n offsetZB + this.offsetBraketZ\n );\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 - this.postInfo.width;\n\n let scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYF =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n\n let scaleYB = scaleYF;\n\n let offsetZB = offsetZF;\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n scaleYB =\n (this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) +\n this.offsetYBraket) /\n this.postInfo.height;\n }\n }\n\n let postFront = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postFront.position.set(\n offsetXR + this.postInfo.width / 2,\n 0,\n offsetZF + this.offsetBraketZ\n );\n postFront.scale.setY(scaleYF);\n this.scene.add(postFront);\n\n let postBack = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postBack.position.set(\n offsetXR + this.postInfo.width / 2,\n 0,\n offsetZB + this.offsetBraketZ\n );\n postBack.scale.setY(scaleYB);\n this.scene.add(postBack);\n }\n }\n public addBeam(userDataPos: any) {\n if (userDataPos.isMultiSpan && UI.multiSpan === 0) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ = -UI.existingWidth1 / 2 + UI.eaveWidth;\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetXR = this.totalBaySize / 2 + UI.overhangRight;\n\n let beamLength = this.roofWidth;\n\n const condition = UI.span + UI.eaveWidth;\n let _flag = false;\n if (\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 >= condition + UI.multiSpan) ||\n (!userDataPos.isMultiSpan && UI.existingWidth1 >= condition)\n ) {\n _flag = true;\n }\n // switch (this.existingType) {\n // case 1:\n // if (_flag) {\n // beamLength = this.roofWidth + UI.eaveWidth;\n // offsetXL -= UI.eaveWidth;//(this.existingTypeLeftX - this.existingTypeRightX) / 2 - (this.existingTypeLeftX / 2);\n // }\n // break;\n // case 2:\n // if (_flag) {\n // beamLength = this.roofWidth + UI.eaveWidth;\n // //offsetX = (this.existingTypeLeftX - this.existingTypeRightX) / 2 + (this.existingTypeRightX / 2);\n // offsetXR += UI.eaveWidth;\n // }\n // break;\n // case 3:\n // if (_flag) {\n // offsetXL -= UI.eaveWidth;\n // offsetXR += UI.eaveWidth;\n // beamLength = this.roofWidth + UI.eaveWidth * 2;\n // }\n // break;\n // }\n if (userDataPos.isMultiSpan) {\n offsetY =\n UI.eaveHeight - this.getHeightByRoofPitch(false) + this.offsetYBraket;\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetY =\n UI.eaveHeight - this.getHeightByRoofPitch(true) + this.offsetYBraket;\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n //offsetY -= this.geometryManager.SUPERIOR_BEAM.S65x160.height / 2;\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n //Cutout\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (UI.span + UI.eaveWidth <= UI.existingWidth1) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + UI.eaveWidth;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + UI.eaveWidth;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2; // + UI.eaveWidth;\n }\n } else if (\n UI.span + UI.eaveWidth > UI.existingWidth1 &&\n UI.span + UI.eaveWidth < UI.existingWidth1 + UI.eaveWidth\n ) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2;\n }\n }\n // else{\n // if(this.APP.sltExistingType.currentValue == 1){\n // offsetXL -= this.APP.sldExistingLength2.currentValue;\n // scaleX = this.roofWidth / this.beamInfo.length;\n // }\n // else if(this.APP.sltExistingType.currentValue == 2){\n // offsetXR += this.APP.sldExistingLength2.currentValue;\n // scaleX = this.roofWidth / this.beamInfo.length;\n // }\n // else if(this.APP.sltExistingType.currentValue == 3){\n // offsetXL -= this.APP.sldExistingLength2.currentValue;\n // offsetXR += this.APP.sldExistingLength2.currentValue;\n // scaleX = this.roofWidth / this.beamInfo.length;\n // }\n // }\n }\n\n //rake cut - apply only the front beam\n if (UI.multiSpan <= 0 || (UI.multiSpan > 0 && userDataPos.isMultiSpan)) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.beamLeftCutSizeInfo.l;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetXL += UI.rakeCutLeftHor;\n beamLength -= UI.rakeCutLeftHor;\n }\n\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXR -= this.beamRightCutSizeInfo.l;\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXR -= UI.rakeCutRightHor;\n beamLength -= UI.rakeCutRightHor;\n }\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngelRakecut() {\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.NONE &&\n UI.rakeCutRightType == RAKECUT_TYPE.NONE\n ) {\n return;\n }\n\n let offsetZ = UI.span + UI.multiSpan + UI.eaveWidth - UI.existingWidth1 / 2;\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) + this.offsetYBraket;\n }\n\n let offsetXStart = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n if (UI.isUpFasciaUpstandardBracket) {\n rotX = -rotX;\n }\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let offsetX =\n -this.totalBaySize / 2 - UI.overhangLeft + this.beamLeftCutSizeInfo.l;\n let beamLength = this.beamLeftCutSizeInfo.m;\n let scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n let rotYL = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamLeftCutSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n }\n\n let offsetXEnd = beamLength;\n\n const mesh = new Mesh(\n this.beamRakecutInfoLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ + this.offsetBraketZ);\n beamGroup.rotation.set(0, rotYL, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(BUILDING_SIDE.LEFT, matrix);\n }\n\n beamGroup.rotation.set(rotX, rotYL, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n this.scene.add(beamGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n //let beamSizeInfo = this.getBeamRakeCutInfo(BUILDING_SIDE.RIGHT);\n let offsetX =\n this.totalBaySize / 2 + UI.overhangRight - this.beamRightCutSizeInfo.l;\n let beamLength = this.beamRightCutSizeInfo.m;\n let scaleZ = beamLength / this.beamRakecutInfoLeft.length;\n let rotYR = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamRightCutSizeInfo.b;\n scaleZ = beamLength / this.beamRakecutInfoRight.length;\n }\n\n let offsetXEnd = beamLength;\n\n const mesh = new Mesh(\n this.beamRakecutInfoRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ + this.offsetBraketZ);\n beamGroup.rotation.set(0, -rotYR, 0);\n beamGroup.updateMatrixWorld();\n let matrix = beamGroup.matrixWorld;\n if (beamLength > 8000) {\n this.addPostForBeamAngelRakecut(BUILDING_SIDE.RIGHT, matrix);\n }\n\n beamGroup.rotation.set(rotX, -rotYR, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetZ =\n UI.span + UI.multiSpan + UI.eaveWidth - UI.existingWidth1 / 2;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) + this.offsetYBraket;\n }\n\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) + this.offsetYBraket;\n }\n }\n\n let beamLength = UI.rakeCutLeftHor + this.postInfo.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft + this.postInfo.width;\n }\n\n let beamGroup;\n\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutLeft,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n 1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ =\n UI.span + UI.multiSpan + UI.eaveWidth - UI.existingWidth1 / 2;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n 1\n ) + this.offsetYBraket;\n }\n\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) + this.offsetYBraket;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight,\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n 1\n ) + this.offsetYBraket;\n }\n }\n let beamLength = UI.rakeCutRightHor + this.postInfo.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.postInfo.width;\n }\n\n let beamGroup;\n\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.geo_beamStepRakecutRight,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXR, offsetY, offsetZ + this.offsetBraketZ),\n new Vector3(),\n views,\n -1,\n null,\n -this.geo_beamEndCap.width / 2,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n this.scene.add(beamGroup);\n }\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * UI.span;\n } else {\n return this.utils.tan(UI.patiosPitch) * UI.span;\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return -this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n } else {\n return this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan);\n }\n }\n }\n private addPostForBeamAngelRakecut(\n cutSide: BUILDING_SIDE,\n beamMatrix: Matrix4\n ) {\n //let inf = this.getBeamRakeCutInfo(cutSide);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (cutSide == BUILDING_SIDE.LEFT) {\n let p1 = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(this.beamLeftCutSizeInfo.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(1, 0, 0).multiplyScalar(this.beamLeftCutSizeInfo.l)\n );\n let angle = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n\n let ver = (Math.cos(angle) * this.beamLeftCutSizeInfo.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n -UI.totalBayLength / 2 + UI.overhangLeft,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(\n p3,\n dir.multiplyScalar(this.beamLeftCutSizeInfo.m / 2)\n );\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postLeft = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postLeft.position.set(pMid2.x, 0, pMid2.z);\n //postLeft.rotation.set(0,this.utils.degreesToRadians(UI.patiosPitch),0);\n //postLeft.applyMatrix4(beamMatrix);\n //postLeft.position.setY(-height/2);\n postLeft.scale.setY(scaleY);\n this.scene.add(postLeft);\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n let p1 = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2 + UI.span + UI.multiSpan\n );\n let p2 = new Vector3().addVectors(\n p1,\n new Vector3(0, 0, -1).multiplyScalar(this.beamRightCutSizeInfo.j)\n );\n let p3 = new Vector3().addVectors(\n p1,\n new Vector3(-1, 0, 0).multiplyScalar(this.beamRightCutSizeInfo.l)\n );\n let angle = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n\n let ver = (Math.cos(angle) * this.beamRightCutSizeInfo.m) / 2;\n let pMid = new Vector3().addVectors(\n p2,\n new Vector3(0, 0, 1).multiplyScalar(ver)\n );\n let pOri = new Vector3(\n UI.totalBayLength / 2 + UI.overhangRight,\n 2500,\n -UI.existingWidth1 / 2\n );\n\n let dir = new Vector3().subVectors(p2, p3).normalize();\n let pMid2 = new Vector3().addVectors(\n p3,\n dir.multiplyScalar(this.beamRightCutSizeInfo.m / 2)\n );\n\n let length = new Vector3().subVectors(pMid, pOri).length();\n let height = this.utils.getHeightByAngle(\n UI.eaveHeight - this.beamInfo.height,\n length,\n UI.patiosPitch,\n -1\n );\n\n let scaleY = height / this.postInfo.height;\n\n let postRight = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n postRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { rakecut: true },\n views: views,\n };\n postRight.position.set(pMid2.x, 0, pMid2.z);\n postRight.scale.setY(scaleY);\n this.scene.add(postRight);\n }\n }\n}\n","import {\n BoxBufferGeometry,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n MeshLambertMaterial,\n Object3D,\n Plane,\n Vector3,\n} from \"three\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"../../app.config\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG as CONST,\n EXISTING_BUILDING_CONFIG,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n CONNECTION_TYPE,\n} from \"../../app.constants\";\nimport { Util } from \"../utils\";\n// import { AppComponent } from '../../app.component';\nimport HighLightBox from \"src/app/models/HighlightBox\";\nimport { CSG } from \"three-csg-ts\";\nimport { FasciaManager } from \".\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: FasciaManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private roofInfo: GeometryInfo;\n private roofBaseInfo: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private bargeFrontInfo: GeometryInfo;\n private bargeBackInfo: GeometryInfo;\n private geoReceiveChannelLeftInfo: GeometryInfo;\n private geoReceiveChannelRightInfo: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n // Var\n private roofLength: number;\n private roofLengthPlus: number;\n private roofWidth: number;\n //private existingTypeLeftX: number;\n //private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofGroup: Group;\n private cutoutExistingBothLength: number;\n\n private offsetBraketZ: number = 0;\n\n public shouldSnapRoofToExistingWhenCutout: boolean = false;\n\n constructor(app: AppComponent, fasciaManager: FasciaManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.scene = new Group();\n fasciaManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldBaySize,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldExistingWidth1,\n this.APP.sldNoOfBay,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sltExistingType,\n this.APP.sltColourDownpipe,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofSheetPanel();\n this.roofInfo.geometry.translate(\n this.roofInfo.width / 2 + 3,\n -1,\n this.roofInfo.length / 2\n );\n\n this.roofBaseInfo = this.geometryManager.getRoofBase();\n this.roofBaseInfo.geometry.translate(\n this.roofBaseInfo.width / 2,\n this.roofBaseInfo.height / 2,\n this.roofBaseInfo.length / 2\n );\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(\n -this.zFlashingRakecutRightGeo.length,\n 0,\n 0\n );\n\n // Barge capping\n this.bargeLeftInfo = this.geometryManager.getBarge();\n this.bargeLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(\n this.bargeLeftInfo.width / 2 - 3,\n this.bargeLeftInfo.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.bargeLeftInfo.length / 2\n );\n \n this.geoReceiveChannelLeftInfo = this.geometryManager.getReceiverChannel();\n this.geoReceiveChannelLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(\n this.geoReceiveChannelLeftInfo.width / 2,\n this.geoReceiveChannelLeftInfo.height / 2,\n this.geoReceiveChannelLeftInfo.length / 2\n );\n\n this.bargeRightInfo = this.geometryManager.getBarge();\n this.bargeRightInfo.geometry.translate(\n -this.bargeRightInfo.width / 2 + 3,\n this.bargeRightInfo.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.bargeRightInfo.length / 2\n );\n\n this.geoReceiveChannelRightInfo = this.geometryManager.getReceiverChannel();\n this.geoReceiveChannelRightInfo.geometry\n .translate(\n - this.geoReceiveChannelRightInfo.width / 2,\n this.geoReceiveChannelRightInfo.height / 2,\n this.geoReceiveChannelRightInfo.length / 2\n );\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.receiverCutoutLeftHor.length / 2,\n this.receiverCutoutLeftHor.height / 2,\n this.receiverCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.receiverCutoutLeftHor.length / 2,\n this.receiverCutoutLeftHor.height / 2,\n this.receiverCutoutLeftHor.width / 2\n );\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(\n this.receiverCutoutLeftVer.width / 2,\n this.receiverCutoutLeftVer.height / 2,\n this.receiverCutoutLeftVer.length / 2\n );\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer.geometry.translate(\n -this.receiverCutoutRightVer.width / 2,\n this.receiverCutoutRightVer.height / 2,\n this.receiverCutoutRightVer.length / 2\n );\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_receiverChanel.length / 2,\n this.geo_receiverChanel.height / 2 + 2,\n this.geo_receiverChanel.width / 2\n );\n\n // Gutter\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.gutterRakecutLeftInfo.length / 2,\n -20,\n this.gutterRakecutLeftInfo.width / 2\n );\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n -this.gutterRakecutRightInfo.length / 2,\n -20,\n this.gutterRakecutRightInfo.width / 2\n );\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(800, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n this.bargeFrontInfo = this.geometryManager.getBarge();\n this.bargeFrontInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.bargeFrontInfo.length / 2,\n this.bargeFrontInfo.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.bargeFrontInfo.width / 2\n );\n\n this.bargeBackInfo = this.geometryManager.getBarge();\n this.bargeBackInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.bargeBackInfo.length / 2,\n this.bargeBackInfo.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.bargeBackInfo.width / 2 - 3\n );\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_bargeRakecutLeft.width / 2,\n this.geo_bargeRakecutLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_bargeRakecutLeft.length / 2\n );\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry.translate(\n -this.geo_bargeRakecutRight.width / 2,\n this.geo_bargeRakecutRight.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_bargeRakecutRight.length / 2\n );\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_bargeRakecutLeft.width / 2,\n this.geo_bargeRakecutLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_bargeRakecutLeft.length / 2\n );\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry.translate(\n -this.geo_bargeRakecutRight.width / 2,\n this.geo_bargeRakecutRight.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n -this.geo_bargeRakecutRight.length / 2\n );\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_bargeCutoutLeftHor.length / 2,\n this.geo_bargeCutoutLeftHor.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_bargeCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_bargeCutoutRightHor.length / 2,\n this.geo_bargeCutoutRightHor.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_bargeCutoutRightHor.width / 2\n );\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE\n )\n );\n //test\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"RAKECUT\")\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n const _roofLength =\n Math.pow(this.roofLength, 2) +\n Math.pow(this.getHeightByRoofPitch({ isMultiSpan: true }), 2);\n this.roofLengthPlus = Math.sqrt(_roofLength); // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n this.roofWidth =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.cutoutExistingBothLength =\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2;\n\n this.offsetBraketZ = 0;\n if (+UI.upstandBraketType !== 0) {\n this.offsetBraketZ = this.geoBraket_2.height / 4;\n }\n\n this.shouldSnapRoofToExistingWhenCutout = AppComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout()\n\n this.addRoofGroup();\n this.addCutout();\n this.addAngelRakeCut();\n this.addStepRakecut();\n\n if (UI.rakeCutLeftType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft),\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT },\n });\n }\n\n if (UI.rakeCutRightType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT },\n });\n }\n\n this.existingType = +this.APP.sltExistingType.currentValue;\n // this.existingTypeLeftX = 0;\n // this.existingTypeRightX = 0;\n // if ((this.existingType === 1 || this.existingType === 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // this.existingTypeLeftX = this.APP.sldEaveWidth.currentValue;\n // }\n // if ((this.existingType === 2 || this.existingType === 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // this.existingTypeRightX = this.APP.sldEaveWidth.currentValue;\n // }\n\n let offsetXR =\n this.totalBaySize / 2 +\n this.MANAGER.patiosGroup.position.x +\n this.APP.sldRightOverhang.currentValue;\n //if ((this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetXR -= this.APP.sldEaveWidth.currentValue;\n //}\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR); // (this.APP.sldBaySize.currentValue / 2) + this.APP.sldRightOverhang.currentValue );\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [\n clipingPlaneLeft,\n clipingPlane,\n ];\n const roofPanelCount = Math.ceil(this.roofWidth / this.roofInfo.width);\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n //panel direction\n let panelDirectionOfset = 1;\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n offsetXL =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.roofInfo.width;\n panelDirectionOfset = -1;\n } else if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT\n ) {\n offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n }\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = true;\n\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver =\n totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBase(offsetXL, [this.csg_cutoutLeft]);\n this.addRoof(offsetXL, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver =\n totalPanelLength >=\n this.roofWidth -\n this.APP.sldExistingLength2.currentValue +\n this.roofInfo.width;\n cuted =\n totalPanelLength >=\n this.roofWidth - this.APP.sldExistingLength2.currentValue &&\n !isOver;\n\n this.addRoofBase(offsetXL, [this.csg_cutoutRight]);\n this.addRoof(offsetXL, [this.csg_cutoutRight]);\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH &&\n this.MANAGER.cutoutCondition\n ) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver =\n totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 =\n totalPanelLength >=\n this.roofWidth -\n this.APP.sldExistingLength2.currentValue +\n this.roofInfo.width;\n let flag =\n totalPanelLength >=\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBase(offsetXL, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n this.addRoof(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n } else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofBase(offsetXL, []);\n this.addRoof(offsetXL, []);\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n\n this.addZFlashing();\n if (!UI.isUpFasciaUpstandardBracket) {\n this.addZFlashingAngleRakeCut();\n this.addZFlashingStepRakeCut();\n }\n this.addBarge();\n this.addBargeStepRakecut();\n this.addBargeAngelRakecut();\n this.addGutter();\n this.addGutterAngelRakeCut();\n this.addGutterStepRakeCut();\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTOUT\")\n );\n\n let offsetX =\n this.APP.sldExistingLength.currentValue / 2 -\n this.APP.sldEaveWidth.currentValue;\n let offsetY = 0;\n let offsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n UI.eaveWidth -\n UI.overhangBack +\n this.offsetBraketZ;\n \n // To fascia, move roof snap to existing wall\n if(this.shouldSnapRoofToExistingWhenCutout) {\n offsetZ = UI.existingWidth1 / 2 - UI.overhangBack + this.offsetBraketZ;\n }\n\n // Apply pitch to offsetZ, because we cut panel before rotate roof\n offsetZ = offsetZ / this.utils.cos(UI.patiosPitch)\n\n //extra length to prevent lack when cut\n let extra = 5000;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + extra) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + extra) / 1000;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue + UI.overhangBack + extra) /\n 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n this.mesh_CutoutLeft = new Mesh(\n this.geo_cutoutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutLeft.position.set(\n -offsetX - this.APP.sldLeftOverhang.currentValue,\n offsetY,\n offsetZ\n );\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n this.mesh_CutoutRight = new Mesh(\n this.geo_cutoutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutRight.position.set(\n offsetX + this.APP.sldRightOverhang.currentValue,\n offsetY,\n offsetZ\n );\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n private addAngelRakeCut() {\n let offsetXL =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = -100;\n\n let offsetZ =\n this.MANAGER.patiosLength +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.offsetBraketZ;\n const _offsetZ =\n (this.MANAGER.patiosLength +\n UI.overhangBack -\n //- this.APP.sldExistingWidth1.currentValue/2\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let hypotenuse = Math.sqrt(\n Math.pow(this.MANAGER.patiosLength, 2) +\n Math.pow(this.MANAGER.patiosWidth, 2)\n );\n let scaleLength = hypotenuse / 1000;\n let scaleWidth =\n (this.MANAGER.patiosLength * this.MANAGER.patiosWidth) /\n hypotenuse /\n 1000;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n let _rotY = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let _angle = (Math.PI - _rotY) / 2;\n\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutLeft.rotateY(angle);\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n //cut gutter csg\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterLeft1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft1.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft1.rotation.set(0, _angle, 0);\n this.meshCutGutterLeft1.updateMatrix();\n this.csgCutGutterLeft1 = CSG.fromMesh(this.meshCutGutterLeft1);\n //this.APP.scene.add(this.meshCutGutterLeft1);\n\n this.meshCutGutterLeft2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft2.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft2.rotation.set(0, _angle + Math.PI, 0);\n this.meshCutGutterLeft2.updateMatrix();\n this.csgCutGutterLeft2 = CSG.fromMesh(this.meshCutGutterLeft2);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let angle = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n\n let _rotY = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let _angle = (Math.PI - _rotY) / 2;\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutRight.rotateY(-angle);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n\n //cut gutter\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterRight1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight1.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight1.rotation.set(0, -_angle, 0);\n this.meshCutGutterRight1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight1.updateMatrix();\n this.csgCutGutterRight1 = CSG.fromMesh(this.meshCutGutterRight1);\n\n this.meshCutGutterRight2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight2.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight2.rotation.set(0, -(_angle + Math.PI), 0);\n this.meshCutGutterRight2.updateMatrix();\n this.csgCutGutterRight2 = CSG.fromMesh(this.meshCutGutterRight2);\n //this.APP.scene.add(this.meshCutGutterRight2);\n }\n }\n private addStepRakecut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100; //this.APP.sldExistingWallHeight.currentValue;\n // let offsetY = this.utils.getHeightByAngle(\n // this.APP.sldExistingWallHeight.currentValue + this.APP.sldFlyOverBracketHeight.currentValue,\n // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n // this.APP.sltRoofPitch.currentValue,\n // 1\n // );\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.offsetBraketZ;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleLength = (this.APP.sldLeftCutVertical.currentValue + 100) / 1000;\n let scaleWidth =\n (this.APP.sldLeftCutHorizontal.currentValue + 100) / 1000;\n\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleLength =\n (this.APP.sldRightCutVertical.currentValue + 100) / 1000;\n let scaleWidth =\n (this.APP.sldRightCutHorizontal.currentValue + 100) / 1000;\n\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n public addZFlashing() {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetY = this.roofBaseInfo.height - 25;\n if (!UI.isUpFasciaUpstandardBracket) {\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n UI.overhangBack) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let flashingLength = this.roofWidth;\n\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n offsetX += this.APP.sldLeftCutHorizontal.currentValue;\n flashingLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n flashingLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n\n let scaleX = flashingLength / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n scale: mesh.scale,\n };\n this.roofGroup.add(mesh);\n } else {\n const offsetZ = 0;\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let scaleX =\n (this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue) /\n this.zFlashingGeo.length;\n let flashingLength =\n UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n // let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n offsetX += UI.existingLength2;\n flashingLength -= UI.existingLength2;\n } else {\n offsetX += UI.existingLength2;\n flashingLength -= UI.existingLength2;\n }\n\n offsetX += UI.overhangLeft;\n flashingLength -= UI.overhangLeft;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n if (UI.existingWidth2 > 0) {\n flashingLength -= UI.existingLength2;\n } else {\n flashingLength -= UI.existingLength2;\n }\n flashingLength -= UI.overhangRight;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetX += UI.existingLength2;\n flashingLength = UI.existingLength1 - UI.eaveWidth * 2;\n }\n }\n\n scaleX = flashingLength / this.zFlashingGeo.length;\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX + flashingLength, offsetY, offsetZ);\n mesh.rotateY(Math.PI);\n mesh.scale.set(scaleX, 1, 1);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n scale: mesh.scale,\n };\n\n this.roofGroup.add(mesh);\n }\n }\n public addZFlashingAngleRakeCut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n const offsetY = this.roofBaseInfo.height - 25;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n 50 -\n this.APP.sldLeftCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let rotY = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let length = Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n\n let scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.rotation.set(0, -rotY, 0);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let offsetX =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n 50 -\n this.APP.sldRightCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let rotY = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let length = Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n let scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingRakecutRightGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.rotation.set(0, rotY, 0);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n }\n public addZFlashingStepRakeCut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n const offsetY = this.roofBaseInfo.height - 25;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n const offsetX =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldLeftCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const length = this.APP.sldLeftCutHorizontal.currentValue;\n const scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n const offsetX =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldRightCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const length = this.APP.sldRightCutHorizontal.currentValue;\n const scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingRakecutRightGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n this.roofGroup.add(mesh);\n }\n }\n public addRoofGroup() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PATIOS,\n };\n\n let offsetX = 0;\n // if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n // if (this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX = this.APP.sldEaveWidth.currentValue;\n // }\n // }\n let height = 0;\n if (+UI.upstandBraketType !== 0) {\n height =\n +UI.upstandBraketType +\n this.geoBeam.height +\n this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n height -= this.geoBraket_1.width * this.utils.tan(UI.patiosPitch);\n }\n let offsetY =\n UI.eaveHeight + height + UI.overhangBack * this.utils.tan(UI.patiosPitch);\n if (UI.isUpFasciaUpstandardBracket) {\n offsetY =\n UI.eaveHeight +\n height -\n UI.overhangBack * this.utils.tan(UI.patiosPitch);\n }\n\n let offsetZ =\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n UI.overhangBack;\n\n this.roofGroup.position.set(offsetX, offsetY, offsetZ + this.offsetBraketZ);\n if (UI.isUpFasciaUpstandardBracket) {\n this.roofGroup.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n } else {\n this.roofGroup.rotation.set(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n }\n\n this.scene.add(this.roofGroup);\n }\n public getOutLines(): Printing2DGeometry {\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"ROOF_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false) return;\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().MESH_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n return simplifiedGeo;\n }\n public addRoof(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n const mesh: Mesh = new Mesh(\n this.roofInfo.geometry,\n MaterialManager.Instance().ROOF\n );\n\n let offsetSheet = 0;\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n offsetSheet = 13;\n } else {\n offsetSheet = 5;\n }\n\n //if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX += this.APP.sldEaveWidth.currentValue;\n //}\n\n let scaleZ = this.roofLengthPlus / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetZ = UI.isUpFasciaUpstandardBracket ? 0 : 0;\n\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && over && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - this.APP.sldExistingWidth1.currentValue) / this.roofInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL,\n views: views,\n length: scaleZ,\n };\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n\n // let meshResult = new Mesh();\n // let meshTemp = mesh;\n\n // for (let csgObj of csgObjs) {\n // meshResult = CSG.toMesh(CSG.fromMesh(meshTemp).subtract(csgObj), mesh.matrix);\n // meshTemp = meshResult;\n // }\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n public addRoofBase(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n //if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX += this.APP.sldEaveWidth.currentValue;\n //}\n const mesh: Mesh = new Mesh(\n this.roofBaseInfo.geometry,\n MaterialManager.Instance().ROOF_BASE\n );\n let scaleZ =\n (this.roofLengthPlus - CONST.ROOF_BASE_SUBTRACT) /\n this.roofBaseInfo.length;\n let offsetY = 0; //this.APP.sldExistingWallHeight.currentValue// + (this.geometryManager.MONO_PANEL.S50MM_BASE.height);\n let offsetZ = UI.isUpFasciaUpstandardBracket ? CONST.ROOF_BASE_SUBTRACT : 0; //(-this.APP.sldExistingWidth1.currentValue / 2) ; // + this.geometryManager.EXISTING_WALL.EXISTING_WALL.width; // -(this.APP.sldExistingWidth1.currentValue / 2);\n\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && over && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - CONST.ROOF_BASE_SUBTRACT - this.APP.sldExistingWidth1.currentValue) / this.roofBaseInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n //mesh.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL_BASE,\n views: views,\n };\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n\n // let meshResult = new Mesh();\n // let meshTemp = mesh;\n\n // for (let csgObj of csgObjs) {\n // meshResult = CSG.toMesh(CSG.fromMesh(meshTemp).subtract(csgObj), mesh.matrix);\n // meshTemp = meshResult;\n // }\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n private addBarge() {\n if (UI.isUpFasciaUpstandardBracket) {\n let mesh: Mesh;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXF = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue;\n let offsetXL2 = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXR1 =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n let offsetXR2 =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetZL = 0;\n let offsetZR = 0;\n let offsetZFront =\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let bargeFrontLength = this.roofWidth;\n let scaleCutoutVer =\n this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue + this.bargeLeftInfo.width,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n let offsetY = 0;\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n //cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeLeftLength -= this.APP.sldExistingWidth1.currentValue;\n offsetZL += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - this.geoBraket_1.width / 10,\n UI.patiosPitch\n );\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(\n UI.existingLength2 / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n //cutout Ver\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeRightLength -= this.APP.sldExistingWidth1.currentValue;\n offsetZR += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(\n UI.existingLength2 / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n // cutout ver\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n offsetXF += this.APP.sldLeftCutHorizontal.currentValue;\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n bargeFrontLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n bargeFrontLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n let scaleXF = bargeFrontLength / this.bargeFrontInfo.length;\n let scaleZLeft =\n this.utils.getHypotenuseByCos(\n bargeLeftLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeLeftInfo.length;\n let scaleZRight =\n this.utils.getHypotenuseByCos(\n bargeRightLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeRightInfo.length;\n //left\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n //right\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n //front\n mesh = new Mesh(\n this.bargeFrontInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXF, 0, offsetZFront + 2);\n mesh.scale.setX(scaleXF);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n } else {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n let mesh: Mesh;\n let offsetXB = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXL1 = -(UI.totalBayLength / 2 + UI.overhangLeft) + UI.existingLength2 + (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth;\n let offsetXL2 = -( UI.totalBayLength / 2 + UI.overhangLeft);\n let offsetXR1 = this.totalBaySize / 2 + UI.overhangRight - UI.existingLength2 - (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth;\n let offsetXR2 = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZL = 0;\n let offsetZR = 0;\n const offsetY = 0;\n let scaleXB = this.roofWidth / this.geo_receiverChanel.length;\n let scaleZLeft = this.roofLengthPlus / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLengthPlus;\n let scaleZRight = this.roofLengthPlus / this.bargeRightInfo.length;\n let bargeRightLength = this.roofLengthPlus;\n\n let bargeCutOutVerLength = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue + this.bargeLeftInfo.width,\n this.APP.sltRoofPitch.currentValue\n )\n if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n if(this.shouldSnapRoofToExistingWhenCutout) {\n bargeCutOutVerLength = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth + this.geo_receiverChanel.width,\n this.APP.sltRoofPitch.currentValue\n )\n } else {\n bargeCutOutVerLength = this.utils.getHypotenuseByCos(\n UI.existingWidth1 + this.geo_receiverChanel.width,\n this.APP.sltRoofPitch.currentValue\n )\n }\n }\n let scaleCutoutVer = bargeCutOutVerLength / this.bargeLeftInfo.length;\n let scaleCutoutHor =\n this.APP.sldExistingLength2.currentValue /\n this.geo_bargeCutoutLeftHor.length;\n //cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n scaleXB =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.geo_receiverChanel.length;\n scaleZLeft =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeLeftInfo.length;\n bargeLeftLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n offsetXB += this.APP.sldExistingLength2.currentValue;\n if(this.shouldSnapRoofToExistingWhenCutout) {\n bargeLeftLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1 + UI.eaveWidth,\n this.APP.sltRoofPitch.currentValue\n );\n offsetZL += this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth,\n this.APP.sltRoofPitch.currentValue\n );\n } else {\n offsetZL += this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n this.APP.sltRoofPitch.currentValue\n );\n }\n\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n if(this.shouldSnapRoofToExistingWhenCutout) {\n offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n }\n \n // If normal fascia, the back barge is receive chanel\n if (UI.structureType == CONNECTION_TYPE.FASCIA) {\n const receiveChanelLength = scaleCutoutHor * this.geo_bargeCutoutLeftHor.length + (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth\n const receiveChanelScale = receiveChanelLength / this.geo_receiverChanel.length\n mesh = new Mesh(\n this.geo_receiverChanel.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.position.set(offsetXL1 - receiveChanelLength, offsetY, offsetZ);\n mesh.scale.setX(receiveChanelScale);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n \n }\n \n this.roofGroup.add(mesh);\n\n // Cutout vertical (Left of existing length 1)\n if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n mesh = new Mesh(\n this.geoReceiveChannelLeftInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n scaleXB =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue) /\n this.geo_receiverChanel.length;\n scaleZRight =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.bargeRightInfo.length;\n bargeRightLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1,\n UI.patiosPitch\n );\n \n if(this.shouldSnapRoofToExistingWhenCutout) {\n bargeRightLength = this.utils.getHypotenuseByCos(\n this.roofLength - UI.existingWidth1 + UI.eaveWidth,\n UI.patiosPitch\n );\n offsetZR += this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth,\n UI.patiosPitch\n );\n } else {\n offsetZR += this.utils.getHypotenuseByCos(\n UI.existingWidth1,\n UI.patiosPitch\n );\n }\n\n //TODO: Temp ==> this.geoBraket_1.width / 10\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n if(this.shouldSnapRoofToExistingWhenCutout) {\n offsetZ = this.utils.getHypotenuseByCos(\n UI.existingWidth1 - UI.eaveWidth - this.geoBraket_1.width / 10,\n this.APP.sltRoofPitch.currentValue\n );\n }\n\n if (UI.structureType == CONNECTION_TYPE.FASCIA) {\n const receiveChanelLength = scaleCutoutHor * this.geo_bargeCutoutLeftHor.length + (this.shouldSnapRoofToExistingWhenCutout ? 1 : 0) * UI.eaveWidth\n const receiveChanelScale = receiveChanelLength / this.geo_receiverChanel.length\n mesh = new Mesh(\n this.geo_receiverChanel.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.scale.setX(receiveChanelScale);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n \n } else {\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.scale.setX(scaleCutoutHor);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n this.roofGroup.add(mesh);\n \n //cutout ver\n \n if(UI.structureType == CONNECTION_TYPE.FASCIA) {\n mesh = new Mesh(\n this.geoReceiveChannelRightInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n this.roofGroup.add(mesh);\n }\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n this.APP.sltExistingType.currentValue == 3\n ) {\n scaleXB =\n (this.roofWidth - this.APP.sldExistingLength2.currentValue * 2) /\n this.geo_receiverChanel.length;\n }\n //Rake cut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n }\n scaleZLeft = bargeLeftLength / this.bargeLeftInfo.length;\n scaleZRight = bargeRightLength / this.bargeRightInfo.length;\n\n // Left barge (Left side of existing length 1 and existing length 2)\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA \n && (UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.BOTH)\n && this.shouldSnapRoofToExistingWhenCutout\n && UI.existingWidth2 > 0\n ) {\n mesh = new Mesh(\n this.geoReceiveChannelLeftInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n this.roofGroup.add(mesh);\n\n // Right barge (Right side of existing length 1 and existing length 2)\n if(\n UI.structureType == CONNECTION_TYPE.FASCIA \n && (UI.existingType == BUILDING_SIDE.RIGHT || UI.existingType == BUILDING_SIDE.BOTH)\n && this.shouldSnapRoofToExistingWhenCutout\n && UI.existingWidth2 > 0\n ) {\n mesh = new Mesh(\n this.geoReceiveChannelRightInfo.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n } else {\n mesh = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n }\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n this.roofGroup.add(mesh);\n if(this.shouldSnapRoofToExistingWhenCutout) {\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.RIGHT) {\n scaleXB -= UI.eaveWidth / this.geo_receiverChanel.length;\n } else if(UI.existingType == BUILDING_SIDE.BOTH) {\n scaleXB -= 2 * UI.eaveWidth / this.geo_receiverChanel.length;\n }\n if(UI.existingType == BUILDING_SIDE.LEFT || UI.existingType == BUILDING_SIDE.BOTH) {\n offsetXB += UI.eaveWidth;\n }\n }\n // back\n if (UI.upstandBraketType == 0) {\n mesh = new Mesh(\n this.geo_receiverChanel.geometry,\n MaterialManager.Instance().RECEIVER_CHANEL\n );\n mesh.position.set(offsetXB, offsetY, 0);\n mesh.scale.setX(scaleXB);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.RECEIVER_CHANEL,\n views: views,\n };\n this.roofGroup.add(mesh);\n } else {\n mesh = new Mesh(\n this.bargeBackInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXB, offsetY, 0);\n mesh.scale.setX(scaleXB);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n }\n }\n private addBargeStepRakecut() {\n if (UI.isUpFasciaUpstandardBracket) {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (this.APP.sldLeftCutVertical.currentValue +\n this.bargeLeftInfo.width) /\n this.bargeLeftInfo.length;\n let scaleX =\n this.APP.sldLeftCutHorizontal.currentValue /\n this.bargeLeftInfo.length;\n\n let bargeVer = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZ - this.bargeLeftInfo.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(-offsetXL, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n (this.APP.sldRightCutVertical.currentValue +\n this.bargeRightInfo.width) /\n this.bargeRightInfo.length;\n let scaleX =\n this.APP.sldRightCutHorizontal.currentValue /\n this.bargeRightInfo.length;\n\n let bargeVer = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n offsetZ - this.bargeRightInfo.width\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n let bargeHor = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeHor.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeHor.position.set(offsetXR, 0, offsetZ);\n bargeHor.scale.set(1, 1, scaleX);\n bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer, bargeHor);\n }\n } else {\n if (\n !(\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n )\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let offsetZL = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let offsetZR = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n UI.overhangBack +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZL =\n this.APP.sldLeftCutVertical.currentValue / this.bargeLeftInfo.length;\n let scaleZR =\n this.APP.sldRightCutVertical.currentValue / this.bargeRightInfo.length;\n //let scaleX = (this.APP.sldRakeCutHorizontal.currentValue) / this.bargeLeftInfo.length;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(\n this.bargeLeftInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZL\n );\n bargeVer.scale.set(1, 1, scaleZL);\n\n // let bargeHor = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(-offsetXL, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let bargeVer = new Mesh(\n this.bargeRightInfo.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n offsetZR\n );\n bargeVer.scale.set(1, 1, scaleZR);\n\n // let bargeHor = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n // bargeHor.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // bargeHor.position.set(offsetXR, 0, offsetZ);\n // bargeHor.scale.set(1, 1, scaleX);\n // bargeHor.rotateY(-Math.PI / 2);\n\n this.roofGroup.add(bargeVer);\n }\n }\n }\n private addBargeAngelRakecut() {\n if (!UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n\n let offsetX =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldLeftCutHorizontal.currentValue;\n let mesh = new Mesh(\n this.geo_bargeRakecutLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let length = Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n let rotY = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n\n let offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldRightCutHorizontal.currentValue;\n let mesh = new Mesh(\n this.geo_bargeRakecutRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.rotateY(-rotY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n }\n public addGutter() {\n if (UI.isUpFasciaUpstandardBracket) {\n let offsetX = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ = CONST.GUTTER_ROOF_OFFSET_Z;\n let offsetY = this.roofBaseInfo.height - 25;\n let gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n //cutout\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n gutterLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n gutterLength =\n UI.totalBayLength +\n UI.overhangLeft +\n UI.overhangRight -\n UI.existingLength2;\n offsetX =\n UI.totalBayLength / 2 + UI.overhangRight - UI.existingLength2;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetX = UI.existingLength1 / 2 - UI.eaveWidth;\n gutterLength = UI.existingLength1 - 2 * UI.eaveWidth;\n }\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //Add gutter back\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n Math.PI,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n this.roofGroup.add(gutterGroup);\n this.addDownPipe(gutterGroup, gutterLength);\n } else {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const offsetY = this.roofBaseInfo.height - 25;\n\n let gutterLength = this.roofWidth;\n let exLength = 300; //Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue - exLength;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterMesh = new Mesh(\n this.gutterInfo.geometry,\n MaterialManager.Instance().GUTTER\n );\n gutterMesh.scale.setX(gutterLength / this.gutterInfo.length);\n gutterMesh.updateMatrix();\n let matrixBefore = gutterMesh.matrix.clone();\n\n gutterMesh.position.set(offsetXL, offsetY, offsetZ);\n gutterMesh.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n gutterMesh.updateMatrix();\n\n let meshClipped = CSG.toMesh(\n CSG.fromMesh(gutterMesh).subtract(this.csgCutGutterLeft1),\n gutterMesh.matrix\n );\n meshClipped = CSG.toMesh(\n CSG.fromMesh(meshClipped).subtract(this.csgCutGutterRight1),\n gutterMesh.matrix\n );\n meshClipped.applyMatrix4(new Matrix4().getInverse(gutterMesh.matrix));\n meshClipped.applyMatrix4(matrixBefore);\n meshClipped.material = gutterMesh.material;\n meshClipped.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n\n let gutterGroup = this.utils.createGutterGroupWithMesh(\n meshClipped,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n false\n );\n\n this.roofGroup.add(gutterGroup);\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n {\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n true,\n this.csgCutGutterLeft1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n }\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n {\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n }\n } else {\n let gutterGroup = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n this.roofGroup.add(gutterGroup);\n }\n }\n }\n private addDownPipe(gutterGroup: Group, gutterLength: number) {\n let meshPipe = new Mesh(\n this.MANAGER.postAndBeamManager.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(\n 100 / this.MANAGER.postAndBeamManager.geo_downPipe.height\n );\n meshPipe.position.set(\n gutterLength - 100,\n -190,\n this.MANAGER.postAndBeamManager.geo_downPipe.width / 2 + 20\n );\n\n gutterGroup.add(meshPipe);\n }\n private addGutterAngelRakeCut() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let exLength = 300;\n let rc_offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let rc_offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const rc_offsetZL =\n (UI.overhangFront +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetZR =\n (UI.overhangFront +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetY = this.roofBaseInfo.height - 25;\n\n let rc_rotYL = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let rc_lengthL =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let rc_rotYR = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let rc_lengthR =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterRakecutGroupLeft = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n let gutterRakecutGroupRight = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroupLeft, gutterRakecutGroupRight);\n } else {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n }\n }\n private addGutterStepRakeCut() {\n if (UI.isUpFasciaUpstandardBracket) {\n return;\n }\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const offsetZL =\n (this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetZR =\n (this.APP.sldFrontOverhang.currentValue +\n UI.overhangBack +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const offsetY = this.roofBaseInfo.height - 25;\n\n //let scaleX = length / this.gutterRakecutLeftInfo.length;\n\n //let rotYL = Math.atan(this.APP.sldLeftCutVertical.currentValue / this.APP.sldLeftCutHorizontal.currentValue);\n //let rotYR = Math.atan(this.APP.sldRightCutVertical.currentValue / this.APP.sldRightCutHorizontal.currentValue);\n //let rotX = this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue);\n\n //let extraAngle = (Math.PI - (rotY + Math.PI / 2)) / 2;\n //let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n //let length = exLength + Math.sqrt(Math.pow(this.APP.sldRakeCutVertical.currentValue, 2) + Math.pow(this.APP.sldRakeCutHorizontal.currentValue, 2));\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n //Step rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldLeftCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZL),\n new Vector3(0, 0, 0),\n views,\n 1,\n true,\n true\n );\n\n this.roofGroup.add(gutterHor);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let gutterLength = this.APP.sldRightCutHorizontal.currentValue;\n let gutterHor = this.utils.createGutterGroup(\n this.gutterInfo,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZR\n ),\n new Vector3(0, 0, 0),\n views,\n 1,\n true,\n true\n );\n\n this.roofGroup.add(gutterHor);\n }\n }\n\n private getHeightByRoofPitch(userDataPos: any): number {\n if (userDataPos.isSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else if (userDataPos.isMultiSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) * this.roofLength\n );\n }\n }\n}\n","import {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Vector3,\n} from \"three\";\nimport { PatiosFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"../../app.config\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { Util, getBeamEndCapCode } from \"../utils\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosFlyOverManager;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n public geo_superiorHouseBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_houseBeamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n private totalBaySize: number;\n public extraOffsetZ: number;\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private frontPostHeight: number;\n //private extraBracketHeight = 250;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private deferHandle;\n private deferTimeout = CONST.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketsBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, flyOverManager: PatiosFlyOverManager) {\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = flyOverManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_superiorHouseBeam = this.geometryManager.getHouseBeam();\n this.geo_superiorHouseBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorHouseBeam.length / 2,\n this.geo_superiorHouseBeam.height / 2,\n this.geo_superiorHouseBeam.width / 2\n );\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_houseBeamEndCap = this.geometryManager.getHouseBeamEndCap();\n this.geo_houseBeamEndCap.geometry.translate(\n 0,\n this.geo_houseBeamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData.position.back\n )\n );\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE));\n this.scene.remove(\n ...this.scene.children.filter((x) => x.userData.type == \"BOXHELPER\")\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = UI.totalBayLength;\n this.cutoutExistingBothLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n this.addBeamAngleRakecut();\n this.addBeamStepRakecut();\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n this.addSuperiorBeam({ cutout: true });\n }\n if (UI.multiSpan > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n this.addGround();\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPostOrBracket(offsetX, {\n front: true,\n first,\n last,\n left: first,\n right: last,\n });\n\n if (UI.multiSpan > 0) {\n this.addPostOrBracket(offsetX, {\n multiSpan: true,\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n offsetX = -this.totalBaySize / 2;\n first = true;\n last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPostAngleRakecut(offsetX + fitX, {\n first,\n last,\n left: first,\n right: last,\n });\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n this.addPostStepRakecut();\n this.addDownPipe();\n this.addDownPipeStepRakecut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n return fitX;\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n private addDownPipeStepRakecut() {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetX = -this.totalBaySize / 2 + 50 + fitX;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutLeftVer,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geo_superiorBeam.height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront -\n UI.rakeCutLeftVer -\n 260 -\n UI.existingWidth1 / 2;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeStepRakeCutGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n false\n );\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetX = this.totalBaySize / 2 - 50 + fitX;\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan + UI.overhangFront - UI.rakeCutRightVer,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geo_superiorBeam.height -\n 30;\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.overhangFront -\n UI.rakeCutRightVer -\n 260 -\n UI.existingWidth1 / 2;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeStepRakeCutGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n false\n );\n }\n }\n private addDownPipe() {\n let offsetZ = UI.span + UI.multiSpan - 170;\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let offsetX = -this.totalBaySize / 2 + 50 + fitX;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetX = this.totalBaySize / 2 - 50 + fitX;\n }\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= UI.existingWidth1 / 2;\n }\n //Rakecut\n //Downpipe will be in left\n if (UI.rakeCutLeftType != RAKECUT_TYPE.NONE) {\n if (\n this.APP.sltExistingType.currentValue == 1 &&\n UI.rakeCutRightType == RAKECUT_TYPE.NONE\n ) {\n offsetX = this.totalBaySize / 2 - 50 + fitX;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX = -this.totalBaySize / 2 + this.beamLeftCutSizeInfo.l + fitX;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX =\n -this.totalBaySize / 2 +\n UI.rakeCutLeftHor +\n EXISTING_BUILDING_CONFIG.FIT_FROM_CORNER_TO_CENTER_GUTTER +\n fitX;\n }\n }\n //Downpipe will be in right\n else {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n offsetX = this.totalBaySize / 2 - this.beamRightCutSizeInfo.l + fitX;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n offsetX =\n this.totalBaySize / 2 -\n UI.rakeCutRightHor -\n EXISTING_BUILDING_CONFIG.FIT_FROM_CORNER_TO_CENTER_GUTTER +\n fitX;\n }\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan + UI.overhangFront,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ,\n 0,\n UI.overhangFront,\n offsetY,\n true\n );\n\n // let isIntersect = false;\n // let boxDownPipe = new Box3().setFromObject(this.downpipeGroup);\n\n // for (let eave of this.APP.eaveManager.listEave) {\n // let boxEave = new Box3().setFromObject(eave);\n\n // if (boxEave.intersectsBox(boxDownPipe)) {\n // isIntersect = true;\n // break;\n // }\n // }\n // if (isIntersect) {\n // this.downpipeGroup.children = [];\n // this.utils.createDownpipeNozzle(this.APP, this.downpipeGroup, this.geo_downPipe, offsetX, offsetY, offsetZ + UI.overhangFront - 100);\n // }\n }\n\n public houseBeamHeight() {\n return this.geo_superiorBeam.height - this.geo_superiorHouseBeam.height;\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n //let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n //simplifiedGeo.vertices.push();\n\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n //lineGeo.vertices.push(new Vector3(vertices[i+3], vertices[i+4], vertices[i+5]));\n\n //if(i == 18) break;\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n\n private addGround() {\n let offsetZ = -(\n UI.existingWidth1 / 2 +\n this.extraOffsetZ +\n this.APP.sldBackOverhang.currentValue\n );\n let width = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let length =\n UI.span +\n UI.multiSpan +\n UI.overhangFront +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(0, 0, offsetZ);\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (this.APP.sltExistingType.currentValue == 1) {\n base.position.setX(offsetX);\n }\n if (this.APP.sltExistingType.currentValue == 2) {\n base.position.setX(-offsetX);\n }\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n if (userDataPos.front) {\n postOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n this.frontPostHeight = UI.eaveHeight + this.getBracketHeight(UI.span);\n scalePostY = this.frontPostHeight / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n if (UI.multiSpan > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(UI.span + UI.multiSpan) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n let exceedMoveBackLimit = false;\n //Rakecut\n if (\n UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutLeftType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.first) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutLeftVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n postOffsetX -= UI.overhangLeft;\n bracketOffsetX -= UI.overhangLeft;\n postOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamLeftCutSizeInfo.v + this.beamLeftCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n }\n\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n if (\n UI.rakeCutRightType == RAKECUT_TYPE.ANGLE ||\n UI.rakeCutRightType == RAKECUT_TYPE.STEP\n ) {\n let moveToBack = false;\n if (UI.multiSpan > 0) {\n if (userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n } else {\n if (!userDataPos.multiSpan && userDataPos.last) {\n moveToBack = true;\n }\n }\n\n if (moveToBack) {\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n postOffsetX += UI.overhangRight;\n bracketOffsetX += UI.overhangRight;\n postOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n bracketOffsetZ -=\n this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_;\n let length =\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_);\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span +\n UI.multiSpan -\n (this.beamRightCutSizeInfo.v + this.beamRightCutSizeInfo.k_)\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n exceedMoveBackLimit = true;\n }\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n postOffsetZ -= moveBack;\n bracketOffsetZ -= moveBack;\n let length = UI.span + UI.multiSpan - moveBack;\n scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n length,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n scaleBracketY =\n (this.getBracketHeight(\n UI.span + UI.multiSpan - UI.rakeCutRightVer\n ) -\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n FIT_FLYOVER_BRAKET_ON_ROOF) /\n this.geo_bracket.height;\n }\n }\n //if rake cut is on then do not add post left and right\n //left and right post will be added in individual function\n //return;\n }\n }\n //End rakecut\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n let boxPost = new Box3().setFromObject(meshPost);\n // let boxPostHelper = new Box3Helper(boxPost);\n // this.APP.scene.add(boxPostHelper);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (\n meshBracket.userData.position.left &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n meshBracket.userData.position.right &&\n UI.existingType != BUILDING_SIDE.BOTH\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n public addPostAngleRakecut(offsetX: number, userDataPos: any) {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let postOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n let bracketOffsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n let scalePostY =\n (UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan)) /\n this.geo_superiorPost.height;\n let scaleBracketY =\n this.getBracketHeight(UI.span + UI.multiSpan) / this.geo_bracket.height;\n let offsetY = UI.eaveHeight;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.first) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX + this.beamLeftCutSizeInfo.l,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n if (userDataPos.last) {\n let postLeft = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n postLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorPost.width,\n 0,\n postOffsetZ\n );\n postLeft.scale.setY(scalePostY);\n\n let bracketLeft = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n bracketLeft.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n views: views,\n };\n bracketLeft.position.set(\n offsetX - this.beamRightCutSizeInfo.l - this.geo_superiorBeam.width,\n offsetY,\n bracketOffsetZ\n );\n bracketLeft.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(postLeft);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n let isIntersectPost = false;\n this.scene.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_POST)\n .forEach((el) => {\n el.updateWorldMatrix(true, true);\n let boxEl = new Box3().setFromObject(el);\n if (boxPost.intersectsBox(boxEl)) {\n isIntersectPost = true;\n }\n });\n\n if (isIntersect && !isIntersectPost) {\n this.scene.add(bracketLeft);\n } else if (!isIntersectPost) {\n this.scene.add(postLeft);\n }\n }\n }\n }\n private addPostStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userDataPos = { rakecut: true };\n\n let offsetXL = -UI.totalBayLength / 2 + fitX;\n let offsetXR = UI.totalBayLength / 2 - this.geo_superiorPost.width + fitX;\n let offsetZF =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ -\n this.geo_superiorPost.width;\n let scaleYF =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n\n let moveRight = UI.rakeCutLeftHor - UI.overhangLeft;\n if (moveRight > 0) {\n offsetXL += moveRight;\n }\n\n let moveLeft = UI.rakeCutRightHor - UI.overhangRight;\n if (moveLeft > 0) {\n offsetXR -= moveLeft;\n }\n\n let posts: Array = [];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postFront.position.set(offsetXL, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, left: true },\n views: views,\n };\n postBack.position.set(offsetXL, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n posts.push(postBack);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZB = offsetZF;\n let scaleYB = scaleYF;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZB -= moveBack;\n scaleYB =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n }\n\n let postFront = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postFront.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postFront.position.set(offsetXR, 0, offsetZF);\n postFront.scale.setY(scaleYF);\n //this.scene.add(postFront);\n posts.push(postFront);\n\n let postBack = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n postBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: { ...userDataPos, right: true },\n views: views,\n };\n postBack.position.set(offsetXR, 0, offsetZB);\n postBack.scale.setY(scaleYB);\n //this.scene.add(postBack);\n posts.push(postBack);\n }\n\n for (let post of posts) {\n let boxPost = new Box3().setFromObject(post);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n let bracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n bracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n bracket.position.set(post.position.x, UI.eaveHeight, post.position.z);\n let height =\n post.scale.y * this.geo_superiorPost.height - UI.eaveHeight;\n let scaleY = height / this.geo_bracket.height;\n bracket.scale.setY(scaleY);\n this.scene.add(bracket);\n } else {\n this.scene.add(post);\n }\n }\n }\n public addPostOrBracketBack() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -this.totalBaySize / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = this.totalBaySize / (this.numberOfBracketsBack - 1);\n let cutoutLengthInExistingBoth =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketsBack - 1);\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue -\n (this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK);\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketsBack - 1);\n } else {\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX += cutoutLengthInExistingBoth - extraWalWidth;\n bracketDistance =\n (this.APP.sldExistingLength.currentValue + extraWalWidth * 2) /\n (this.numberOfBracketsBack - 1);\n }\n }\n\n for (let i = 0; i < this.numberOfBracketsBack; i++) {\n if (i == this.numberOfBracketsBack - 1) {\n last = true;\n }\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let bracketOffsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n bracketOffsetZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n scalePostY =\n (UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n (UI.braketHeight + this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, bracketOffsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n\n let isIntersect = false;\n //let isCutoutInterset = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n }\n }\n\n if (isIntersect) {\n if (\n i == 0 &&\n (this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n last &&\n (this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketsBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData.position.back &&\n x.userData.position.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -this.totalBaySize / 2;\n let offsetXR = this.totalBaySize / 2;\n\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n let bracketDistance =\n (this.APP.sldExistingLength2.currentValue - extraWalWidth) /\n (this.numberOfBracketCutout - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n this.APP.sldExistingLength2.currentValue /\n (this.numberOfBracketCutout - 1);\n }\n\n // Add for left side\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL;\n if (first) {\n } else if (last) {\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n first = true;\n\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n let postOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n let bracketOffsetZ =\n -UI.existingWidth1 / 2 - this.extraOffsetZ + UI.existingWidth1;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) / this.geo_superiorPost.height;\n let scaleBracketY =\n (this.utils.getHeightByAngle(\n UI.braketHeight,\n UI.existingWidth1,\n UI.patiosPitch,\n -1\n ) +\n this.houseBeamHeight()) /\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n public addSuperiorBeam(userDataPos: any) {\n let offsetX = -this.totalBaySize / 2 - UI.overhangLeft;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = UI.eaveHeight + this.getBracketHeight(UI.span);\n offsetZ = UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n if (UI.multiSpan > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n //Add house beam\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.houseBeamHeight();\n\n offsetZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue;\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n offsetX += UI.overhangLeft;\n beamLength -= UI.overhangLeft;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue;\n } else {\n beamLength =\n this.totalBaySize +\n UI.overhangLeft +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n beamLength -= UI.overhangRight;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetX +=\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n CONST.EAVE_OFFSET_BACK;\n beamLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n CONST.EAVE_OFFSET_BACK * 2;\n }\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY = UI.eaveHeight + this.getBracketHeight(UI.span + UI.multiSpan);\n offsetZ =\n UI.multiSpan +\n UI.span -\n UI.existingWidth1 / 2 -\n this.geo_superiorBeam.width -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.cutout) {\n offsetY =\n UI.eaveHeight +\n this.getBracketHeight(UI.existingWidth1) +\n this.houseBeamHeight();\n offsetZ = UI.existingWidth1 - UI.existingWidth1 / 2 - this.extraOffsetZ;\n beamLength =\n this.APP.sldExistingLength2.currentValue -\n this.APP.existingWallManager.geo_existingWallW1.width;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n }\n\n beamLength +=\n UI.overhangLeft +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n offsetX =\n this.totalBaySize / 2 +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue -\n CONST.EAVE_OFFSET_BACK;\n } else {\n offsetX =\n this.totalBaySize / 2 +\n UI.overhangRight -\n this.APP.sldExistingLength2.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width;\n }\n\n offsetX -=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n beamLength +=\n UI.overhangRight +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n beamLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2 -\n this.APP.existingWallManager.geo_existingWallW1.width -\n CONST.EAVE_OFFSET_BACK +\n this.geo_bracket.width +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n }\n //rake cut\n if (\n (UI.multiSpan <= 0 && userDataPos.front) ||\n (UI.multiSpan > 0 && userDataPos.multiSpan)\n ) {\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n offsetX += this.beamLeftCutSizeInfo.l;\n beamLength -= this.beamLeftCutSizeInfo.l;\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n offsetX += UI.rakeCutLeftHor;\n beamLength -= UI.rakeCutLeftHor;\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n beamLength -= this.beamRightCutSizeInfo.l;\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n beamLength -= UI.rakeCutRightHor;\n }\n }\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n offsetX += fitX;\n if (userDataPos.front || userDataPos.multiSpan) {\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoBeamJoint\n );\n } else {\n this.cutStandardBeamToEqualLengthBeam(\n userDataPos.back || userDataPos.cutout\n ? this.geo_superiorHouseBeam\n : this.geo_superiorBeam,\n userDataPos.back || userDataPos.cutout\n ? this.geo_houseBeamEndCap\n : this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n userDataPos.back || userDataPos.cutout\n ? this.geoHouseBeamJoint\n : this.geoBeamJoint\n );\n }\n\n //Add one more beam cutout right\n if (userDataPos.cutout && UI.existingType == BUILDING_SIDE.BOTH) {\n offsetX = UI.totalBayLength / 2 - beamLength;\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorHouseBeam,\n this.geo_houseBeamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoHouseBeamJoint\n );\n }\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2 + fitX;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n private addBeamAngleRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.ANGLE &&\n UI.rakeCutRightType != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let offsetZ =\n UI.multiSpan + UI.span - UI.existingWidth1 / 2 - this.extraOffsetZ;\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamLeftCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutLeftVer + this.beamLeftCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamLeftCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutLeftHor / UI.rakeCutLeftVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n -this.totalBaySize / 2 - UI.overhangLeft + this.beamLeftCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(rotX, rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n let beamLength = this.beamRightCutSizeInfo.m;\n\n //beam lenght can not go behind existing wall\n if (\n UI.rakeCutRightVer + this.beamRightCutSizeInfo.k_ >\n this.MANAGER.patiosLength\n ) {\n beamLength -= this.beamRightCutSizeInfo.b;\n }\n\n let scaleZ = beamLength / this.geo_beamRakecutLeft.length;\n\n let offsetXStart = 0;\n let offsetXEnd = beamLength;\n let rotY = Math.atan(UI.rakeCutRightHor / UI.rakeCutRightVer);\n let rotX = this.utils.degreesToRadians(UI.patiosPitch);\n\n let offsetX =\n this.totalBaySize / 2 + UI.overhangRight - this.beamRightCutSizeInfo.l;\n const mesh = new Mesh(\n this.geo_beamRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n mesh.scale.setZ(scaleZ);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n -(offsetXEnd + this.geo_beamEndCap.length / 2 - 2)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -this.geo_beamEndCap.width / 2,\n 0,\n offsetXStart - this.geo_beamEndCap.length / 2 + 2\n );\n capR.rotateY(Math.PI);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n angle: true,\n };\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n beamGroup.rotation.set(rotX, -rotY, 0);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n this.scene.add(beamGroup);\n }\n }\n private addBeamStepRakecut() {\n if (\n UI.rakeCutLeftType != RAKECUT_TYPE.STEP &&\n UI.rakeCutRightType != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let offsetXL = -UI.totalBayLength / 2 - UI.overhangLeft;\n let offsetXR = UI.totalBayLength / 2 + UI.overhangRight;\n\n let offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan,\n UI.patiosPitch,\n -1\n );\n\n if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutLeftVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n\n let beamLength = UI.rakeCutLeftHor + this.geo_superiorPost.width;\n if (UI.rakeCutLeftHor < UI.overhangLeft) {\n beamLength = UI.overhangLeft + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutLeft.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutLeft.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n beamLength + this.geo_beamEndCap.length / 2 - 2,\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXL -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXL += fitZ;\n }\n beamGroup.position.set(offsetXL, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n this.scene.add(beamGroup);\n }\n if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n let offsetZ =\n UI.span + UI.multiSpan - this.extraOffsetZ - UI.existingWidth1 / 2;\n let moveBack = UI.rakeCutRightVer;\n if (moveBack > 0) {\n offsetZ -= moveBack;\n offsetY = this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.span + UI.multiSpan - moveBack,\n UI.patiosPitch,\n -1\n );\n }\n\n let beamLength = UI.rakeCutRightHor + this.geo_superiorPost.width;\n if (UI.rakeCutRightHor < UI.overhangRight) {\n beamLength = UI.overhangRight + this.geo_superiorPost.width;\n }\n\n let scaleX = beamLength / this.geo_beamStepRakecutRight.length;\n\n let beam = new Mesh(\n this.geo_beamStepRakecutRight.geometry,\n MaterialManager.Instance().BEAM\n );\n beam.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n beam.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n -(beamLength + this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n -(this.geo_beamEndCap.length / 2 - 2),\n 0,\n -this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n views: views,\n };\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXR -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetXR += fitZ;\n }\n beamGroup.position.set(offsetXR, offsetY, offsetZ);\n //beamGroup.rotateY(Math.PI);\n if (UI.beamType == 0) {\n beamGroup.add(beam, capL, capR);\n } else {\n beamGroup.add(beam);\n }\n\n this.scene.add(beamGroup);\n }\n }\n public getBracketHeight(offset): number {\n let angle = UI.patiosPitch;\n return (\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() -\n this.utils.tan(angle) * offset\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, ArrowHelper, BufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { FIT_DIMENSION, FIT_DIMENSION_FAR, FIT_FLYOVER_BRAKET_ON_ROOF, PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n private dimensionPatiosPlanLeftOverHang: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosFlyOverBraketHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, flyOverManager: PatiosFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n \n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosFlyOverBraketHeightDim = new Group();\n this.dimensionPatiosFlyOverBraketHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFlyOverBraketHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMiddle.userData = { type: GEOMETRY_TYPE.DIMENSION };\n //this.dimensionPlanMiddle.rotation.set(-Math.PI / 2, 0, 0);\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosPlanLeftOverHang = new Group();\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosPlanBottom,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n this.dimensionPlanMiddle,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLeftLeft,\n this.dimensionPlanMidleLeft\n );\n loader.load( environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n \n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if(this.APP.patiosManager && this.APP.patiosManager.patiosGroup){\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosFlyOverBraketHeightDim,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosPlanLeftOverHang\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosFlyOverBraketHeightDim.children = this.dimensionPatiosFlyOverBraketHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPatiosPlanLeftOverHang.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionFlyOverBraketHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.drawDimensionMidle();\n //this.drawDimensionPatiosPlanLeftOverHang();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n\n this.APP.dimensionManager.draw();\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height\n }\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2 + 500;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, 0) };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n text.position.set(-200, 0, 500);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX + 500, 0, offsetZ);\n }\n else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX - 500, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2 - this.APP.sldExistingWidth1.currentValue/2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n let dir = new Vector3(0,0,1);\n let arrow = new ArrowHelper(dir, origin, 1000);\n arrow.userData = { type: \"ARROW\", views: [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }] };\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + ' degree';\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n \n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, Math.PI / 2, 0) };\n text.position.setZ(500);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n\n //console.log(dim);\n }\n\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private drawDimensionFlyOverBraketHeightDim(){\n const bracketHeight =(UI.braketHeight + this.MANAGER.columnAndBeamManager.houseBeamHeight())\n const offsetZBackPos = - UI.existingWidth1 / 2 - this.MANAGER.columnAndBeamManager.extraOffsetZ - FIT_DIMENSION_FAR;\n\n this.dimensionPatiosFlyOverBraketHeightDim.position.set(0, UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfExistingRoof() - FIT_FLYOVER_BRAKET_ON_ROOF + bracketHeight / 2, offsetZBackPos);\n\n let textStr = this.utils.getDimensionValue(bracketHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: bracketHeight,\n container: this.dimensionPatiosFlyOverBraketHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n textRotation: new Vector3(Math.PI, 0, 0),\n labelType: DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosFlyOverBraketHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionLowerHeightDim(){\n const frontPostHeight = UI.eaveHeight + this.MANAGER.columnAndBeamManager.getBracketHeight(UI.span + UI.multiSpan)\n const offsetZFrontPos = UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.MANAGER.columnAndBeamManager.extraOffsetZ + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, frontPostHeight / 2, offsetZFrontPos);\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.box.max.z + this.dimensionDistance2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance3 - this.APP.sldExistingWidth1.currentValue/2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // offsetZ += 500;\n // }\n //}\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n //this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n // let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n // cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n // cap2.position.setX(offsetX);\n // this.dimensionPatiosPlanBottom.add(cap2);\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true } }\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = -this.APP.dialogEditBay.totalBaySize/2 + this.APP.sldLeftCutHorizontal.currentValue/2 - this.APP.sldLeftOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL)\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = this.APP.dialogEditBay.totalBaySize/2 - this.APP.sldRightCutHorizontal.currentValue/2 + this.APP.sldRightOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500-200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL)\n }\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2 \n - this.APP.sldExistingWidth1.currentValue/2 \n - this.APP.existingWallManager.geo_existingWallL1.width \n - this.APP.eaveManager.backOverhang;\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n //let offsetDimensionX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n //}\n \n //if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n //this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n // let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2 \n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldMultiSpan.currentValue);\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let extraDistance = 0;\n //----Rake cut\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n \n let offsetZ = dimLength/2 + UI.multiSpan / 2 + this.APP.sldFrontOverhang.currentValue - this.APP.sldRightCutVertical.currentValue/2;\n \n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3( 0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL)\n }\n //----End rake cut\n \n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI,\"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT, extraDistance);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n dim.userData['position'] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n \n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let height = this.utils.getHeightByAngle(UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetY = height/2;\n \n\n //--------\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height - (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n // let dimOffsetY = this.APP.sldBuildingHeight.currentValue - (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n // let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue / 2 - 290;\n // if(this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue){\n // dimOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.dimensionDistance2;\n // }\n this.dimensionPatiosRightLeft.position.set(0,this.dimensionPatiosLeftRight.position.y,this.dimensionPatiosLeftRight.position.z);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() { \n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n // if (overhangValue == 0)\n // return;\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n\n if(overhangValue == 0){\n groupDim.children = groupDim.children.filter(el => el.userData?.groupType != labelType)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z + fitZ))\n textCover.position.set(pos.x , pos.y, pos.z);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosPlanLeftOverHang.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n\n ]){\n if(!dim.userData.views){\n // console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n\n private getGeometryFromBufferGeometry(bufferGeo: BufferGeometry) {\n let points: Vector3[] = [];\n let verties = bufferGeo.getAttribute('position').array;\n for (let i = 0; i < verties.length; i += 3) {\n points.push(new Vector3(verties[i], verties[i + 1], verties[i+2]));\n }\n\n return new Geometry().setFromPoints(points);\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n \n //this.APP.sldSpan.addAction(this.eventHandleId);\n //this.APP.sldMultiSpan.addAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.addAction(this.eventHandleId);\n //this.APP.sldExistingLength.addAction(this.eventHandleId);\n //this.APP.sldExistingLength2.addAction(this.eventHandleId);\n //this.APP.sltExistingType.addAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.addAction(this.eventHandleId);\n //this.APP.dialogEditBay.addAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.addAction(this.eventHandleId);\n //this.APP.sldRightOverhang.addAction(this.eventHandleId);\n //this.APP.sldBackOverhang.addAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.addAction(this.eventHandleId);\n //this.APP.sltRoofPitch.addAction(this.eventHandleId);\n }\n private unregisterEvent(): void{\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.APP.sldSpan.removeAction(this.eventHandleId);\n //this.APP.sldMultiSpan.removeAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength2.removeAction(this.eventHandleId);\n //this.APP.sltExistingType.removeAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.removeAction(this.eventHandleId);\n //this.APP.dialogEditBay.removeAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.removeAction(this.eventHandleId);\n //this.APP.sldRightOverhang.removeAction(this.eventHandleId);\n //this.APP.sldBackOverhang.removeAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.removeAction(this.eventHandleId);\n //this.APP.sltRoofPitch.removeAction(this.eventHandleId);\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let height = this.utils.getHeightByAngle(UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetY = height/2;\n dimension.position.setY(dimOffsetY);\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n //let dimOffsetY = this.APP.sldBuildingHeight.currentValue / 2;\n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n // let offsetDimensionZ = this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // - this.APP.sldExistingWidth1.currentValue / 2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n // dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height - (this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue));\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.dimensionPatiosLeftRight.position.y;\n dimension.position.setY(dimOffsetY);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport {\n BUILDING_SIDE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport { Box3, Group, Vector3 } from \"three\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { Printing2DGeometry } from \"../models\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { ColumnAndBeamManager } from \"./column-and-beam.manager\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { RoofManager } from \"./roof.manager\";\n// import { environment } from 'src/environments/environment';\n\nexport class PatiosFlyOverManager implements PatiosManager {\n public columnAndBeamManager: ColumnAndBeamManager;\n public roofManager: RoofManager;\n private APP: AppComponent;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n public dimensionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n this.patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndBeamManager = new ColumnAndBeamManager(app, this);\n this.dimensionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndBeamManager.optimize(),\n this.dimensionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndBeamManager.load();\n this.dimensionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsBack = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {}\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimensionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimensionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndBeamManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndBeamManager.load(),\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimensionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import {\n BoxBufferGeometry,\n BufferGeometry,\n Color,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n MeshLambertMaterial,\n Object3D,\n Plane,\n Vector3,\n} from \"three\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"../../app.config\";\nimport { Util } from \"../utils\";\n// import { AppComponent } from \"../../app.component\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n PANEL_DIRECTION,\n RAKECUT_TYPE,\n} from \"src/app/app.constants\";\nimport HighLightBox from \"src/app/models/HighlightBox\";\nimport { CSG } from \"three-csg-ts\";\nimport { PatiosFlyOverManager } from \".\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBase: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private roofGroup: Group;\n\n private objectSizeChangedHandle: any;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n constructor(app: AppComponent, flyOverManager: PatiosFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = new Group();\n flyOverManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve) => {\n this.geo_RoofPanel = this.geometryManager.getRoofSheetPanel();\n this.geo_RoofPanel.geometry.translate(\n this.geo_RoofPanel.width / 2 + 2,\n this.geo_RoofPanel.height / 2 - 1,\n this.geo_RoofPanel.length / 2\n );\n\n this.geo_roofPanelBase = this.geometryManager.getRoofBase();\n this.geo_roofPanelBase.geometry.translate(\n this.geo_roofPanelBase.width / 2,\n this.geo_roofPanelBase.height / 2,\n this.geo_roofPanelBase.length / 2\n );\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0);\n\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(\n -this.zFlashingRakecutRightGeo.length,\n -3,\n 0\n );\n\n //Barge capping\n\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(\n this.geo_roofPanelBargeCappingLeft.width / 2 - 3,\n this.geo_roofPanelBargeCappingLeft.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_roofPanelBargeCappingLeft.length / 2\n );\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingRight.geometry.translate(\n -this.geo_roofPanelBargeCappingRight.width / 2 + 3,\n this.geo_roofPanelBargeCappingRight.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_roofPanelBargeCappingRight.length / 2\n );\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_roofPanelBargeCappingBack.length / 2,\n this.geo_roofPanelBargeCappingBack.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_roofPanelBargeCappingBack.width / 2 - 3\n );\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.geo_gutterBack.length / 2,\n -20,\n this.geo_gutterBack.width / 2\n );\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n this.gutterRakecutLeftInfo.length / 2,\n -20,\n this.gutterRakecutLeftInfo.width / 2\n );\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(\n -this.gutterRakecutRightInfo.length / 2,\n -20,\n this.gutterRakecutRightInfo.width / 2\n );\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_bargeCutoutLeftHor.length / 2,\n this.geo_bargeCutoutLeftHor.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_bargeCutoutLeftHor.width / 2\n );\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_bargeCutoutRightHor.length / 2,\n this.geo_bargeCutoutRightHor.height / 2 -\n (this.APP.sltDripBarge.currentValue ? 9 : 1),\n this.geo_bargeCutoutRightHor.width / 2\n );\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE\n )\n );\n\n //test\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"RAKECUT\")\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTGUTTER\")\n );\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.addRoof();\n this.addCutout();\n if (UI.rakeCutLeftType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft),\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: -(UI.totalBayLength / 2 + UI.overhangLeft) + 300,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.LEFT },\n });\n }\n if (UI.rakeCutRightType == 0) {\n new HighLightBox(this.roofGroup, {\n min: {\n x: UI.totalBayLength / 2 + UI.overhangRight - 300,\n y: 0,\n z: UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront,\n },\n max: {\n x: UI.totalBayLength / 2 + UI.overhangRight,\n y: 0,\n z:\n UI.span + UI.multiSpan + UI.overhangBack + UI.overhangFront - 300,\n },\n userData: { side: BUILDING_SIDE.RIGHT },\n });\n }\n\n // this.addAngleRakeCut();\n //Add angle rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n this.addAngleRakeCut(BUILDING_SIDE.LEFT);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n this.addAngleRakeCut(BUILDING_SIDE.RIGHT);\n }\n this.addStepRakeCut();\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [\n clipingPlaneLeft,\n clipingPlaneRight,\n ];\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.roofWidth = width;\n this.roofLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width / this.geo_RoofPanel.width);\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n let panelDirectionOfset = 1;\n if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT\n ) {\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.geo_RoofPanel.width;\n panelDirectionOfset = -1;\n } else if (\n this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT\n ) {\n offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n }\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, [this.csg_cutoutLeft]);\n this.addRoofSheetingBase(offsetX, last, [this.csg_cutoutLeft]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == 2 &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, [this.csg_cutoutRight]);\n this.addRoofSheetingBase(offsetX, last, [this.csg_cutoutRight]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n } else if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue == 3 &&\n this.MANAGER.cutoutCondition\n ) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n this.addRoofSheetingBase(offsetX, last, [\n this.csg_cutoutLeft,\n this.csg_cutoutRight,\n ]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n } else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheeting(offsetX, null);\n this.addRoofSheetingBase(offsetX, last, []);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n this.addZFlashing();\n this.addZFlashingAngleRakeCut();\n this.addZFlashingStepRakeCut();\n this.addBargeCapping();\n this.addBargeStepRakecut();\n this.addGutter();\n this.addGutterStepRakecut();\n this.addGutterAngleRakecut();\n this.showPanelOutline();\n //this.getOutLines();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((x) => x.userData.type == \"CUTOUT\")\n );\n\n let offsetX =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallL2.width +\n 100;\n let offsetY = 0;\n let offsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.APP.existingWallManager.geo_existingWallL2.width -\n this.APP.sldBackOverhang.currentValue;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ =\n (this.APP.sldExistingWidth1.currentValue +\n this.APP.sldBackOverhang.currentValue +\n 5000) /\n 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (\n this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutLeft = new Mesh(\n this.geo_cutoutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n this.mesh_CutoutRight = new Mesh(\n this.geo_cutoutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_CutoutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTOUT\",\n };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n private addAngleRakeCut(cutSide: BUILDING_SIDE) {\n let offsetXL =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = -100;\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n // + this.APP.sldBackOverhang.currentValue\n this.extraOffsetZ -\n this.APP.sldExistingWidth1.currentValue / 2;\n //\n let angle;\n let _rotY;\n if (cutSide == BUILDING_SIDE.LEFT) {\n angle = Math.atan(\n this.APP.sldLeftCutHorizontal.currentValue /\n this.APP.sldLeftCutVertical.currentValue\n );\n _rotY = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n }\n if (cutSide == BUILDING_SIDE.RIGHT) {\n angle = Math.atan(\n this.APP.sldRightCutHorizontal.currentValue /\n this.APP.sldRightCutVertical.currentValue\n );\n _rotY = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n }\n const _offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let _angle = (Math.PI - _rotY) / 2;\n\n let hypotenuse = Math.sqrt(\n Math.pow(this.MANAGER.patiosLength, 2) +\n Math.pow(this.MANAGER.patiosWidth, 2)\n );\n let scaleLength = hypotenuse / 1000;\n let scaleWidth =\n (this.MANAGER.patiosLength * this.MANAGER.patiosWidth) /\n hypotenuse /\n 1000;\n //\n if (cutSide === BUILDING_SIDE.LEFT) {\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutLeft.rotateY(angle);\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n // this.APP.scene.add(this.mesh_rakecutLeft);\n\n //cut gutter csg\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterLeft1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft1.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft1.rotation.set(0, _angle, 0);\n this.meshCutGutterLeft1.updateMatrix();\n this.csgCutGutterLeft1 = CSG.fromMesh(this.meshCutGutterLeft1);\n // this.APP.scene.add(this.meshCutGutterLeft1);\n\n this.meshCutGutterLeft2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterLeft2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterLeft2.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterLeft2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterLeft2.rotation.set(0, _angle + Math.PI, 0);\n this.meshCutGutterLeft2.updateMatrix();\n this.csgCutGutterLeft2 = CSG.fromMesh(this.meshCutGutterLeft2);\n // this.APP.scene.add(this.meshCutGutterLeft2);\n }\n if (cutSide === BUILDING_SIDE.RIGHT) {\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(scaleWidth, 5, scaleLength);\n this.mesh_rakecutRight.rotateY(-angle);\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n // this.APP.scene.add(this.mesh_rakecutRight);\n\n //cut gutter\n let scaleZ = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n let scaleX = (this.APP.dialogEditBay.totalBaySize + 200) / 500;\n this.meshCutGutterRight1 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight1.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight1.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight1.rotation.set(0, -_angle, 0);\n this.meshCutGutterRight1.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight1.updateMatrix();\n this.csgCutGutterRight1 = CSG.fromMesh(this.meshCutGutterRight1);\n\n this.meshCutGutterRight2 = new Mesh(\n this.geoCutGutter,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.meshCutGutterRight2.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"CUTGUTTER\",\n };\n this.meshCutGutterRight2.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n 0,\n _offsetZ\n );\n this.meshCutGutterRight2.scale.set(scaleX, 1, scaleZ);\n this.meshCutGutterRight2.rotation.set(0, -(_angle + Math.PI), 0);\n this.meshCutGutterRight2.updateMatrix();\n this.csgCutGutterRight2 = CSG.fromMesh(this.meshCutGutterRight2);\n }\n }\n private addStepRakeCut() {\n let offsetXL =\n -this.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetXR =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n let offsetY = -100; //this.APP.sldExistingWallHeight.currentValue;\n\n let offsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue -\n this.extraOffsetZ -\n this.APP.sldExistingWidth1.currentValue / 2;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutLeft = new Mesh(\n this.geo_rakecutLeft,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutLeft.position.set(\n offsetXL + this.APP.sldLeftCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldLeftCutVertical.currentValue\n );\n this.mesh_rakecutLeft.scale.set(10, 10, 10);\n\n //this.APP.scene.add(this.mesh_rakecutLeft);\n\n this.mesh_rakecutLeft.updateMatrix();\n this.csg_rakecutLeft = CSG.fromMesh(this.mesh_rakecutLeft);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.mesh_rakecutRight = new Mesh(\n this.geo_rakecutRight,\n new MeshLambertMaterial({\n color: \"red\",\n transparent: true,\n opacity: 0.5,\n })\n );\n this.mesh_rakecutRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: \"RAKECUT\",\n };\n\n this.mesh_rakecutRight.position.set(\n offsetXR - this.APP.sldRightCutHorizontal.currentValue,\n offsetY,\n offsetZ - this.APP.sldRightCutVertical.currentValue\n );\n this.mesh_rakecutRight.scale.set(10, 10, 10);\n\n //this.APP.scene.add(this.mesh_rakecutRight);\n\n this.mesh_rakecutRight.updateMatrix();\n this.csg_rakecutRight = CSG.fromMesh(this.mesh_rakecutRight);\n }\n }\n public getOutLines(): Printing2DGeometry {\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let gutterGroupObjs = this.roofGroup.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n // if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add(line);\n // // let boxPost = new Box3().setFromObject(o);\n // // console.log('😋: RoofManager -> getOutLines -> boxPost', boxPost.min.distanceTo(boxPost.max));\n // }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views,\n });\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false) return;\n\n let objs = this.roofGroup.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n\n let offsetLeft =\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue -\n this.MANAGER.patiosGroup.position.x;\n let offsetRight =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue +\n this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 60\n );\n\n //let outlineBox = new Box3().setFromBufferAttribute(outlineGeo.getAttribute('position') as Buffer);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().MESH_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n return simplifiedGeo;\n }\n\n public addRoof() {\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PATIOS,\n };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldBackOverhang.currentValue +\n this.extraOffsetZ\n );\n\n this.roofGroup.position.setY(offsetY);\n this.roofGroup.position.setZ(offsetZ);\n this.roofGroup.rotateX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(-offsetX);\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroup.position.setX(offsetX);\n }\n\n this.scene.add(this.roofGroup);\n }\n public addRoofSheeting(offsetX: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n offsetSheet = 30;\n } else {\n offsetSheet = 12;\n }\n\n let scaleZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_RoofPanel.length;\n\n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL,\n views: views,\n };\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n offsetY,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n public addRoofSheetingBase(offsetX: number, isLast: boolean, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(\n this.geo_roofPanelBase.geometry,\n MaterialManager.Instance().ROOF_BASE\n );\n let offsetZ = 0;\n let scaleZ =\n (this.APP.sldSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue -\n 60) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ROOF_PANEL_BASE,\n views: views,\n };\n if (isLast) {\n mesh.userData.last = true;\n }\n\n let cutoutCondition =\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition =\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n if (cutoutCondition || rakeCutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(\n offsetX + this.MANAGER.patiosGroup.position.x,\n 0,\n offsetZ + this.roofGroup.position.z\n );\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(csgObj),\n mesh.matrix\n );\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft),\n mesh.matrix\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(\n CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight),\n mesh.matrix\n );\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroup.add(meshResult);\n } else {\n this.roofGroup.add(mesh);\n }\n }\n private addBargeCapping() {\n let mesh: Mesh;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth;\n let offsetXL2 = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n let offsetXR1 =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n let offsetXR2 =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n let bargeBackLength = this.roofWidth;\n let scaleCutoutVer =\n this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue +\n this.geo_roofPanelBargeCappingLeft.width,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZLeft =\n this.utils.getHypotenuseByCos(\n this.roofLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight =\n this.utils.getHypotenuseByCos(\n this.roofLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n let offsetY = 0;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n // cutout\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeLeftLength -= this.APP.sldExistingWidth1.currentValue;\n scaleZLeft =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeCutoutHorLength =\n this.APP.sldExistingLength2.currentValue +\n this.APP.sldLeftOverhang.currentValue -\n extraWallWidth;\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetXB += this.APP.sldExistingLength2.currentValue;\n offsetXL1 =\n -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) +\n this.APP.sldExistingLength2.currentValue;\n bargeBackLength -= this.APP.sldExistingLength2.currentValue;\n bargeCutoutHorLength += extraWallWidth;\n } else {\n bargeBackLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n offsetXB += this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n\n offsetZL += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXL1 =\n -this.APP.sldExistingLength.currentValue / 2 - extraWallWidth;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n bargeBackLength -= this.APP.sldLeftOverhang.currentValue;\n offsetXL1 +=\n this.APP.sldLeftOverhang.currentValue -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n offsetXB += this.APP.sldLeftOverhang.currentValue;\n\n //cutout Hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutLeftHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutLeftHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout Ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n bargeRightLength -= this.APP.sldExistingWidth1.currentValue;\n let bargeCutoutHorLength =\n this.APP.sldExistingLength2.currentValue +\n this.APP.sldRightOverhang.currentValue -\n extraWallWidth;\n //scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue + extraWallWidth) / this.geo_roofPanelBargeCappingBack.length;\n //bargeBackLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n scaleZRight =\n this.utils.getHypotenuseByCos(\n this.roofLength - this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingRight.length;\n offsetZR += this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n //scaleXB = (this.roofWidth - this.APP.sldExistingLength2.currentValue) / this.geo_roofPanelBargeCappingBack.length;\n bargeBackLength -= this.APP.sldExistingLength2.currentValue;\n offsetXR1 -= extraWallWidth;\n\n bargeCutoutHorLength += extraWallWidth;\n } else {\n bargeBackLength -=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetXR1 =\n this.APP.sldExistingLength.currentValue / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n bargeCutoutHorLength =\n (this.roofWidth -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n\n bargeBackLength -= this.APP.sldRightOverhang.currentValue;\n offsetXR1 -=\n this.APP.sldRightOverhang.currentValue -\n EXISTING_BUILDING_CONFIG.BARGE_ROOF_OFFSET_X;\n\n //cutout hor\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldExistingWidth1.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n mesh = new Mesh(\n this.geo_bargeCutoutRightHor.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, offsetZ);\n mesh.scale.setX(\n bargeCutoutHorLength / this.geo_bargeCutoutRightHor.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //cutout ver\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR1, offsetY, 0);\n mesh.scale.setZ(scaleCutoutVer);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sldExistingLength2.currentValue > 0 &&\n this.MANAGER.cutoutCondition &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetXB = -this.APP.sldExistingLength.currentValue / 2 - extraWallWidth;\n //scaleXB = (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2 + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK*2)/this.geo_roofPanelBargeCappingBack.length;\n bargeBackLength =\n this.APP.sldExistingLength.currentValue + extraWallWidth * 2;\n }\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeLeftLength -= this.APP.sldLeftCutVertical.currentValue;\n }\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n bargeRightLength -= this.APP.sldRightCutVertical.currentValue;\n }\n\n scaleZLeft =\n this.utils.getHypotenuseByCos(\n bargeLeftLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n scaleZRight =\n this.utils.getHypotenuseByCos(\n bargeRightLength,\n this.APP.sltRoofPitch.currentValue\n ) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXL2, offsetY, offsetZL);\n mesh.scale.setZ(scaleZLeft);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //right\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.set(offsetXR2, offsetY, offsetZR);\n mesh.scale.setZ(scaleZRight);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n\n //back\n mesh = new Mesh(\n this.geo_roofPanelBargeCappingBack.geometry,\n MaterialManager.Instance().BARGE\n );\n mesh.position.setX(offsetXB);\n mesh.scale.setX(\n bargeBackLength / this.geo_roofPanelBargeCappingBack.length\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n this.roofGroup.add(mesh);\n }\n // private addBargeAngleRakecut() {\n // if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE && this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE) {\n // return;\n // }\n\n // let offsetY = 0;\n // let offsetZ = (this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // + this.APP.sldBackOverhang.currentValue) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n // let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n // ];\n\n // if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n // let length = Math.sqrt(Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) + Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2));\n // let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n // let rotY = Math.atan(this.APP.sldLeftCutHorizontal.currentValue / this.APP.sldLeftCutVertical.currentValue);\n\n // let offsetX = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue + this.APP.sldLeftCutHorizontal.currentValue;\n // let mesh = new Mesh(this.geo_bargeRakecutLeft.geometry, MaterialManager.Instance().BARGE);\n // mesh.position.set(offsetX, offsetY, offsetZ);\n // mesh.scale.setZ(scaleZ);\n // mesh.rotateY(rotY);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // this.roofGroup.add(mesh);\n // }\n // if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n // let length = Math.sqrt(Math.pow(this.APP.sldRightCutVertical.currentValue, 2) + Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2));\n // let scaleZ = length / this.geo_bargeRakecutLeft.length;\n\n // let rotY = Math.atan(this.APP.sldRightCutHorizontal.currentValue / this.APP.sldRightCutVertical.currentValue);\n\n // let offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldRightCutHorizontal.currentValue;\n // let mesh = new Mesh(this.geo_bargeRakecutRight.geometry, MaterialManager.Instance().BARGE);\n // mesh.position.set(offsetX, offsetY, offsetZ);\n // mesh.scale.setZ(scaleZ);\n // mesh.rotateY(-rotY);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // this.roofGroup.add(mesh);\n // }\n // }\n private addGutterStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n let mesh: Mesh;\n\n let offsetXLL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetXLR = offsetXLL + this.APP.sldLeftCutHorizontal.currentValue;\n let offsetXRR = this.totalBaySize / 2 + UI.overhangRight;\n let offsetXRL = offsetXRR - this.APP.sldRightCutHorizontal.currentValue;\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetLZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n 50) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let offsetRZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n 50) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let gutterLengthL = this.APP.sldLeftCutHorizontal.currentValue;\n let gutterLengthR = this.APP.sldRightCutHorizontal.currentValue;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleX = gutterLengthL / this.geo_gutterBack.length;\n mesh = new Mesh(\n this.geo_gutterBack.geometry,\n MaterialManager.Instance().GUTTER\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n mesh.position.set(offsetXLL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let endCapMesh = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh.position.set(offsetXLL, 0, 0);\n\n let endCapMesh2 = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh2.position.set(offsetXLR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(0, offsetY, offsetLZ);\n gutterGroup.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n this.roofGroup.add(gutterGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let scaleX = gutterLengthR / this.geo_gutterBack.length;\n mesh = new Mesh(\n this.geo_gutterBack.geometry,\n MaterialManager.Instance().GUTTER\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n mesh.position.set(offsetXRL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let endCapMesh = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh.position.set(offsetXRL, 0, 0);\n\n let endCapMesh2 = new Mesh(\n this.geo_gutterCap.geometry,\n MaterialManager.Instance().GUTTER\n );\n endCapMesh2.position.set(offsetXRR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(0, offsetY, offsetRZ);\n gutterGroup.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n this.roofGroup.add(gutterGroup);\n }\n }\n private addGutterAngleRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let exLength = 300;\n let rc_offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let rc_offsetXR =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n const rc_offsetZL =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetZR =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n const rc_offsetY = this.geo_roofPanelBase.height - 25;\n\n let rc_rotYL = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let rc_lengthL =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n let rc_rotYR = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let rc_lengthR =\n exLength +\n Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterRakecutGroupLeft = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n let gutterRakecutGroupRight = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroupLeft, gutterRakecutGroupRight);\n } else {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutLeftInfo,\n this.geo_gutterCap,\n rc_lengthL,\n new Vector3(rc_offsetXL, rc_offsetY, rc_offsetZL),\n new Vector3(0, -rc_rotYL, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterLeft2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterRakecutGroup = this.utils.createGutterGroup(\n this.gutterRakecutRightInfo,\n this.geo_gutterCap,\n rc_lengthR,\n new Vector3(rc_offsetXR, rc_offsetY, rc_offsetZR),\n new Vector3(0, rc_rotYR, 0),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight2,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterRakecutGroup);\n }\n }\n }\n private addBargeStepRakecut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n let offsetXL =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue;\n let offsetXR =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldLeftCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n this.APP.sldLeftCutVertical.currentValue /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingLeft.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n -offsetXL -\n CONST.BARGE_ROOF_OFFSET_X +\n this.APP.sldLeftCutHorizontal.currentValue,\n 0,\n offsetZ\n );\n bargeVer.scale.set(1, 1, scaleZ);\n\n this.roofGroup.add(bargeVer);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n let offsetZ = this.utils.getHypotenuseByCos(\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue,\n this.APP.sltRoofPitch.currentValue\n );\n let scaleZ =\n this.APP.sldRightCutVertical.currentValue /\n this.geo_roofPanelBargeCappingLeft.length;\n\n let bargeVer = new Mesh(\n this.geo_roofPanelBargeCappingRight.geometry,\n MaterialManager.Instance().BARGE\n );\n bargeVer.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: this.APP.sltDripBarge.currentValue\n ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING,\n views: views,\n };\n bargeVer.position.set(\n offsetXR -\n this.APP.sldRightCutHorizontal.currentValue +\n CONST.BARGE_ROOF_OFFSET_X,\n 0,\n offsetZ\n );\n bargeVer.scale.set(1, 1, scaleZ);\n this.roofGroup.add(bargeVer);\n }\n }\n public addGutter() {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue -\n CONST.GUTTER_ROOF_OFFSET_Z) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let gutterLength = this.roofWidth;\n let exLength = 300; //Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n //Rakecut\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue - exLength;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n offsetXL += this.APP.sldLeftCutHorizontal.currentValue;\n gutterLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue - exLength;\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n gutterLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE\n ) {\n let gutterMesh = new Mesh(\n this.geo_gutterBack.geometry,\n MaterialManager.Instance().GUTTER\n );\n gutterMesh.scale.setX(gutterLength / this.geo_gutterBack.length);\n gutterMesh.updateMatrix();\n let matrixBefore = gutterMesh.matrix.clone();\n\n gutterMesh.position.set(offsetXL, offsetY, offsetZ);\n gutterMesh.rotation.set(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n );\n gutterMesh.updateMatrix();\n\n let meshClipped = CSG.toMesh(\n CSG.fromMesh(gutterMesh).subtract(this.csgCutGutterLeft1),\n gutterMesh.matrix\n );\n meshClipped = CSG.toMesh(\n CSG.fromMesh(meshClipped).subtract(this.csgCutGutterRight1),\n gutterMesh.matrix\n );\n meshClipped.applyMatrix4(new Matrix4().getInverse(gutterMesh.matrix));\n meshClipped.applyMatrix4(matrixBefore);\n meshClipped.material = gutterMesh.material;\n\n let gutterGroup = this.utils.createGutterGroupWithMesh(\n meshClipped,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n false\n );\n\n this.roofGroup.add(gutterGroup);\n } else if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterBack,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n false,\n true,\n this.csgCutGutterLeft1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n } else if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterBack,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n false,\n this.csgCutGutterRight1,\n this.roofGroup\n );\n\n this.roofGroup.add(gutterGroup);\n } else {\n let gutterGroup = this.utils.createGutterGroup(\n this.geo_gutterBack,\n this.geo_gutterCap,\n gutterLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue),\n 0,\n 0\n ),\n views,\n 1,\n true,\n true\n );\n this.roofGroup.add(gutterGroup);\n }\n // let scaleX = gutterLength / this.geo_gutterBack.length;\n // mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n // mesh.position.set(offsetXL, 0, 0);\n // mesh.scale.setX(scaleX);\n\n // let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n // endCapMesh.position.set(offsetXL, 0, 0);\n\n // let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n // endCapMesh2.position.set(offsetXR, 0, 0);\n\n // let gutterGroup = new Group();\n // gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n // gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n // gutterGroup.position.set(0, offsetY, offsetZ);\n // gutterGroup.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n // this.roofGroup.add(gutterGroup);\n }\n public addZFlashing() {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let zFlashingLength = this.roofWidth;\n //Rakecut\n if (\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n offsetX += this.APP.sldLeftCutHorizontal.currentValue;\n // bargeLengthLeft -= this.APP.sldLeftCutVertical.currentValue;\n zFlashingLength -= this.APP.sldLeftCutHorizontal.currentValue;\n }\n if (\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE ||\n this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP\n ) {\n // bargeLengthRight -= this.APP.sldRightCutVertical.currentValue;\n zFlashingLength -= this.APP.sldRightCutHorizontal.currentValue;\n }\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n scale: mesh.scale,\n };\n this.roofGroup.add(mesh);\n }\n public addZFlashingAngleRakeCut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.ANGLE &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.ANGLE\n ) {\n return;\n }\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n const offsetY = this.geo_roofPanelBase.height - 25;\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n 50 -\n this.APP.sldLeftCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let rotY = Math.atan(\n this.APP.sldLeftCutVertical.currentValue /\n this.APP.sldLeftCutHorizontal.currentValue\n );\n let length = Math.sqrt(\n Math.pow(this.APP.sldLeftCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldLeftCutHorizontal.currentValue, 2)\n );\n\n let scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.rotation.set(0, -rotY, 0);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n let offsetX =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n 50 -\n this.APP.sldRightCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let rotY = Math.atan(\n this.APP.sldRightCutVertical.currentValue /\n this.APP.sldRightCutHorizontal.currentValue\n );\n let length = Math.sqrt(\n Math.pow(this.APP.sldRightCutVertical.currentValue, 2) +\n Math.pow(this.APP.sldRightCutHorizontal.currentValue, 2)\n );\n let scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingRakecutRightGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.rotation.set(0, rotY, 0);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n\n this.roofGroup.add(mesh);\n }\n }\n public addZFlashingStepRakeCut() {\n if (\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.STEP &&\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.STEP\n ) {\n return;\n }\n\n const offsetY = this.geo_roofPanelBase.height - 25;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS },\n ];\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n const offsetX =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldLeftCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const length = this.APP.sldLeftCutHorizontal.currentValue;\n const scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n this.roofGroup.add(mesh);\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n const offsetX =\n this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n const offsetZ =\n (this.APP.sldFrontOverhang.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.APP.sldRightCutVertical.currentValue) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const length = this.APP.sldRightCutHorizontal.currentValue;\n const scaleX = length / this.zFlashingGeo.length;\n\n let mesh = new Mesh(\n this.zFlashingRakecutRightGeo.geometry,\n MaterialManager.Instance().ZFLASHING\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.ZFLASHING,\n views: views,\n };\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n this.roofGroup.add(mesh);\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n\n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n public getRoofOffsetY() {\n return (\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geometryManager.getBeam().height +\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldBackOverhang.currentValue\n );\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged() {\n this.optimize().then(() => {\n this.load();\n });\n }\n public uiChanged(): void {\n this.load();\n }\n uiCHangedDefer() {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n BufferGeometry,\n Box3,\n Group,\n LineSegments,\n LineBasicMaterial,\n Plane,\n Vector3,\n BoxHelper,\n Geometry,\n BoxBufferGeometry,\n Object3D,\n} from \"three\";\nimport { Util } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"../../app.config\";\nimport {\n GeometryInfo,\n Printing2DGeometry,\n Printing2DLine,\n Printing2DGeometryType,\n Print2DView,\n ViewType,\n LineType,\n} from \"../models\";\nimport { PatiosFreeStandingManager } from \".\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndPurlinManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private eventHandleId: any;\n private totalBaySize: number;\n private frontPostHeight: number;\n\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroup: Group;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n constructor(app: AppComponent, manager: PatiosFreeStandingManager) {\n this.APP = app;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = manager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroup.children = [];\n\n // this.outlineGroup = new Group();\n // this.outlineGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.MESH_OUTLINE };\n // this.scene.add(this.outlineGroup);\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPost(offsetX, { back: true, first, last });\n this.addPost(offsetX, { front: true, first, last });\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addPost(offsetX, { multiSpan: true, first, last });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n //this.getSection();\n this.showBeamOutline();\n this.addDownPipe();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n private addDownPipe() {\n let offsetZ =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + 100;\n let offsetX = -this.totalBaySize / 2 + 50;\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n let offsetY =\n this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue,\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n ) + this.geometryManager.getRoofBase().height;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n if (this.APP.sldFrontOverhang.currentValue > 100) {\n offsetY -= 250;\n\n let meshLBottom = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, offsetY, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(\n 0,\n offsetY + 230,\n this.APP.sldFrontOverhang.currentValue - 100\n );\n\n let meshPipeConnect = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, offsetY + 115, 50);\n meshPipeConnect.scale.set(\n 1,\n (this.APP.sldFrontOverhang.currentValue - 140) /\n this.geo_downPipe.height,\n 1\n );\n\n this.downpipeGroup.add(meshLBottom, meshLTop, meshPipeConnect);\n }\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeGroup.add(meshPipe);\n }\n private addGround() {\n let offsetZ = -this.APP.sldBackOverhang.currentValue;\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n let offsetX =\n (this.APP.sldRightOverhang.currentValue -\n this.APP.sldLeftOverhang.currentValue) /\n 2;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPost(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let postOffsetZ = 0;\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n postOffsetZ = this.APP.sldSpan.currentValue;\n this.frontPostHeight = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n\n scalePostY = this.frontPostHeight / this.geo_superiorPost.height;\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ = 0;\n scalePostY =\n (this.APP.sldBuildingHeight.currentValue -\n this.geo_superiorBeam.height) /\n this.geo_superiorPost.height;\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorPost.width;\n scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue -\n this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n ) / this.geo_superiorPost.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addSuperiorBeam(userDataPos: any) {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n\n //this.APP.sldBuildingHeight.currentValue + this.getBracketHeight(this.APP.sldSpan.currentValue);\n offsetZ = this.APP.sldSpan.currentValue;\n if (this.APP.sldMultiSpan.currentValue > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ = 0;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY = this.utils.getHeightByAngle(\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n offsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorBeam.width;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n this.scene.add(beamGroup);\n }\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n );\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n let beamObjs: Object3D[] = [];\n for (let g of beamGroups) {\n beamObjs = beamObjs.concat(g.children);\n }\n\n objs = [...objs, ...beamObjs];\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n o.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n o.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n return lineGeo;\n }\n\n private getBracketHeight(offset): number {\n let angle = this.APP.sltRoofPitch.currentValue;\n return (\n this.APP.sldFlyOverBracketHeight.currentValue -\n this.utils.tan(angle) * offset\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\nimport { UI } from \"../ui\";\nimport { PatiosFreeStandingManager } from \".\";\nimport { FIT_DIMENSION } from \"src/app/app.constants\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private MANAGER: PatiosFreeStandingManager;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosHigherHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, freeStandingManager: PatiosFreeStandingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n\n this.MANAGER = freeStandingManager;\n\n this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = new GeometryInfo();\n this.lineGeo.geometry = new PlaneBufferGeometry(1000, 50);\n this.lineGeo.width = 50;\n this.lineGeo.length = 1000;\n\n this.lineCapGeo = new GeometryInfo();\n this.lineCapGeo.geometry = new PlaneBufferGeometry(50, 200);\n this.lineCapGeo.width = 50;\n this.lineCapGeo.length = 200;\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosHigherHeightDim = new Group();\n this.dimensionPatiosHigherHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosHigherHeightDim.rotation.set(0, 0, Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.scene.add(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n\n loader.load( environment.modelBaseUrl + '/../assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n\n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n }\n \n public draw(){\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosHigherHeightDim.children = this.dimensionPatiosHigherHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionHigherHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim(){\n const frontPostHeight = this.utils.getHeightByAngle(UI.height - this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height, UI.span + UI.multiSpan, UI.patiosPitch, -1)\n const offsetZFrontPos = UI.span + UI.multiSpan + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, frontPostHeight / 2, offsetZFrontPos);\n\n let textStr = this.utils.getDimensionValue(frontPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: frontPostHeight,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionHigherHeightDim(){\n const backPostHeight = UI.height - this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height\n const offsetZBackPos = - FIT_DIMENSION;\n\n this.dimensionPatiosHigherHeightDim.position.set(0, backPostHeight / 2, offsetZBackPos);\n\n let textStr = this.utils.getDimensionValue(backPostHeight);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: backPostHeight,\n container: this.dimensionPatiosHigherHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n textRotation: new Vector3(Math.PI, 0, 0),\n labelType: DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosHigherHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x;\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2 - this.APP.sldExistingWidth1.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n //arrow\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n //let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = \"Panel direction\";\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, 0) };\n //text.position.setZ(-100);\n text.position.setX(100);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMidleLeft.add(dim);\n this.dimensionPlanMidleLeft.add(text);\n\n\n if (this.APP.sltExistingType.currentValue == 2) {\n text.position.set(-100, 0, 1000);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n else {\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(-offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetZ = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2;\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let material = new LineBasicMaterial({ color: 0x0000ff });\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n let dim = new Line(geoLine, material);\n dim.userData = { type: \"Arrow\", views: views };\n\n //text of degree\n let textStr = this.APP.sltRoofPitch.currentValue + ' degree';\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n \n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, Math.PI / 2, 0) };\n text.position.setZ(900);\n text.position.setX(200);\n\n dim.visible = false;\n text.visible = false;\n\n this.dimensionPlanMiddle.add(dim);\n this.dimensionPlanMiddle.add(text);\n\n this.dimensionPlanMiddle.position.set(0, 0, offsetZ);\n\n //console.log(text);\n }\n\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize/2;\n let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2;\n \n\n let _dimensionDistane = this.dimensionDistance2;\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // if(this.APP.sldExistingWidth1.currentValue > 0){\n // _dimensionDistane = this.dimensionDistance;\n // }\n // }\n\n let offsetDimensionX = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n // }\n\n this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height/2;\n if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n dimOffsetX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n }\n \n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX,dimOffsetY,0);\n \n\n //--------\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,0,0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight(){\n let dimOffsetY = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n \n\n this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n \n let scaleLength = dimOffsetY / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(dimOffsetY);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text);\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(0,0,0);\n \n this.dimensionPatiosRightBottom.add(dim);\n }\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n let dimOffsetY = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue, this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue, this.APP.sltRoofPitch.currentValue, -1);\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n this.dimensionPatiosRightLeft.add(dim);\n }\n });\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){ \n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n \n \n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children\n ]){\n if(!dim.userData.views){\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n \n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n \n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n \n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n \n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n \n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n \n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n \n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n \n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n \n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId)); \n }\n private unregisterEvent(): void{\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { ColumnAndPurlinManager } from \"./column-and-purlin.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"../models\";\nimport { Group, Box3 } from \"three\";\nimport { GEOMETRY_CATEGORY } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\n\nexport class PatiosFreeStandingManager implements PatiosManager {\n patiosGroup: Group;\n public boundingBox: Box3;\n public columnAndPurlinManager: ColumnAndPurlinManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public cutoutCondition: boolean;\n public get rakecutCondition(): boolean {\n return true;\n }\n public ignoreBayEvent: boolean = false;\n public patiosWidth: number;\n public patiosLength: number;\n public firstLoad = true;\n private controlsToRegisterEvent: Array;\n private APP: AppComponent;\n private updateEventHandle: any;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndPurlinManager = new ColumnAndPurlinManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndPurlinManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndPurlinManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {}\n loadBracketCutout(bracketQuantity: number): void {}\n loadSideGableBracket(bracketQuantity: number): void {}\n enableCutout(enable: boolean) {}\n changeToExistingTypeBoth() {}\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndPurlinManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndPurlinManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.update.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWallHeight,\n this.APP.sltBeamLayoutShow,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n update(preVal: number, curVal: number): void {\n this.patiosGroup.position.setX(0);\n Promise.all([\n this.roofManager.load(),\n this.columnAndPurlinManager.load(),\n ]).then(() => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n //this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n });\n }\n}\n","import { Scene, Mesh, Vector3, Material, Plane, Group, PlaneHelper, BufferGeometry, Geometry, LineSegments, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from '../../app.config';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Printing2DGeometryType, Print2DView, ViewType, LineType } from '../models';\nimport { PatiosFreeStandingManager } from '.';\nimport { PANEL_DIRECTION } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosFreeStandingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBase: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n\n private roofGroup: Group;\n\n private eventHandleId: any;\n\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n\n constructor(app: AppComponent, freeStandingManager: PatiosFreeStandingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = freeStandingManager;\n this.scene = new Group();\n freeStandingManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n \n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.geo_RoofPanel = this.geometryManager.getRoofSheetPanel();\n this.geo_RoofPanel.geometry\n .translate(this.geo_RoofPanel.width/2+2,this.geo_RoofPanel.height/2 -1,this.geo_RoofPanel.length/2);\n \n this.geo_roofPanelBase = this.geometryManager.getRoofBase();\n this.geo_roofPanelBase.geometry\n .translate(this.geo_roofPanelBase.width/2,\n this.geo_roofPanelBase.height/2,\n this.geo_roofPanelBase.length / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0);\n \n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingLeft.width/2 - 3,this.geo_roofPanelBargeCappingLeft.height/2 - (this.APP.sltDripBarge.currentValue ? 9 : 1),this.geo_roofPanelBargeCappingLeft.length/2);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .translate(-this.geo_roofPanelBargeCappingRight.width/2 + 3,this.geo_roofPanelBargeCappingRight.height/2 - (this.APP.sltDripBarge.currentValue ? 9 : 1),this.geo_roofPanelBargeCappingRight.length/2);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI/2)\n .translate(this.geo_roofPanelBargeCappingBack.length/2,this.geo_roofPanelBargeCappingBack.height/2 - (this.APP.sltDripBarge.currentValue ? 9 : 1),this.geo_roofPanelBargeCappingBack.width/2 - 3);\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI/2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n \n this.addRoof();\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n \n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n\n // this.material.clippingPlanes = [];\n // MaterialManager.Instance().ROOF_BASE.clippingPlanes = [];\n\n let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width/this.geo_RoofPanel.width);\n let offsetX = -(this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue);\n\n //panel direction\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.geo_RoofPanel.width;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n // let helper = new PlaneHelper(clipingPlaneRight, 10000, 0xffff00);\n // helper.userData = { type: 'HELPER' };\n // this.APP.scene.add(helper);\n\n const OFFSET_TOLE_AND_BASE = 10\n\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n \n this.addRoofSheeting(offsetX + OFFSET_TOLE_AND_BASE);\n this.addRoofSheetingBase(offsetX, last);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n\n this.addZFlashing();\n this.addBargeCapping();\n this.addGutter();\n //this.getOutLines();\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n \n let objs = this.roofGroup.children.filter(o => \n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL \n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE \n );\n\n let gutterObjs = this.roofGroup.children.find(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).children;\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0,5000,0); \n\n if(o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE){\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n \n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.roofGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.roofGroup.matrixWorld))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n \n let objs = this.roofGroup.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n );\n \n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n \n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n \n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n \n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n \n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n } \n public addRoof(){\n this.roofGroup = null;\n this.roofGroup = new Group();\n this.roofGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(this.APP.sldBackOverhang.currentValue);\n\n this.roofGroup.position.setY(offsetY);\n this.roofGroup.position.setZ(offsetZ);\n this.roofGroup.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroup);\n }\n public addRoofSheeting(offsetX: number){\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if(this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1){\n offsetSheet = 30;\n }\n else{\n offsetSheet = 12;\n }\n \n let scaleZ = (this.APP.sldSpan.currentValue \n + this.APP.sldFrontOverhang.currentValue \n + this.APP.sldBackOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_RoofPanel.length;\n \n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL, views: views };\n \n this.roofGroup.add(mesh);\n }\n public addRoofSheetingBase(offsetX: number, isLast: boolean){\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n let scaleZ = (this.APP.sldSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n + this.APP.sldBackOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue - 60)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX + 10, 0, 0);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if(isLast){\n mesh.userData.last = true;\n }\n this.roofGroup.add(mesh);\n }\n private addBargeCapping(){\n let mesh: Mesh;\n\n let offsetLeft = this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue;\n\n let scaleX = (this.APP.sldLeftOverhang.currentValue \n + this.totalBaySize \n + this.APP.sldRightOverhang.currentValue)/this.geo_roofPanelBargeCappingBack.length;\n let scaleZ = (this.APP.sldSpan.currentValue \n + this.APP.sldFrontOverhang.currentValue \n + this.APP.sldBackOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue)/this.utils.cos(this.APP.sltRoofPitch.currentValue)/this.geo_roofPanelBargeCappingLeft.length;\n\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(-offsetLeft);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(offsetRight);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n\n //back\n mesh = new Mesh(this.geo_roofPanelBargeCappingBack.geometry, MaterialManager.Instance().BARGE); \n mesh.position.setX(-offsetLeft);\n mesh.scale.setX(scaleX);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroup.add(mesh);\n }\n\n public addGutter(){\n let mesh: Mesh;\n \n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ = (this.APP.sldFrontOverhang.currentValue \n + this.APP.sldMultiSpan.currentValue \n + this.APP.sldSpan.currentValue\n + this.APP.sldBackOverhang.currentValue\n - 50)/this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue)/this.geo_gutterBack.length;\n \n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n \n let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh.position.set(offsetXL, 0, 0);\n\n let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh2.position.set(offsetXR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n gutterGroup.position.set(0, offsetY, offsetZ);\n gutterGroup.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n this.roofGroup.add(gutterGroup);\n }\n public addZFlashing() {\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + this.APP.sldBackOverhang.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldSpan.currentValue\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue) / this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroup.add(mesh);\n }\n public getRoofOffsetY() {\n return this.APP.sldBuildingHeight.currentValue\n //+ this.geometryManager.getBeam().height\n + this.utils.tan(this.APP.sltRoofPitch.currentValue)*this.APP.sldBackOverhang.currentValue;\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.dialogEditBay,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void{\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number){\n this.optimize().then(() => { this.load() });\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, Line3, BufferGeometry, Points, PointsMaterial } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { GableFBExistingBuildingManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: GableFBExistingBuildingManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n private geometryManager: GeometryManager;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any\n private textParameter: any;\n\n private isReady = false;\n\n private box: Box3;\n\n private controlsToRegisterEvent: Array;\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, manager: GableFBExistingBuildingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n\n //this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI / 2, Math.PI, -Math.PI / 2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n \n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n \n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n \n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n this.isReady = true;\n this.draw();\n\n\n resolve();\n })\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n //this.dimensionPatiosPlanRight,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.map(b => b.value).reduce((sum, current) => sum + current);\n // for (let b of this.APP.dialogEditBay.listBay) {\n // this.totalBaySize += b.value;\n // }\n\n this.box = this.utils.getSceneBox();\n // let boxHelper = new Box3Helper(this.MANAGER.boundingBox);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.scene.add(boxHelper);\n\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n // this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // //let existingHouseDimBox = new Box3().setFromObject(existingHouseDimLeft);\n // if(existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left){\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetZ = - UI.existingWidth1 / 2 + this.totalBaySize + UI.overhangFront;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI, 0);\n }\n else {\n let offsetZ = - UI.existingWidth1 / 2;\n this.dimensionPlanMidleLeft.rotation.set(0, 0, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 + this.totalBaySize / 2;\n this.dimensionPlanMiddle.rotation.set(0, 0, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneRotation: new Vector3(0, 0, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, 0, 0)\n }\n let dimSpan = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let offsetDimensionZ = this.totalBaySize / 2\n - this.APP.sldExistingWidth1.currentValue / 2;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n\n this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetX = -this.totalBaySize / 2;\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true }, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textRotation: new Vector3(0, - Math.PI, 0),\n fitZ: -10\n }\n let dimBay = this.dimensionPatiosPlanRight.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n let offsetRight = this.totalBaySize / 2 ;\n let offsetLeft = this.totalBaySize / 2;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT);\n }\n \n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = this.utils.getHeightByAngle(UI.height, UI.span / 2, UI.patiosPitch, 1);\n let dimOffsetX = this.box.max.x;\n //let dimOffsetX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height / 2;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // dimOffsetX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //-------- \n let scaleLength = height / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, 0, -Math.PI / 2) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = this.utils.getHeightByAngle(UI.height, UI.span / 2, UI.patiosPitch, 1);\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2;\n if(this.APP.sldExistingWidth1.currentValue + this.APP.sldExistingWidth2.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue){\n dimOffsetZ = this.APP.sldExistingWidth1.currentValue/2 + this.APP.sldExistingWidth2.currentValue + this.dimensionDistance2 - 290;\n }\n if(this.APP.sldExistingLength2.currentValue > 0){\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY = this.utils.getHeightByAngle(UI.height, UI.span / 2, UI.patiosPitch, 1);\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z;//this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 - this.APP.sldExistingWidth1.currentValue/2;\n //this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n\n\n this.APP.sldEaveWidth\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n \n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n // patiosBox = this.APP.utils.getObjectsBoundingBox(\n // this.MANAGER.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n\n // let patiosBoxHelper = new Box3Helper(patiosBox);\n // patiosBoxHelper.userData = {type: location};\n // this.scene.add(patiosBoxHelper);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n \n // for(let i = 0; i < 100; i++){\n // let intersectBox = false;\n // for(let o of objs){\n // let objBox = this.APP.utils.getObjectBoundingBox(o);\n // if(dimBox.intersectsBox(objBox)){\n // intersectBox = true;\n // dimBox.translate(new Vector3(100,0,0))\n // }\n // }\n \n // if(!intersectBox)\n // break;\n // }\n\n \n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n dimBox.translate(new Vector3(objBox.max.x - dimBox.min.x,0,0));\n }\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z);\n }\n }\n}\n","import { PostAndBeamManager } from './post-and-beam.manager';\nimport { RoofManager } from './roof.manager';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { PatiosManager } from '../patios.manager';\nimport { Printing2DGeometry } from '../models';\nimport { Group, Box3, Box3Helper, BoxHelper, Vector3 } from 'three';\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE, OFFSET_GUTTER_TO_WALL } from 'src/app/app.config';\nimport { DimensionManager } from './dimension.manager';\nimport { SliderInputComponent } from 'src/app/component/slider-input/slider-input.component';\nimport { CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG, RAKECUT_TYPE } from 'src/app/app.constants';\nimport { environment } from 'src/environments/environment';\nimport { UI } from '../ui';\n\nexport class GableFBExistingBuildingManager implements PatiosManager{\n private APP: AppComponent;\n patiosGroup: Group;\n public boundingBox: Box3;\n private postAndBeamManager: PostAndBeamManager;\n private roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n \n private updateEventHandle: any;\n private controlsToRegisterEvent: Array;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public get cutoutCondition(): boolean {\n return [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang\n ].map(x => x.currentValue).reduce((a, b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n };\n public get rakecutCondition(): boolean{\n let patiosWidth = this.APP.dialogEditBay.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let patiosLength = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public patiosLength: number;\n public patiosWidth: number;\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS }\n app.scene.add(this.patiosGroup);\n \n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize()\n ])\n .then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n \n }\n loadBracketCutout(bracketQuantity: number): void{\n \n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sldBuildingHeight,\n this.APP.sltBeamLayoutShow,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach(c => { c.addAction(this.updateEventHandle); });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.updateEventHandle));\n }\n updateDefer(previousValue: number, currentValue: number) {\n if(this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES || this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.update(previousValue, currentValue) }, this.deferTimeout);\n }\n else{\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n \n let diff = this.APP.sldExistingLength.currentValue - UI.span;\n \n this.patiosLength = totalBaySize + UI.overhangFront;\n this.patiosWidth = UI.span + UI.overhangLeft + UI.overhangRight;\n \n //let cutoutCondition = this.cutoutCondition.map(x => x.currentValue).reduce((a,b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.sltExistingType.currentValue == 1) {\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue - this.APP.sldExistingLength2.currentValue + OFFSET_GUTTER_TO_WALL);\n }\n else{\n this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue + OFFSET_GUTTER_TO_WALL);\n }\n }\n else if (this.APP.sltExistingType.currentValue == 2) {\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue + this.APP.sldExistingLength2.currentValue - OFFSET_GUTTER_TO_WALL);\n }\n else{\n this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue - OFFSET_GUTTER_TO_WALL);\n }\n }\n else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([\n this.roofManager.load(),\n this.postAndBeamManager.load()\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n })\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return { \n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines\n ], \n texts: dimensionOutline.texts\n }\n }\n public getPatiosBox(): Box3{\n let left = - UI.span / 2 - UI.overhangLeft;\n let right = UI.span / 2 + UI.overhangRight;\n let front = this.APP.dialogEditBay.totalBaySize + this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n \n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n \n if(this.APP.sltExistingType.currentValue == 1){\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(new Vector3(0,0,-this.APP.sldExistingWidth1.currentValue/2));\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n box.translate(new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0));\n }\n }\n else if(this.APP.sltExistingType.currentValue == 2){\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(new Vector3(0,0,-this.APP.sldExistingWidth1.currentValue/2));\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if(this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition){\n box.translate(new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0));\n }\n }\n else if(this.APP.sltExistingType.currentValue == 3){\n box.translate(new Vector3(0,0,-this.APP.sldExistingWidth1.currentValue/2));\n }\n\n // if(!environment.production){\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n \n return box;\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n Vector3,\n BufferGeometry,\n BoxHelper,\n Geometry,\n LineSegments,\n BoxBufferGeometry,\n Group,\n Object3D,\n Matrix4,\n Line,\n Points,\n PointsMaterial,\n Box3,\n Box3Helper,\n Plane,\n} from \"three\";\nimport { Util, getRafterBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"../../app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport {\n GeometryInfo,\n Printing2DGeometryType,\n Printing2DLine,\n Printing2DGeometry,\n Print2DView,\n ViewType,\n LineType,\n} from \"../models\";\nimport { GableFBExistingBuildingManager } from \".\";\nimport { group } from \"console\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n private beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private frontPostHeight: number;\n private totalBaySize: number;\n private downpipeGroupRight: Group;\n private downpipeGroupLeft: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private MANAGER: GableFBExistingBuildingManager;\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(\n app: AppComponent,\n existingManager: GableFBExistingBuildingManager\n ) {\n this.APP = app;\n this.MANAGER = existingManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = existingManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiCHangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n //this.APP.dialogEditBay,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltCutOut,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, env.height.default / this.postInfo.height, 1);\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroupRight = new Group();\n this.downpipeGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupRight.rotateY(Math.PI / 2);\n this.scene.add(this.downpipeGroupRight);\n\n this.downpipeGroupLeft = new Group();\n this.downpipeGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupLeft.rotateY(-Math.PI / 2);\n this.scene.add(this.downpipeGroupLeft);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroupRight.children = [];\n this.downpipeGroupLeft.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.roofWidth =\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue +\n UI.span;\n this.enableCutout = this.MANAGER.cutoutCondition;\n\n let offsetZ = 0;\n let idx = 0;\n\n this.addGround();\n this.addCenterSuperiorBeam();\n\n this.addHorSuperiorBeam(-UI.span / 2 + this.beamInfo.width / 2, {\n left: true,\n first: true,\n last: false,\n });\n this.addHorSuperiorBeam(UI.span / 2 - this.beamInfo.width / 2, {\n right: true,\n first: false,\n last: true,\n });\n\n this.APP.dialogEditBay.listBay.forEach((m) => {\n offsetZ += m.value;\n\n this.addBeam(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addPost(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n left: true,\n right: false,\n });\n this.addPost(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n left: false,\n right: true,\n });\n\n let fitBeam = 0;\n if (idx + 1 > 0 && idx + 1 < this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width / 2;\n } else if (idx + 1 == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width;\n }\n\n this.addRafterSuperiorBeam(offsetZ - fitBeam - UI.existingWidth1 / 2, {\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n right: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n this.addRafterSuperiorBeam(offsetZ - fitBeam - UI.existingWidth1 / 2, {\n back: idx + 1 == 0,\n left: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n idx++;\n });\n\n this.addDownPipeRight();\n this.addDownPipeLeft();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private addDownPipeRight() {\n let offsetZ = this.totalBaySize - 50;\n let offsetX = UI.span / 2 + 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.overhangRight,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangRight,\n offsetY,\n true\n );\n }\n private addDownPipeLeft() {\n let offsetZ = this.totalBaySize - 50;\n let offsetX = -UI.span / 2 - 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.height,\n UI.overhangLeft,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangLeft,\n offsetY,\n true\n );\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addGround() {\n let offsetX = -(UI.span / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetZ = -this.APP.sldExistingWidth1.currentValue / 2;\n let width = UI.span + UI.overhangLeft + UI.overhangRight;\n let length = this.totalBaySize + UI.overhangFront + UI.overhangBack;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangFront;\n\n let views: Print2DView[];\n offsetY = UI.height;\n offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n\n if (userDataPos.left) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartZ = pos.z - length;\n const beamEndZ = pos.z;\n\n let endOfBayZ = -UI.existingWidth1 / 2;\n let startCutBeamZ = beamStartZ;\n let endCutBeamZ = beamStartZ;\n\n const beams = this.utils.getListSeperateBeamsByBaysForFbGable(\n endOfBayZ,\n beamStartZ,\n beamEndZ,\n endCutBeamZ,\n startCutBeamZ\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamZ = beams[i][1];\n startCutBeamZ = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamZ - startCutBeamZ,\n new Vector3(pos.x, pos.y, endCutBeamZ),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasEndCap: UI.beamType == 0 && i == 0,\n hasStartJoint: false,\n hasEndJoint: i !== 0,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addPost(offsetZ: number, userDataPos: any) {\n const condition = offsetZ + this.APP.sldEaveWidth.currentValue;\n if (\n (UI.existingType === 1 || UI.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (UI.existingType === 2 || UI.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n\n let views: Print2DView[] = [];\n if (userDataPos.back || userDataPos.center) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let posZ = offsetZ - UI.existingWidth1 / 2;\n if (userDataPos.back) {\n posZ = offsetZ + this.postInfo.width / 2 - UI.existingWidth1 / 2;\n } else if (userDataPos.front) {\n posZ = offsetZ - this.postInfo.width / 2 - UI.existingWidth1 / 2;\n }\n\n let scaleY = 0;\n let length = 0;\n\n if (userDataPos.isMultiSpan) {\n length = this.APP.sldBuildingHeight.currentValue;\n scaleY = length / this.postInfo.height;\n } else {\n length = this.APP.sldBuildingHeight.currentValue;\n scaleY = length / this.postInfo.height;\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2 + this.postInfo.width / 2;\n } else if (userDataPos.right) {\n offsetX = UI.span / 2 - this.postInfo.width / 2;\n }\n\n mesh.position.set(offsetX, 0, posZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n public addCenterSuperiorBeam() {\n let beamLength = this.totalBaySize + UI.overhangFront;\n\n let offsetY =\n UI.height +\n (UI.span / 2 - this.beamInfo.width / 2) * this.utils.tan(UI.patiosPitch);\n let offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(0, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n { center: true },\n 0,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n private addCenterPost(offsetZ, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n this.frontPostHeight = UI.height;\n\n scalePostY =\n ((UI.span / 2 - this.beamInfo.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.beamInfo.height) /\n this.geo_centerSuperiorPost.height;\n\n if (userDataPos.last) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n let postOffsetX = -this.geo_centerSuperiorPost.width / 2;\n\n let postOffsetZ =\n offsetZ - this.geo_centerSuperiorPost.width / 2 - UI.existingWidth1 / 2;\n if (userDataPos.first) {\n postOffsetZ =\n offsetZ - this.geo_centerSuperiorPost.width / 2 - UI.existingWidth1 / 2;\n } else if (userDataPos.last) {\n postOffsetZ =\n offsetZ - this.geo_centerSuperiorPost.width - UI.existingWidth1 / 2;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(postOffsetX, UI.height, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addRafterSuperiorBeam(offsetZ, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n (UI.span / 2 - this.beamInfo.width / 2) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n\n let scaleX =\n (UI.span / 2 - this.beamInfo.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let fitZ = 0;\n\n if (userDataPos.left) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, UI.height, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n\n let nVer = new Vector3(-1, 0, 0).normalize();\n let pVer = new Vector3(\n -this.beamInfo.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.right) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, UI.height, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n let nVer = new Vector3(1, 0, 0).normalize();\n let pVer = new Vector3(\n this.beamInfo.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.left) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.height + (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n -translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n -translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = this.scene.position.x;\n\n planeTop.translate(new Vector3(beamOffsetX, 0, 0));\n planeBottom.translate(new Vector3(beamOffsetX, 0, 0));\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.height + (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = this.scene.position.x;\n\n planeTop.translate(new Vector3(beamOffsetX, 0, 0));\n planeBottom.translate(new Vector3(beamOffsetX, 0, 0));\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2;\n offsetY = UI.height;\n } else if (userDataPos.right) {\n offsetX = this.geo_centerSuperiorPost.width / 2;\n offsetY =\n UI.height +\n (UI.span / 2 - this.beamInfo.width / 2) *\n this.utils.tan(UI.patiosPitch);\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n if (userDataPos.left) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.right) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n public addBeam(offsetZ: number, userDataPos: any) {\n let offsetY = 0;\n\n let beamLength = UI.span - 2 * this.postInfo.width;\n if (userDataPos.back) {\n beamLength = UI.span - 2 * this.beamInfo.width;\n }\n\n let offsetX = -UI.span / 2 + this.postInfo.width;\n if (userDataPos.back) {\n offsetX = -UI.span / 2 + this.beamInfo.width;\n }\n\n let posZ = 0;\n let views: Print2DView[] = [];\n if (userDataPos.front) {\n offsetY = UI.height;\n posZ = offsetZ - this.beamInfo.width / 2 - UI.existingWidth1 / 2;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.center) {\n offsetY = UI.height;\n posZ = offsetZ - UI.existingWidth1 / 2;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY = UI.height;\n posZ = offsetZ + this.beamInfo.width / 2 - UI.existingWidth1 / 2;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let beamGroup: Group;\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n\n this.scene.add(beamGroup);\n }\n\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n }\n }\n}\n","import { Mesh, Vector3, Material, Plane, Geometry, BufferGeometry, Group, BoxBufferGeometry, MeshLambertMaterial, BoxHelper, Matrix4, PlaneHelper, Points, PointsMaterial, Color, PlaneBufferGeometry, DoubleSide, Object3D, LineSegments } from 'three';\nimport { Util } from '../utils';\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from '../../app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RAKECUT_TYPE } from '../../app.constants';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Print2DView, ViewType, LineType } from '../models';\nimport { GableFBExistingBuildingManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport HighLightBox from 'src/app/models/HighlightBox';\nimport { UI } from '../ui';\nimport SelectionManager from '../selection.manager';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableFBExistingBuildingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n public ridgeGeo: GeometryInfo;\n private roofInfo: GeometryInfo;\n private roofBaseInfo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private receiverCutoutRightVer2: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutLeftVer2: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n private roofGroupRight: Group;\n private roofGroupLeft: Group;\n\n private eventHandleId: any;\n\n // Var\n private roofLengthPlus: number;\n private roofWidth: number;\n private roofLength: number;\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private enableCutout: boolean;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n\n constructor(app: AppComponent, existingManager: GableFBExistingBuildingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = existingManager;\n this.scene = new Group();\n existingManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofSheetPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2 + 10, -1, this.roofInfo.length / 2)\n .rotateY(Math.PI / 2);\n\n this.roofBaseInfo = this.geometryManager.getRoofBase();\n this.roofBaseInfo.geometry\n .translate(-this.roofBaseInfo.width / 2, this.roofBaseInfo.height / 2, this.roofBaseInfo.length / 2)\n .rotateY(Math.PI / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0).rotateY(Math.PI / 2);\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(-this.zFlashingRakecutRightGeo.length, 0, 0);\n\n // Barge capping - left\n this.bargeLeftInfo = this.geometryManager.getBarge();\n this.bargeLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeLeftInfo.length / 2, this.bargeLeftInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.bargeLeftInfo.width / 2 + 3);\n\n // Barge capping - right\n this.bargeRightInfo = this.geometryManager.getBarge();\n this.bargeRightInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeRightInfo.length / 2, this.bargeRightInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeRightInfo.width / 2 - 3);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutRightHor.length / 2, this.receiverCutoutRightHor.height / 2, this.receiverCutoutRightHor.width / 2);\n\n \n //Vertical Barge cutout left 2\n this.receiverCutoutLeftVer2 = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer2.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer2.width / 2, this.receiverCutoutLeftVer2.height / 2, this.receiverCutoutLeftVer2.length / 2);\n\n //Vertical cutout right 2\n this.receiverCutoutRightVer2 = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer2.geometry\n .translate(-this.receiverCutoutRightVer2.width / 2, this.receiverCutoutRightVer2.height / 2, this.receiverCutoutRightVer2.length / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2, this.geo_receiverChanel.width / 2);\n\n // Gutter\n let gtExtraOffsetY = 0;\n if (this.APP.sltGutterType.currentValue == 1 || this.APP.sltGutterType.currentValue == 2) {\n gtExtraOffsetY = 20;\n }\n\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.ridgeGeo = this.geometryManager.getRidge();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL \n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n || x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS\n || x.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n || x.userData.type === GEOMETRY_TYPE.HIGHLIGHT_BOX));\n\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type === 'ROOF_OUTLINE'));\n\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.roofLength = UI.span / 2 + UI.overhangRight;\n this.roofLengthPlus = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n this.roofWidth = this.totalBaySize + UI.overhangFront;\n\n this.addRoofGroupRight();\n this.addRoofGroupLeft();\n this.addCutout();\n\n let roofPanelCount = Math.ceil(this.roofWidth / this.roofInfo.width);\n this.enableCutout = this.MANAGER.cutoutCondition;\n\n //clipping plane\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n this.material.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n\n //panel direction\n let offsetZ = 0;\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetZ = this.totalBaySize + UI.overhangFront - this.roofInfo.width;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetZ = 0;\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = true;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBaseRight(offsetZ, [this.csg_cutoutLeft] );\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft]);\n\n this.addRoofBaseLeft(offsetZ, [this.csg_cutoutLeft] );\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft]);\n\n cuted = isOver;\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n this.addRoofBaseRight(offsetZ, [this.csg_cutoutRight] );\n this.addRoofRight(offsetZ, [this.csg_cutoutRight] );\n\n this.addRoofBaseLeft(offsetZ, [this.csg_cutoutRight] );\n this.addRoofLeft(offsetZ, [this.csg_cutoutRight]);\n\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.enableCutout) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n let flag = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBaseRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofBaseLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight] );\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofBaseRight(offsetZ, []);\n this.addRoofRight(offsetZ, []);\n\n this.addRoofBaseLeft(offsetZ, [] );\n this.addRoofLeft(offsetZ, []);\n\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n\n this.addZFlashingRight();\n this.addZFlashingLeft();\n\n this.addBargeRight();\n this.addBargeLeft();\n\n this.addGutterRight();\n this.addGutterLeft();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n //this.getOutLines();\n resolve();\n });\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n \n public addRoofGroupRight() {\n this.roofGroupRight = null;\n this.roofGroupRight = new Group();\n this.roofGroupRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n //let offsetX = -this.APP.sldLeftOverhang.currentValue;\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -UI.existingWidth1 / 2;\n\n this.roofGroupRight.position.set(0, offsetY, offsetZ);\n this.roofGroupRight.rotation.set(0, 0, -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupRight);\n }\n public addRoofGroupLeft() {\n this.roofGroupLeft = null;\n this.roofGroupLeft = new Group();\n this.roofGroupLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n //let offsetX = -this.APP.sldLeftOverhang.currentValue;\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -UI.existingWidth1 / 2;\n\n this.roofGroupLeft.position.set(0, offsetY, offsetZ);\n this.roofGroupLeft.rotation.set(0, 0, this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupLeft);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let gutterGroupObjs = this.roofGroupRight.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).concat(\n ...this.roofGroupLeft.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n );\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneBack);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForFBRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, -UI.existingWidth1 / 2 - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n}\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoofRight(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) - offsetPitch) / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetX = 0;\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n \n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n \n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if(cutoutCondition){\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofLeft(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) - offsetPitch) / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetX = 0;\n mesh.position.set(offsetX - scaleZ * this.roofInfo.length, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n \n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n \n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX - scaleZ * this.roofInfo.length + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if(cutoutCondition){\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n public addRoofBaseRight(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) - offsetPitch - 60) / this.roofBaseInfo.length;\n const offsetY = 0;\n let offsetX = 0;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n \n if(cutoutCondition){\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofBaseLeft(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) - offsetPitch - 60) / this.roofBaseInfo.length;\n const offsetY = 0;\n let offsetX = 0;\n\n mesh.position.set(offsetX - scaleZ * this.roofBaseInfo.length, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x - scaleZ * this.roofBaseInfo.length, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n \n if(cutoutCondition){\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n private addBargeRight() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL2 = 0;\n\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = 0;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangRight;\n let bargeRightLength = UI.span / 2 + UI.overhangRight;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - fitScale * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n \n // back\n fitScale = this.geo_receiverChanel.height * this.utils.tan(UI.patiosPitch) / this.geo_receiverChanel.length;\n mesh = new Mesh(this.geo_receiverChanel.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(- fitScale * this.bargeRightInfo.length, offsetY, 0);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroupRight.add(mesh);\n }\n private addBargeLeft() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL2 = 0;\n\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = 0;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangLeft;\n let bargeRightLength = UI.span / 2 + UI.overhangLeft;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - scaleZLeft * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n \n // back\n fitScale = this.geo_receiverChanel.height * this.utils.tan(UI.patiosPitch) / this.geo_receiverChanel.length;\n mesh = new Mesh(this.geo_receiverChanel.geometry, MaterialManager.Instance().RECEIVER_CHANEL);\n mesh.position.set(- scaleZLeft * this.bargeRightInfo.length, offsetY, 0);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RECEIVER_CHANEL, views: views };\n this.roofGroupLeft.add(mesh);\n }\n public addGutterRight() {\n let offsetXL = (UI.span / 2 + UI.overhangRight - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n let offsetZ = this.totalBaySize + UI.overhangFront;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(0, Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupRight.add(gutterGroup); \n }\n public addGutterLeft() {\n let offsetXL = (UI.span / 2 + UI.overhangLeft - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n let offsetZ = 0;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(-offsetXL, offsetY, offsetZ), new Vector3(0, -Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupLeft.add(gutterGroup); \n }\n public addZFlashingRight() {\n let offsetX = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = this.totalBaySize + UI.overhangFront;\n let zFlashingLength = this.roofWidth;\n\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(1, 1, scaleX);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupRight.add(mesh);\n }\n public addZFlashingLeft() {\n let offsetX = (UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = - UI.overhangBack;\n let zFlashingLength = this.roofWidth;\n\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(-offsetX, offsetY, offsetZ);\n mesh.scale.set(1, 1, scaleX);\n mesh.rotateY(Math.PI)\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupLeft.add(mesh);\n }\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n\n const height = this.getRoofOffsetY() + \n this.roofBaseInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) + \n this.roofInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) - \n (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1 ? 20 : 10);\n \n let offsetX = 0\n \n const ridgeLength = this.totalBaySize + UI.overhangFront;\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.position.set( offsetX, height, this.totalBaySize / 2 + UI.overhangFront / 2 - UI.existingWidth1 / 2);\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]};\n this.scene.add(ridgeFront)\n }\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n\n rightCap.rotateY(Math.PI)\n\n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n\n leftCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n\n return new Group().add(leftCap, rightCap)\n }\n public getRoofOffsetY() {\n return UI.height + this.utils.tan(UI.patiosPitch) * (UI.span / 2);\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n uiCHangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiCHangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sltRoofPitch,\n //this.APP.dialogEditBay,\n //this.APP.sltCutOut,\n //this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldEaveWidth\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltReceiverType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n}\n\n","import {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport { PANEL_DIRECTION, RAKECUT_TYPE } from \"src/app/app.constants\";\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { GableFBFasciaManager } from \".\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: GableFBFasciaManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any;\n private textParameter: any;\n private isReady = false;\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n private geometryManager: GeometryManager;\n\n constructor(app: AppComponent, manager: GableFBFasciaManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n\n this.isReady = true;\n this.draw();\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n // this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if (existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left) {\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n this.APP.dimensionManager.draw();\n }\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI, 0);\n }\n else {\n let offsetZ = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n this.dimensionPlanMidleLeft.rotation.set(0, 0, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4 + this.totalBaySize / 2;\n this.dimensionPlanMiddle.rotation.set(0, 0, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n },\n textCloneRotation: new Vector3(0, 0, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, 0, 0),\n };\n let dimSpan = this.dimensionPatiosPlanBottom.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n UI.span / 2,\n UI.overhangLeft,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n UI.span / 2,\n UI.overhangRight,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let offsetDimensionZ =\n this.totalBaySize / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetX = -this.totalBaySize / 2;\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimBay = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n let offsetRight = this.totalBaySize / 2;\n let offsetLeft = this.totalBaySize / 2;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n UI.overhangFront,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n UI.overhangBack,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n let dimOffsetX =\n UI.span / 2 +\n this.APP.patiosManager.patiosGroup.position.x +\n _dimensionDistane;\n let dimOffsetY = height / 2;\n if (this.APP.sldExistingLength.currentValue / 2 > UI.span / 2) {\n dimOffsetX =\n this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n }\n\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY =\n UI.eaveHeight +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = +dimOffsetY.toFixed(0);\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY =\n UI.eaveHeight +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height +\n (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"../models\";\nimport { Group, Box3, Vector3, Box3Helper } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { SliderInputComponent } from \"src/app/component/slider-input/slider-input.component\";\nimport {\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport { environment } from \"src/environments/environment\";\nimport { UI } from \"../ui\";\n\nexport class GableFBFasciaManager implements PatiosManager {\n public patiosGroup: Group;\n public boundingBox: Box3;\n private APP: AppComponent;\n public postAndBeamManager: PostAndBeamManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n\n private updateEventHandle: any;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private controlsToRegisterEvent: Array;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [\n this.APP.sldEaveWidth,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n ]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.postAndBeamManager.numOfBraket = bracketQuantity;\n this.postAndBeamManager.addUpstandBraket();\n }\n loadBracketCutout(bracketQuantity: number): void {\n // this.postAndBeamManager.addUpstandBraketCutOut(bracketQuantity);\n }\n loadSideGableBracket(bracketQuantity: number): void{\n this.postAndBeamManager.numberOfBracketsSide = bracketQuantity\n this.postAndBeamManager.addBraketOrBeamSideRoof();\n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltBeamLayoutShow,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number): void {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let diff = this.APP.sldExistingLength.currentValue - UI.span;\n\n this.patiosLength = totalBaySize + UI.overhangFront;\n this.patiosWidth = UI.span + UI.overhangLeft + UI.overhangRight;\n\n if (this.APP.sltExistingType.currentValue == 1) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n -diff / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 + this.APP.sldEaveWidth.currentValue + FASCIA_BRACKET_FIT\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n this.patiosGroup.position.setX(\n diff / 2 -\n this.APP.sldEaveWidth.currentValue +\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 - this.APP.sldEaveWidth.currentValue - FASCIA_BRACKET_FIT\n );\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left = -UI.span / 2 - UI.overhangLeft;\n let right = UI.span / 2 + UI.overhangRight;\n let front =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, this.APP.sldEaveWidth.currentValue));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n box.translate(new Vector3(this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n box.translate(new Vector3(-this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import _ from \"lodash\";\nimport Beam, { BeamOptions } from \"src/app/models/Beam.model\";\nimport UpstandBraket, {\n UpstandBraketOptions,\n} from \"src/app/models/UpstandBraket.model\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n Vector3,\n} from \"three\";\nimport { GableFBFasciaManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"../../app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util, getRafterBeamEndCapCode } from \"../utils\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableFBFasciaManager;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private existingTypeLeftX: number;\n private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private frontPostHeight: number;\n private downpipeGroupRight: Group;\n private downpipeGroupLeft: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n public geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private geoBraketExtL_2: GeometryInfo;\n private geoBraketExtR_2: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n private geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n\n private offsetYBraket = 0;\n public numberOfBracketsSide = INIT.DEFAULT_BRACKET_NUMBER;\n public numOfBraket = INIT.DEFAULT_BRACKET_NUMBER;\n\n k: number;\n k_: number;\n j: number;\n l: number;\n m: number;\n v: number;\n\n constructor(app: AppComponent, fasciaManager: GableFBFasciaManager) {\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = fasciaManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, scalePostHeight, 1);\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroupRight = new Group();\n this.downpipeGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupRight.rotateY(Math.PI / 2);\n this.scene.add(this.downpipeGroupRight);\n\n this.downpipeGroupLeft = new Group();\n this.downpipeGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupLeft.rotateY(-Math.PI / 2);\n this.scene.add(this.downpipeGroupLeft);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBraketExtL_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtL_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateY(-Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtL_2.geometry.translate(\n -this.geoBraketExtL_2.height / 2,\n this.geoBraketExtL_2.length / 2,\n this.geoBraketExtL_2.height / 3 - this.geoBraket_1.width / 2\n );\n //Right\n this.geoBraketExtR_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtR_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateY(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtR_2.geometry.translate(\n this.geoBraketExtR_2.height / 2,\n this.geoBraketExtR_2.length / 2,\n this.geoBraketExtR_2.height / 3 - this.geoBraket_1.width / 2\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.downpipeGroupRight.children = [];\n this.downpipeGroupLeft.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofWidth = UI.span;\n this.existingType = +this.APP.sltExistingType.currentValue;\n this.existingTypeLeftX = 0;\n this.existingTypeRightX = 0;\n if (this.existingType === 1 || this.existingType === 3) {\n this.existingTypeLeftX = this.APP.sldEaveWidth.currentValue;\n }\n if (this.existingType === 2 || this.existingType === 3) {\n this.existingTypeRightX = this.APP.sldEaveWidth.currentValue;\n }\n this.offsetYBraket = 0;\n if (UI.upstandBraketType == 150) {\n this.offsetYBraket =\n 150 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 300) {\n this.offsetYBraket =\n 300 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 450) {\n this.offsetYBraket =\n 450 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 600) {\n this.offsetYBraket =\n 600 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n this.offsetYBraket -=\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch) +\n (this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n }\n\n this.addCenterSuperiorBeam();\n this.addGround();\n let offsetZ = 0;\n let idx = 0;\n\n this.addHorSuperiorBeam(-UI.span / 2 + this.geoBeam.width / 2, {\n left: true,\n first: true,\n last: false,\n });\n this.addHorSuperiorBeam(UI.span / 2 - this.geoBeam.width / 2, {\n right: true,\n first: false,\n last: true,\n });\n\n this.addBeam(offsetZ, {\n back: idx == 0,\n center: !(idx == this.APP.dialogEditBay.listBay.length) && !(idx == 0),\n front: idx == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center: !(idx == this.APP.dialogEditBay.listBay.length) && !(idx == 0),\n first: idx == 0,\n last: idx == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addRafterSuperiorBeam(\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4,\n {\n front: idx == this.APP.dialogEditBay.listBay.length,\n right: true,\n first: idx === 0,\n last: idx == this.APP.dialogEditBay.listBay.length,\n }\n );\n this.addRafterSuperiorBeam(\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4,\n {\n back: idx == 0,\n left: true,\n first: idx === 0,\n last: idx == this.APP.dialogEditBay.listBay.length,\n }\n );\n\n this.APP.dialogEditBay.listBay.map((m) => {\n offsetZ += m.value;\n\n this.addBeam(offsetZ, {\n back: idx + 1 == 0,\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center:\n !(idx + 1 == this.APP.dialogEditBay.listBay.length) &&\n !(idx + 1 == 0),\n first: idx + 1 == 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n });\n\n let fitBeam = 0;\n if (idx + 1 > 0 && idx + 1 < this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width / 2;\n } else if (idx + 1 == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width;\n }\n\n this.addRafterSuperiorBeam(\n offsetZ -\n fitBeam -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4,\n {\n front: idx + 1 == this.APP.dialogEditBay.listBay.length,\n right: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n }\n );\n this.addRafterSuperiorBeam(\n offsetZ -\n fitBeam -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4,\n {\n back: idx + 1 == 0,\n left: true,\n first: idx + 1 === 0,\n last: idx + 1 == this.APP.dialogEditBay.listBay.length,\n }\n );\n\n idx++;\n });\n\n this.addBraketOrBeamSideRoof();\n this.showBeamOutline();\n this.addDownPipeRight();\n this.addDownPipeLeft();\n this.addUpstandBraket();\n\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addBraketOrBeamSideRoof() {\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n\n let offsetZ = 0;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == 0) {\n offsetZ += UI.listBay[i].value;\n continue;\n }\n this.addPost(offsetZ, {\n back: i + 1 == 0,\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n front: i == this.APP.dialogEditBay.listBay.length,\n first: i == 0,\n last: i == this.APP.dialogEditBay.listBay.length,\n left: true,\n right: false,\n });\n this.addPost(offsetZ, {\n back: i == 0,\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n front: i == this.APP.dialogEditBay.listBay.length,\n first: i == 0,\n last: i == this.APP.dialogEditBay.listBay.length,\n left: false,\n right: true,\n });\n\n if (i < UI.listBay.length) {\n offsetZ += UI.listBay[i].value;\n }\n }\n\n //LEFT SIDE\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n let numOfBrakets = this.numberOfBracketsSide + 1;\n let distance =\n (UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4 >\n UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4) /\n (numOfBrakets - 1);\n for (let i = 0; i < numOfBrakets; i++) {\n this.addUpstandBraketExt(offsetZ, {\n back: i == 0,\n center: !(i + 1 == numOfBrakets) && !(i == 0),\n front: i + 1 == numOfBrakets,\n first: i == 0,\n last: i + 1 == numOfBrakets,\n left: true,\n right: false,\n });\n\n offsetZ += distance;\n }\n }\n\n //RIGHT SIDE\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n let numOfBrakets = this.numberOfBracketsSide + 1;\n let distance =\n (UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4 >\n UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1 - UI.eaveWidth - this.geoBraket_2.height / 4) /\n (numOfBrakets - 1);\n for (let i = 0; i < numOfBrakets; i++) {\n this.addUpstandBraketExt(offsetZ, {\n back: i == 0,\n center: !(i + 1 == numOfBrakets) && !(i == 0),\n front: i + 1 == numOfBrakets,\n first: i == 0,\n last: i + 1 == numOfBrakets,\n left: false,\n right: true,\n });\n\n offsetZ += distance;\n }\n }\n }\n public addUpstandBraket() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET\n )\n );\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n let distance = 1000;\n let offsetX = -UI.existingLength1 / 2;\n let spanLength = UI.span;\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n spanLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n spanLength -= 2 * UI.existingLength2;\n }\n }\n\n if (UI.existingType == 0) {\n let startX =\n -spanLength / 2 > -UI.existingLength1 / 2\n ? -spanLength / 2\n : -UI.existingLength1 / 2;\n let endX =\n spanLength / 2 < UI.existingLength1 / 2\n ? spanLength / 2\n : UI.existingLength1 / 2;\n distance = (endX - startX) / (this.numOfBraket - 1);\n offsetX = startX;\n } else if (UI.existingType == 1) {\n distance = (spanLength - _bracketOffsetXExt) / (this.numOfBraket - 1);\n offsetX = -spanLength / 2 + _bracketOffsetXExt;\n if (spanLength > UI.existingLength1 - UI.eaveWidth) {\n distance =\n (UI.existingLength1 - UI.eaveWidth - _bracketOffsetXExt) /\n (this.numOfBraket - 1);\n }\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -spanLength / 2 + UI.existingLength2 / 2 + _bracketOffsetXExt;\n }\n } else if (UI.existingType == 2) {\n offsetX = -spanLength / 2;\n distance = (spanLength - _bracketOffsetXExt) / (this.numOfBraket - 1);\n\n if (spanLength > UI.existingLength1 - UI.eaveWidth) {\n offsetX =\n -spanLength / 2 + (spanLength - UI.existingLength1 + UI.eaveWidth);\n distance =\n (UI.existingLength1 - _bracketOffsetXExt - UI.eaveWidth) /\n (this.numOfBraket - 1);\n }\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n } else if (UI.existingType == 3) {\n distance = (spanLength - _bracketOffsetXExt * 2) / (this.numOfBraket - 1);\n offsetX = -spanLength / 2 + _bracketOffsetXExt;\n }\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET,\n views: views,\n };\n for (let i = 0; i < this.numOfBraket; i++) {\n let posX = offsetX;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == this.numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n if (\n (UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH) &&\n i == 0\n ) {\n offsetX += distance;\n continue;\n }\n if (\n (UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH) &&\n i == this.numOfBraket - 1\n ) {\n offsetX += distance;\n continue;\n }\n\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth - UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetX += distance;\n }\n }\n private addDownPipeRight() {\n let offsetZ =\n this.totalBaySize - 50 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetX = UI.span / 2 + 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + +UI.upstandBraketType,\n UI.overhangRight,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geoBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangRight / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupRight.add(meshPipe);\n this.downpipeGroupRight.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangRight,\n offsetY,\n true\n );\n }\n }\n private addDownPipeLeft() {\n let offsetZ =\n this.totalBaySize - 50 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetX = -UI.span / 2 - 100;\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + +UI.upstandBraketType,\n UI.overhangLeft,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geoBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangLeft / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupLeft.add(meshPipe);\n this.downpipeGroupLeft.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangLeft,\n offsetY,\n true\n );\n }\n }\n private addGround() {\n let offsetX = -(UI.span / 2 + UI.overhangLeft);\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - UI.overhangBack;\n let width = UI.span + UI.overhangLeft + UI.overhangRight;\n let length =\n this.totalBaySize +\n UI.overhangFront +\n UI.overhangBack +\n this.APP.sldEaveWidth.currentValue +\n this.geoBraket_2.height / 4;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private getRoofHeight() {\n const _height = this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue,\n UI.span / 2,\n this.APP.sltRoofPitch.currentValue,\n 1\n );\n return this.APP.sldExistingWallHeight.currentValue - _height;\n }\n private updateUI() {\n this.APP.roofHeight = this.getRoofHeight();\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let braketGroup = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n );\n\n for (let g of braketGroup) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n g.children[1] as Mesh,\n 60\n );\n g.children[1].updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(g.children[1].matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: simplifiedGeo.vertices,\n views: g.userData.views,\n });\n\n g.children[0].updateMatrix();\n let objCloned = g.children[0].clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(g.children[0].matrix));\n\n let box = new BoxHelper(objCloned);\n\n g.children[0].updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(g.children[0].matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo1 = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo1.vertices,\n views: g.userData.views,\n });\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addCenterPost(offsetZ, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n this.frontPostHeight = UI.existingWallHeight + +UI.upstandBraketType;\n\n scalePostY =\n ((UI.span / 2 - this.geoBeam.width / 2) * this.utils.tan(UI.patiosPitch) -\n this.geoBeam.height) /\n this.geo_centerSuperiorPost.height;\n\n if (userDataPos.last) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let postOffsetX = -this.geo_centerSuperiorPost.width / 2;\n\n let postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n if (userDataPos.first) {\n postOffsetZ =\n offsetZ -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n } else if (userDataPos.last) {\n postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addPost(offsetZ: number, userDataPos: any) {\n const condition = offsetZ + this.APP.sldEaveWidth.currentValue;\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n\n let views: Print2DView[] = [];\n if (userDataPos.back || userDataPos.center) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let posZ =\n offsetZ -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n if (userDataPos.back) {\n posZ =\n offsetZ +\n this.postInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n } else if (userDataPos.front) {\n posZ =\n offsetZ -\n this.postInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n }\n\n let length =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n let scaleY = length / this.postInfo.height;\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2 + this.postInfo.width / 2;\n } else if (userDataPos.right) {\n offsetX = UI.span / 2 - this.postInfo.width / 2;\n }\n\n mesh.position.set(offsetX, 0, posZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n\n private addUpstandBraketExt(offsetZ: number, userDataPos: any) {\n if (\n UI.upstandBraketType == 0 ||\n UI.listBay.length == 0 ||\n UI.existingType == 0\n ) {\n return;\n }\n if (\n (this.existingType == 1 && userDataPos.right) ||\n (this.existingType == 2 && userDataPos.left)\n ) {\n return;\n }\n let _flag = false;\n\n const condition = offsetZ + this.APP.sldEaveWidth.currentValue;\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n } else if (!_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n }\n if (!_flag) {\n return;\n }\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5; // + this.geoBraket_1.width / 4;\n let height = 0;\n let offsetX = -UI.existingLength1 / 2;\n let spanLength = UI.span;\n\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n spanLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n spanLength -= 2 * UI.existingLength2;\n }\n }\n\n const _cond1 =\n UI.existingWidth1 < condition &&\n UI.existingWidth1 + UI.existingWidth2 > condition;\n const _cond2 =\n userDataPos.isMultiSpan &&\n UI.existingWidth1 < condition + UI.multiSpan &&\n UI.existingWidth1 + UI.existingWidth2 > condition + UI.multiSpan;\n\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n offsetX = -spanLength / 2 + this.geoBraket_1.width - FASCIA_BRACKET_FIT;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -spanLength / 2 + UI.existingLength2 / 2;\n }\n offsetX += _bracketOffsetXExt;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n offsetX = spanLength / 2 - this.geoBraket_1.width + FASCIA_BRACKET_FIT;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n offsetX -= _bracketOffsetXExt;\n } else if (UI.existingType == 3) {\n offsetX =\n (-spanLength / 2) * (userDataPos.left ? 1 : -1) +\n (userDataPos.left ? this.geoBraket_1.width - FASCIA_BRACKET_FIT : 0) -\n (userDataPos.right ? this.geoBraket_1.width - FASCIA_BRACKET_FIT : 0);\n if ((!userDataPos.isMultiSpan && _cond1) || _cond2) {\n offsetX -=\n UI.existingLength2 * (userDataPos.left ? 1 : -1) +\n (userDataPos.right ? this.geoBraket_1.width : 0);\n }\n offsetX += _bracketOffsetXExt * (userDataPos.left ? 1 : -1);\n }\n\n let posZ =\n offsetZ -\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth;\n if (userDataPos.front) {\n posZ =\n offsetZ - this.geoBraket_1.width - UI.existingWidth1 / 2 + UI.eaveWidth;\n }\n if (userDataPos.back) {\n posZ =\n offsetZ +\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth;\n }\n\n height = +UI.upstandBraketType;\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2:\n UI.existingType == 2 ? this.geoBraketExtR_2 : this.geoBraketExtL_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n if (UI.existingType == 1) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtL_2 };\n } else if (UI.existingType == 2) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtR_2 };\n } else {\n optionBrakets = {\n ...optionBrakets,\n geoBraket_2: userDataPos.right\n ? this.geoBraketExtR_2\n : this.geoBraketExtL_2,\n };\n }\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n if (userDataPos.right) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(offsetX, UI.existingWallHeight, posZ),\n userData: { type: GEOMETRY_TYPE.UPSTAND_BRAKET_EXT, views },\n });\n }\n\n public addBeam(offsetZ: number, userDataPos: any) {\n let offsetY = 0;\n let offsetX = -UI.span / 2 + this.postInfo.width;\n if (userDataPos.back) {\n offsetX = -UI.span / 2 + this.geoBeam.width;\n }\n\n let beamLength = UI.span - 2 * this.postInfo.width;\n if (userDataPos.back) {\n beamLength = UI.span - 2 * this.geoBeam.width;\n }\n\n let posZ = 0;\n let views: Print2DView[] = [];\n if (userDataPos.front) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n posZ =\n offsetZ -\n this.geoBeam.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.center) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n posZ =\n offsetZ -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n posZ =\n offsetZ +\n this.geoBeam.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let beamGroup: Group;\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n } else {\n beamGroup = this.utils.createBeamGroup2(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n false,\n {\n hasStartCap: UI.beamType == 0,\n hasEndCap: UI.beamType == 0,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n );\n }\n\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n\n this.scene.add(beamGroup);\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n offsetY = UI.existingWallHeight + +UI.upstandBraketType;\n offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n if (userDataPos.left) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY + this.beamInfo.height, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartZ = pos.z - length;\n const beamEndZ = pos.z;\n\n let endOfBayZ =\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let startCutBeamZ = beamStartZ;\n let endCutBeamZ = beamStartZ;\n\n const beams = this.utils.getListSeperateBeamsByBaysForFbGable(\n endOfBayZ,\n beamStartZ,\n beamEndZ,\n endCutBeamZ,\n startCutBeamZ\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamZ = beams[i][1];\n startCutBeamZ = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamZ - startCutBeamZ,\n new Vector3(pos.x, pos.y, endCutBeamZ),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasEndCap: UI.beamType == 0 && i == 0,\n hasStartJoint: false,\n hasEndJoint: i !== 0,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addRafterSuperiorBeam(offsetZ, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n (UI.span / 2 - this.geoBeam.width / 2) / this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n\n let scaleX =\n (UI.span / 2 - this.geoBeam.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let fitZ = 0;\n\n if (userDataPos.left) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n\n let nVer = new Vector3(-1, 0, 0).normalize();\n let pVer = new Vector3(\n -this.geoBeam.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.right) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n let nVer = new Vector3(1, 0, 0).normalize();\n let pVer = new Vector3(\n this.geoBeam.width / 2 + beamOffsetX + this.scene.position.x + fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.left) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n -translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n -translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2;\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n } else if (userDataPos.right) {\n offsetX = this.geo_centerSuperiorPost.width / 2;\n offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.geoBeam.height +\n (UI.span / 2 - this.geoBeam.width / 2) * this.utils.tan(UI.patiosPitch);\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n if (userDataPos.left) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.right) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n public addCenterSuperiorBeam() {\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n let offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n (UI.span / 2 - this.geoBeam.width / 2) * this.utils.tan(UI.patiosPitch);\n let offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(0, offsetY + this.beamInfo.height, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n { center: true },\n 0,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n }\n }\n }\n}\n","import { BoxBufferGeometry, BufferGeometry, Color, Geometry, Group, LineSegments, Material, Matrix4, Mesh, MeshLambertMaterial, Object3D, Plane, Vector3 } from 'three';\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from '../../app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RAKECUT_TYPE } from '../../app.constants';\nimport { Util } from '../utils';\n// import { AppComponent } from '../../app.component';\nimport HighLightBox from 'src/app/models/HighlightBox';\nimport { CSG } from 'three-csg-ts';\nimport { GableFBFasciaManager } from '.';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, LineType, Print2DView, Printing2DGeometry, Printing2DLine, ViewType } from '../models';\nimport { UI } from '../ui';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableFBFasciaManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n public ridgeGeo: GeometryInfo;\n private roofInfo: GeometryInfo;\n private roofBaseInfo: GeometryInfo;\n private zFlashingGeo: GeometryInfo\n private zFlashingRakecutRightGeo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private bargeFrontInfo: GeometryInfo;\n private bargeBackInfo: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n // Var\n private roofLength: number;\n private roofLengthPlus: number;\n private roofWidth: number;\n //private existingTypeLeftX: number;\n //private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofGroupRight: Group;\n private roofGroupLeft: Group;\n private cutoutExistingBothLength: number;\n\n constructor(app: AppComponent, fasciaManager: GableFBFasciaManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.scene = new Group();\n fasciaManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldBaySize,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldExistingWidth1,\n this.APP.sldNoOfBay,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sltExistingType,\n this.APP.sltColourDownpipe,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofSheetPanel();\n this.roofInfo.geometry\n .translate(-this.roofInfo.width / 2 + 10, -1, this.roofInfo.length / 2)\n .rotateY(Math.PI / 2);;\n\n this.roofBaseInfo = this.geometryManager.getRoofBase();\n this.roofBaseInfo.geometry\n .translate(-this.roofBaseInfo.width / 2, this.roofBaseInfo.height / 2, this.roofBaseInfo.length / 2)\n .rotateY(Math.PI / 2);;\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0).rotateY(Math.PI / 2);\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(-this.zFlashingRakecutRightGeo.length, 0, 0);\n\n // Barge capping\n this.bargeLeftInfo = this.geometryManager.getBarge();\n this.bargeLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeLeftInfo.length / 2, this.bargeLeftInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.bargeLeftInfo.width / 2 + 3);\n\n this.bargeRightInfo = this.geometryManager.getBarge();\n this.bargeRightInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeRightInfo.length / 2, this.bargeRightInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeRightInfo.width / 2 - 3);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 + 2, this.geo_receiverChanel.width / 2);\n\n // Gutter\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(800, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(0, this.geoBraket_2.length / 2, - this.geoBraket_2.height / 4);\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(0, this.geoBeamEndCap.height / 2, this.geoBeamEndCap.length / 2)\n .rotateY(Math.PI / 2);\n\n this.bargeFrontInfo = this.geometryManager.getBarge();\n this.bargeFrontInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeFrontInfo.length / 2, this.bargeFrontInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.bargeFrontInfo.width / 2);\n\n this.bargeBackInfo = this.geometryManager.getBarge();\n this.bargeBackInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeBackInfo.length / 2, this.bargeBackInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeBackInfo.width / 2 - 3);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutRight.length / 2);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutRight.length / 2);\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutRightHor.width / 2);\n\n this.ridgeGeo = this.geometryManager.getRidge();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n this.roofLength = UI.span / 2 + UI.overhangRight;\n this.roofLengthPlus = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n\n this.roofWidth = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n this.cutoutExistingBothLength = (this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2;\n\n this.addRoofGroupRight();\n this.addRoofGroupLeft();\n this.addCutout();\n\n this.existingType = +this.APP.sltExistingType.currentValue;\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n this.material.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n\n const roofPanelCount = Math.ceil(this.roofWidth / this.roofInfo.width);\n let offsetZ = - UI.overhangBack;\n\n //panel direction\n let panelDirectionOfset = 1;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n offsetZ = this.totalBaySize + UI.overhangFront - this.roofInfo.width;\n panelDirectionOfset = -1;\n }\n else if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT) {\n offsetZ = - UI.overhangBack;\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = true;\n\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBaseRight(offsetZ, [this.csg_cutoutLeft]);\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft]);\n\n this.addRoofBaseLeft(offsetZ, [this.csg_cutoutLeft]);\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n\n this.addRoofBaseRight(offsetZ, [this.csg_cutoutRight]);\n this.addRoofRight(offsetZ, [this.csg_cutoutRight]);\n\n this.addRoofBaseLeft(offsetZ, [this.csg_cutoutRight]);\n this.addRoofLeft(offsetZ, [this.csg_cutoutRight]);\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n let flag = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoofBaseRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofBaseLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofBaseRight(offsetZ, []);\n this.addRoofRight(offsetZ, []);\n\n this.addRoofBaseLeft(offsetZ, []);\n this.addRoofLeft(offsetZ, []);\n offsetZ += this.roofInfo.width * panelDirectionOfset;\n }\n }\n\n this.addZFlashingRight();\n this.addZFlashingLeft();\n\n this.addBargeCappingRight();\n this.addBargeCappingLeft();\n\n this.addGutterRight();\n this.addGutterLeft();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 - this.APP.sldEaveWidth.currentValue;\n let offsetY = 0;\n const eaveThickness = 50;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + UI.eaveWidth + eaveThickness - UI.overhangBack;\n\n //extra length to prevent lack when cut\n let extra = 5000;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + extra) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + extra) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + UI.overhangBack + extra) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX - this.APP.sldLeftOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX + this.APP.sldRightOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n public addZFlashingRight() {\n let offsetX = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = this.totalBaySize + UI.overhangFront;\n let zFlashingLength = this.roofWidth;\n\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(1, 1, scaleX);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupRight.add(mesh);\n }\n public addZFlashingLeft() {\n let offsetX = (UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = - UI.overhangBack;\n let zFlashingLength = this.roofWidth;\n\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(-offsetX, offsetY, offsetZ);\n mesh.scale.set(1, 1, scaleX);\n mesh.rotateY(Math.PI)\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupLeft.add(mesh);\n }\n public addRoofGroupRight() {\n this.roofGroupRight = null;\n this.roofGroupRight = new Group();\n this.roofGroupRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n this.roofGroupRight.position.setY(offsetY);\n this.roofGroupRight.position.setZ(offsetZ);\n this.roofGroupRight.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n\n this.scene.add(this.roofGroupRight);\n }\n public addRoofGroupLeft() {\n this.roofGroupLeft = null;\n this.roofGroupLeft = new Group();\n this.roofGroupLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n this.roofGroupLeft.position.setY(offsetY);\n this.roofGroupLeft.position.setZ(offsetZ);\n this.roofGroupLeft.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n\n this.scene.add(this.roofGroupLeft);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );;\n\n let gutterGroupObjs = this.roofGroupRight.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n .concat(\n ...this.roofGroupLeft.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n );;\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, clipingPlaneBack);\n }\n\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"ROOF_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForFBRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4 - UI.overhangBack)))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneFront);\n outlineGeo = this.utils.clipOutline(outlineGeo, clipingPlaneBack);\n }\n\n var line = new LineSegments(outlineGeo, MaterialManager.Instance().MESH_OUTLINE);\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoofRight(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = (this.roofLengthPlus - offsetPitch) / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetX = 0;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofLeft(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) - offsetPitch) / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetX = - scaleZ * this.roofInfo.length;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, \n length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n \n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n public addRoofBaseRight(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n let scaleZ = ((UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) - offsetPitch - 60) / this.roofBaseInfo.length;\n let offsetY = 0;\n let offsetX = 0;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n private addRoofBaseLeft(offsetZ: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n // { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n let scaleZ = ((UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) - offsetPitch - 60) / this.roofBaseInfo.length;\n let offsetY = 0;\n let offsetX = - scaleZ * this.roofBaseInfo.length ;\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupLeft.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n private addBargeCappingRight() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL2 = 0;\n\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let offsetY = 0;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - fitScale * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n\n //right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - fitScale * this.bargeRightInfo.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n }\n private addBargeCappingLeft() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = 0;\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + extraWallWidth;\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let bargeBackLength = this.roofWidth;\n let scaleCutoutVer = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue + this.bargeLeftInfo.width, this.APP.sltRoofPitch.currentValue) / this.bargeLeftInfo.length;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangLeft;\n let bargeRightLength = UI.span / 2 + UI.overhangLeft;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.bargeLeftInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n //left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - scaleZLeft * this.bargeLeftInfo.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n\n //right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - scaleZRight * this.bargeRightInfo.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n }\n public addGutterRight() {\n let offsetXL = (UI.span / 2 + UI.overhangRight - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n let offsetZ = this.totalBaySize + UI.overhangFront;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(0, Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupRight.add(gutterGroup); \n }\n public addGutterLeft() {\n let offsetXL = (UI.span / 2 + UI.overhangLeft - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n let offsetZ = - UI.overhangBack;\n\n let gutterLength = this.roofWidth;\n let exLength = 300\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(-offsetXL, offsetY, offsetZ), new Vector3(0, -Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupLeft.add(gutterGroup); \n }\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n\n const height = this.getRoofOffsetY() + \n this.roofBaseInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) + \n this.roofInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) - \n (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1 ? 20 : 10);\n \n let offsetX = 0\n \n const ridgeLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.position.set( offsetX, height, this.totalBaySize / 2 + (UI.overhangFront - UI.overhangBack) / 2 + this.geoBraket_2.height / 4 - UI.existingWidth1 / 2 + UI.eaveWidth);\n this.scene.add(ridgeFront)\n }\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n\n rightCap.rotateY(Math.PI)\n\n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n\n leftCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n\n return new Group().add(leftCap, rightCap)\n }\n\n public getRoofOffsetY() {\n return UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2);\n }\n}\n\n","import {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG as CONST,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n} from \"src/app/app.constants\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n Vector3,\n} from \"three\";\nimport { PatiosGableFBFlyOverManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"../../app.config\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util, getRafterBeamEndCapCode } from \"../utils\";\nimport _ from \"lodash\";\n\nexport class ColumnAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableFBFlyOverManager;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private geo_superiorPost: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private downpipeGroupRight: Group;\n private downpipeGroupLeft: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n private totalBaySize: number;\n private extraOffsetZ: number;\n private geoBeamJoint: GeometryInfo;\n\n private frontPostHeight: number;\n //private extraBracketHeight = 250;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private deferHandle;\n private deferTimeout = CONST.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketsBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n public numberOfBracketsSide = INIT.DEFAULT_BRACKET_NUMBER;\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableFBFlyOverManager) {\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = flyOverManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoBeamJoint.geometry.translate(0, this.geoBeamJoint.height, 0);\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n\n this.downpipeGroupRight = new Group();\n this.downpipeGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupRight.rotateY(Math.PI / 2);\n this.scene.add(this.downpipeGroupRight);\n\n this.downpipeGroupLeft = new Group();\n this.downpipeGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.downpipeGroupLeft.rotateY(-Math.PI / 2);\n this.scene.add(this.downpipeGroupLeft);\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter((x) => x.userData.type == \"BOXHELPER\")\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n this.downpipeGroupRight.children = [];\n this.downpipeGroupLeft.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.cutoutExistingBothLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addCenterSuperiorBeam();\n this.addGround();\n\n let offsetZ = 0;\n let first = true;\n let last = false;\n\n this.addHorSuperiorBeam(-UI.span / 2, {\n left: true,\n first: true,\n last: false,\n });\n this.addHorSuperiorBeam(UI.span / 2 - this.geo_superiorBeam.width, {\n right: true,\n first: false,\n last: true,\n });\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n\n this.addSuperiorBeam(offsetZ, {\n back: i == 0,\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n front: i == this.APP.dialogEditBay.listBay.length,\n });\n\n this.addCenterPost(offsetZ, {\n center: !(i == this.APP.dialogEditBay.listBay.length) && !(i == 0),\n first: i == 0,\n last: i == this.APP.dialogEditBay.listBay.length,\n });\n\n let fitBeam = 0;\n if (i > 0 && i < this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width / 2;\n } else if (i == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_RafterBeam.width;\n }\n\n this.addRafterSuperiorBeam(\n offsetZ - fitBeam - UI.existingWidth1 / 2 - this.extraOffsetZ,\n {\n front: i == this.APP.dialogEditBay.listBay.length,\n right: true,\n first,\n last,\n }\n );\n this.addRafterSuperiorBeam(\n offsetZ - fitBeam - UI.existingWidth1 / 2 - this.extraOffsetZ,\n { back: i == 0, left: true, first, last }\n );\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetZ += b.value;\n }\n first = false;\n }\n first = true;\n last = false;\n\n this.addBraketOrBeamSideRoof();\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n\n this.addDownPipeRight();\n this.addDownPipeLeft();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n public addBraketOrBeamSideRoof() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData?.position?.back\n )\n );\n\n // LEFT SIDE\n let numOfBrakets = this.numberOfBracketsSide;\n let first = true;\n let last = false;\n\n let offsetZ = 0;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == UI.listBay.length) {\n last = true;\n }\n if (\n i !== 0 &&\n (offsetZ - 2 * this.geo_superiorPost.width > UI.existingWidth1 ||\n (UI.existingType != BUILDING_SIDE.LEFT &&\n UI.existingType != BUILDING_SIDE.BOTH))\n ) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == UI.listBay.length) && !(i == 0),\n front: i == UI.listBay.length,\n first: i == 0,\n last: i == UI.listBay.length,\n left: true,\n right: false,\n });\n }\n\n if (i < UI.listBay.length) {\n offsetZ += UI.listBay[i].value;\n }\n first = false;\n }\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n numOfBrakets = this.numberOfBracketsSide;\n let distance =\n (UI.existingWidth1 > UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1) / numOfBrakets;\n for (let i = 0; i <= numOfBrakets; i++) {\n if (i == numOfBrakets) {\n last = true;\n }\n if (i !== 0) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == numOfBrakets) && !(i == 0),\n front: i == numOfBrakets,\n first: i == 0,\n last: i == numOfBrakets,\n left: true,\n right: false,\n });\n }\n\n offsetZ += distance;\n first = false;\n }\n }\n\n //RIGHT SIDE\n offsetZ = 0;\n for (let i = 0; i <= UI.listBay.length; i++) {\n if (i == UI.listBay.length) {\n last = true;\n }\n if (\n i !== 0 &&\n (offsetZ - 2 * this.geo_superiorPost.width > UI.existingWidth1 ||\n (UI.existingType != BUILDING_SIDE.RIGHT &&\n UI.existingType != BUILDING_SIDE.BOTH))\n ) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == UI.listBay.length) && !(i == 0),\n front: i == UI.listBay.length,\n first: i == 0,\n last: i == UI.listBay.length,\n left: false,\n right: true,\n });\n }\n\n if (i < UI.listBay.length) {\n offsetZ += UI.listBay[i].value;\n }\n first = false;\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n offsetZ = 0;\n numOfBrakets = this.numberOfBracketsSide;\n let distance =\n (UI.existingWidth1 > UI.totalBayLength\n ? UI.totalBayLength\n : UI.existingWidth1) / numOfBrakets;\n for (let i = 0; i <= numOfBrakets; i++) {\n if (i == numOfBrakets) {\n last = true;\n }\n if (i !== 0) {\n this.addPostOrBracket(offsetZ, {\n back: i == 0,\n center: !(i == numOfBrakets) && !(i == 0),\n front: i == numOfBrakets,\n first: i == 0,\n last: i == numOfBrakets,\n left: false,\n right: true,\n });\n }\n\n offsetZ += distance;\n first = false;\n }\n }\n }\n private addDownPipeRight() {\n let offsetZ = this.totalBaySize - this.extraOffsetZ - 50;\n let offsetX = UI.span / 2 + 100;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= offsetXExtra;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += offsetXExtra;\n }\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.overhangRight,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangRight / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupRight.add(meshPipe);\n this.downpipeGroupRight.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupRight,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangRight,\n offsetY,\n true\n );\n }\n }\n private addDownPipeLeft() {\n let offsetZ = this.totalBaySize - this.extraOffsetZ - 50;\n let offsetX = -UI.span / 2 - 100;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= offsetXExtra;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetXExtra =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += offsetXExtra;\n }\n\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.overhangLeft,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.geo_downPipe.height);\n meshPipe.position.set(\n 0,\n -190,\n UI.overhangLeft / this.utils.cos(UI.patiosPitch) -\n this.geo_downPipe.width / 2 -\n 20\n );\n\n this.downpipeGroupLeft.add(meshPipe);\n this.downpipeGroupLeft.position.set(offsetX, offsetY, offsetZ);\n } else {\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroupLeft,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n 0,\n 0,\n UI.overhangLeft,\n offsetY,\n true\n );\n }\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"OUTLINE\"};\n // //line.position.set(o.position.x - 5000, o.position.y, o.position.z);\n // this.scene.add( line );\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n //let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n //simplifiedGeo.vertices.push();\n\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n //lineGeo.vertices.push(new Vector3(vertices[i+3], vertices[i+4], vertices[i+5]));\n\n //if(i == 18) break;\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n\n private addGround() {\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.extraOffsetZ +\n UI.overhangBack\n );\n let width = UI.span + UI.overhangLeft + UI.overhangRight;\n let length = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set((UI.overhangRight - UI.overhangLeft) / 2, 0, offsetZ);\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (this.APP.sltExistingType.currentValue == 1) {\n base.position.setX(offsetX);\n }\n if (this.APP.sltExistingType.currentValue == 2) {\n base.position.setX(-offsetX);\n }\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetZ: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n let scalePostY =\n (UI.existingWallHeight +\n +this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height) /\n this.geo_superiorPost.height;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n if (userDataPos.front) {\n postOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n if (userDataPos.center) {\n postOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let offsetX = -UI.span / 2;\n if (userDataPos.right) {\n offsetX = UI.span / 2;\n }\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.left) {\n } else if (userDataPos.right) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n let exceedMoveBackLimit = false;\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n let boxPost = new Box3().setFromObject(meshPost);\n // let boxPostHelper = new Box3Helper(boxPost);\n // this.APP.scene.add(boxPostHelper);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue != 3) {\n if (meshBracket.userData.position.left) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (meshBracket.userData.position.right) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n }\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n\n public addPostOrBracketBack() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -UI.span / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = UI.span / (this.numberOfBracketsBack - 1);\n\n for (let i = 0; i < this.numberOfBracketsBack; i++) {\n if (i == this.numberOfBracketsBack - 1) {\n last = true;\n }\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let bracketOffsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n UI.braketHeight / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, bracketOffsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n\n let isIntersect = false;\n //let isCutoutInterset = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketsBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -UI.span / 2;\n let offsetXR = UI.span / 2;\n\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n let bracketDistance =\n (this.APP.sldExistingLength2.currentValue - extraWalWidth) /\n (this.numberOfBracketCutout - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n this.APP.sldExistingLength2.currentValue /\n (this.numberOfBracketCutout - 1);\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n //let offsetX = 0;\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL;\n if (first) {\n } else if (last) {\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n first = true;\n\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n public addCenterSuperiorBeam() {\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangFront);\n let offsetXR = this.totalBaySize / 2 + UI.overhangBack;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n (UI.span / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const fixX = this.getContainerOffsetXToFitBraketToExistingWall();\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(fixX - this.geo_superiorBeam.width / 2, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n { center: true },\n this.geo_beamEndCap.width / 2,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let offsetXL = 0;\n let offsetXR = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n this.totalBaySize +\n UI.overhangFront -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n if (userDataPos.left) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const fixX = this.getContainerOffsetXToFitBraketToExistingWall();\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX + fixX, offsetY, offsetZ),\n new Vector3(0, Math.PI / 2, 0),\n views,\n 1,\n userDataPos,\n this.geo_beamEndCap.width / 2,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n return fitX;\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartZ = pos.z - length;\n const beamEndZ = pos.z;\n\n let endOfBayZ = -UI.existingWidth1 / 2 - this.extraOffsetZ;\n let startCutBeamZ = beamStartZ;\n let endCutBeamZ = beamStartZ;\n\n const beams = this.utils.getListSeperateBeamsByBaysForFbGable(\n endOfBayZ,\n beamStartZ,\n beamEndZ,\n endCutBeamZ,\n startCutBeamZ\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamZ = beams[i][1];\n startCutBeamZ = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamZ - startCutBeamZ,\n new Vector3(pos.x, pos.y, endCutBeamZ),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasEndCap: UI.beamType == 0 && i == 0,\n hasStartJoint: false,\n hasEndJoint: i !== 0,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private addCenterPost(offsetZ, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n this.frontPostHeight =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n\n scalePostY =\n ((UI.span / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.geo_superiorBeam.height) /\n this.geo_centerSuperiorPost.height;\n\n if (userDataPos.last) {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n let postOffsetX = -this.geo_centerSuperiorPost.width / 2;\n\n let postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n if (userDataPos.first) {\n postOffsetZ = offsetZ - UI.existingWidth1 / 2 - this.extraOffsetZ;\n } else if (userDataPos.last) {\n postOffsetZ =\n offsetZ -\n this.geo_centerSuperiorPost.width -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX -= offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX += offsetX;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addRafterSuperiorBeam(offsetZ, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n (UI.span / 2 - this.geo_superiorBeam.width / 2) /\n this.utils.cos(UI.patiosPitch);\n let offsetY = 0;\n\n let scaleX =\n (UI.span / 2 - this.geo_superiorBeam.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n let fitZ = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n fitZ = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) -\n this.geo_superiorBeam.width / 2\n );\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) -\n this.geo_superiorBeam.width / 2;\n }\n\n if (userDataPos.left) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n\n let nVer = new Vector3(-1, 0, 0).normalize();\n let pVer = new Vector3(\n -this.geo_superiorBeam.width / 2 +\n beamOffsetX +\n this.scene.position.x +\n fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.right) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n let nVer = new Vector3(1, 0, 0).normalize();\n let pVer = new Vector3(\n this.geo_superiorBeam.width / 2 +\n beamOffsetX +\n this.scene.position.x +\n fitZ,\n 0,\n 0\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.left) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n -translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n -translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n this.utils.degreesToRadians(UI.patiosPitch)\n );\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n translateZ / 2,\n heightPlane,\n 0\n );\n let matrixRotateTop = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * UI.span) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n translateZBottom / 2,\n heightPlaneBottom,\n 0\n );\n let matrixRotateBottom = new Matrix4().makeRotationZ(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n let beamOffsetX = 0;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n beamOffsetX -=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n beamOffsetX +=\n this.MANAGER.columnAndBeamManager.geo_bracket?.width / 2 || 0;\n }\n\n planeTop.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n planeBottom.translate(\n new Vector3(beamOffsetX + this.scene.position.x + fitZ, 0, 0)\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let offsetX = 0;\n if (userDataPos.left) {\n offsetX = -UI.span / 2;\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height;\n } else if (userDataPos.right) {\n offsetX = this.geo_centerSuperiorPost.width / 2;\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (UI.span / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n if (userDataPos.left) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.right) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n\n public addSuperiorBeam(offsetZ: number, userDataPos: any) {\n let offsetX = -UI.span / 2 + this.geo_superiorPost.width;\n if (userDataPos.back) {\n offsetX = -UI.span / 2 + this.geo_superiorBeam.width;\n }\n let offsetY = 0;\n\n let beamLength = UI.span - 2 * this.geo_superiorPost.width;\n if (userDataPos.back) {\n beamLength = UI.span - 2 * this.geo_superiorBeam.width;\n }\n if (\n offsetZ - this.geo_bracket.width - this.geo_superiorPost.width / 2 <\n UI.existingWidth1 &&\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n beamLength = UI.span - 2 * this.geo_superiorBeam.width;\n offsetX = -UI.span / 2 + this.geo_superiorBeam.width;\n }\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n let posZ = offsetZ;\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n posZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ -\n this.geo_superiorBeam.width;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.center) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n posZ =\n offsetZ -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ -\n this.geo_superiorBeam.width / 2;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n posZ =\n offsetZ -\n (this.APP.sldExistingWidth1.currentValue / 2 + this.extraOffsetZ);\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n let beamGroup = this.utils.createBeamGroup(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n this.scene.add(beamGroup);\n\n //Add one more beam cutout right\n if (userDataPos.cutout && this.APP.sltExistingType.currentValue == 3) {\n offsetX =\n UI.span / 2 -\n (UI.span - this.APP.sldExistingLength.currentValue) / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK -\n this.geo_superiorBeam.width -\n (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2);\n let beamGroup = this.utils.createBeamGroup(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, posZ),\n new Vector3(),\n views,\n 1,\n userDataPos\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: \"GB\",\n };\n this.scene.add(beamGroup);\n }\n }\n public getBracketHeight(offset): number {\n let angle = UI.patiosPitch;\n return this.utils.tan(angle) * offset;\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, ArrowHelper, BufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosGableFBFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { BUILDING_SIDE, PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosGableFBFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n private dimensionPatiosPlanLeftOverHang: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableFBFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n \n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n \n\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMiddle.userData = { type: GEOMETRY_TYPE.DIMENSION };\n //this.dimensionPlanMiddle.rotation.set(-Math.PI / 2, 0, 0);\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosPlanLeftOverHang = new Group();\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLeftLeft,\n this.dimensionPlanMidleLeft\n );\n\n\n\n loader.load( environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n \n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if(this.APP.patiosManager && this.APP.patiosManager.patiosGroup){\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosPlanLeftOverHang\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPatiosPlanLeftOverHang.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n // this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionMidleLeft() {\n let offsetX = 0;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX = -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetZ = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI, 0);\n }\n else {\n let offsetZ = - UI.overhangBack - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.dimensionPlanMidleLeft.rotation.set(0, 0, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX = -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) + this.totalBaySize / 2;\n this.dimensionPlanMiddle.rotation.set(0, 0, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom(){\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views },\n textCloneRotation: new Vector3(0, 0, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, 0, 0)\n }\n let dimSpan = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, UI.overhangLeft, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, UI.span / 2, UI.overhangRight, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n let offsetX = -this.totalBaySize / 2;\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true }, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textRotation: new Vector3(0, - Math.PI, 0),\n fitZ: -10\n }\n let dimBay = this.dimensionPatiosPlanRight.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n \n let offsetRight = this.totalBaySize / 2 ;\n let offsetLeft = this.totalBaySize / 2;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, UI.overhangFront, views, \"Right\", Math.PI,\"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, UI.overhangBack, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n dim.userData['position'] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n \n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let height = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n let dimOffsetY = height/2;\n\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n this.dimensionPatiosRightLeft.position.set(0,this.dimensionPatiosLeftRight.position.y,this.dimensionPatiosLeftRight.position.z);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() { \n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z + fitZ))\n textCover.position.set(pos.x , pos.y, pos.z);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosPlanLeftOverHang.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n\n ]){\n if(!dim.userData.views){\n // console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n\n private getGeometryFromBufferGeometry(bufferGeo: BufferGeometry) {\n let points: Vector3[] = [];\n let verties = bufferGeo.getAttribute('position').array;\n for (let i = 0; i < verties.length; i += 3) {\n points.push(new Vector3(verties[i], verties[i + 1], verties[i+2]));\n }\n\n return new Geometry().setFromPoints(points);\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n \n //this.APP.sldSpan.addAction(this.eventHandleId);\n //this.APP.sldMultiSpan.addAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.addAction(this.eventHandleId);\n //this.APP.sldExistingLength.addAction(this.eventHandleId);\n //this.APP.sldExistingLength2.addAction(this.eventHandleId);\n //this.APP.sltExistingType.addAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.addAction(this.eventHandleId);\n //this.APP.dialogEditBay.addAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.addAction(this.eventHandleId);\n //this.APP.sldRightOverhang.addAction(this.eventHandleId);\n //this.APP.sldBackOverhang.addAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.addAction(this.eventHandleId);\n //this.APP.sltRoofPitch.addAction(this.eventHandleId);\n }\n private unregisterEvent(): void{\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.APP.sldSpan.removeAction(this.eventHandleId);\n //this.APP.sldMultiSpan.removeAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength2.removeAction(this.eventHandleId);\n //this.APP.sltExistingType.removeAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.removeAction(this.eventHandleId);\n //this.APP.dialogEditBay.removeAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.removeAction(this.eventHandleId);\n //this.APP.sldRightOverhang.removeAction(this.eventHandleId);\n //this.APP.sldBackOverhang.removeAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.removeAction(this.eventHandleId);\n //this.APP.sltRoofPitch.removeAction(this.eventHandleId);\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let height = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n let dimOffsetY = height/2;\n dimension.position.setY(dimOffsetY);\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n //let dimOffsetY = this.APP.sldBuildingHeight.currentValue / 2;\n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n // let offsetDimensionZ = this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // - this.APP.sldExistingWidth1.currentValue / 2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n // dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.totalBaySize / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.utils.getHeightByAngle(UI.eaveHeight + UI.braketHeight + this.geometryManager.getBeam().height, UI.span / 2, this.APP.sltRoofPitch.currentValue, 1);\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { ColumnAndBeamManager } from \"./column-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { Group, Box3, Vector3, Box3Helper } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"../models\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n EXISTING_BUILDING_CONFIG,\n CUTOUT_ENABLE,\n RAKECUT_TYPE,\n BUILDING_SIDE,\n} from \"src/app/app.constants\";\nimport { environment } from \"src/environments/environment\";\nimport { UI } from \"../ui\";\n// import { environment } from 'src/environments/environment';\n\nexport class PatiosGableFBFlyOverManager implements PatiosManager {\n public columnAndBeamManager: ColumnAndBeamManager;\n public roofManager: RoofManager;\n private APP: AppComponent;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n public dimensionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n this.patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndBeamManager = new ColumnAndBeamManager(app, this);\n this.dimensionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndBeamManager.optimize(),\n this.dimensionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndBeamManager.load();\n this.dimensionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsBack = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsSide = bracketQuantity;\n this.columnAndBeamManager.addBraketOrBeamSideRoof();\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimensionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimensionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltBeamLayoutShow,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.patiosLength = totalBaySize + UI.overhangFront;\n this.patiosWidth = UI.span + UI.overhangLeft + UI.overhangRight;\n\n let diff = this.APP.sldExistingLength.currentValue - UI.span;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndBeamManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndBeamManager.load(),\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimensionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left = -UI.span / 2 - UI.overhangLeft;\n let right = UI.span / 2 + UI.overhangRight;\n let front =\n this.APP.dialogEditBay.totalBaySize + UI.overhangFront + UI.overhangBack;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff = (this.APP.sldExistingLength.currentValue - UI.span) / 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","\nimport { Mesh, Vector3, Material, Plane, Group, BufferGeometry, Geometry, BoxBufferGeometry, MeshLambertMaterial, Matrix4, Object3D, LineSegments, LineBasicMaterial, Box3, Box3Helper, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { GEOMETRY_TYPE, GEOMETRY_CATEGORY } from '../../app.config';\n// import { AppComponent } from \"../../app.component\";\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Print2DView, ViewType, LineType, Printing2DLine, Printing2DGeometry } from '../models';\nimport { PatiosGableFBFlyOverManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport { EXISTING_BUILDING_CONFIG, RAKECUT_TYPE, EXISTING_BUILDING_CONFIG as CONST, BUILDING_SIDE, CUTOUT_ENABLE, PANEL_DIRECTION, FIT_FLYOVER_BRAKET_ON_ROOF } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\nimport HighLightBox from \"src/app/models/HighlightBox\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableFBFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBase: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private roofGroupRight: Group;\n private roofGroupLeft: Group;\n\n private objectSizeChangedHandle: any;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG\n \n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableFBFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = new Group();\n flyOverManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve) => {\n\n this.geo_RoofPanel = this.geometryManager.getRoofSheetPanel();\n this.geo_RoofPanel.geometry\n .translate(-this.geo_RoofPanel.width / 2 + 10, this.geo_RoofPanel.height / 2 -1, this.geo_RoofPanel.length / 2)\n .rotateY(Math.PI / 2);\n\n this.geo_roofPanelBase = this.geometryManager.getRoofBase();\n this.geo_roofPanelBase.geometry\n .translate(-this.geo_roofPanelBase.width / 2,\n this.geo_roofPanelBase.height / 2,\n this.geo_roofPanelBase.length / 2)\n .rotateY(Math.PI / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0).rotateY(Math.PI / 2);\n\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(-this.zFlashingRakecutRightGeo.length, -3, 0);\n\n //Barge capping\n\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingLeft.length / 2, this.geo_roofPanelBargeCappingLeft.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_roofPanelBargeCappingLeft.width / 2 + 3);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingRight.length / 2, this.geo_roofPanelBargeCappingRight.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_roofPanelBargeCappingRight.width / 2 - 3);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingBack.length / 2, this.geo_roofPanelBargeCappingBack.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_roofPanelBargeCappingBack.width / 2 - 3);\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n \n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutRightHor.width / 2);\n\n this.ridgeGeo = this.geometryManager.getRidge();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n this.extraOffsetZ = this.APP.existingWallManager.geo_existingWallL1.width + this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.addRoofLeft();\n this.addRoofRight();\n this.addCutout();\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n\n let clipingPlaneFront = new Plane(new Vector3(0, 0, -1), offsetFront);\n let clipingPlaneBack = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n\n this.material.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneFront, clipingPlaneBack];\n let width = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n this.roofWidth = width;\n this.roofLength = UI.span / 2 + UI.overhangRight;\n let roofSheetingCount = Math.ceil(width / this.geo_RoofPanel.width);\n let offsetZ = - UI.overhangBack;\n\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetZ = this.totalBaySize + UI.overhangFront - this.geo_RoofPanel.width;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetZ = - UI.overhangBack;\n }\n\n if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 1 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingRight(offsetZ, [this.csg_cutoutLeft]);\n this.addRoofSheetingBaseRight(offsetZ, last, [this.csg_cutoutLeft]);\n\n this.addRoofSheetingLeft(offsetZ, [this.csg_cutoutLeft]);\n this.addRoofSheetingBaseLeft(offsetZ, last, [this.csg_cutoutLeft]);\n\n offsetZ += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 2 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingRight(offsetZ, [this.csg_cutoutRight]);\n this.addRoofSheetingBaseRight(offsetZ, last, [this.csg_cutoutRight]);\n\n this.addRoofSheetingLeft(offsetZ, [this.csg_cutoutRight]);\n this.addRoofSheetingBaseLeft(offsetZ, last, [this.csg_cutoutRight]);\n\n offsetZ += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 3 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n\n this.addRoofSheetingRight(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofSheetingBaseRight(offsetZ, last, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofSheetingLeft(offsetZ, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofSheetingBaseLeft(offsetZ, last, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetZ += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingRight(offsetZ, null);\n this.addRoofSheetingBaseRight(offsetZ, last, []);\n\n this.addRoofSheetingLeft(offsetZ, null);\n this.addRoofSheetingBaseLeft(offsetZ, last, []);\n\n offsetZ += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n\n this.addZFlashingRight();\n this.addZFlashingLeft();\n\n this.addBargeCappingRight();\n this.addBargeCappingLeft();\n\n this.addGutterRight();\n this.addGutterLeft();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.APP.existingWallManager.geo_existingWallL2.width + 100;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 - this.APP.existingWallManager.geo_existingWallL2.width - this.APP.sldBackOverhang.currentValue;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldBackOverhang.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ));\n\n let gutterGroupObjs = this.roofGroupRight.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n .concat(...this.roofGroupLeft.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n\n let roofClipingPlaneLeft = new Plane(new Vector3(0, 0, -1), offsetFront);\n let roofClipingPlaneRight = new Plane(new Vector3(0, 0, 1), -offsetBack);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneRight);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForFBRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(this.roofGroupLeft.position.x, 0, -(UI.existingWidth1 / 2 + this.extraOffsetZ) - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupRight.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(...this.roofGroupLeft.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ));\n\n let offsetFront = this.totalBaySize + UI.overhangFront - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n let offsetBack = - UI.overhangBack - UI.existingWidth1 / 2 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n\n let roofClipingPlaneLeft = new Plane(new Vector3(0, 0, -1), offsetFront);\n let roofClipingPlaneRight = new Plane(new Vector3(0, 0, 1), -offsetBack);\n \n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n //let outlineBox = new Box3().setFromBufferAttribute(outlineGeo.getAttribute('position') as Buffer);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n //private getBracketHeight(offset): number{\n // let angle = this.APP.sltRoofPitch.currentValue;\n // return (this.APP.sldFlyOverBracketHeight.currentValue) - this.utils.tan(angle) * offset;\n //}\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n\n const height = this.getRoofOffsetY() + \n this.geo_roofPanelBase.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) + \n this.geo_RoofPanel.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) - \n (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1 ? 20 : 10);\n \n let offsetX = 0\n if(UI.existingType == BUILDING_SIDE.RIGHT){\n offsetX = - this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n if(UI.existingType == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n const ridgeLength = this.totalBaySize + UI.overhangBack + UI.overhangFront;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.position.set( offsetX, height, this.totalBaySize / 2 + (UI.overhangFront - UI.overhangBack) / 2 - UI.existingWidth1 / 2 - this.extraOffsetZ);\n this.scene.add(ridgeFront)\n }\n\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n \n rightCap.rotateY(Math.PI)\n \n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n \n leftCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }]}\n \n return new Group().add(leftCap, rightCap)\n }\n\n public addRoofRight() {\n this.roofGroupRight = null;\n this.roofGroupRight = new Group();\n this.roofGroupRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n // 0\n let offsetZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n\n this.roofGroupRight.position.setY(offsetY);\n this.roofGroupRight.position.setZ(offsetZ);\n this.roofGroupRight.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupRight.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupRight.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupRight);\n }\n public addRoofLeft() {\n this.roofGroupLeft = null;\n this.roofGroupLeft = new Group();\n this.roofGroupLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n // 0\n let offsetZ = -(UI.existingWidth1 / 2 + this.extraOffsetZ);\n\n this.roofGroupLeft.position.setY(offsetY);\n this.roofGroupLeft.position.setZ(offsetZ);\n this.roofGroupLeft.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupLeft.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupLeft.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupLeft);\n }\n public addRoofSheetingRight(offsetZ: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 30;\n }\n else {\n offsetSheet = 12;\n }\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) - offsetPitch) / this.geo_RoofPanel.length;\n\n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetX = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofSheetingLeft(offsetZ: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 30;\n }\n else {\n offsetSheet = 12;\n }\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = ((UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) - offsetPitch) / this.geo_RoofPanel.length;\n\n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetX = -scaleZ * this.geo_RoofPanel.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupLeft.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n public addRoofSheetingBaseRight(offsetZ: number, isLast: boolean, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n let offsetX = 0;\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = ((UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch) - offsetPitch - 60) / this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if (isLast) {\n mesh.userData.last = true;\n }\n\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX+ this.MANAGER.patiosGroup.position.x, 0, offsetZ + this.roofGroupRight.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone(); \n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupRight.add(meshResult);\n }\n else {\n this.roofGroupRight.add(mesh);\n }\n }\n public addRoofSheetingBaseLeft(offsetZ: number, isLast: boolean, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = ((UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch) - offsetPitch - 60) / this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n let offsetX = - scaleZ * this.geo_roofPanelBase.length;\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setX(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if (isLast) {\n mesh.userData.last = true;\n }\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX+ this.MANAGER.patiosGroup.position.x, 0, offsetZ + this.roofGroupLeft.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone(); \n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupLeft.add(meshResult);\n }\n else {\n this.roofGroupLeft.add(mesh);\n }\n }\n private addBargeCappingRight() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = 0;\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + extraWallWidth;\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let bargeBackLength = this.roofWidth;\n let scaleCutoutVer = this.utils.getHypotenuseByCos(this.APP.sldExistingWidth1.currentValue + this.geo_roofPanelBargeCappingLeft.width, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZLeft = this.utils.getHypotenuseByCos(this.roofLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = this.utils.getHypotenuseByCos(this.roofLength, this.APP.sltRoofPitch.currentValue) / this.geo_roofPanelBargeCappingLeft.length;\n\n let offsetY = 0;\n let bargeLeftLength = this.roofLength;\n let bargeRightLength = this.roofLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - fitScale * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - fitScale * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupRight.add(mesh);\n }\n private addBargeCappingLeft() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXB = -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = 0;\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + extraWallWidth;\n let offsetXR2 = 0;\n\n let offsetZL = this.totalBaySize + UI.overhangFront;\n let offsetZR = - UI.overhangBack;\n\n let offsetY = 0;\n let bargeLeftLength = UI.span / 2 + UI.overhangLeft;\n let bargeRightLength = UI.span / 2 + UI.overhangLeft;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2 - scaleZLeft * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZL);\n mesh.scale.setX(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2 - scaleZRight * this.geo_roofPanelBargeCappingLeft.length, offsetY, offsetZR);\n mesh.scale.setX(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupLeft.add(mesh);\n }\n public addGutterRight() {\n let offsetXL = (UI.span / 2 + UI.overhangRight - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ = this.totalBaySize + UI.overhangFront;\n\n let gutterLength = this.roofWidth;\n let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(0, Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupRight.add(gutterGroup); \n }\n public addGutterLeft() {\n let offsetXL = (UI.span / 2 + UI.overhangLeft - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ = - UI.overhangBack;\n\n let gutterLength = this.roofWidth;\n let exLength = 300//Math.tan(extraAngle) * this.gutterInfo.width;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap,\n gutterLength, new Vector3(-offsetXL, offsetY, offsetZ), new Vector3(0, -Math.PI / 2, 0),\n views, 1, true, true);\n gutterGroup.rotateX(-this.utils.degreesToRadians(UI.patiosPitch))\n this.roofGroupLeft.add(gutterGroup); \n }\n public addZFlashingRight() {\n let offsetX = (UI.span / 2 + UI.overhangRight) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = this.totalBaySize + UI.overhangFront;\n let zFlashingLength = this.roofWidth;\n\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(1, 1, scaleX);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupRight.add(mesh);\n }\n public addZFlashingLeft() {\n let offsetX = (UI.span / 2 + UI.overhangLeft) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = - UI.overhangBack;\n let zFlashingLength = this.roofWidth;\n\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(-offsetX, offsetY, offsetZ);\n mesh.scale.set(1, 1, scaleX);\n mesh.rotateY(Math.PI)\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupLeft.add(mesh);\n }\n public getRoofOffsetY() {\n return UI.eaveHeight\n + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * (UI.span / 2);\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged() {\n this.optimize().then(() => { this.load() });\n }\n public uiChanged(): void {\n this.load();\n }\n uiCHangedDefer() {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n}\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n BufferGeometry,\n Box3,\n Group,\n LineSegments,\n LineBasicMaterial,\n Plane,\n Vector3,\n BoxHelper,\n Geometry,\n BoxBufferGeometry,\n Object3D,\n Matrix4,\n} from \"three\";\nimport { Util, getBeamEndCapCode, getRafterBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n} from \"../../app.config\";\nimport {\n GeometryInfo,\n Printing2DGeometry,\n Printing2DLine,\n Printing2DGeometryType,\n Print2DView,\n ViewType,\n LineType,\n} from \"../models\";\nimport { PatiosGableFreeStandingManager } from \".\";\nimport { UI } from \"../ui\";\nimport { EXISTING_BUILDING_CONFIG } from \"src/app/app.constants\";\nimport _ from \"lodash\";\n\nexport class ColumnAndPurlinManager {\n private scene: Group;\n private APP: AppComponent;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_superiorPost: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n\n private eventHandleId: any;\n private totalBaySize: number;\n private frontPostHeight: number;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private downpipeGroup: Group;\n private downpipeGroupBack: Group;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private geoBeamJoint: GeometryInfo;\n private geoHouseBeamJoint: GeometryInfo;\n\n private FIT_SHEETING: number = 0;\n private FIT_SHEETING_BASE: number = -60;\n\n constructor(app: AppComponent, manager: PatiosGableFreeStandingManager) {\n this.APP = app;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = manager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n this.geoHouseBeamJoint = this.geometryManager.getHouseBeamJoint();\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeGroupBack = new Group();\n this.downpipeGroupBack.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroupBack);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeGroupBack.children = [];\n\n // this.outlineGroup = new Group();\n // this.outlineGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.MESH_OUTLINE };\n // this.scene.add(this.outlineGroup);\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n\n this.addCenterSuperiorBeam();\n\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n this.addPost(offsetX, { back: true, first, last });\n this.addPost(offsetX, { front: true, first, last });\n\n this.addCenterPost(offsetX, { center: true, first, last });\n\n let fitBeam = 0;\n\n if (i !== 0) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_superiorBeam.width;\n } else {\n fitBeam = this.geo_superiorBeam.width / 2;\n }\n }\n\n this.addHorSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n back: true,\n first,\n last,\n });\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addPost(offsetX, { multiSpan: true, first, last });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n this.addDownPipeFront();\n this.addDownPipeBack();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n private addDownPipeFront() {\n let offsetZ =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + 100;\n let offsetX = -this.totalBaySize / 2 + 50;\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n let offsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.APP.sldFrontOverhang.currentValue *\n this.utils.tan(this.APP.sltRoofPitch.currentValue);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n offsetY -= 160;\n\n let meshLBottom = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, offsetY, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(\n 0,\n offsetY + 230,\n this.APP.sldFrontOverhang.currentValue + this.FIT_SHEETING - 100\n );\n\n let meshPipeConnect = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, offsetY + 115, 50);\n meshPipeConnect.scale.set(\n 1,\n (this.APP.sldFrontOverhang.currentValue + this.FIT_SHEETING - 140) /\n this.geo_downPipe.height,\n 1\n );\n\n this.downpipeGroup.add(meshLBottom, meshLTop, meshPipeConnect);\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeGroup.add(meshPipe);\n }\n private addDownPipeBack() {\n let offsetZ = -100;\n let offsetX = -this.totalBaySize / 2 + 50;\n\n this.downpipeGroupBack.position.set(offsetX, 0, offsetZ);\n let offsetY =\n this.APP.sldBuildingHeight.currentValue -\n this.APP.sldBackOverhang.currentValue *\n this.utils.tan(this.APP.sltRoofPitch.currentValue);\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n\n offsetY -= 160;\n\n let meshLBottom = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, offsetY, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n this.geo_downPipeL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(\n 0,\n offsetY + 230,\n this.APP.sldBackOverhang.currentValue + this.FIT_SHEETING - 100\n );\n\n let meshPipeConnect = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, offsetY + 115, 50);\n meshPipeConnect.scale.set(\n 1,\n (this.APP.sldBackOverhang.currentValue + this.FIT_SHEETING - 140) /\n this.geo_downPipe.height,\n 1\n );\n\n this.downpipeGroupBack.add(meshLBottom, meshLTop, meshPipeConnect);\n\n let scaleY = offsetY / this.geo_downPipe.height;\n\n let meshPipe = new Mesh(\n this.geo_downPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(scaleY);\n\n this.downpipeGroupBack.rotation.set(0, Math.PI, 0);\n this.downpipeGroupBack.add(meshPipe);\n }\n private addGround() {\n let offsetZ = -this.APP.sldBackOverhang.currentValue;\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n let offsetX =\n (this.APP.sldRightOverhang.currentValue -\n this.APP.sldLeftOverhang.currentValue) /\n 2;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addCenterPost(offsetX, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let postOffsetZ = 0;\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ =\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 -\n this.geo_centerSuperiorPost.width / 2;\n\n this.frontPostHeight =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n\n scalePostY =\n (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) *\n this.utils.tan(this.APP.sltRoofPitch.currentValue) -\n this.geo_superiorBeam.height) /\n this.geo_centerSuperiorPost.height;\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let postOffsetX = offsetX - this.geo_centerSuperiorPost.width / 2;\n\n if (userDataPos.first) {\n postOffsetX += this.geo_centerSuperiorPost.width / 2;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_centerSuperiorPost.width / 2;\n } else {\n // postOffsetX -= this.geo_superiorPost.width / 2\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n this.APP.sldBuildingHeight.currentValue,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n private addPost(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let postOffsetZ = 0;\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n postOffsetZ = this.APP.sldSpan.currentValue;\n this.frontPostHeight =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n\n scalePostY =\n this.APP.sldBuildingHeight.currentValue / this.geo_superiorPost.height;\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ = 0;\n scalePostY =\n this.APP.sldBuildingHeight.currentValue / this.geo_superiorPost.height;\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorPost.width;\n // scalePostY = this.utils.getHeightByAngle(this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height,\n // this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue,\n // this.APP.sltRoofPitch.currentValue, -1)/this.geo_superiorPost.height;\n\n scalePostY =\n this.APP.sldBuildingHeight.currentValue / this.geo_superiorPost.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addSuperiorBeam(userDataPos: any) {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n\n //this.APP.sldBuildingHeight.currentValue + this.getBracketHeight(this.APP.sldSpan.currentValue);\n offsetZ = this.APP.sldSpan.currentValue;\n if (this.APP.sldMultiSpan.currentValue > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ = 0;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorBeam.width;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n }\n\n public addCenterSuperiorBeam() {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n offsetY =\n this.APP.sldBuildingHeight.currentValue +\n ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) *\n this.utils.tan(this.APP.sltRoofPitch.currentValue) -\n this.geo_superiorBeam.height;\n\n offsetZ =\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 -\n this.geo_superiorBeam.width / 2;\n\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n { center: true },\n \"RB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n ((this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n ((this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, this.APP.sldBuildingHeight.currentValue, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(0, 0, this.geo_superiorBeam.width / 2);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY = this.APP.sldBuildingHeight.currentValue;\n offsetZ =\n this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(0, this.APP.sldBuildingHeight.currentValue, 0);\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, -1).normalize();\n let pVer = new Vector3(0, 0, -this.geo_superiorBeam.width / 2);\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n this.APP.sldBuildingHeight.currentValue +\n ((this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2) *\n this.utils.tan(this.APP.sltRoofPitch.currentValue);\n offsetZ =\n (this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) /\n 2 -\n this.geo_superiorBeam.width / 2;\n\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.front) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n this.APP.sldBuildingHeight.currentValue +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlane =\n heightReal * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZ =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n this.APP.sldBuildingHeight.currentValue -\n this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlaneBottom =\n heightRealBottom * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZBottom =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.sin(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length /\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n -Math.PI / 2 +\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n this.APP.sldBuildingHeight.currentValue +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlane =\n heightReal * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZ =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n -translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n this.APP.sldBuildingHeight.currentValue -\n this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n (this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue)) /\n 2;\n let heightPlaneBottom =\n heightRealBottom * this.utils.cos(this.APP.sltRoofPitch.currentValue);\n let translateZBottom =\n this.utils.sin(this.APP.sltRoofPitch.currentValue) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n -translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.cos(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length *\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height /\n this.utils.sin(this.APP.sltRoofPitch.currentValue) +\n this.geo_rafterBeamEndCap.length /\n this.utils.tan(this.APP.sltRoofPitch.currentValue)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(\n -Math.PI / 2 +\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n if (userDataPos.front) {\n beamGroup.rotateZ(\n this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n } else if (userDataPos.back) {\n beamGroup.rotateZ(\n -this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue)\n );\n }\n\n this.scene.add(beamGroup);\n }\n\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n\n let offsetXL = 0;\n let offsetXR =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n 2 * this.geo_superiorBeam.width;\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n 2 * this.geo_superiorPost.width) /\n this.geo_superiorBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldBuildingHeight.currentValue - this.geo_superiorBeam.height;\n offsetZ =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue -\n this.geo_superiorPost.width;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n offsetXL + this.geo_beamEndCap.length / 2 - 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n offsetXR - this.geo_beamEndCap.length / 2 + 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n name: \"GB\",\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n this.scene.add(beamGroup);\n }\n\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n let beamObjs: Object3D[] = [];\n for (let g of beamGroups) {\n beamObjs = beamObjs.concat(g.children);\n }\n\n objs = [...objs, ...beamObjs];\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n // box.userData = {type: \"COLUMN_OUTLINE\"};\n // this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n o.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n o.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n return lineGeo;\n }\n\n private getBracketHeight(offset): number {\n let angle = this.APP.sltRoofPitch.currentValue;\n return (\n this.APP.sldFlyOverBracketHeight.currentValue -\n this.utils.tan(angle) * offset\n );\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n this.APP.sltRoofPitch,\n this.APP.sltWindClass,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\nimport { UI } from \"../ui\";\nimport { PatiosGableFreeStandingManager } from \".\";\nimport { FIT_DIMENSION, FIT_DIMENSION_MEDIUM, PANEL_DIRECTION } from \"src/app/app.constants\";\n\nexport class DimensionManager {\n private scene: Group;\n private APP: AppComponent;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n private MANAGER: PatiosGableFreeStandingManager;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private dimensionPatiosLowerHeightDim: Object3D;\n private dimensionPatiosHigherHeightDim: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, freeStandingManager: PatiosGableFreeStandingManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.scene = freeStandingManager.patiosGroup;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.MANAGER = freeStandingManager;\n\n this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = new GeometryInfo();\n this.lineGeo.geometry = new PlaneBufferGeometry(1000, 50);\n this.lineGeo.width = 50;\n this.lineGeo.length = 1000;\n\n this.lineCapGeo = new GeometryInfo();\n this.lineCapGeo.geometry = new PlaneBufferGeometry(50, 200);\n this.lineCapGeo.width = 50;\n this.lineCapGeo.length = 200;\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosLowerHeightDim = new Group();\n this.dimensionPatiosLowerHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLowerHeightDim.rotation.set(0, 0, Math.PI / 2);\n \n this.dimensionPatiosHigherHeightDim = new Group();\n this.dimensionPatiosHigherHeightDim.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosHigherHeightDim.rotation.set(0, Math.PI / 2, Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n this.scene.add(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n\n loader.load( environment.modelBaseUrl + '/../assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n\n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(\n this.dimensionPatiosPlanRight,\n this.dimensionPatiosFrontBottom, \n this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosLowerHeightDim,\n this.dimensionPatiosHigherHeightDim,\n );\n }\n \n public draw(){\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n this.dimensionPatiosLowerHeightDim.children = this.dimensionPatiosLowerHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n );\n this.dimensionPatiosHigherHeightDim.children = this.dimensionPatiosHigherHeightDim.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BRAKET_HEIGHT_DIM\n );\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.drawDimensionLowerHeightDim();\n this.drawDimensionHigherHeightDim();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n\n private drawDimensionLowerHeightDim(){\n const height = UI.height - this.MANAGER.columnAndPurlinManager.geo_superiorBeam.height\n const offsetZ = UI.span + UI.multiSpan + FIT_DIMENSION;\n\n this.dimensionPatiosLowerHeightDim.position.set(0, height / 2, offsetZ);\n\n let textStr = this.utils.getDimensionValue(height);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: height,\n container: this.dimensionPatiosLowerHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, 200, 0),\n labelType: DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosLowerHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.LOWER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionHigherHeightDim(){\n const height = UI.height + ( UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch)\n const offsetZ = - UI.overhangBack - FIT_DIMENSION_MEDIUM;\n const offsetX = UI.totalBayLength / 2 + FIT_DIMENSION_MEDIUM + UI.overhangRight;\n\n this.dimensionPatiosHigherHeightDim.position.set(offsetX, height / 2, offsetZ);\n\n let textStr = this.utils.getDimensionValue(height);\n let options : AddDimensionOptions = {\n ... this.options,\n lineLength: height,\n container: this.dimensionPatiosHigherHeightDim,\n views: [],\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [] },\n allowDrag: false\n }\n let dimBay = this.dimensionPatiosHigherHeightDim.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.HIGHER_HEIGHT_DIM\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n private drawDimensionMidleLeft() {\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n let offsetZ = UI.span / 2 - UI.existingWidth1 / 2;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetX = this.totalBaySize / 2 + UI.overhangRight;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n }\n else {\n let offsetX = - this.totalBaySize / 2 - UI.overhangLeft;\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n dimLeft.visible = false;\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = UI.span / 2 - UI.existingWidth1 / 2;\n this.dimensionPlanMiddle.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize/2;\n let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2;\n \n\n let _dimensionDistane = this.dimensionDistance2;\n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // if(this.APP.sldExistingWidth1.currentValue > 0){\n // _dimensionDistane = this.dimensionDistance;\n // }\n // }\n\n let offsetDimensionX = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // offsetDimensionX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n // }\n\n this.dimensionPatiosPlanRight.position.set(offsetDimensionX, 0, offsetDimensionZ);\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = Math.ceil(this.APP.sldBuildingHeight.currentValue + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 * this.utils.tan(this.APP.sltRoofPitch.currentValue))\n \n let dimOffsetX = this.totalBaySize/2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n let dimOffsetY = height/2;\n\n // if(this.APP.sldExistingLength.currentValue/2 > this.totalBaySize/2){\n // dimOffsetX = this.APP.sldExistingLength.currentValue/2 + _dimensionDistane;\n // }\n \n // if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n // dimOffsetX += this.APP.sldExistingLength2.currentValue;\n // }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX,dimOffsetY,0);\n \n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,0,0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0,0,0);\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight(){\n let dimOffsetY = Math.ceil(this.APP.sldBuildingHeight.currentValue + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 * this.utils.tan(this.APP.sltRoofPitch.currentValue));\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n \n\n this.dimensionPatiosLeftRight.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n \n let scaleLength = dimOffsetY / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(dimOffsetY);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text);\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text);\n\n //this.dimensionPatiosFrontRight.children.forEach(e => {\n // let dim = e.clone();\n // dim.userData['views'] = views;\n // if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n // dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n // dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n // }\n // this.dimensionPatiosLeftRight.add(dim);\n //});\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(0,0,0);\n \n this.dimensionPatiosRightBottom.add(dim);\n }\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n let dimOffsetY = Math.ceil(this.APP.sldBuildingHeight.currentValue + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2 * this.utils.tan(this.APP.sltRoofPitch.currentValue));\n let dimOffsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2;\n\n this.dimensionPatiosRightLeft.position.set(0,dimOffsetY/2,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n this.dimensionPatiosRightLeft.add(dim);\n }\n });\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = this.APP.sldBuildingHeight.currentValue;\n let dimOffsetZ = this.APP.sldBackOverhang.currentValue + 500;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){ \n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n \n \n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z))\n textCover.position.set(pos.x , pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children\n ]){\n if(!dim.userData.views){\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n \n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n \n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n \n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n \n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n \n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n \n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n \n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n \n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n \n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n \n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n \n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId)); \n }\n private unregisterEvent(): void{\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n this.controlsToRegisterEvent = undefined;\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n}\n","import { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { ColumnAndPurlinManager } from './column-and-purlin.manager';\nimport { RoofManager } from './roof.manager';\nimport { PatiosManager } from '../patios.manager';\nimport { Printing2DGeometry } from '../models';\nimport { Group, Box3 } from 'three';\nimport { GEOMETRY_CATEGORY } from 'src/app/app.config';\nimport { DimensionManager } from './dimension.manager';\nimport { SliderInputComponent } from 'src/app/component/slider-input/slider-input.component';\n\nexport class PatiosGableFreeStandingManager implements PatiosManager{\n patiosGroup: Group;\n public boundingBox: Box3;\n public columnAndPurlinManager: ColumnAndPurlinManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public cutoutCondition: boolean;\n public get rakecutCondition(): boolean{\n return true;\n }\n public ignoreBayEvent: boolean = false;\n public patiosWidth: number;\n public patiosLength: number;\n public firstLoad = true;\n private controlsToRegisterEvent: Array;\n private APP: AppComponent;\n private updateEventHandle: any;\n\n constructor(app: AppComponent){\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS }\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndPurlinManager = new ColumnAndPurlinManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndPurlinManager.optimize(),\n this.dimesionManager.optimize()\n ])\n .then(() => {\n this.roofManager.load();\n this.columnAndPurlinManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n \n }\n loadBracketCutout(bracketQuantity: number): void{\n \n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n enableCutout(enable: boolean){\n \n }\n changeToExistingTypeBoth(){\n \n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return { \n lines: [\n ...this.columnAndPurlinManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines\n ], \n texts: dimensionOutline.texts\n }\n }\n public destroy(): void {\n this.columnAndPurlinManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.update.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldBuildingHeight,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldBackOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness, \n this.APP.sltGutterType,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWallHeight,\n this.APP.sltBeamLayoutShow,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltColourBeam,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach(c => { c.addAction(this.updateEventHandle); });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach(c => c.removeAction(this.updateEventHandle));\n }\n update(preVal: number, curVal: number): void {\n this.patiosGroup.position.setX(0);\n this.patiosGroup.position.setZ(- (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2);\n Promise.all([\n this.roofManager.load(),\n this.columnAndPurlinManager.load()\n ]).then(() => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n //this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n })\n }\n}\n","import { Scene, Mesh, Vector3, Material, Plane, Group, PlaneHelper, BufferGeometry, Geometry, LineSegments, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { CONFIG as env, GEOMETRY_TYPE, GEOMETRY_CATEGORY } from '../../app.config';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Printing2DGeometry, Printing2DLine, Printing2DGeometryType, Print2DView, ViewType, LineType } from '../models';\nimport { PatiosGableFreeStandingManager } from '.';\nimport { PANEL_DIRECTION } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableFreeStandingManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBase: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n\n private roofGroupFront: Group;\n private roofGroupBack: Group;\n\n private eventHandleId: any;\n\n private totalBaySize: number;\n\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n private FIT_SHEETING: number = 0;\n private FIT_SHEETING_BASE: number = -60;\n\n\n constructor(app: AppComponent, freeStandingManager: PatiosGableFreeStandingManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = freeStandingManager;\n this.scene = new Group();\n freeStandingManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n \n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.geo_RoofPanel = this.geometryManager.getRoofSheetPanel();\n this.geo_RoofPanel.geometry\n .translate(this.geo_RoofPanel.width/2+2,this.geo_RoofPanel.height/2 -1,this.geo_RoofPanel.length/2);\n \n this.geo_roofPanelBase = this.geometryManager.getRoofBase();\n this.geo_roofPanelBase.geometry\n .translate(this.geo_roofPanelBase.width/2,\n this.geo_roofPanelBase.height/2,\n this.geo_roofPanelBase.length / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0);\n \n //Barge capping\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingLeft.width/2 - 3,this.geo_roofPanelBargeCappingLeft.height/2 - (this.APP.sltDripBarge.currentValue ? 9 : 1),this.geo_roofPanelBargeCappingLeft.length/2);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .translate(-this.geo_roofPanelBargeCappingRight.width/2 + 3,this.geo_roofPanelBargeCappingRight.height/2 - (this.APP.sltDripBarge.currentValue ? 9 : 1),this.geo_roofPanelBargeCappingRight.length/2);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI/2)\n .translate(this.geo_roofPanelBargeCappingBack.length/2,this.geo_roofPanelBargeCappingBack.height/2 - (this.APP.sltDripBarge.currentValue ? 9 : 1),this.geo_roofPanelBargeCappingBack.width/2 - 3);\n\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI/2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.ridgeGeo = this.geometryManager.getRidge();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2, -this.ridgeGeo.height / 2, 0);\n // this.ridgeGeo.geometry.rotateY(Math.PI / 2)\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n \n this.addRoofFront();\n this.addRoofBack();\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n \n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n\n // this.material.clippingPlanes = [];\n // MaterialManager.Instance().ROOF_BASE.clippingPlanes = [];\n\n let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width/this.geo_RoofPanel.width);\n let offsetX = -(this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue);\n\n //panel direction\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.geo_RoofPanel.width;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n // let helper = new PlaneHelper(clipingPlaneRight, 10000, 0xffff00);\n // helper.userData = { type: 'HELPER' };\n // this.APP.scene.add(helper);\n\n const OFFSET_TOLE_AND_BASE = 10\n\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n \n this.addRoofSheetingFront(offsetX + OFFSET_TOLE_AND_BASE);\n this.addRoofSheetingBack(offsetX + OFFSET_TOLE_AND_BASE);\n\n this.addRoofSheetingBaseFront(offsetX, last);\n this.addRoofSheetingBaseBack(offsetX, last);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n\n this.addZFlashingFront();\n this.addZFlashingBack();\n\n this.addBargeCappingFront();\n this.addBargeCappingBack();\n \n this.addGutterFront();\n this.addGutterBack();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n public getOutLines(): Printing2DGeometry{\n \n let objs = this.roofGroupFront.children.filter(o => \n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL \n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE \n ).concat(...this.roofGroupBack.children.filter(o => \n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL \n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE \n ));\n\n let gutterObjs = this.roofGroupFront.children.find(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).children.concat(...this.roofGroupBack.children.find(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).children);\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane( new Vector3( -1, 0, 0 ), offsetRight );\n\n for(let o of objs){ \n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0,5000,0); \n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlane);\n }\n \n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({ \n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices, \n views: o.userData.views\n });\n\n // var line = new LineSegments( simplifiedGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"SHEETING_OUTLINE\"};\n // this.APP.scene.add( line );\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n \n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ));\n \n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n \n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n \n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n \n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n \n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry{\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for(let i = 0; i < vertices.length; i+=3){\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i+1] - 5000, vertices[i+2]));\n }\n return simplifiedGeo;\n } \n public addRoofFront(){\n this.roofGroupFront = null;\n this.roofGroupFront = new Group();\n this.roofGroupFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2;\n\n this.roofGroupFront.position.setY(offsetY);\n this.roofGroupFront.position.setZ(offsetZ);\n this.roofGroupFront.rotateX(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupFront);\n }\n public addRoofBack(){\n this.roofGroupBack = null;\n this.roofGroupBack = new Group();\n this.roofGroupBack.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2;\n\n this.roofGroupBack.position.setY(offsetY);\n this.roofGroupBack.position.setZ(offsetZ);\n this.roofGroupBack.rotateX(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue));\n\n this.scene.add(this.roofGroupBack);\n }\n public addRoofSheetingFront(offsetX: number){\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if(this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1){\n offsetSheet = 30;\n }\n else{\n offsetSheet = 12;\n }\n \n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ =( ((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldFrontOverhang.currentValue)/this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch)/this.geo_RoofPanel.length;\n \n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n \n this.roofGroupFront.add(mesh);\n }\n public addRoofSheetingBack(offsetX: number){\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if(this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1){\n offsetSheet = 30;\n }\n else{\n offsetSheet = 12;\n }\n \n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldBackOverhang.currentValue)/this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch)/this.geo_RoofPanel.length;\n \n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = - scaleZ * this.geo_RoofPanel.length;\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n \n this.roofGroupBack.add(mesh);\n }\n public addRoofSheetingBaseFront(offsetX: number, isLast: boolean){\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldFrontOverhang.currentValue\n )/this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch + this.FIT_SHEETING_BASE)/this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX + 10, 0, 0);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if(isLast){\n mesh.userData.last = true;\n }\n this.roofGroupFront.add(mesh);\n }\n public addRoofSheetingBaseBack(offsetX: number, isLast: boolean){\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldBackOverhang.currentValue\n )/this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch + this.FIT_SHEETING_BASE)/this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX + 10, 0, - scaleZ * this.geo_roofPanelBase.length);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if(isLast){\n mesh.userData.last = true;\n }\n this.roofGroupBack.add(mesh);\n }\n private addBargeCappingFront(){\n let mesh: Mesh;\n\n let offsetLeft = this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue;\n\n let scaleX = (this.APP.sldLeftOverhang.currentValue \n + this.totalBaySize \n + this.APP.sldRightOverhang.currentValue)/this.geo_roofPanelBargeCappingBack.length;\n \n let fitZ = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(this.APP.sltRoofPitch.currentValue)\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldFrontOverhang.currentValue + fitZ)/this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch)/this.geo_roofPanelBargeCappingLeft.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(-offsetLeft);\n mesh.position.setZ(-fitZ)\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(offsetRight);\n mesh.position.setZ(-fitZ)\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n }\n\n private addBargeCappingBack(){\n let mesh: Mesh;\n\n let offsetLeft = this.totalBaySize/2 + this.APP.sldLeftOverhang.currentValue;\n let offsetRight = this.totalBaySize/2 + this.APP.sldRightOverhang.currentValue;\n\n let scaleX = (this.APP.sldLeftOverhang.currentValue \n + this.totalBaySize \n + this.APP.sldRightOverhang.currentValue)/this.geo_roofPanelBargeCappingBack.length;\n\n let fitZ = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(this.APP.sltRoofPitch.currentValue);\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n + this.APP.sldBackOverhang.currentValue + fitZ)/this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch)/this.geo_roofPanelBargeCappingLeft.length;\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(-offsetLeft);\n mesh.position.setZ(- scaleZ * this.geo_roofPanelBargeCappingLeft.length + fitZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.setX(offsetRight);\n mesh.position.setZ(- scaleZ * this.geo_roofPanelBargeCappingLeft.length + fitZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n\n public addGutterFront(){\n let mesh: Mesh;\n \n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ = (this.APP.sldFrontOverhang.currentValue \n + (this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) / 2\n + this.FIT_SHEETING - 50)/this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue)/this.geo_gutterBack.length;\n \n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n \n let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh.position.set(offsetXL, 0, 0);\n\n let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh2.position.set(offsetXR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n gutterGroup.position.set(0, offsetY, offsetZ);\n gutterGroup.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n this.roofGroupFront.add(gutterGroup);\n }\n\n public addRidgeCapping(){\n let ridgeFront = this.createRidgeCapping();\n const height = this.getRoofOffsetY() + \n this.geo_roofPanelBase.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) + \n this.geo_RoofPanel.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) - \n (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1 ? 20 : 10);\n const ridgeLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.rotation.set(0, Math.PI / 2, 0)\n ridgeFront.position.set((this.APP.sldRightOverhang.currentValue - this.APP.sldLeftOverhang.currentValue) / 2, height, (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2);\n this.scene.add(ridgeFront)\n }\n\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n \n rightCap.rotateY(Math.PI)\n \n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n \n leftCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n \n return new Group().add(leftCap, rightCap)\n }\n\n public addGutterBack(){\n let mesh: Mesh;\n \n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ = -(this.APP.sldBackOverhang.currentValue \n + (this.APP.sldMultiSpan.currentValue + this.APP.sldSpan.currentValue) / 2\n + this.FIT_SHEETING - 50)/this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue)/this.geo_gutterBack.length;\n \n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh = new Mesh(this.geo_gutterBack.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n \n let endCapMesh = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh.position.set(offsetXL, 0, 0);\n\n let endCapMesh2 = new Mesh(this.geo_gutterCap.geometry, MaterialManager.Instance().GUTTER);\n endCapMesh2.position.set(offsetXR, 0, 0);\n\n let gutterGroup = new Group();\n gutterGroup.add(mesh, endCapMesh, endCapMesh2);\n gutterGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.GUTTER_PATIOS, views: views};\n gutterGroup.position.set(-(this.APP.sldLeftOverhang.currentValue - this.APP.sldRightOverhang.currentValue), offsetY, offsetZ);\n gutterGroup.rotation.set(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), Math.PI, 0);\n this.roofGroupBack.add(gutterGroup);\n }\n\n public addZFlashingFront() {\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = (this.APP.sldFrontOverhang.currentValue\n + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue) / this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupFront.add(mesh);\n }\n public addZFlashingBack() {\n let offsetX = (this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue);\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = (this.APP.sldBackOverhang.currentValue\n + (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n ) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n const scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue) / this.zFlashingGeo.length;\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, - offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n mesh.rotateY(Math.PI)\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupBack.add(mesh);\n }\n public getRoofOffsetY() {\n return this.APP.sldBuildingHeight.currentValue + this.utils.tan(this.APP.sltRoofPitch.currentValue) * (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) / 2\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.dialogEditBay,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void{\n // this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n // this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number){\n this.optimize().then(() => { this.load() });\n }\n}\n","import {\n DIMENSION_LABEL_TYPE,\n DIMENSION_LOCATION,\n GEOMETRY_TYPE,\n} from \"src/app/app.config\";\nimport { PANEL_DIRECTION, RAKECUT_TYPE } from \"src/app/app.constants\";\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport { environment } from \"src/environments/environment\";\nimport {\n Box3,\n BoxBufferGeometry,\n FontLoader,\n Geometry,\n Group,\n Line,\n Line3,\n LineBasicMaterial,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Scene,\n TextBufferGeometry,\n Vector3,\n} from \"three\";\nimport { GableLRFasciaManager } from \".\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n IBay,\n LineType,\n Print2DText,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util } from \"../utils\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: GableLRFasciaManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n\n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any;\n private textParameter: any;\n private isReady = false;\n private controlsToRegisterEvent: Array;\n private options: AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n private geometryManager: GeometryManager;\n\n constructor(app: AppComponent, manager: GableLRFasciaManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = manager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.unload();\n\n var loader = new FontLoader();\n\n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n // this.dimensionPatiosFrontBottom.rotation.set(0, Math.PI, 0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosFrontRight.rotation.set(0, 0, -Math.PI / 2);\n this.dimensionPatiosFrontRight.visible = false;\n\n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightLeft.rotation.set(0, -Math.PI / 2, -Math.PI / 2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(\n 0,\n -Math.PI / 2,\n -Math.PI / 2\n );\n this.dimensionPatiosRightRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosRightRight.visible = false;\n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftBottom.rotation.set(0, -Math.PI / 2, 0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI / 2, -Math.PI / 2, 0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanRight.rotation.set(\n -Math.PI / 2,\n Math.PI,\n -Math.PI / 2\n );\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = {\n type: GEOMETRY_TYPE.DIMENSION,\n position: { left: true },\n };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMidleLeft = new Group();\n\n //testing\n // [\n // this.dimensionPatiosFrontBottom,\n // this.dimensionPatiosFrontRight,\n // this.dimensionPatiosRightBottom,\n // this.dimensionPatiosRightLeft,\n // this.dimensionPatiosRightRight,\n // this.dimensionPatiosLeftBottom,\n // this.dimensionPatiosLeftRight,\n // this.dimensionPatiosLeftLeft,\n // ].forEach(g => { g.visible = true });\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n\n loader.load(\n environment.modelBaseUrl +\n \"/assets/fonts/helvetiker_regular.typeface.json\",\n (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10,\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: \"x\",\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n };\n\n this.isReady = true;\n this.draw();\n resolve();\n }\n );\n });\n }\n\n public unload() {\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if (this.APP.patiosManager && this.APP.patiosManager.patiosGroup) {\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom,\n //this.dimensionPatiosFrontRight,\n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom,\n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft\n );\n }\n }\n\n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN ||\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG ||\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPlanMidleLeft.children = [];\n\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n\n this.totalBaySize = 0;\n for (let b of this.APP.dialogEditBay.listBay) {\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n // var offset = this.calulateBoundingBox();\n // this.dimensionPatiosPlanRight.position.setX(offset.right);\n // this.dimensionPatiosPlanLeft.position.setX(offset.left);\n // this.dimensionPatiosPlanBottom.position.setZ(offset.front);\n\n // let existingHouseDimLeft = this.APP.scene.children.find(c => c.userData.type == GEOMETRY_TYPE.DIMENSION && c.userData.position?.planLeft);\n // if (existingHouseDimLeft && existingHouseDimLeft.position.x > offset.left) {\n // existingHouseDimLeft.position.setX(offset.left - 500);\n // }\n this.APP.dimensionManager.draw();\n }\n private drawDimensionMidleLeft() {\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n let offsetZ =UI.span / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetX = this.totalBaySize / 2 + UI.overhangRight;\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n }\n else {\n let offsetX = - this.totalBaySize / 2 - UI.overhangLeft;\n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n dimLeft.visible = false;\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 + UI.eaveWidth + this.MANAGER.postAndBeamManager.geoBraket_2.height / 4 + UI.span / 2;\n this.dimensionPlanMiddle.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n\n private drawDimensionPatiosPlanBottom() {\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance2 + this.APP.sldEaveWidth.currentValue - this.APP.sldExistingWidth1.currentValue / 2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2;\n //}\n\n let offsetZ =\n this.box.max.z +\n this.dimensionDistance2 +\n this.APP.sldEaveWidth.currentValue;\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY ||\n (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum <\n HomeComponent.ins.dialogEditBay.listBay.length)\n );\n\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n let b: IBay = { index: 0, value: 0, isCut: false };\n if (i < this.APP.dialogEditBay.listBay.length) {\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n if (i < this.APP.dialogEditBay.listBay.length) {\n let textStr = this.utils.getDimensionValue(b.value);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { bottom: true },\n },\n };\n let dimBay = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY &&\n el.userData?.bayNum == i\n ) as Dimension;\n if (!dimBay) {\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n\n offsetX += b.value;\n }\n\n //rakecut\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n -this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldLeftCutHorizontal.currentValue / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n );\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n let _offsetX =\n this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldRightCutHorizontal.currentValue / 2 +\n this.APP.sldRightOverhang.currentValue;\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500 - 200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanBottom.children.find(\n (el) =>\n el.userData?.groupType ==\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children =\n this.dimensionPatiosPlanBottom.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n );\n }\n //End rakecut\n\n //Left over hang\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldLeftOverhang.currentValue,\n views,\n \"Left\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanBottom,\n offsetX,\n this.APP.sldRightOverhang.currentValue,\n views,\n \"Right\",\n 0,\n \"z\",\n DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanBottom,\n DIMENSION_LOCATION.PLAN_BOTTOM\n );\n }\n onDimDrag(event) {\n this.utils.handlerDimDragEvent(\n event,\n this.startPos,\n this.startMatrix,\n this.startBayLength\n );\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event) {\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight() {\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.MANAGER.postAndBeamManager.geoBraket_2.height / 4;\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let offsetDimensionX = this.box.max.x + this.dimensionDistance2;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetDimensionX += this.APP.sldEaveWidth.currentValue;\n }\n //let offsetDimensionX = this.totalBaySize / 2 + this.APP.patiosManager.patiosGroup.position.x + _dimensionDistane;\n //if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n // offsetDimensionX = this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n //}\n\n //if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n // offsetDimensionX += this.APP.sldExistingLength2.currentValue;\n //}\n\n this.dimensionPatiosPlanRight.position.set(\n offsetDimensionX,\n 0,\n offsetDimensionZ\n );\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimSpan = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n ) as Dimension;\n if (!dimSpan) {\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n // let offsetX = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n\n // let scaleLength = this.APP.sldMultiSpan.currentValue / this.lineGeo.length;\n dimLength += this.APP.sldMultiSpan.currentValue;\n let textStr = this.utils.getDimensionValue(\n this.APP.sldMultiSpan.currentValue\n );\n let optionsMul: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n 0,\n 0\n ),\n textPos: new Vector3(\n this.APP.sldSpan.currentValue / 2 +\n this.APP.sldMultiSpan.currentValue / 2,\n -200,\n 0\n ),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneUserData: {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, -Math.PI / 2, 0),\n },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10,\n };\n let dimMul = this.dimensionPatiosPlanRight.children.find(\n (el) => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) as Dimension;\n if (!dimMul) {\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN\n );\n }\n\n let extraDistance = 0;\n\n //----Rake cut\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetZ =\n dimLength / 2 +\n UI.multiSpan / 2 +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldRightCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3(0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT,\n };\n let dimRake = this.dimensionPatiosPlanRight.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children =\n this.dimensionPatiosPlanRight.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n );\n }\n //----End rake cut\n\n let offsetRight =\n this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2; // + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetRight,\n this.APP.sldFrontOverhang.currentValue,\n views,\n \"Right\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n );\n this.addOverhang(\n this.dimensionPatiosPlanRight,\n offsetLeft,\n this.APP.sldBackOverhang.currentValue,\n views,\n \"Left\",\n Math.PI,\n \"y\",\n DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.repositionDimension(\n this.dimensionPatiosPlanRight,\n DIMENSION_LOCATION.PLAN_RIGHT,\n extraDistance\n );\n }\n private drawDimensionPatiosPlanLeft() {\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE) {\n this.dimensionPatiosPlanLeft.children =\n this.dimensionPatiosPlanLeft.children.filter(\n (el) =>\n el.userData?.groupType !=\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n );\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang\n this.APP.sldLeftCutVertical.currentValue / 2;\n\n let optionsRake: AddDimensionOptions = {\n ...this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n };\n let dimRake = this.dimensionPatiosPlanLeft.children.find(\n (el) =>\n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) as Dimension;\n if (!dimRake) {\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(\n this.dimensionPatiosPlanLeft,\n DIMENSION_LOCATION.PLAN_LEFT\n );\n }\n private drawDimensionPatiosFrontBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0, dimOffsetY, 0);\n\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanBottom.children.forEach((groupDim) => {\n groupDim.children\n .filter(\n (c) => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n )\n .forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, Math.PI, 0);\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosFrontRight() {\n let views = [{ viewType: ViewType.FRONT, lineType: LineType.CONTINOUS }];\n\n let _dimensionDistane = this.dimensionDistance2;\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n if (this.APP.sldExistingWidth1.currentValue > 0) {\n _dimensionDistane = this.dimensionDistance;\n }\n }\n let height = UI.existingWallHeight + +UI.upstandBraketType + this.MANAGER.postAndBeamManager.beamInfo.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n\n let dimOffsetX =\n this.totalBaySize / 2 +\n this.APP.patiosManager.patiosGroup.position.x +\n _dimensionDistane;\n let dimOffsetY = height / 2;\n if (this.APP.sldExistingLength.currentValue / 2 > this.totalBaySize / 2) {\n dimOffsetX =\n this.APP.sldExistingLength.currentValue / 2 + _dimensionDistane;\n }\n\n if (\n this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3\n ) {\n dimOffsetX += this.APP.sldExistingLength2.currentValue;\n }\n\n this.dimensionPatiosFrontRight.position.set(dimOffsetX, dimOffsetY, 0);\n\n //--------\n\n let scaleLength = height / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, -Math.PI / 2),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosFrontRight,\n DIMENSION_LOCATION.FRONT_RIGHT\n );\n }\n private drawDimensionPatiosLeftBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosLeftBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n dim.rotation.set(0, 0, 0);\n dim.userData[\"views\"] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n ];\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.existingWallHeight + +UI.upstandBraketType + this.MANAGER.postAndBeamManager.beamInfo.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n\n let dimOffsetZ =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.dimensionDistance2 -\n this.APP.sldExistingWidth1.currentValue / 2;\n if (\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldExistingWidth2.currentValue >\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue\n ) {\n dimOffsetZ =\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldExistingWidth2.currentValue +\n this.dimensionDistance2 -\n 290;\n }\n if (this.APP.sldExistingLength2.currentValue > 0) {\n dimOffsetZ += 500;\n }\n\n this.dimensionPatiosLeftRight.position.set(0, dimOffsetY / 2, dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = +dimOffsetY.toFixed(0);\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(-Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n this.repositionDimension(\n this.dimensionPatiosLeftRight,\n DIMENSION_LOCATION.LEFT_RIGHT\n );\n }\n private drawDimensionPatiosRightBottom() {\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z;\n\n this.dimensionPatiosRightBottom.position.set(0, dimOffsetY, dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosPlanRight.children.forEach((groupDim) => {\n groupDim.children.forEach((e) => {\n if (e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT) return;\n\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(0, 0, 0);\n dim.userData[\"position\"] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n });\n }\n private drawDimensionPatiosRightLeft() {\n let dimOffsetY = UI.existingWallHeight + +UI.upstandBraketType + this.MANAGER.postAndBeamManager.beamInfo.height + (UI.span / 2) * this.utils.tan(UI.patiosPitch);\n let dimOffsetZ = this.dimensionPatiosLeftRight.position.z;\n\n this.dimensionPatiosRightLeft.position.set(0, dimOffsetY / 2, dimOffsetZ);\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftRight.children.forEach((e) => {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData[\"rotation\"] = new Vector3(Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n this.repositionDimension(\n this.dimensionPatiosRightLeft,\n DIMENSION_LOCATION.RIGHT_LEFT\n );\n }\n private drawDimensionPatiosLeftLeft() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length;\n\n let cap1 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(\n this.lineCapGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(\n this.lineGeo.geometry,\n this.materialManager.DIMENSION_TEXT\n );\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(\n this.textGeo,\n MaterialManager.Instance().DIMENSION_TEXT\n );\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }],\n rotation: new Vector3(Math.PI / 2, 0, 0),\n };\n text.position.set(0, 200, 0);\n\n this.dimensionPatiosLeftLeft.add(\n line,\n cap1,\n cap2,\n text,\n ...this.utils.addArrowForLine(line)\n );\n }\n private drawDimensionPatiosRightRight() {\n let dimOffsetY =\n this.APP.sldExistingWallHeight.currentValue +\n +UI.upstandBraketType +\n this.MANAGER.postAndBeamManager.beamInfo.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosRightRight.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }];\n\n this.dimensionPatiosLeftLeft.children.forEach((e) => {\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n let dim = e.clone();\n dim.userData[\"views\"] = views;\n dim.userData[\"rotation\"] = new Vector3(-Math.PI / 2, 0, 0);\n dim.rotation.set(0, Math.PI, 0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n private addOverhang(\n groupDim: Object3D,\n offset: number,\n overhangValue: number,\n views: any,\n side: string,\n rotateText: number,\n axis: string,\n labelType?: string\n ) {\n if (overhangValue == 0) {\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (dim) {\n groupDim.remove(dim);\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n position: { overhang: true },\n };\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, 0, -rotateText / 2);\n textUserData[\"position\"][\"bottom\"] = true;\n } else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData[\"rotation\"] = new Vector3(0, -rotateText / 2, 0);\n } else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData[\"rotation\"] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n } else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if (labelType) {\n if (axis === \"z\") {\n fitZ = 10;\n } else if (axis === \"y\") {\n fitZ = -10;\n }\n }\n let options: AddDimensionOptions = {\n ...this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData,\n };\n let dim = groupDim.children.find(\n (el) => el.userData?.groupType == labelType\n ) as Dimension;\n if (!dim) {\n new Dimension(options);\n } else {\n dim.update(options);\n }\n }\n private getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n }\n public getOutlines(): Printing2DGeometry {\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n\n for (let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPlanMidleLeft.children,\n ]) {\n if (!dim.userData.views) {\n console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if (dim.type == \"Group\") {\n dim.children.forEach((el) => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points);\n });\n } else {\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n\n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points);\n }\n }\n\n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(\n lsGeometries: Printing2DLine[],\n lsText: Print2DText[],\n dim: Object3D,\n pos: Vector3,\n textRotation: Vector3,\n points: Vector3[]\n ) {\n if (\n dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT &&\n dim.userData.views &&\n dim.userData.value\n ) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(10)\n );\n\n if (dim.userData.position?.bottom) {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(180)\n );\n } else {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(120)\n );\n }\n } else {\n if (dim.userData.position?.overhang) {\n _pos = new Vector3().addVectors(\n projectPoint,\n new Vector3()\n .subVectors(pos, projectPoint)\n .normalize()\n .multiplyScalar(100)\n );\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n } else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views,\n });\n }\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n ];\n this.controlsToRegisterEvent.forEach((c) =>\n c.addAction(this.eventHandleId)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n }\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == \"BOX_HELPER_\")\n );\n let patiosBox = this.MANAGER.boundingBox;\n\n let planRightBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanRight\n );\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n\n let planLeftBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanLeft\n );\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosPlanBottom\n );\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n\n let objs = [];\n\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.width1) ||\n c.userData.position?.width2 ||\n c.userData.position?.length2 ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (planRightBox.intersectsBox(objBox)) {\n intersectBox = true;\n planRightBox.translate(new Vector3(100, 0, 0));\n }\n if (planLeftBox.intersectsBox(objBox)) {\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100, 0, 0));\n }\n if (planBottomBox.intersectsBox(objBox)) {\n intersectBox = true;\n planBottomBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n\n return {\n left: planLeftBox.min.x,\n right: planRightBox.max.x,\n front: planBottomBox.max.z,\n };\n }\n private repositionDimension(dimension, location, extraDistance = 0) {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter((c) => c.userData.type == location)\n );\n\n let patiosBox = this.MANAGER.boundingBox;\n\n if (location == DIMENSION_LOCATION.FRONT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1 &&\n !c.userData.position.length2) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1 &&\n !c.userData.position.length2)\n );\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n !c.userData.position.length1) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n !c.userData.position.length1)\n );\n }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(-100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.min.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: location};\n // this.scene.add(boxModelHelper);\n // }\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(100, 0, 0));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n } else if (location == DIMENSION_LOCATION.PLAN_BOTTOM) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF ||\n c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.LEFT_RIGHT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.left) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.left)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n } else if (location == DIMENSION_LOCATION.RIGHT_LEFT) {\n let dimBox = this.APP.utils.getObjectBoundingBox(\n this.dimensionPatiosLeftRight\n );\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(\n (c) =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF &&\n c.userData.position?.right) ||\n (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL &&\n c.userData.position?.right)\n );\n\n for (let i = 0; i < 100; i++) {\n let intersectBox = false;\n for (let o of objs) {\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if (dimBox.intersectsBox(objBox)) {\n intersectBox = true;\n dimBox.translate(new Vector3(0, 0, 100));\n }\n }\n\n if (!intersectBox) break;\n }\n\n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { PostAndBeamManager } from \"./post-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"../models\";\nimport { Group, Box3, Vector3, Box3Helper } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport { SliderInputComponent } from \"src/app/component/slider-input/slider-input.component\";\nimport {\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport { environment } from \"src/environments/environment\";\n\nexport class GableLRFasciaManager implements PatiosManager {\n public patiosGroup: Group;\n public boundingBox: Box3;\n private APP: AppComponent;\n public postAndBeamManager: PostAndBeamManager;\n public roofManager: RoofManager;\n public dimesionManager: DimensionManager;\n public ignoreBayEvent: boolean = false;\n\n private updateEventHandle: any;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n private controlsToRegisterEvent: Array;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [\n this.APP.sldEaveWidth,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n ]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n let patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n this.patiosGroup = new Group();\n this.patiosGroup.userData = { category: GEOMETRY_CATEGORY.PATIOS };\n app.scene.add(this.patiosGroup);\n\n this.postAndBeamManager = new PostAndBeamManager(app, this);\n this.roofManager = new RoofManager(app, this);\n this.dimesionManager = new DimensionManager(app, this);\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.postAndBeamManager.optimize(),\n this.roofManager.optimize(),\n this.dimesionManager.optimize(),\n ]).then(() => {\n this.postAndBeamManager.load();\n this.roofManager.load();\n this.dimesionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraket(bracketQuantity);\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.postAndBeamManager.addUpstandBraketCutOut(bracketQuantity);\n }\n loadSideGableBracket(bracketQuantity: number): void{\n \n }\n public destroy(): void {\n this.postAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimesionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents(): void {\n this.updateEventHandle = this.updateDefer.bind(this);\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltPanelDirection,\n this.APP.sltBeamLayoutShow,\n this.APP.sltPanelDirectionShow,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent(): void {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n update(preVal: number, curVal: number): void {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n //let cutoutCondition = this.cutoutCondition.map(x => x.currentValue).reduce((a, b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.sltExistingType.currentValue == 1) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n // this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue + this.APP.sldEaveWidth.currentValue - this.APP.sldExistingLength2.currentValue);\n this.patiosGroup.position.setX(\n -diff / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n // this.patiosGroup.position.setX(-diff / 2 + this.APP.sldLeftOverhang.currentValue + this.APP.sldEaveWidth.currentValue);\n this.patiosGroup.position.setX(\n -diff / 2 + this.APP.sldEaveWidth.currentValue\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n // this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue - this.APP.sldEaveWidth.currentValue + this.APP.sldExistingLength2.currentValue);\n this.patiosGroup.position.setX(\n diff / 2 -\n this.APP.sldEaveWidth.currentValue +\n this.APP.sldExistingLength2.currentValue\n );\n } else {\n // this.patiosGroup.position.setX(diff / 2 - this.APP.sldRightOverhang.currentValue - this.APP.sldEaveWidth.currentValue);\n this.patiosGroup.position.setX(\n diff / 2 - this.APP.sldEaveWidth.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n Promise.all([this.roofManager.load(), this.postAndBeamManager.load()]).then(\n () => {\n // this.boundingBox = this.APP.utils.getObjectsBoundingBox(\n // this.patiosGroup.children.filter(c => c.userData.type != GEOMETRY_TYPE.DIMENSION && c.userData.type != GEOMETRY_TYPE.ROOF_PATIOS)\n // );\n this.boundingBox = this.getPatiosBox();\n this.dimesionManager.draw();\n }\n );\n }\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimesionManager.getOutlines();\n return {\n lines: [\n ...this.postAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, this.APP.sldEaveWidth.currentValue));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n box.translate(new Vector3(this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n box.translate(new Vector3(-this.APP.sldEaveWidth.currentValue, 0, 0));\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","import _ from \"lodash\";\nimport Beam, { BeamOptions } from \"src/app/models/Beam.model\";\nimport UpstandBraket, {\n UpstandBraketOptions,\n} from \"src/app/models/UpstandBraket.model\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Geometry,\n Group,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Plane,\n PlaneHelper,\n Vector3,\n} from \"three\";\nimport { GableLRFasciaManager } from \".\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from \"../../app.config\";\nimport {\n BUILDING_SIDE,\n EXISTING_BUILDING_CONFIG,\n RAKECUT_TYPE,\n} from \"../../app.constants\";\nimport {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n GeometryInfo,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DLine,\n ViewType,\n} from \"../models\";\nimport { UI } from \"../ui\";\nimport { Util, getBeamEndCapCode, getRafterBeamEndCapCode } from \"../utils\";\n\nexport class PostAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableLRFasciaManager;\n private material: Material;\n private utils: Util;\n private geometryManager: GeometryManager;\n private postInfo: GeometryInfo;\n public beamInfo: GeometryInfo;\n private beamRakecutInfoLeft: GeometryInfo;\n private beamRakecutInfoRight: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private eventHandleId: any;\n private roofWidth: number;\n private existingTypeLeftX: number;\n private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private frontPostHeight: number;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n public geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private geoBraketExtL_2: GeometryInfo;\n private geoBraketExtR_2: GeometryInfo;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n\n private geoBeamJoint: GeometryInfo;\n\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n private geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n\n private offsetYBraket = 0;\n\n k: number;\n k_: number;\n j: number;\n l: number;\n m: number;\n v: number;\n\n constructor(app: AppComponent, fasciaManager: GableLRFasciaManager) {\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.scene = fasciaManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sltRoofPitch,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.beamInfo = this.geometryManager.getBeam();\n this.beamInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.beamInfo.length / 2, -this.beamInfo.height / 2, 0);\n //.scale(this.APP.sldBaySize.currentValue / this.beamInfo.length, 1, 1);\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n\n this.beamRakecutInfoLeft = this.geometryManager.getBeam();\n this.beamRakecutInfoLeft.geometry.translate(\n this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.beamRakecutInfoRight = this.geometryManager.getBeam();\n this.beamRakecutInfoRight.geometry.translate(\n -this.beamInfo.width / 2,\n -this.beamInfo.height / 2,\n -this.beamInfo.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n -this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n -this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n -this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.postInfo = this.geometryManager.getPost();\n this.postInfo.geometry\n .rotateX(Math.PI / 2)\n .translate(0, this.postInfo.height / 2, 0);\n //.scale(1, scalePostHeight, 1);\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n this.geo_groundBase.width / 2,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(\n 0,\n this.geoBraket_2.length / 2,\n -this.geoBraket_2.height / 4\n );\n\n this.geoBraketExtL_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtL_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateY(-Math.PI / 2);\n this.geoBraketExtL_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtL_2.geometry.translate(\n -this.geoBraketExtL_2.height / 2,\n this.geoBraketExtL_2.length / 2,\n this.geoBraketExtL_2.height / 3 - this.geoBraket_1.width / 2\n );\n //Right\n this.geoBraketExtR_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraketExtR_2.geometry.rotateX(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateY(Math.PI / 2);\n this.geoBraketExtR_2.geometry.rotateZ(-Math.PI);\n this.geoBraketExtR_2.geometry.translate(\n this.geoBraketExtR_2.height / 2,\n this.geoBraketExtR_2.length / 2,\n this.geoBraketExtR_2.height / 3 - this.geoBraket_1.width / 2\n );\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(\n 0,\n this.geoBeamEndCap.height / 2,\n this.geoBeamEndCap.length / 2\n )\n .rotateY(Math.PI / 2);\n\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce(\n (total, val) => total + val.value,\n 0\n );\n this.roofWidth = this.totalBaySize;\n this.existingType = +this.APP.sltExistingType.currentValue;\n this.existingTypeLeftX = 0;\n this.existingTypeRightX = 0;\n if (this.existingType === 1 || this.existingType === 3) {\n this.existingTypeLeftX = this.APP.sldEaveWidth.currentValue;\n }\n if (this.existingType === 2 || this.existingType === 3) {\n this.existingTypeRightX = this.APP.sldEaveWidth.currentValue;\n }\n this.offsetYBraket = 0;\n if (UI.upstandBraketType == 150) {\n this.offsetYBraket =\n 150 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 300) {\n this.offsetYBraket =\n 300 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 450) {\n this.offsetYBraket =\n 450 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n } else if (UI.upstandBraketType == 600) {\n this.offsetYBraket =\n 600 +\n this.beamInfo.height +\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch);\n }\n if (UI.isUpFasciaUpstandardBracket) {\n this.offsetYBraket -=\n (this.geoBraket_2.height / 4 + this.geoBraket_1.width) *\n this.utils.tan(UI.patiosPitch) +\n (this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n }\n\n this.addBeam({ isMultiSpan: false });\n this.addBeam({ isMultiSpan: true });\n\n this.addGround();\n let offsetX = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let offsetXOrigin = -(this.totalBaySize / 2) + this.postInfo.width / 2;\n let idx = 0;\n\n this.addPost(offsetX, { isMultiSpan: false, left: true });\n this.addUpstandBraketExt({ isMultiSpan: false, left: true });\n\n this.addPost(offsetX, { isMultiSpan: true, left: true });\n this.addUpstandBraketExt({ isMultiSpan: true, left: true });\n\n this.addCenterSuperiorBeam();\n\n this.addHorSuperiorBeam(offsetX, {\n front: true,\n first: true,\n last: false,\n });\n this.addCenterPost(offsetX, { center: true, first: true, last: false });\n\n this.addRafterSuperiorBeam(offsetX - this.beamInfo.width / 2, {\n front: true,\n first: true,\n last: false,\n });\n this.addRafterSuperiorBeam(offsetX - this.beamInfo.width / 2, {\n back: true,\n first: true,\n last: false,\n });\n\n this.APP.dialogEditBay.listBay.map((m) => {\n offsetX += m.value;\n this.addHorSuperiorBeam(\n offsetX -\n (idx === this.APP.dialogEditBay.listBay.length - 1\n ? this.geoBeam.width\n : this.geoBeam.width / 2),\n {\n front: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n }\n );\n\n this.addCenterPost(offsetX, {\n center: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n });\n\n this.addRafterSuperiorBeam(\n offsetX -\n (idx === this.APP.dialogEditBay.listBay.length - 1\n ? this.beamInfo.width * 1.5\n : this.beamInfo.width),\n {\n front: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n }\n );\n this.addRafterSuperiorBeam(\n offsetX -\n (idx === this.APP.dialogEditBay.listBay.length - 1\n ? this.beamInfo.width * 1.5\n : this.beamInfo.width),\n {\n back: true,\n first: false,\n last: idx === this.APP.dialogEditBay.listBay.length - 1,\n }\n );\n\n if (idx === this.APP.dialogEditBay.listBay.length - 1) {\n offsetX -= this.postInfo.width;\n this.addPost(offsetX, { isMultiSpan: false, right: true });\n this.addPost(offsetX, { isMultiSpan: true, right: true });\n } else {\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: false,\n });\n this.addPost(offsetX - this.postInfo.width / 2, {\n isMultiSpan: true,\n });\n }\n idx++;\n });\n\n this.addUpstandBraketExt({ isMultiSpan: false, right: true });\n this.addUpstandBraketExt({ isMultiSpan: true, right: true });\n\n this.addDownPipe();\n\n this.addUpstandBeam();\n\n this.addUpstandBraket();\n this.addUpstandBraketCutOut();\n this.showBeamOutline();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public addUpstandBeam() {\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType + this.beamInfo.height;\n let pos = new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + height,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 -\n UI.existingWidth1 / 2\n );\n let totalLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n pos.setX(pos.x + UI.existingLength2);\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n totalLength -= UI.existingLength2;\n }\n }\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n this.cutStandardBeamToEqualLengthBeam(\n this.beamInfo,\n this.geo_beamEndCap,\n totalLength,\n pos,\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n // Beam cutout\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n let offsetHeightCutout = +UI.upstandBraketType + this.beamInfo.height;\n if (UI.isUpFasciaUpstandardBracket) {\n offsetHeightCutout +=\n (UI.existingWidth1 + this.geoBraket_2.height / 4) *\n this.utils.tan(UI.patiosPitch);\n } else {\n offsetHeightCutout -=\n (UI.existingWidth1 + this.geoBraket_2.height / 4) *\n this.utils.tan(UI.patiosPitch);\n }\n\n if (offsetHeightCutout < 0) {\n return;\n }\n if (UI.existingType == 1 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.beamInfo,\n this.geo_beamEndCap,\n UI.existingLength2,\n new Vector3(\n -UI.totalBayLength / 2 - UI.overhangLeft,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n this.cutStandardBeamToEqualLengthBeam(\n this.beamInfo,\n this.geo_beamEndCap,\n UI.existingLength2,\n new Vector3(\n UI.totalBayLength / 2 - UI.existingLength2 + UI.overhangRight,\n UI.existingWallHeight + offsetHeightCutout,\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.geoBraket_1.width / 2 +\n UI.existingWidth1 / 2\n ),\n new Vector3(),\n views,\n 1,\n { back: true },\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n }\n }\n public addUpstandBraket(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET\n )\n );\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n let distance = 1000;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n\n if (UI.existingType == 0) {\n let startX =\n -bayMainLength / 2 > -UI.existingLength1 / 2\n ? -bayMainLength / 2\n : -UI.existingLength1 / 2;\n let endX =\n bayMainLength / 2 < UI.existingLength1 / 2\n ? bayMainLength / 2\n : UI.existingLength1 / 2;\n distance = (endX - startX) / (numOfBraket - 1);\n offsetX = startX;\n } else if (UI.existingType == 1) {\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n distance =\n (UI.existingLength1 - UI.eaveWidth - _bracketOffsetXExt) /\n (numOfBraket - 1);\n }\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX =\n -bayMainLength / 2 + UI.existingLength2 / 2 + _bracketOffsetXExt;\n }\n } else if (UI.existingType == 2) {\n offsetX = -bayMainLength / 2;\n distance = (bayMainLength - _bracketOffsetXExt) / (numOfBraket - 1);\n\n if (bayMainLength > UI.existingLength1 - UI.eaveWidth) {\n offsetX =\n -bayMainLength / 2 +\n (bayMainLength - UI.existingLength1 + UI.eaveWidth);\n distance =\n (UI.existingLength1 - _bracketOffsetXExt - UI.eaveWidth) /\n (numOfBraket - 1);\n }\n\n if (!HomeComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n } else if (UI.existingType == 3) {\n distance = (bayMainLength - _bracketOffsetXExt * 2) / (numOfBraket - 1);\n offsetX = -bayMainLength / 2 + _bracketOffsetXExt;\n }\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetX;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth - UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetX += distance;\n }\n }\n\n public addUpstandBraketCutOut(numOfBraket = 2) {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n )\n );\n if (HomeComponent.ins.sltCutOut._isDisable || UI.cutOutType == 0) {\n return;\n }\n if (UI.upstandBraketType == 0 || UI.listBay.length == 0) {\n return;\n }\n let height = +UI.upstandBraketType;\n // if (UI.isUpFasciaUpstandardBracket) {\n // height += (UI.existingWidth1 + this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n // } else {\n // height -= (UI.existingWidth1 + this.geoBraket_2.height / 4) * this.utils.tan(UI.patiosPitch);\n // }\n\n if (height < 0) {\n return;\n }\n const _bracketOffsetXExt = this.geoBraket_2.height / 5;\n if (UI.existingType == 1 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangLeft : 0;\n let distance =\n (UI.existingLength2 - UI.eaveWidth - UI.overhangLeft + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ = -UI.totalBayLength / 2 - _offsetZ + _bracketOffsetXExt;\n\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n if (UI.existingType == 2 || UI.existingType == 3) {\n let _offsetZ = UI.existingWidth2 > 0 ? UI.overhangRight : 0;\n let distance =\n (UI.existingLength2 - (UI.overhangRight + UI.eaveWidth) + _offsetZ) /\n (numOfBraket - 1);\n let offsetZ =\n UI.totalBayLength / 2 -\n UI.existingLength2 +\n UI.eaveWidth +\n UI.overhangRight -\n _bracketOffsetXExt;\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2: this.geoBraket_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n let views: Print2DView[] = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let userData = {\n type: GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT,\n views: views,\n };\n for (let i = 0; i < numOfBraket; i++) {\n let posX = offsetZ;\n if (i == 0) {\n posX = posX + this.geoBraket_1.width / 2;\n } else if (i == numOfBraket - 1) {\n posX = posX - this.geoBraket_1.width / 2;\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(\n posX,\n UI.existingWallHeight,\n UI.eaveWidth + UI.existingWidth1 / 2\n ),\n userData: userData,\n });\n offsetZ += distance;\n }\n }\n }\n private addDownPipe() {\n let offsetZ =\n UI.span +\n UI.multiSpan +\n UI.eaveWidth +\n 100 -\n UI.existingWidth1 / 2 +\n this.geoBraket_2.height / 4;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n\n this.downpipeGroup.position.set(offsetX, 0, offsetZ);\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + +UI.upstandBraketType + this.geoBeam.height,\n UI.overhangFront,\n this.APP.sltRoofPitch.currentValue,\n -1\n ) + this.geo_roofBase.height;\n\n this.downpipeGroup = this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n 0,\n offsetZ,\n offsetZ,\n 0,\n this.APP.sldFrontOverhang.currentValue,\n offsetY,\n true\n );\n }\n private addGround() {\n let offsetX = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - UI.overhangBack;\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldEaveWidth.currentValue +\n this.geoBraket_2.height / 4;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set(offsetX, 0, offsetZ);\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private getRoofHeight() {\n const _height = this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue,\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue,\n this.APP.sltRoofPitch.currentValue,\n -1\n );\n return this.APP.sldExistingWallHeight.currentValue - _height;\n }\n private updateUI() {\n this.APP.roofHeight = this.getRoofHeight();\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let braketGroup = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET ||\n o.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n );\n\n for (let g of braketGroup) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n g.children[1] as Mesh,\n 60\n );\n g.children[1].updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(g.children[1].matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: simplifiedGeo.vertices,\n views: g.userData.views,\n });\n\n g.children[0].updateMatrix();\n let objCloned = g.children[0].clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(g.children[0].matrix));\n\n let box = new BoxHelper(objCloned);\n\n g.children[0].updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(g.children[0].matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.APP.scene.add(box);\n\n let outlineGeo1 = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo1.vertices,\n views: g.userData.views,\n });\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n return lineGeo;\n }\n private addCenterPost(offsetX, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n let postOffsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n this.frontPostHeight =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n\n scalePostY =\n (((UI.span + UI.multiSpan) / 2 - this.geoBeam.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.geoBeam.height) /\n this.geo_centerSuperiorPost.height;\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let postOffsetX = offsetX - this.geo_centerSuperiorPost.width;\n\n if (userDataPos.first) {\n postOffsetX += this.geo_centerSuperiorPost.width / 2;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_centerSuperiorPost.width / 2;\n } else {\n }\n\n // if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n // let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n // postOffsetX -= offsetX\n // }\n // if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n // let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n // postOffsetX += offsetX\n // }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n public addPost(offsetX: number, userDataPos: any) {\n if (userDataPos.isMultiSpan && this.APP.sldMultiSpan.currentValue === 0) {\n return;\n }\n // // let _flag = false;\n // if (userDataPos.left && this.APP.sldLeftOverhang.currentValue > 0 && this.APP.sltExistingType.currentValue == 1) {\n // // _flag = true;\n // return;\n // } else if (userDataPos.right && this.APP.sldRightOverhang.currentValue > 0 && this.APP.sltExistingType.currentValue == 2) {\n // // _flag = true;\n // return;\n // }\n const condition =\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue;\n if (!userDataPos.isMultiSpan) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n } else {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n return;\n }\n }\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n const mesh = new Mesh(\n this.postInfo.geometry,\n MaterialManager.Instance().POST\n );\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue +\n this.geoBraket_2.height / 4;\n if (userDataPos.isMultiSpan) {\n offsetZ +=\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue -\n this.beamInfo.width / 2;\n } else {\n offsetZ +=\n this.APP.sldSpan.currentValue -\n (this.APP.sldMultiSpan.currentValue > 0 ? 0 : this.beamInfo.width / 2);\n }\n let scaleY = 0;\n let length = 0;\n\n if (userDataPos.isMultiSpan) {\n length = UI.existingWallHeight + +UI.upstandBraketType;\n scaleY = length / this.postInfo.height;\n } else {\n length = UI.existingWallHeight + +UI.upstandBraketType;\n scaleY = length / this.postInfo.height;\n }\n\n //in case of multi span & apply to back post only\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue >\n this.APP.sldExistingWidth1.currentValue &&\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue <\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldEaveWidth.currentValue\n ) {\n if (this.APP.sltExistingType.currentValue == 1 && userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == 2 &&\n userDataPos.right\n ) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n if (userDataPos.left) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n }\n if (userDataPos.right) {\n offsetX -= this.APP.sldExistingLength2.currentValue;\n }\n }\n }\n }\n\n let exceedMoveBackLimit = false;\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setY(scaleY);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n position: userDataPos,\n views: views,\n };\n this.scene.add(mesh);\n }\n\n private addUpstandBraketExt(userDataPos: any) {\n if (\n UI.upstandBraketType == 0 ||\n UI.listBay.length == 0 ||\n UI.existingType == 0 ||\n (userDataPos.isMultiSpan && UI.multiSpan == 0)\n ) {\n return;\n }\n if (\n (this.existingType == 1 && userDataPos.right) ||\n (this.existingType == 2 && userDataPos.left)\n ) {\n return;\n }\n let _flag = false;\n\n const condition =\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue;\n if (!userDataPos.isMultiSpan && !_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n } else if (!_flag) {\n if (\n (this.existingType === 1 || this.existingType === 3) &&\n userDataPos.left &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n if (\n (this.existingType === 2 || this.existingType === 3) &&\n userDataPos.right &&\n (UI.existingWidth1 >= condition + UI.multiSpan ||\n (UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan &&\n UI.cutOutType == 1))\n ) {\n _flag = true;\n // return;\n }\n }\n if (!_flag) {\n return;\n }\n // if (userDataPos.left && UI.overhangLeft > 0 || userDataPos.right && UI.overhangRight > 0)\n // return;\n\n const _bracketOffsetXExt = this.geoBraket_2.height / 5; // + this.geoBraket_1.width / 4;\n let height = 0;\n let offsetX = -UI.existingLength1 / 2;\n let bayMainLength = UI.totalBayLength;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n if (UI.existingType == 1 || UI.existingType == 2) {\n bayMainLength -= UI.existingLength2;\n }\n if (UI.existingType == 3) {\n bayMainLength -= 2 * UI.existingLength2;\n }\n }\n const _cond1 =\n UI.existingWidth1 < condition &&\n UI.existingWidth1 + UI.existingWidth2 > condition;\n const _cond2 =\n userDataPos.isMultiSpan &&\n UI.existingWidth1 < condition + UI.multiSpan &&\n UI.existingWidth1 + UI.existingWidth2 > condition + UI.multiSpan;\n\n if (UI.existingType == 1) {\n offsetX = -bayMainLength / 2;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX = -bayMainLength / 2 + UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX -= UI.existingLength2;\n }\n offsetX += _bracketOffsetXExt;\n } else if (UI.existingType == 2) {\n offsetX = bayMainLength / 2 - this.geoBraket_1.width;\n if (!AppComponent.ins.sltCutOut._isDisable && UI.cutOutType == 1) {\n offsetX -= UI.existingLength2 / 2;\n }\n if (\n UI.existingWidth1 < condition ||\n (userDataPos.isMultiSpan &&\n UI.existingWidth1 + UI.existingWidth2 >= condition + UI.multiSpan)\n ) {\n offsetX += UI.existingLength2;\n }\n offsetX -= _bracketOffsetXExt;\n } else if (UI.existingType == 3) {\n offsetX =\n (-bayMainLength / 2) * (userDataPos.left ? 1 : -1) -\n (userDataPos.right ? this.geoBraket_1.width : 0);\n if ((!userDataPos.isMultiSpan && _cond1) || _cond2) {\n offsetX -=\n UI.existingLength2 * (userDataPos.left ? 1 : -1) +\n (userDataPos.right ? this.geoBraket_1.width : 0);\n }\n offsetX += _bracketOffsetXExt * (userDataPos.left ? 1 : -1);\n }\n let offsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 +\n this.APP.sldEaveWidth.currentValue -\n this.geoBraket_1.width / 2;\n if (userDataPos.isMultiSpan) {\n offsetZ += UI.span + UI.multiSpan - this.beamInfo.width / 2;\n } else {\n offsetZ += UI.span - (UI.multiSpan > 0 ? 0 : this.beamInfo.width / 2);\n }\n if (userDataPos.isMultiSpan) {\n height = +UI.upstandBraketType;\n } else {\n height = +UI.upstandBraketType;\n }\n let optionBrakets: UpstandBraketOptions = {\n container: this.scene,\n position: new Vector3(),\n geoBraket_1: this.geoBraket_1,\n geoBraket_2:\n UI.existingType == 2 ? this.geoBraketExtR_2 : this.geoBraketExtL_2,\n height: height,\n material: MaterialManager.Instance().FASCIA_BRACKET.clone(),\n };\n if (UI.existingType == 1) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtL_2 };\n } else if (UI.existingType == 2) {\n optionBrakets = { ...optionBrakets, geoBraket_2: this.geoBraketExtR_2 };\n } else {\n optionBrakets = {\n ...optionBrakets,\n geoBraket_2: userDataPos.right\n ? this.geoBraketExtR_2\n : this.geoBraketExtL_2,\n };\n }\n new UpstandBraket({\n ...optionBrakets,\n position: new Vector3(offsetX, UI.existingWallHeight, offsetZ),\n userData: { type: GEOMETRY_TYPE.UPSTAND_BRAKET_EXT },\n });\n }\n\n public addBeam(userDataPos: any) {\n if (userDataPos.isMultiSpan && this.APP.sldMultiSpan.currentValue === 0) {\n return;\n }\n\n let offsetY = 0;\n let offsetZ =\n -UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetXR = this.totalBaySize / 2;\n\n let beamLength = this.roofWidth + UI.overhangLeft + UI.overhangRight;\n\n const condition = UI.span + UI.eaveWidth;\n let _flag = false;\n if (\n (userDataPos.isMultiSpan &&\n this.APP.sldExistingWidth1.currentValue >=\n condition + this.APP.sldMultiSpan.currentValue) ||\n (!userDataPos.isMultiSpan &&\n this.APP.sldExistingWidth1.currentValue >= condition)\n ) {\n _flag = true;\n }\n if (userDataPos.isMultiSpan) {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n offsetZ +=\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue -\n this.beamInfo.width / 2;\n } else {\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.geoBeam.height;\n offsetZ +=\n this.APP.sldSpan.currentValue -\n (this.APP.sldMultiSpan.currentValue > 0 ? 0 : this.beamInfo.width / 2);\n }\n\n let views: Print2DView[] = [];\n if (userDataPos.isMultiSpan) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else {\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n //Cutout\n if (\n !userDataPos.isMultiSpan &&\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue <=\n this.APP.sldExistingWidth1.currentValue\n ) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + this.APP.sldEaveWidth.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue; // + this.APP.sldEaveWidth.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2; // + this.APP.sldEaveWidth.currentValue;\n }\n } else if (\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue >\n this.APP.sldExistingWidth1.currentValue &&\n this.APP.sldSpan.currentValue + this.APP.sldEaveWidth.currentValue <\n this.APP.sldExistingWidth1.currentValue +\n this.APP.sldEaveWidth.currentValue\n ) {\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 2) {\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue;\n } else if (this.APP.sltExistingType.currentValue == 3) {\n offsetXL += this.APP.sldExistingLength2.currentValue;\n offsetXR -= this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.roofWidth - this.APP.sldExistingLength2.currentValue * 2;\n }\n }\n }\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n 0,\n \"x\",\n \"EB\",\n this.geoBeamJoint\n );\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup2(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n beamGeoTranslationZ,\n beamDirection,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let mesh = new Mesh(this.geoBeam.geometry, MaterialManager.Instance().BEAM);\n\n let offsetXL = 0;\n let offsetXR = UI.span + UI.multiSpan - this.geoBeam.width * 2;\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (UI.span + UI.multiSpan - this.geoBeam.width * 2) / this.geoBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY = UI.existingWallHeight + +UI.upstandBraketType;\n offsetZ =\n UI.span +\n UI.multiSpan -\n this.geoBeam.width -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n offsetXL +\n this.geo_beamEndCap.length / 2 -\n 2 -\n (scaleX * this.geoBeam.length) / 2,\n this.geo_beamEndCap.height,\n 0\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n offsetXR -\n this.geo_beamEndCap.length / 2 +\n 2 -\n (scaleX * this.geoBeam.length) / 2,\n this.geo_beamEndCap.height,\n 0\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamOffsetX = offsetX;\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n name: \"GB\",\n };\n beamGroup.position.set(\n beamOffsetX,\n offsetY,\n offsetZ - (scaleX * this.geoBeam.length) / 2\n );\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n this.scene.add(beamGroup);\n }\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n\n let offsetXL = 0;\n let offsetXR =\n ((UI.span + UI.multiSpan) / 2 - this.beamInfo.width / 2) /\n this.utils.cos(UI.patiosPitch);\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n ((UI.span + UI.multiSpan) / 2 - this.beamInfo.width / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.beamInfo.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 +\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight + +UI.upstandBraketType + this.beamInfo.height;\n offsetZ =\n UI.span +\n UI.multiSpan -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight + +UI.upstandBraketType + this.beamInfo.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, -1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n ((UI.span + UI.multiSpan) / 2 - this.beamInfo.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.beamInfo.width / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.front) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n -translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n -translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4 +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n if (userDataPos.front) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.back) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n public addCenterSuperiorBeam() {\n let offsetXL = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength = this.totalBaySize + UI.overhangLeft + UI.overhangRight;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n +UI.upstandBraketType +\n this.beamInfo.height +\n ((UI.span + UI.multiSpan) / 2 - this.geoBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 +\n UI.eaveWidth +\n this.geoBraket_2.height / 4;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.beamInfo,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n { center: true },\n 0,\n \"x\",\n \"RB\",\n this.geoBeamJoint\n );\n }\n private getHeightByRoofPitch(isSpan: boolean): number {\n if (isSpan) {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n this.APP.sldSpan.currentValue\n );\n }\n } else {\n if (UI.isUpFasciaUpstandardBracket) {\n return (\n -this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n } else {\n return (\n this.utils.tan(this.APP.sltRoofPitch.currentValue) *\n (this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue)\n );\n }\n }\n }\n}\n","import { BoxBufferGeometry, BufferGeometry, Color, Geometry, Group, LineSegments, Material, Matrix4, Mesh, MeshLambertMaterial, Object3D, Plane, Vector3 } from 'three';\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE } from '../../app.config';\nimport { BUILDING_SIDE, CUTOUT_ENABLE, EXISTING_BUILDING_CONFIG as CONST, EXISTING_BUILDING_CONFIG, PANEL_DIRECTION, RAKECUT_TYPE } from '../../app.constants';\nimport { Util } from '../utils';\n// import { AppComponent } from '../../app.component';\nimport HighLightBox from 'src/app/models/HighlightBox';\nimport { CSG } from 'three-csg-ts';\nimport { GableLRFasciaManager } from '.';\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from '../geometry.manager';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, LineType, Print2DView, Printing2DGeometry, Printing2DLine, ViewType } from '../models';\nimport { UI } from '../ui';\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: GableLRFasciaManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private roofInfo: GeometryInfo;\n private roofBaseInfo: GeometryInfo;\n private zFlashingGeo: GeometryInfo\n private zFlashingRakecutRightGeo: GeometryInfo;\n private bargeLeftInfo: GeometryInfo;\n private bargeRightInfo: GeometryInfo;\n private bargeFrontInfo: GeometryInfo;\n private bargeBackInfo: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_bargeRakecutLeft: GeometryInfo;\n private geo_bargeRakecutRight: GeometryInfo;\n private receiverCutoutLeftHor: GeometryInfo;\n private receiverCutoutLeftVer: GeometryInfo;\n private receiverCutoutRightHor: GeometryInfo;\n private receiverCutoutRightVer: GeometryInfo;\n private gutterInfo: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n //private flashingInfo: GeometryInfo;\n private geo_receiverChanel: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public geoBraket_1: GeometryInfo;\n public geoBraket_2: GeometryInfo;\n private geoBeam: GeometryInfo;\n private geoBeamEndCap: GeometryInfo;\n private eventHandleId: any;\n // Var\n private roofLength: number;\n private roofLengthPlus: number;\n private roofWidth: number;\n //private existingTypeLeftX: number;\n //private existingTypeRightX: number;\n private existingType: number;\n private totalBaySize: number;\n private objectSizeChangedHandle: any;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG;\n\n private roofGroupFront: Group;\n private roofGroupBack: Group;\n private cutoutExistingBothLength: number;\n\n constructor(app: AppComponent, fasciaManager: GableLRFasciaManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = fasciaManager;\n this.scene = new Group();\n fasciaManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n this.registerEvent();\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n public uiChanged(preVal: number, curVal: number): void {\n this.load();\n }\n private objectSizeChanged(preVal: number, curVal: number) {\n this.optimize().then(() => { this.load() });\n }\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldBaySize,\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldExistingWidth1,\n this.APP.sldNoOfBay,\n this.APP.dialogEditBay,\n this.APP.sldEaveWidth,\n this.APP.sltExistingType,\n this.APP.sltColourDownpipe,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.roofInfo = this.geometryManager.getRoofSheetPanel();\n this.roofInfo.geometry\n .translate(this.roofInfo.width / 2 + 3, -1, this.roofInfo.length / 2);\n\n this.roofBaseInfo = this.geometryManager.getRoofBase();\n this.roofBaseInfo.geometry\n .translate(this.roofBaseInfo.width / 2, this.roofBaseInfo.height / 2, this.roofBaseInfo.length / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(-this.zFlashingRakecutRightGeo.length, 0, 0);\n\n // Barge capping\n this.bargeLeftInfo = this.geometryManager.getBarge();\n this.bargeLeftInfo.geometry\n .rotateY(Math.PI)\n .translate(this.bargeLeftInfo.width / 2 - 3, this.bargeLeftInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeLeftInfo.length / 2);\n\n this.bargeRightInfo = this.geometryManager.getBarge();\n this.bargeRightInfo.geometry\n .translate(-this.bargeRightInfo.width / 2 + 3, this.bargeRightInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeRightInfo.length / 2);\n\n //Barge cutout left\n this.receiverCutoutLeftHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.receiverCutoutRightHor = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.receiverCutoutLeftHor.length / 2, this.receiverCutoutLeftHor.height / 2, this.receiverCutoutLeftHor.width / 2);\n\n //Vertical Barge cutout left\n this.receiverCutoutLeftVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutLeftVer.geometry\n .rotateY(Math.PI)\n .translate(this.receiverCutoutLeftVer.width / 2, this.receiverCutoutLeftVer.height / 2, this.receiverCutoutLeftVer.length / 2);\n\n //Vertical cutout right\n this.receiverCutoutRightVer = this.geometryManager.getReceiverChannel();\n this.receiverCutoutRightVer.geometry\n .translate(-this.receiverCutoutRightVer.width / 2, this.receiverCutoutRightVer.height / 2, this.receiverCutoutRightVer.length / 2);\n\n //Receiver chanel - barge caping back\n this.geo_receiverChanel = this.geometryManager.getReceiverChannel();\n this.geo_receiverChanel.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_receiverChanel.length / 2, this.geo_receiverChanel.height / 2 + 2, this.geo_receiverChanel.width / 2);\n\n // Gutter\n this.gutterInfo = this.geometryManager.getGutter();\n this.gutterInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterInfo.length / 2, -20, this.gutterInfo.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n\n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 0, -500);\n\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 0, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(800, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n\n this.geoBraket_1 = this.geometryManager.getUpstandBraket(1);\n this.geoBraket_1.geometry.rotateX(Math.PI / 2);\n this.geoBraket_1.geometry.translate(0, this.geoBraket_1.length / 2, 0);\n\n this.geoBraket_2 = this.geometryManager.getUpstandBraket(2);\n this.geoBraket_2.geometry.rotateY(Math.PI);\n this.geoBraket_2.geometry.rotateX(Math.PI / 2);\n this.geoBraket_2.geometry.translate(0, this.geoBraket_2.length / 2, - this.geoBraket_2.height / 4);\n\n this.geoBeam = this.geometryManager.getBeam();\n this.geoBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(0, this.geoBeam.height / 2, 0);\n\n this.geoBeamEndCap = this.geometryManager.getBeamEndCap();\n this.geoBeamEndCap.geometry\n .translate(0, this.geoBeamEndCap.height / 2, this.geoBeamEndCap.length / 2)\n .rotateY(Math.PI / 2);\n\n this.bargeFrontInfo = this.geometryManager.getBarge();\n this.bargeFrontInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.bargeFrontInfo.length / 2, this.bargeFrontInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.bargeFrontInfo.width / 2);\n\n this.bargeBackInfo = this.geometryManager.getBarge();\n this.bargeBackInfo.geometry\n .rotateY(Math.PI / 2)\n .translate(this.bargeBackInfo.length / 2, this.bargeBackInfo.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.bargeBackInfo.width / 2 - 3);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutRight.length / 2);\n\n this.geo_bargeRakecutLeft = this.geometryManager.getBarge();\n this.geo_bargeRakecutLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_bargeRakecutLeft.width / 2, this.geo_bargeRakecutLeft.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutLeft.length / 2);\n\n this.geo_bargeRakecutRight = this.geometryManager.getBarge();\n this.geo_bargeRakecutRight.geometry\n .translate(-this.geo_bargeRakecutRight.width / 2, this.geo_bargeRakecutRight.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_bargeRakecutRight.length / 2);\n\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutRightHor.width / 2);\n\n this.ridgeGeo = this.geometryManager.getRidge();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2, - this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n //test\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n this.roofLength = (UI.span + UI.multiSpan) / 2 + UI.overhangFront;\n this.roofLengthPlus = this.roofLength / this.utils.cos(UI.patiosPitch);\n this.roofWidth = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n this.cutoutExistingBothLength = (this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2;\n\n this.addRoofGroupFront();\n this.addRoofGroupBack();\n this.addCutout();\n\n this.existingType = +this.APP.sltExistingType.currentValue;\n\n\n let offsetXR = this.totalBaySize / 2 + this.MANAGER.patiosGroup.position.x + this.APP.sldRightOverhang.currentValue;\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n const clipingPlane = new Plane(new Vector3(-1, 0, 0), offsetXR); // (this.APP.sldBaySize.currentValue / 2) + this.APP.sldRightOverhang.currentValue );\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlane];\n const roofPanelCount = Math.ceil(this.roofWidth / this.roofInfo.width);\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n //panel direction\n let panelDirectionOfset = 1;\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n offsetXL = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.roofInfo.width;\n panelDirectionOfset = -1;\n }\n else if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT) {\n offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = true;\n\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n\n this.addRoofFrontBaseFront(offsetXL, [this.csg_cutoutLeft]);\n this.addRoofFront(offsetXL, [this.csg_cutoutLeft]);\n\n this.addRoofFrontBaseBack(offsetXL, [this.csg_cutoutLeft]);\n this.addRoofBack(offsetXL, [this.csg_cutoutLeft]);\n cuted = isOver;\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n cuted = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue && !isOver;\n\n this.addRoofFrontBaseFront(offsetXL, [this.csg_cutoutRight]);\n this.addRoofFront(offsetXL, [this.csg_cutoutRight]);\n\n this.addRoofFrontBaseBack(offsetXL, [this.csg_cutoutRight]);\n this.addRoofBack(offsetXL, [this.csg_cutoutRight]);\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH && this.MANAGER.cutoutCondition) {\n let totalPanelLength = 0;\n let cuted = false;\n let cuted2 = false;\n for (let index = 0; index < roofPanelCount; index++) {\n totalPanelLength += this.roofInfo.width;\n let isOver = totalPanelLength < this.APP.sldExistingLength2.currentValue;\n let isOver2 = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue + this.roofInfo.width;\n let flag = totalPanelLength >= this.roofWidth - this.APP.sldExistingLength2.currentValue;\n\n this.addRoofFrontBaseFront(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofFront(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofFrontBaseBack(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n this.addRoofBack(offsetXL, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofPanelCount; index++) {\n this.addRoofFrontBaseFront(offsetXL, []);\n this.addRoofFront(offsetXL, []);\n\n this.addRoofFrontBaseBack(offsetXL, []);\n this.addRoofBack(offsetXL, []);\n offsetXL += this.roofInfo.width * panelDirectionOfset;\n }\n }\n\n this.addZFlashingFront();\n this.addZFlashingBack();\n\n this.addBargeFront();\n this.addBargeBack();\n\n this.addGutterFront();\n this.addGutterBack();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING};\n const height = this.getRoofOffsetY() + \n this.roofBaseInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) + \n this.roofInfo.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) - \n (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1 ? 20 : 10);\n \n let offsetX = (UI.overhangRight - UI.overhangLeft) / 2\n \n const ridgeLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.rotation.set(0, Math.PI / 2, 0)\n ridgeFront.position.set( offsetX, height, ( UI.span + UI.multiSpan ) / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4);\n this.scene.add(ridgeFront)\n }\n\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n\n rightCap.rotateY(Math.PI)\n\n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n\n leftCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n\n return new Group().add(leftCap, rightCap)\n }\n\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 - this.APP.sldEaveWidth.currentValue;\n let offsetY = 0;\n const eaveThickness = 50;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + UI.eaveWidth + eaveThickness - UI.overhangBack;\n\n //extra length to prevent lack when cut\n let extra = 5000;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + extra) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + extra) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + UI.overhangBack + extra) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX - this.APP.sldLeftOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT || this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX + this.APP.sldRightOverhang.currentValue, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n //this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n\n public addZFlashingFront() {\n let offsetX = -(this.totalBaySize / 2 + UI.overhangLeft);\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = ((UI.span + UI.multiSpan) / 2 + UI.overhangFront) / this.utils.cos(UI.patiosPitch);\n\n let flashingLength = this.roofWidth;\n\n let scaleX = flashingLength / this.zFlashingGeo.length;\n\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupFront.add(mesh);\n }\n public addZFlashingBack() {\n let offsetY = this.roofBaseInfo.height - 25;\n const offsetZ = -((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch);\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue) / this.zFlashingGeo.length;\n let flashingLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n // let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (UI.existingWidth2 > 0) {\n offsetX += UI.existingLength2;\n flashingLength -= UI.existingLength2;\n }\n else {\n offsetX += UI.existingLength2;\n flashingLength -= UI.existingLength2;\n }\n\n offsetX += UI.overhangLeft;\n flashingLength -= UI.overhangLeft;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (UI.existingWidth2 > 0) {\n flashingLength -= UI.existingLength2;\n }\n else {\n flashingLength -= UI.existingLength2;\n }\n flashingLength -= UI.overhangRight;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX += UI.existingLength2;\n flashingLength = UI.existingLength1 - UI.eaveWidth * 2;\n }\n }\n\n scaleX = flashingLength / this.zFlashingGeo.length;\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX + flashingLength, offsetY, offsetZ);\n mesh.rotateY(Math.PI);\n mesh.scale.set(scaleX, 1, 1);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n\n this.roofGroupBack.add(mesh);\n }\n public addRoofGroupFront() {\n this.roofGroupFront = null;\n this.roofGroupFront = new Group();\n this.roofGroupFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetX = 0;\n let offsetY = this.getRoofOffsetY();\n\n let offsetZ = (UI.span + UI.multiSpan) / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n this.roofGroupFront.position.set(offsetX, offsetY, offsetZ);\n \n this.roofGroupFront.rotation.set(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n\n this.scene.add(this.roofGroupFront);\n }\n public addRoofGroupBack() {\n this.roofGroupBack = null;\n this.roofGroupBack = new Group();\n this.roofGroupBack.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetX = 0;\n let offsetY = this.getRoofOffsetY();\n\n let offsetZ = (UI.span + UI.multiSpan) / 2 - UI.existingWidth1 / 2 + UI.eaveWidth + this.geoBraket_2.height / 4;\n this.roofGroupBack.position.set(offsetX, offsetY, offsetZ);\n \n this.roofGroupBack.rotation.set(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0);\n\n this.scene.add(this.roofGroupBack);\n }\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let gutterGroupObjs = this.roofGroupFront.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS).concat(\n ...this.roofGroupBack.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n );\n let gutterObjs: Object3D[] = [];\n for (let group of gutterGroupObjs) {\n gutterObjs.push(...group.children);\n }\n\n objs = [...objs, ...gutterObjs];\n\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlane = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlane);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlane);\n }\n\n\n // var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n // line.userData = {type: \"ROOF_OUTLINE\"};\n // this.APP.scene.add( line );\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(0, 0, - UI.existingWidth1 / 2 - UI.overhangBack + UI.eaveWidth + this.geoBraket_2.height / 4)))\n }\n public showPanelOutline() {\n if (this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments(outlineGeo, MaterialManager.Instance().MESH_OUTLINE);\n line.userData = { type: GEOMETRY_TYPE.SHEET_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n public addRoofFront(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n //if ((this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) && this.APP.sldExistingWidth1.currentValue > this.APP.sldEaveWidth.currentValue) {\n // offsetX += this.APP.sldEaveWidth.currentValue;\n //}\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (this.roofLengthPlus - offsetPitch) / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetZ = 0;\n\n // if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && over && this.APP.sldExistingLength2.currentValue > 0) {\n // scaleZ = (this.roofLengthPlus - this.APP.sldExistingWidth1.currentValue) / this.roofInfo.length;\n // offsetZ += this.APP.sldExistingWidth1.currentValue;\n // }\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, \n length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupFront.position.z);\n mesh.updateMatrix();\n\n // let meshResult = new Mesh();\n // let meshTemp = mesh;\n\n // for (let csgObj of csgObjs) {\n // meshResult = CSG.toMesh(CSG.fromMesh(meshTemp).subtract(csgObj), mesh.matrix);\n // meshTemp = meshResult;\n // }\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n //meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupFront.add(meshResult);\n }\n else {\n this.roofGroupFront.add(mesh);\n }\n }\n public addRoofBack(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofInfo.geometry, MaterialManager.Instance().ROOF);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 13;\n }\n else {\n offsetSheet = 5;\n }\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = (((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch) - offsetPitch) / this.roofInfo.length;\n const offsetY = this.roofBaseInfo.height - offsetSheet;\n let offsetZ = 0;\n\n mesh.position.set(offsetX, offsetY, offsetZ - scaleZ * this.roofInfo.length);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views, \n length: scaleZ,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n let rakeCutCondition = this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE || this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE;\n\n if (cutoutCondition || rakeCutCondition) {\n\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n //cho no cung he toa do\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupBack.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n if (rakeCutCondition) {\n if (this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutLeft), mesh.matrix);\n }\n if (this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(this.csg_rakecutRight), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //=> tra ve goc toa do\n meshResult.applyMatrix4(matrixBefore);\n this.roofGroupBack.add(meshResult);\n }\n else {\n this.roofGroupBack.add(mesh);\n }\n }\n public addRoofFrontBaseFront(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (this.roofLengthPlus - CONST.ROOF_BASE_SUBTRACT - offsetPitch) / this.roofBaseInfo.length;\n let offsetY = 0\n let offsetZ = 0\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupFront.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupFront.add(meshResult);\n }\n else {\n this.roofGroupFront.add(mesh);\n }\n }\n public addRoofFrontBaseBack(offsetX: number, csgObjs: CSG[]) {\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n const mesh: Mesh = new Mesh(this.roofBaseInfo.geometry, MaterialManager.Instance().ROOF_BASE);\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = ((((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch)) - offsetPitch - CONST.ROOF_BASE_SUBTRACT) / this.roofBaseInfo.length;\n let offsetY = 0\n let offsetZ = 0\n\n mesh.position.set(offsetX, offsetY, offsetZ - scaleZ * this.roofBaseInfo.length);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.APP.sltExistingType.currentValue != BUILDING_SIDE.NONE && this.APP.sldExistingLength2.currentValue > 0;\n\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupBack.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupBack.add(meshResult);\n }\n else {\n this.roofGroupBack.add(mesh);\n }\n }\n private addBargeFront() {\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n let mesh: Mesh;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n const offsetY = 0;\n\n let scaleZLeft = this.roofLengthPlus / this.bargeLeftInfo.length;\n let bargeLeftLength = this.roofLengthPlus;\n let scaleZRight = this.roofLengthPlus / this.bargeRightInfo.length;\n let bargeRightLength = this.roofLengthPlus;\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n scaleZLeft = (bargeLeftLength - offsetPitch) / this.bargeLeftInfo.length;\n scaleZRight = (bargeRightLength - offsetPitch) / this.bargeRightInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n // left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - fitScale * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n // right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - fitScale * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n }\n private addBargeBack() {\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n let mesh: Mesh;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n const offsetY = 0;\n\n const offsetPitch = this.roofBaseInfo.height * this.utils.tan(UI.patiosPitch)\n\n let bargeLeftLength = ((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch);\n let bargeRightLength = ((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(UI.patiosPitch);\n\n const scaleZLeft = (bargeLeftLength - offsetPitch) / this.bargeLeftInfo.length;\n const scaleZRight = (bargeRightLength - offsetPitch) / this.bargeRightInfo.length;\n\n let fitScale = this.bargeLeftInfo.height * this.utils.tan(UI.patiosPitch) / this.bargeLeftInfo.length;\n\n // left\n mesh = new Mesh(this.bargeLeftInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - scaleZLeft * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n\n // right\n mesh = new Mesh(this.bargeRightInfo.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - scaleZRight * this.bargeLeftInfo.length);\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n public addGutterFront() {\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n const offsetZ = ((UI.span + UI.multiSpan) / 2 + UI.overhangFront - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n const offsetY = this.roofBaseInfo.height - 25;\n\n let gutterLength = this.roofWidth;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, true);\n this.roofGroupFront.add(gutterGroup);\n }\n public addGutterBack() {\n let offsetX = UI.totalBayLength / 2 + UI.overhangRight;\n let offsetZ = -((UI.span + UI.multiSpan) / 2 + UI.overhangBack - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(UI.patiosPitch);\n let offsetY = this.roofBaseInfo.height - 25;\n let gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n //cutout\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight - UI.existingLength2;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n gutterLength = UI.totalBayLength + UI.overhangLeft + UI.overhangRight - UI.existingLength2;\n offsetX = UI.totalBayLength / 2 + UI.overhangRight - UI.existingLength2;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX = UI.existingLength1 / 2 - UI.eaveWidth;\n gutterLength = UI.existingLength1 - 2 * UI.eaveWidth;\n }\n }\n\n let views: Print2DView[] = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n //Add gutter back\n let gutterGroup = this.utils.createGutterGroup(this.gutterInfo, this.geo_gutterCap, gutterLength,\n new Vector3(offsetX, offsetY, offsetZ), new Vector3(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), Math.PI, 0), views, 1, true, true);\n this.roofGroupBack.add(gutterGroup);\n this.addDownPipe(gutterGroup, gutterLength);\n }\n private addDownPipe(gutterGroup: Group, gutterLength: number) {\n let meshPipe = new Mesh(this.MANAGER.postAndBeamManager.geo_downPipe.geometry, MaterialManager.Instance().DOWNPIPE);\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / this.MANAGER.postAndBeamManager.geo_downPipe.height);\n meshPipe.position.set(gutterLength - 100, -190, this.MANAGER.postAndBeamManager.geo_downPipe.width / 2 + 20);\n\n gutterGroup.add(meshPipe);\n }\n public getRoofOffsetY() {\n return UI.existingWallHeight\n + +UI.upstandBraketType\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2);\n }\n}\n\n","import {\n HomeComponent as AppComponent,\n HomeComponent,\n} from \"../../containers/home/home.component\";\nimport {\n Scene,\n Material,\n Mesh,\n BufferGeometry,\n Box3,\n Group,\n LineSegments,\n LineBasicMaterial,\n Plane,\n Vector3,\n BoxGeometry,\n Object3D,\n Geometry,\n EdgesGeometry,\n Line,\n Color,\n BoxHelper,\n Box3Helper,\n BoxBufferGeometry,\n Matrix4,\n PlaneHelper,\n} from \"three\";\nimport { Util, getBeamEndCapCode, getRafterBeamEndCapCode } from \"../utils\";\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport {\n CONFIG as env,\n GEOMETRY_TYPE,\n GEOMETRY_CATEGORY,\n INIT,\n} from \"../../app.config\";\nimport {\n GeometryInfo,\n Printing2DLine,\n ViewType,\n LineType,\n Print2DView,\n Printing2DGeometry,\n Printing2DGeometryType,\n} from \"../models\";\nimport { PatiosGableLRFlyOverManager } from \".\";\nimport {\n EXISTING_BUILDING_CONFIG as CONST,\n BUILDING_SIDE,\n RAKECUT_TYPE,\n CUTOUT_ENABLE,\n FIT_FLYOVER_BRAKET_ON_ROOF,\n EXISTING_BUILDING_CONFIG,\n} from \"src/app/app.constants\";\nimport { UI } from \"../ui\";\nimport _ from \"lodash\";\n\nexport class ColumnAndBeamManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableLRFlyOverManager;\n private material: Material;\n //private beamMaterial: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RafterBeam: GeometryInfo;\n private geo_rafterBeamEndCap: GeometryInfo;\n\n private geo_superiorPost: GeometryInfo;\n private geo_centerSuperiorPost: GeometryInfo;\n public geo_superiorBeam: GeometryInfo;\n private geo_beamRakecutLeft: GeometryInfo;\n private geo_beamRakecutRight: GeometryInfo;\n private geo_beamStepRakecutLeft: GeometryInfo;\n private geo_beamStepRakecutRight: GeometryInfo;\n private geo_beamEndCap: GeometryInfo;\n public geo_bracket: GeometryInfo;\n private geo_groundBase: GeometryInfo;\n private geo_downPipe: GeometryInfo;\n private geo_downPipeL: GeometryInfo;\n private geo_roofBase: GeometryInfo;\n private downpipeGroup: Group;\n private downpipeStepRakeCutGroupLeft: Group;\n private downpipeStepRakeCutGroupRight: Group;\n private eventHandleId: any;\n private objectSizeChangedHandle: any;\n private totalBaySize: number;\n private extraOffsetZ: number;\n private geoBeamJoint: GeometryInfo;\n\n private frontPostHeight: number;\n //private extraBracketHeight = 250;\n private controlsToRegisterEvent: Array;\n private controlsToRegisterEvent2: Array;\n\n private deferHandle;\n private deferTimeout = CONST.CUTOUT_DEFFER_TIME_OUT;\n\n public numberOfBracketsBack = INIT.DEFAULT_BRACKET_NUMBER;\n public numberOfBracketCutout = INIT.DEFAULT_BRACKET_CUTOUT_NUMBER;\n private cutoutExistingBothLength: number;\n private beamLeftCutSizeInfo: any;\n private beamRightCutSizeInfo: any;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableLRFlyOverManager) {\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n\n this.scene = flyOverManager.patiosGroup;\n this.material = MaterialManager.Instance().DEFAULT.clone();\n //this.beamMaterial = MaterialManager.Instance().DEFAULT.clone();\n\n this.registerEvent();\n }\n\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n let bracketHeight =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height / 2;\n let bracketWidth = this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n\n this.geo_bracket = new GeometryInfo();\n this.geo_bracket.geometry =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.geometry\n .clone()\n .rotateX(Math.PI / 2)\n .translate(bracketWidth / 2, bracketHeight, bracketWidth / 2);\n this.geo_bracket.width =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n this.geo_bracket.length =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.length;\n this.geo_bracket.height =\n this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n this.geo_superiorBeam = this.geometryManager.getBeam();\n this.geo_superiorBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_superiorBeam.length / 2,\n this.geo_superiorBeam.height / 2,\n this.geo_superiorBeam.width / 2\n );\n\n this.geoBeamJoint = this.geometryManager.getBeamJoint();\n\n this.geo_beamRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamRakecutLeft.geometry.translate(\n this.geo_beamRakecutLeft.width / 2,\n this.geo_beamRakecutLeft.height / 2,\n -this.geo_beamRakecutLeft.length / 2\n );\n\n this.geo_beamRakecutRight = this.geometryManager.getBeam();\n this.geo_beamRakecutRight.geometry.translate(\n -this.geo_beamRakecutRight.width / 2,\n this.geo_beamRakecutRight.height / 2,\n -this.geo_beamRakecutRight.length / 2\n );\n\n this.geo_beamStepRakecutLeft = this.geometryManager.getBeam();\n this.geo_beamStepRakecutLeft.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_beamStepRakecutLeft.length / 2,\n this.geo_beamStepRakecutLeft.height / 2,\n -this.geo_beamStepRakecutLeft.width / 2\n );\n\n this.geo_beamStepRakecutRight = this.geometryManager.getBeam();\n this.geo_beamStepRakecutRight.geometry\n .rotateY(Math.PI / 2)\n .translate(\n -this.geo_beamStepRakecutRight.length / 2,\n this.geo_beamStepRakecutRight.height / 2,\n -this.geo_beamStepRakecutRight.width / 2\n );\n\n this.geo_beamEndCap = this.geometryManager.getBeamEndCap();\n this.geo_beamEndCap.geometry.translate(\n 0,\n this.geo_beamEndCap.height / 2,\n 0\n );\n\n this.geo_superiorPost = this.geometryManager.getPost();\n this.geo_superiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_superiorPost.width / 2,\n this.geo_superiorPost.height / 2,\n this.geo_superiorPost.width / 2\n );\n\n this.geo_centerSuperiorPost = this.geometryManager.getCenterPost();\n this.geo_centerSuperiorPost.geometry\n .rotateX(Math.PI / 2)\n .translate(\n this.geo_centerSuperiorPost.width / 2,\n this.geo_centerSuperiorPost.height / 2,\n this.geo_centerSuperiorPost.width / 2\n );\n\n this.geo_RafterBeam = this.geometryManager.getRafterBeam();\n this.geo_RafterBeam.geometry\n .rotateY(Math.PI / 2)\n .translate(\n this.geo_RafterBeam.length / 2,\n -this.geo_RafterBeam.height / 2,\n this.geo_RafterBeam.width / 2\n );\n\n this.geo_rafterBeamEndCap = this.geometryManager.getRafterBeamEndCap();\n this.geo_rafterBeamEndCap.geometry.translate(\n 0,\n -this.geo_rafterBeamEndCap.height / 2,\n this.geo_rafterBeamEndCap.length / 2\n );\n\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(\n this.geo_groundBase.width,\n this.geo_groundBase.height,\n this.geo_groundBase.length\n );\n this.geo_groundBase.geometry.translate(\n 0,\n 0,\n this.geo_groundBase.length / 2\n );\n\n this.geo_downPipe = this.geometryManager.getDownPipe();\n this.geo_downPipeL = this.geometryManager.getDownPipeL();\n this.geo_roofBase = this.geometryManager.getRoofBase();\n\n this.scene.remove(\n ...this.scene.children.filter(\n (c) => c.userData.type == GEOMETRY_TYPE.DOWNPIPE\n )\n );\n this.downpipeGroup = new Group();\n this.downpipeGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeGroup);\n this.downpipeStepRakeCutGroupLeft = new Group();\n this.downpipeStepRakeCutGroupLeft.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupLeft);\n\n this.downpipeStepRakeCutGroupRight = new Group();\n this.downpipeStepRakeCutGroupRight.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.DOWNPIPE,\n };\n this.scene.add(this.downpipeStepRakeCutGroupRight);\n resolve();\n });\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n !x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n !x.userData?.position?.back\n )\n );\n // this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.MESH_OUTLINE));\n this.scene.remove(\n ...this.scene.children.filter((x) => x.userData.type == \"BOXHELPER\")\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.GROUND_BASE\n )\n );\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (o) =>\n o.userData.type == \"OUTLINE\" || o.userData.type == \"COLUMN_OUTLINE\"\n )\n );\n\n this.beamLeftCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n this.beamRightCutSizeInfo = this.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n this.downpipeGroup.children = [];\n this.downpipeStepRakeCutGroupLeft.children = [];\n this.downpipeStepRakeCutGroupRight.children = [];\n\n this.extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.cutoutExistingBothLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n\n this.addSuperiorBeam({ front: true });\n this.addSuperiorBeam({ back: true });\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n this.addSuperiorBeam({ cutout: true });\n }\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addSuperiorBeam({ multiSpan: true });\n }\n\n this.addCenterSuperiorBeam();\n this.addGround();\n\n let offsetX = -this.totalBaySize / 2;\n let first = true;\n let last = false;\n for (let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n last = true;\n }\n\n this.addCenterPost(offsetX, { center: true, first, last });\n\n let fitBeam = 0;\n if (i !== 0) {\n if (i == this.APP.dialogEditBay.listBay.length) {\n fitBeam = this.geo_superiorBeam.width;\n } else {\n fitBeam = this.geo_superiorBeam.width / 2;\n }\n }\n\n this.addHorSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n front: true,\n first,\n last,\n });\n this.addRafterSuperiorBeam(offsetX - fitBeam, {\n back: true,\n first,\n last,\n });\n\n this.addPostOrBracket(offsetX, {\n front: true,\n first,\n last,\n left: first,\n right: last,\n });\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n this.addPostOrBracket(offsetX, {\n multiSpan: true,\n first,\n last,\n left: first,\n right: last,\n });\n }\n if (i < this.APP.dialogEditBay.listBay.length) {\n let b = this.APP.dialogEditBay.listBay[i];\n offsetX += b.value;\n }\n first = false;\n }\n\n offsetX = -this.totalBaySize / 2;\n first = true;\n last = false;\n\n this.addPostOrBracketBack();\n this.addPostOrBracketBackCutout();\n this.showBeamOutline();\n this.addDownPipe();\n this.updateUI();\n resolve();\n });\n }\n public showBeamOutline() {\n this.APP.scene.remove(\n ...this.APP.scene.children.filter(\n (x) => x.userData.type == GEOMETRY_TYPE.BEAM_OUTLINE\n )\n );\n\n if (!UI.beamLayoutShow) return;\n\n const objs = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n const meshes = [];\n objs.forEach((el) => {\n if (el.type == \"Group\") {\n meshes.push(\n ...el.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n )\n );\n }\n });\n\n for (let o of meshes) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale(\n o as Mesh,\n 10\n );\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n\n var line = new LineSegments(\n outlineGeo,\n MaterialManager.Instance().BEAM_OUTLINE\n );\n line.userData = { type: GEOMETRY_TYPE.BEAM_OUTLINE };\n this.APP.scene.add(line);\n }\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof() {\n const height =\n this.geometryManager.EAVE.EAVE.height +\n UI.fasciaDepth +\n UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) +\n this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height /\n this.utils.cos(UI.existingRoofPitch);\n\n return height;\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket() {\n const height =\n this.totalHeightFromEaveHeightToTopOfExistingRoof() +\n UI.braketHeight -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height;\n }\n private addDownPipe() {\n let offsetZ =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue - 170;\n let offsetX = -this.totalBaySize / 2 + 50;\n if (this.APP.sltExistingType.currentValue == 1) {\n offsetX = this.totalBaySize / 2 - 50;\n }\n if (this.APP.sltExistingType.currentValue != 0) {\n offsetZ -= this.APP.sldExistingWidth1.currentValue / 2;\n }\n\n let offsetY =\n this.utils.getHeightByAngle(\n UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.overhangFront,\n UI.patiosPitch,\n -1\n ) +\n this.geo_roofBase.height +\n this.geo_superiorBeam.height +\n 90;\n\n if (this.APP.sltGutterType.currentValue == 0) {\n offsetY -= 80;\n } else {\n offsetY -= 60;\n }\n\n this.utils.createDownpipeGroup(\n this.APP,\n this.downpipeGroup,\n this.geo_downPipe,\n this.geo_downPipeL,\n offsetX,\n offsetY,\n offsetZ,\n offsetZ +\n this.APP.sldFrontOverhang.currentValue -\n this.APP.sldFrontOverhang.currentValue,\n 0,\n this.APP.sldFrontOverhang.currentValue,\n offsetY,\n true\n );\n }\n private updateUI() {\n this.APP.sldMinHeight.setValue(_.round(this.frontPostHeight, 0));\n }\n public getSection(): Printing2DGeometry {\n let objs = this.scene.children.filter(\n (o) =>\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_POST ||\n o.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n o.userData.type == GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n\n objs = [...objs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n for (let o of objs) {\n let box = new BoxHelper(o);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n //this.scene.add(box);\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: outlineGeo.vertices,\n views: o.userData.views,\n });\n }\n let beamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM\n );\n for (let g of beamGroups) {\n for (let c of g.children) {\n c.updateMatrix();\n\n let objCloned = c.clone();\n objCloned.applyMatrix4(new Matrix4().getInverse(c.matrix));\n\n let box = new BoxHelper(objCloned);\n\n c.updateWorldMatrix(true, true);\n\n box.geometry.applyMatrix4(c.matrixWorld);\n box.geometry.translate(0, 5000, 0);\n box.userData = { type: \"COLUMN_OUTLINE\" };\n\n let outlineGeo = this.simplifyGeo(box.geometry as BufferGeometry);\n const planView = _.find(\n g.userData.views,\n (el) => el.viewType == ViewType.PLAN\n );\n const anotherViews = _.filter(\n g.userData.views,\n (el) => el.viewType != ViewType.PLAN\n );\n if (anotherViews.length > 0) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices,\n views: anotherViews,\n });\n }\n if (planView) {\n lsGeometries.push({\n objectType: g.userData.type,\n vertices: outlineGeo.vertices\n .slice(0, 8)\n .filter((el, index) => [0, 1, 4, 5].includes(index)),\n views: [planView],\n });\n }\n }\n }\n\n let rafterBeamGroups = this.scene.children.filter(\n (o) => o.userData.type == GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n );\n for (let o of rafterBeamGroups) {\n o.children.forEach((el) => {\n this.utils.getOutlineRafterBeam(el as Mesh, lsGeometries);\n });\n }\n\n return { lines: lsGeometries, texts: [] };\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n //let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute(\"position\").array;\n let lineGeo = new Geometry();\n for (let i = 0; i < vertices.length; i += 3) {\n //simplifiedGeo.vertices.push();\n\n lineGeo.vertices.push(\n new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2])\n );\n //lineGeo.vertices.push(new Vector3(vertices[i+3], vertices[i+4], vertices[i+5]));\n\n //if(i == 18) break;\n }\n\n //2-3\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n //3-7\n lineGeo.vertices.push(\n new Vector3(vertices[6], vertices[7] - 5000, vertices[8])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n //7-6\n lineGeo.vertices.push(\n new Vector3(vertices[18], vertices[19] - 5000, vertices[20])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n //6-2\n lineGeo.vertices.push(\n new Vector3(vertices[15], vertices[16] - 5000, vertices[17])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[3], vertices[4] - 5000, vertices[5])\n );\n\n //1-4\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n //4-8\n lineGeo.vertices.push(\n new Vector3(vertices[9], vertices[10] - 5000, vertices[11])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n //8-5\n lineGeo.vertices.push(\n new Vector3(vertices[21], vertices[22] - 5000, vertices[23])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n //5-1\n lineGeo.vertices.push(\n new Vector3(vertices[12], vertices[13] - 5000, vertices[14])\n );\n lineGeo.vertices.push(\n new Vector3(vertices[0], vertices[1] - 5000, vertices[2])\n );\n\n //let line = new LineSegments(lineGeo, new LineBasicMaterial({color: new Color('red')}));\n //this.scene.add(line);\n return lineGeo;\n }\n\n private addGround() {\n let offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.extraOffsetZ +\n this.APP.sldBackOverhang.currentValue\n );\n let width =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let length =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n\n let base = new Mesh(\n this.geo_groundBase.geometry,\n MaterialManager.Instance().BASE\n );\n base.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GROUND_BASE,\n };\n base.position.set((UI.overhangRight - UI.overhangLeft) / 2, 0, offsetZ);\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n if (this.APP.sltExistingType.currentValue == 1) {\n base.position.setX(base.position.x + offsetX);\n }\n if (this.APP.sltExistingType.currentValue == 2) {\n base.position.setX(base.position.x - offsetX);\n }\n base.scale.set(\n width / this.geo_groundBase.width,\n 1,\n length / this.geo_groundBase.length\n );\n\n this.scene.add(base);\n }\n private addPostOrBracket(offsetX: number, userDataPos: any): void {\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n if (userDataPos.front) {\n postOffsetZ =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n bracketOffsetZ =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n if (this.APP.sldMultiSpan.currentValue > 0) {\n postOffsetZ -= this.geo_superiorPost.width / 2;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width / 2;\n } else {\n postOffsetZ -= this.geo_superiorPost.width;\n bracketOffsetZ -= this.geometryManager.FLY_OVER_BRACKET.S65x3.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.back) {\n postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n if (userDataPos.multiSpan) {\n postOffsetZ =\n UI.span +\n UI.multiSpan -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.geo_superiorPost.width -\n this.extraOffsetZ;\n bracketOffsetZ =\n UI.span +\n UI.multiSpan -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.geometryManager.FLY_OVER_BRACKET.S65x3.width -\n this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY = UI.braketHeight / this.geo_bracket.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n if (userDataPos.first) {\n } else if (userDataPos.last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n let exceedMoveBackLimit = false;\n\n //post can not go behind existing wall\n if (exceedMoveBackLimit) {\n return;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n let boxPost = new Box3().setFromObject(meshPost);\n // let boxPostHelper = new Box3Helper(boxPost);\n // this.APP.scene.add(boxPostHelper);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue != 3) {\n if (meshBracket.userData.position.left) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (meshBracket.userData.position.right) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n }\n this.scene.add(meshBracket);\n } else {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshPost.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (this.APP.sltExistingType.currentValue == 2) {\n meshPost.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n this.scene.add(meshPost);\n }\n }\n public addPostOrBracketBack() {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back\n )\n );\n\n let first = true;\n let last = false;\n let offsetX = -this.totalBaySize / 2;\n let userDataPos = { back: true };\n\n let bracketDistance = this.totalBaySize / (this.numberOfBracketsBack - 1);\n let cutoutLengthInExistingBoth =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2;\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketsBack - 1);\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue -\n (this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK);\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n (this.totalBaySize - this.APP.sldExistingLength2.currentValue) /\n (this.numberOfBracketsBack - 1);\n } else {\n bracketDistance =\n (this.totalBaySize -\n this.APP.sldExistingLength2.currentValue +\n extraWalWidth) /\n (this.numberOfBracketsBack - 1);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX += cutoutLengthInExistingBoth - extraWalWidth;\n bracketDistance =\n (this.APP.sldExistingLength.currentValue + extraWalWidth * 2) /\n (this.numberOfBracketsBack - 1);\n }\n }\n\n for (let i = 0; i < this.numberOfBracketsBack; i++) {\n if (i == this.numberOfBracketsBack - 1) {\n last = true;\n }\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let bracketOffsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfExistingRoof() -\n FIT_FLYOVER_BRAKET_ON_ROOF;\n let postOffsetZ = 0;\n let bracketOffsetZ = 0;\n\n let scalePostY = 1;\n let scaleBracketY = 1;\n\n let views: Print2DView[];\n\n postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 - this.extraOffsetZ;\n scalePostY =\n (this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket()) /\n this.geo_superiorPost.height;\n scaleBracketY =\n UI.braketHeight / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetX;\n let postOffsetX = offsetX;\n\n if (first) {\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n meshBracket.position.set(bracketOffsetX, bracketOffsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n\n let isIntersect = false;\n //let isCutoutInterset = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n }\n }\n\n if (isIntersect) {\n if (\n i == 0 &&\n (this.APP.sltExistingType.currentValue == 1 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n } else if (\n last &&\n (this.APP.sltExistingType.currentValue == 2 ||\n this.APP.sltExistingType.currentValue == 3)\n ) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketsBack) {\n offsetX += bracketDistance;\n }\n first = false;\n }\n }\n public addPostOrBracketBackCutout(): void {\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n this.scene.remove(\n ...this.scene.children.filter(\n (x) =>\n x.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n x.userData?.position?.back &&\n x.userData?.position?.cutout\n )\n );\n\n if (\n this.APP.sltCutOut.currentValue != CUTOUT_ENABLE.YES ||\n !this.MANAGER.cutoutCondition\n )\n return;\n\n let first = true;\n let last = false;\n let offsetXL = -this.totalBaySize / 2;\n let offsetXR = this.totalBaySize / 2;\n\n let userDataPos = { back: true, cutout: true };\n\n let extraWalWidth =\n this.APP.existingWallManager.geo_existingWallL1.width +\n CONST.EAVE_OFFSET_BACK;\n let bracketDistance =\n (this.APP.sldExistingLength2.currentValue - extraWalWidth) /\n (this.numberOfBracketCutout - 1);\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n bracketDistance =\n this.APP.sldExistingLength2.currentValue /\n (this.numberOfBracketCutout - 1);\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n //let offsetX = 0;\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXL;\n let postOffsetX = offsetXL;\n if (first) {\n } else if (last) {\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 1) {\n meshBracket.translateX(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n );\n }\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXL += bracketDistance;\n }\n first = false;\n }\n }\n\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n first = true;\n\n for (let i = 0; i < this.numberOfBracketCutout; i++) {\n if (i == this.numberOfBracketCutout - 1) {\n last = true;\n }\n\n let meshPost = new Mesh(\n this.geo_superiorPost.geometry,\n MaterialManager.Instance().POST\n );\n meshPost.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let meshBracket = new Mesh(\n this.geo_bracket.geometry,\n MaterialManager.Instance().BRACKET\n );\n meshBracket.userData = {\n position: userDataPos,\n type: GEOMETRY_TYPE.FLY_OVER_BRACKET,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let offsetY = this.APP.sldExistingWallHeight.currentValue;\n\n let postOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n let bracketOffsetZ =\n -this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ +\n this.APP.sldExistingWidth1.currentValue;\n\n let views: Print2DView[];\n\n let scalePostY =\n this.utils.getHeightByAngle(\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geo_superiorPost.height;\n\n let scaleBracketY =\n this.utils.getHeightByAngle(\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket(),\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1,\n UI.patiosPitch,\n 1\n ) / this.geometryManager.FLY_OVER_BRACKET.S65x3.height;\n\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n meshPost.userData.views = views;\n meshBracket.userData.views = views;\n\n let bracketOffsetX = offsetXR;\n let postOffsetX = offsetXR;\n if (first) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n }\n } else if (last) {\n bracketOffsetX -= this.geo_bracket.width;\n postOffsetX -= this.geo_superiorPost.width;\n } else {\n bracketOffsetX -= this.geo_bracket.width / 2;\n postOffsetX -= this.geo_superiorPost.width / 2;\n }\n\n meshPost.position.set(postOffsetX, 0, postOffsetZ);\n meshPost.scale.setY(scalePostY);\n\n meshBracket.position.set(bracketOffsetX, offsetY, bracketOffsetZ);\n meshBracket.scale.setY(scaleBracketY);\n\n //Check intersect eave\n let boxPost = new Box3().setFromObject(meshPost);\n boxPost.translate(this.scene.position);\n let isIntersect = false;\n for (let eave of this.APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n if (boxPost.intersectsBox(boxEave)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n if (this.APP.sltExistingType.currentValue == 2) {\n meshBracket.translateX(\n -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2\n )\n );\n }\n\n this.scene.add(meshBracket);\n } else {\n this.scene.add(meshPost);\n }\n\n if (i < this.numberOfBracketCutout) {\n offsetXR -= bracketDistance;\n }\n first = false;\n }\n }\n }\n\n public addCenterSuperiorBeam() {\n let offsetXL = -(\n this.totalBaySize / 2 +\n this.APP.sldLeftOverhang.currentValue\n );\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n\n let views: Print2DView[];\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n ((UI.span + UI.multiSpan) / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_superiorBeam.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetXL + fitX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n { center: true },\n \"RB\",\n this.geoBeamJoint\n );\n }\n\n private addCenterPost(offsetX, userDataPos) {\n let meshPost = new Mesh(\n this.geo_centerSuperiorPost.geometry,\n MaterialManager.Instance().BEAM\n );\n meshPost.userData = {\n ...userDataPos,\n type: GEOMETRY_TYPE.SUPERIOR_CENTER_POST,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n\n let scalePostY = 1;\n\n let views: Print2DView[];\n\n let postOffsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_centerSuperiorPost.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n this.frontPostHeight =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n\n scalePostY =\n (((UI.span + UI.multiSpan) / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch) -\n this.geo_superiorBeam.height) /\n this.geo_centerSuperiorPost.height;\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n let postOffsetX = offsetX - this.geo_centerSuperiorPost.width / 2;\n\n if (userDataPos.first) {\n postOffsetX += this.geo_centerSuperiorPost.width / 2;\n } else if (userDataPos.last) {\n postOffsetX -= this.geo_centerSuperiorPost.width / 2;\n } else {\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX -= offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n postOffsetX += offsetX;\n }\n\n meshPost.userData.views = views;\n meshPost.position.set(\n postOffsetX,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n postOffsetZ\n );\n meshPost.scale.setY(scalePostY);\n\n this.scene.add(meshPost);\n }\n\n public addHorSuperiorBeam(offsetX, userDataPos: any) {\n let mesh = new Mesh(\n this.geo_superiorBeam.geometry,\n MaterialManager.Instance().BEAM\n );\n\n let offsetXL = 0;\n let offsetXR = UI.span + UI.multiSpan - 2 * this.geo_superiorBeam.width;\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n (UI.span + UI.multiSpan - 2 * this.geo_superiorBeam.width) /\n this.geo_superiorBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n UI.span +\n UI.multiSpan -\n this.geo_superiorBeam.width -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let capL = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capL.position.set(\n offsetXL + this.geo_beamEndCap.length / 2 - 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capL.rotateY(Math.PI / 2);\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let capR = new Mesh(\n this.geo_beamEndCap.geometry,\n MaterialManager.Instance().BEAM\n );\n capR.position.set(\n offsetXR - this.geo_beamEndCap.length / 2 + 2,\n 0,\n this.geo_beamEndCap.width / 2\n );\n capR.rotateY(-Math.PI / 2);\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n this.geo_beamEndCap.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n\n let beamOffsetX = offsetX;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n beamOffsetX -= offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n beamOffsetX += offsetX;\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n name: \"GB\",\n };\n beamGroup.position.set(beamOffsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n this.scene.add(beamGroup);\n }\n\n public addRafterSuperiorBeam(offsetX, userDataPos: any) {\n if (\n this.APP.sltWindClass.currentValue == 0 ||\n this.APP.sltWindClass.currentValue == 1\n ) {\n if (this.totalBaySize <= 6000 && this.APP.sldSpan.currentValue <= 7000) {\n return;\n }\n }\n if (\n this.APP.sltWindClass.currentValue == 3 ||\n this.APP.sltWindClass.currentValue == 4 ||\n this.APP.sltWindClass.currentValue == 5\n ) {\n return;\n }\n let mesh;\n const beamWidth = this.geo_superiorBeam.width;\n const braketWidth = this.geo_bracket.width;\n let offsetXL = 0;\n let offsetXR =\n ((UI.span + UI.multiSpan) / 2 - beamWidth / 2) /\n this.utils.cos(UI.patiosPitch);\n let offsetZ = 0;\n let offsetY = 0;\n\n let scaleX =\n ((UI.span + UI.multiSpan) / 2 - beamWidth / 2) /\n this.utils.cos(UI.patiosPitch) /\n this.geo_RafterBeam.length;\n\n let views: Print2DView[];\n\n if (userDataPos.front) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, 1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n braketWidth +\n beamWidth / 2 -\n UI.existingWidth1 / 2\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height;\n offsetZ =\n UI.span + UI.multiSpan - UI.existingWidth1 / 2 - this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n let material = MaterialManager.Instance().BEAM.clone();\n\n let nBottom = new Vector3(0, 1, 0).normalize();\n let pBottom = new Vector3(\n 0,\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height,\n 0\n );\n let planeBottom = new Plane().setFromNormalAndCoplanarPoint(\n nBottom,\n pBottom\n );\n\n let nVer = new Vector3(0, 0, -1).normalize();\n let pVer = new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n braketWidth -\n this.geo_superiorBeam.width * 0.5 -\n UI.existingWidth1 / 2\n );\n let planeVer = new Plane().setFromNormalAndCoplanarPoint(nVer, pVer);\n\n material.clippingPlanes = [planeBottom, planeVer];\n\n mesh = new Mesh(this.geo_RafterBeam.geometry, material);\n\n offsetY =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n ((UI.span + UI.multiSpan) / 2 - this.geo_superiorBeam.width / 2) *\n this.utils.tan(UI.patiosPitch);\n offsetZ =\n (UI.span + UI.multiSpan) / 2 -\n this.geo_superiorBeam.width / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ;\n\n views = [\n // { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n }\n\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.position.set(offsetXL, 0, 0);\n mesh.scale.setX(scaleX);\n\n let checkExec = /\\w{1}\\d{1,3}x(\\d{1,3})/.exec(this.geo_RafterBeam.name);\n let beamSize = checkExec && checkExec.length == 2 ? checkExec[1] : \"\";\n let lowerBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n false\n );\n let higherBraketName = getRafterBeamEndCapCode(\n EXISTING_BUILDING_CONFIG.RAFTER_BEAM_SIZE,\n true\n );\n\n let capL;\n let capR;\n if (userDataPos.front) {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n } else {\n let matEndCap = MaterialManager.Instance().BEAM.clone();\n\n let heightReal =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlane = heightReal * this.utils.cos(UI.patiosPitch);\n let translateZ = this.utils.sin(UI.patiosPitch) * heightPlane;\n\n let planeTop = new Plane(new Vector3(0, -1, 0));\n let matrixTranslateTop = new Matrix4().makeTranslation(\n 0,\n heightPlane,\n -translateZ / 2\n );\n let matrixRotateTop = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalTop = matrixTranslateTop.multiply(matrixRotateTop);\n planeTop.applyMatrix4(matrixTotalTop);\n\n let heightRealBottom =\n UI.existingWallHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.geo_superiorBeam.height -\n this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n (this.utils.tan(UI.patiosPitch) * (UI.span + UI.multiSpan)) / 2;\n let heightPlaneBottom = heightRealBottom * this.utils.cos(UI.patiosPitch);\n let translateZBottom = this.utils.sin(UI.patiosPitch) * heightPlaneBottom;\n\n let planeBottom = new Plane(new Vector3(0, 1, 0));\n let matrixTranslateBottom = new Matrix4().makeTranslation(\n 0,\n heightPlaneBottom,\n -translateZBottom / 2\n );\n let matrixRotateBottom = new Matrix4().makeRotationX(\n -this.utils.degreesToRadians(UI.patiosPitch)\n ); //tao voi z pitch do\n let matrixTotalBottom =\n matrixTranslateBottom.multiply(matrixRotateBottom);\n planeBottom.applyMatrix4(matrixTotalBottom);\n\n planeTop.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n planeBottom.translate(\n new Vector3(\n 0,\n 0,\n (UI.span + UI.multiSpan) / 2 -\n UI.existingWidth1 / 2 -\n this.extraOffsetZ +\n this.scene.position.z\n )\n );\n\n matEndCap.clippingPlanes = [planeTop, planeBottom];\n\n capL = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capL.position.set(offsetXL - 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capL.scale.setY(\n (this.geo_RafterBeam.height / this.utils.cos(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length * this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capL.rotateY(Math.PI / 2);\n capL.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n capL.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: higherBraketName,\n };\n\n capR = new Mesh(this.geo_rafterBeamEndCap.geometry, matEndCap);\n capR.position.set(offsetXR + 2, 0, this.geo_rafterBeamEndCap.width / 2);\n capR.scale.setY(\n (this.geo_RafterBeam.height / this.utils.sin(UI.patiosPitch) +\n this.geo_rafterBeamEndCap.length / this.utils.tan(UI.patiosPitch)) /\n this.geo_rafterBeamEndCap.height\n );\n capR.rotateY(-Math.PI / 2);\n capR.rotateX(-Math.PI / 2 + this.utils.degreesToRadians(UI.patiosPitch));\n capR.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP,\n name: lowerBraketName,\n };\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(offsetX, offsetY, offsetZ);\n if (this.APP.sltBeamType.currentValue == 0) {\n beamGroup.add(mesh, capL, capR);\n } else {\n beamGroup.add(mesh);\n }\n\n beamGroup.rotateY(Math.PI / 2);\n\n if (userDataPos.front) {\n beamGroup.rotateZ(this.utils.degreesToRadians(UI.patiosPitch));\n } else if (userDataPos.back) {\n beamGroup.rotateZ(-this.utils.degreesToRadians(UI.patiosPitch));\n }\n\n this.scene.add(beamGroup);\n }\n\n public addSuperiorBeam(userDataPos: any) {\n let offsetX =\n -this.totalBaySize / 2 - this.APP.sldLeftOverhang.currentValue;\n let offsetZ = 0;\n let offsetY = 0;\n\n let beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK;\n let views: Print2DView[];\n\n if (userDataPos.front) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n this.APP.sldSpan.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n if (this.APP.sldMultiSpan.currentValue > 0) {\n offsetZ -= this.geo_superiorBeam.width / 2;\n } else {\n offsetZ -= this.geo_superiorBeam.width;\n }\n\n views = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.back) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ = -(\n this.APP.sldExistingWidth1.currentValue / 2 +\n this.extraOffsetZ\n );\n\n if (\n this.APP.sltCutOut.currentValue == 1 &&\n this.MANAGER.cutoutCondition\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n offsetX += this.APP.sldExistingLength2.currentValue;\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n } else {\n offsetX +=\n this.APP.sldExistingLength2.currentValue - extraWallWidth;\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n offsetX += this.APP.sldLeftOverhang.currentValue;\n beamLength -= this.APP.sldLeftOverhang.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue;\n } else {\n beamLength =\n this.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n extraWallWidth;\n }\n\n beamLength -= this.APP.sldRightOverhang.currentValue;\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n offsetX +=\n (this.totalBaySize -\n (this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2)) /\n 2 -\n CONST.EAVE_OFFSET_BACK;\n beamLength =\n this.APP.sldExistingLength.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width * 2 +\n CONST.EAVE_OFFSET_BACK * 2;\n }\n }\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.multiSpan) {\n offsetY =\n this.APP.sldExistingWallHeight.currentValue +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket();\n offsetZ =\n UI.span +\n UI.multiSpan -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.geo_superiorBeam.width -\n this.extraOffsetZ;\n\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n } else if (userDataPos.cutout) {\n offsetY =\n UI.eaveHeight +\n this.totalHeightFromEaveHeightToTopOfFlyoverBraket() +\n this.getBracketHeight(\n UI.existingWidth1 > (UI.span + UI.multiSpan) / 2\n ? Math.abs(UI.span + UI.multiSpan - UI.existingWidth1)\n : UI.existingWidth1\n );\n\n offsetZ =\n this.APP.sldExistingWidth1.currentValue -\n this.APP.sldExistingWidth1.currentValue / 2 -\n this.extraOffsetZ;\n beamLength =\n this.APP.sldExistingLength2.currentValue -\n this.APP.existingWallManager.geo_existingWallW1.width;\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n }\n\n beamLength +=\n this.APP.sldLeftOverhang.currentValue +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n views = [\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.DASHED },\n ];\n\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n beamLength += extraWallWidth;\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue -\n CONST.EAVE_OFFSET_BACK;\n } else {\n offsetX =\n this.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue -\n this.APP.sldExistingLength2.currentValue +\n this.APP.existingWallManager.geo_existingWallW1.width;\n }\n\n offsetX -=\n this.APP.sldRightOverhang.currentValue +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n beamLength +=\n this.APP.sldRightOverhang.currentValue +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n beamLength =\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2 -\n this.APP.existingWallManager.geo_existingWallW1.width -\n CONST.EAVE_OFFSET_BACK +\n this.geo_bracket.width +\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2;\n }\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX -= fitZ;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let fitZ =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetX += fitZ;\n }\n\n if (userDataPos.front || userDataPos.multiSpan) {\n this.cutStandardBeamByCutBeamWithinBayControl(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n } else {\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n }\n\n //Add one more beam cutout right\n if (userDataPos.cutout && this.APP.sltExistingType.currentValue == 3) {\n offsetX =\n this.totalBaySize / 2 -\n (this.totalBaySize - this.APP.sldExistingLength.currentValue) / 2 +\n this.APP.existingWallManager.geo_existingWallW1.width +\n CONST.EAVE_OFFSET_BACK -\n this.geo_superiorBeam.width -\n (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n (this.geo_bracket?.width || 0) / 2);\n\n this.cutStandardBeamToEqualLengthBeam(\n this.geo_superiorBeam,\n this.geo_beamEndCap,\n beamLength,\n new Vector3(offsetX, offsetY, offsetZ),\n new Vector3(),\n views,\n 1,\n userDataPos,\n \"EB\",\n this.geoBeamJoint\n );\n }\n }\n private cutStandardBeamToEqualLengthBeam(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n const numOfBeam = Math.ceil(\n length / EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM\n );\n const lengthPerBeam = Math.abs(beamEndX - beamStartX) / numOfBeam;\n for (let i = 0; i < numOfBeam; i++) {\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n lengthPerBeam,\n new Vector3(beamStartX + lengthPerBeam * i, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == numOfBeam - 1 || (i == 0 && numOfBeam == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private cutStandardBeamByCutBeamWithinBayControl(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamName = \"\",\n jointGeo: GeometryInfo\n ) {\n const fitX = this.getContainerOffsetXToFitBraketToExistingWall();\n // Map list cut beam here\n const beamStartX = pos.x;\n const beamEndX = pos.x + length;\n\n let endOfBayX = -UI.totalBayLength / 2 + fitX;\n let startCutBeamX = beamStartX;\n let endCutBeamX = beamStartX;\n\n const beams = this.utils.getListSeperateBeamsByBays(\n endOfBayX,\n beamStartX,\n beamEndX,\n endCutBeamX,\n startCutBeamX\n );\n\n for (let i = 0; i < beams.length; i++) {\n endCutBeamX = beams[i][1];\n startCutBeamX = beams[i][0];\n let beamGroup = this.utils.createBeamGroup(\n beamGeo,\n beamCapGeo,\n endCutBeamX - startCutBeamX,\n new Vector3(startCutBeamX, pos.y, pos.z),\n rot,\n views,\n directionOffset,\n userDataPos,\n UI.beamLayoutShow,\n {\n hasStartCap: UI.beamType == 0 && i == 0,\n hasEndCap:\n UI.beamType == 0 &&\n (i == beams.length - 1 || (i == 0 && beams.length == 1)),\n hasStartJoint: i !== 0,\n hasEndJoint: false,\n jointGeo: jointGeo,\n }\n );\n beamGroup.userData = {\n ...beamGroup.userData,\n name: beamName,\n };\n this.scene.add(beamGroup);\n }\n }\n private getContainerOffsetXToFitBraketToExistingWall() {\n let fitX = 0;\n if (UI.existingType == BUILDING_SIDE.RIGHT) {\n fitX = -(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)\n );\n }\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n fitX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n return fitX;\n }\n public getBracketHeight(offset): number {\n let angle = UI.patiosPitch;\n return this.utils.tan(angle) * offset;\n }\n\n public destroy(): void {\n this.unregisterEvent();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChangedDefer.bind(this);\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n\n this.APP.sltExistingType,\n this.APP.dialogEditBay,\n\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldFrontOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n ];\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColumnType,\n ];\n this.controlsToRegisterEvent2.forEach((c) =>\n c.addAction(this.objectSizeChangedHandle)\n );\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach((c) =>\n c.removeAction(this.objectSizeChangedHandle)\n );\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged(pre: number, cur: number) {\n this.optimize().then(() => {\n this.load();\n });\n }\n uiChangedDefer(previousValue: number, currentValue: number) {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.load();\n }, this.deferTimeout);\n } else {\n this.load();\n }\n }\n}\n","import { Scene, Mesh, Object3D, Material, Group, FontLoader, TextBufferGeometry, PlaneBufferGeometry, Vector3, BoxHelper, Box3Helper, Matrix4, Box3, Geometry, LineSegments, LineBasicMaterial, Color, BoxBufferGeometry, ArrowHelper, BufferGeometry, Line, Line3 } from \"three\";\nimport { HomeComponent as AppComponent, HomeComponent } from '../../containers/home/home.component';\nimport { Util } from '../utils';\nimport { MaterialManager } from '../material.manager';\nimport { GeometryInfo, ViewType, LineType, IBay, Printing2DGeometry, Printing2DLine, Print2DText, Printing2DGeometryType } from '../models';\nimport { GEOMETRY_TYPE, DIMENSION_LOCATION, DIMENSION_LABEL_TYPE } from 'src/app/app.config';\nimport { environment } from 'src/environments/environment';\nimport { PatiosGableLRFlyOverManager } from '.';\nimport { GeometryManager } from '../geometry.manager';\nimport { BUILDING_SIDE, FIT_FLYOVER_BRAKET_ON_ROOF, PANEL_DIRECTION, RAKECUT_TYPE } from 'src/app/app.constants';\nimport Dimension, { AddDimensionOptions } from \"src/app/models/Dimension\";\nimport {CONFIG as conf} from '../../app.config'\nimport { UI } from \"../ui\";\n\nexport class DimensionManager {\n private scene: Scene;\n private APP: AppComponent;\n private MANAGER: PatiosGableLRFlyOverManager;\n public listText: THREE.Object3D[] = [];\n private utils: Util;\n\n\n private eventHandleId: any;\n\n private material: Material;\n\n private materialManager: MaterialManager;\n\n private dimensionPatiosFrontBottom: Object3D;\n private dimensionPatiosFrontRight: Object3D;\n \n private dimensionPatiosRightBottom: Object3D;\n private dimensionPatiosRightLeft: Object3D;\n private dimensionPatiosRightRight: Object3D;\n\n private dimensionPatiosLeftBottom: Object3D;\n private dimensionPatiosLeftRight: Object3D;\n private dimensionPatiosLeftLeft: Object3D;\n\n private dimensionPatiosPlanRight: Object3D;\n private dimensionPatiosPlanBottom: Object3D;\n private dimensionPatiosPlanLeft: Object3D;\n private dimensionPlanMiddle: Object3D;\n private dimensionPlanMidleLeft: Object3D;\n private dimensionPatiosPlanLeftOverHang: Object3D;\n\n private lineCapGeo: GeometryInfo;\n private lineGeo: GeometryInfo;\n private textGeo: TextBufferGeometry;\n\n private dimensionDistance = 1500;\n private dimensionDistance2 = 500;\n private dimensionDistance3 = 300;\n\n private textDistance = 5000;\n\n private totalBaySize: number;\n private box: Box3;\n\n private font: any\n private textParameter: any;\n private isReady = false;\n\n private controlsToRegisterEvent: Array;\n private geometryManager: GeometryManager;\n\n private options : AddDimensionOptions;\n private startPos: Vector3;\n private startMatrix: Matrix4;\n private startBayLength: number;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableLRFlyOverManager) {\n this.utils = new Util();\n this.materialManager = MaterialManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = this.APP.scene;\n this.material = MaterialManager.Instance().DIMENSION_TEXT;\n this.geometryManager = GeometryManager.Instance();\n //this.registerEvent();\n }\n\n \n public optimize() : Promise{\n return new Promise((resolve, reject) => {\n this.lineGeo = this.geometryManager.getDimensionLine();\n this.lineCapGeo = this.geometryManager.getDimensionCap();\n\n resolve();\n });\n }\n public load(): Promise { \n return new Promise((resolve, reject) => {\n this.unload();\n \n var loader = new FontLoader();\n \n this.dimensionPatiosFrontBottom = new Group();\n this.dimensionPatiosFrontBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n // this.dimensionPatiosFrontBottom.rotation.set(0,Math.PI,0);\n this.dimensionPatiosFrontBottom.visible = false;\n\n this.dimensionPatiosFrontRight = new Group();\n this.dimensionPatiosFrontRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosFrontRight.rotation.set(0,0,-Math.PI/2);\n this.dimensionPatiosFrontRight.visible = false;\n \n this.dimensionPatiosRightBottom = new Group();\n this.dimensionPatiosRightBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosRightBottom.visible = false;\n\n this.dimensionPatiosRightLeft = new Group();\n this.dimensionPatiosRightLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightLeft.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightLeft.visible = false;\n\n this.dimensionPatiosRightRight = new Group();\n this.dimensionPatiosRightRight.rotation.set(0,-Math.PI/2,-Math.PI/2);\n this.dimensionPatiosRightRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosRightRight.visible = false;\n \n\n this.dimensionPatiosLeftBottom = new Group();\n this.dimensionPatiosLeftBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftBottom.rotation.set(0,-Math.PI/2,0);\n this.dimensionPatiosLeftBottom.visible = false;\n\n this.dimensionPatiosLeftRight = new Group();\n this.dimensionPatiosLeftRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftRight.rotation.set(Math.PI/2,-Math.PI/2,0);\n this.dimensionPatiosLeftRight.visible = false;\n\n this.dimensionPatiosLeftLeft = new Group();\n this.dimensionPatiosLeftLeft.rotation.set(0, -Math.PI / 2, Math.PI / 2);\n this.dimensionPatiosLeftLeft.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosLeftLeft.visible = false;\n \n\n\n this.dimensionPatiosPlanRight = new Group();\n this.dimensionPatiosPlanRight.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanRight.rotation.set(-Math.PI/2, Math.PI, -Math.PI/2);\n\n this.dimensionPatiosPlanBottom = new Group();\n this.dimensionPatiosPlanBottom.userData = { type: GEOMETRY_TYPE.DIMENSION };\n this.dimensionPatiosPlanBottom.rotation.set(-Math.PI / 2, 0, 0);\n\n this.dimensionPatiosPlanLeft = new Group();\n this.dimensionPatiosPlanLeft.userData = { type: GEOMETRY_TYPE.DIMENSION , position: { left: true } };\n this.dimensionPatiosPlanLeft.rotation.set(-Math.PI / 2, 0, -Math.PI / 2);\n\n this.dimensionPlanMiddle = new Group();\n this.dimensionPlanMiddle.userData = { type: GEOMETRY_TYPE.DIMENSION };\n //this.dimensionPlanMiddle.rotation.set(-Math.PI / 2, 0, 0);\n this.dimensionPlanMidleLeft = new Group();\n\n this.dimensionPatiosPlanLeftOverHang = new Group();\n\n this.scene.add(this.dimensionPatiosPlanRight);\n this.scene.add(this.dimensionPatiosPlanLeft);\n this.scene.add(this.dimensionPatiosFrontRight);\n this.APP.patiosManager.patiosGroup.add(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight, \n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPatiosPlanLeftOverHang,\n this.dimensionPatiosLeftLeft,\n this.dimensionPlanMidleLeft\n );\n\n\n\n loader.load( environment.modelBaseUrl + '/assets/fonts/helvetiker_regular.typeface.json', (font) => {\n this.font = font;\n\n this.textParameter = {\n font: this.font,\n size: 200,\n height: 5,\n curveSegments: 10\n };\n this.options = {\n container: HomeComponent.ins.scene,\n start: new Vector3(),\n end: new Vector3(),\n linePos: new Vector3(),\n views: [],\n allowDrag: true,\n textParameter: this.textParameter,\n textPos: new Vector3(),\n labelType: null,\n fitZ: 10,\n hasTextClone: false,\n axis: 'x',\n lineLength: 0,\n subtype: null,\n textUserData: null,\n onDragCallback: this.onDimDrag.bind(this),\n onDragStartCallback: this.onDimDragStart.bind(this),\n }\n\n this.isReady = true;\n this.draw();\n \n resolve();\n })\n });\n }\n\n public unload(){\n this.scene.remove(this.dimensionPatiosPlanRight);\n this.scene.remove(this.dimensionPatiosPlanLeft);\n this.scene.remove(this.dimensionPatiosFrontRight);\n if(this.APP.patiosManager && this.APP.patiosManager.patiosGroup){\n this.APP.patiosManager.patiosGroup.remove(\n this.dimensionPatiosFrontBottom, \n //this.dimensionPatiosFrontRight, \n this.dimensionPatiosRightBottom,\n this.dimensionPatiosRightLeft,\n this.dimensionPatiosRightRight,\n this.dimensionPatiosLeftBottom, \n this.dimensionPatiosLeftRight,\n this.dimensionPatiosLeftLeft,\n this.dimensionPatiosPlanBottom,\n this.dimensionPlanMiddle,\n this.dimensionPlanMidleLeft,\n this.dimensionPatiosPlanLeftOverHang\n );\n }\n }\n \n public draw() {\n if (!this.isReady) {\n return;\n }\n // this.dimensionPatiosPlanBottom.children = [];\n // this.dimensionPatiosPlanRight.children = [];\n // this.dimensionPatiosPlanLeft.children = [];\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY\n );\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n || el.userData?.groupType == DIMENSION_LABEL_TYPE.BACK_OVERHANG\n );\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter( el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL \n )\n this.dimensionPatiosFrontBottom.children = [];\n this.dimensionPatiosFrontRight.children = [];\n this.dimensionPatiosLeftBottom.children = [];\n this.dimensionPatiosLeftRight.children = [];\n this.dimensionPatiosRightBottom.children = [];\n this.dimensionPatiosRightLeft.children = [];\n this.dimensionPatiosRightRight.children = [];\n this.dimensionPlanMiddle.children = [];\n this.dimensionPatiosPlanLeftOverHang.children = [];\n this.dimensionPatiosLeftLeft.children = [];\n this.dimensionPlanMidleLeft.children = [];\n \n this.totalBaySize = 0;\n for(let b of this.APP.dialogEditBay.listBay){\n this.totalBaySize += b.value;\n }\n\n this.box = this.utils.getSceneBox();\n\n this.drawDimensionPatiosPlanBottom();\n this.drawDimensionPatiosPlanRight();\n this.drawDimensionPatiosPlanLeft();\n\n this.drawDimensionPatiosFrontBottom();\n this.drawDimensionPatiosFrontRight();\n\n this.drawDimensionPatiosLeftBottom();\n this.drawDimensionPatiosLeftRight();\n this.drawDimensionPatiosLeftLeft();\n\n this.drawDimensionPatiosRightBottom();\n this.drawDimensionPatiosRightLeft();\n this.drawDimensionPatiosRightRight();\n\n this.drawDimensionMidle();\n this.drawDimensionMidleLeft();\n\n this.APP.dimensionManager.draw();\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n \n return height\n }\n private drawDimensionMidleLeft() {\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.visible = false;\n dimLeft.position.setX(-300)\n let textLeft = this.utils.createText(\"Panel direction\", [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 650));\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.position.setX(300);\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMidleLeft.add(dimLeft);\n this.dimensionPlanMidleLeft.add(textLeft);\n this.dimensionPlanMidleLeft.add(dimRight);\n this.dimensionPlanMidleLeft.add(textRight);\n\n let offsetZ =UI.span / 2 - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n if (this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT) {\n let offsetX = this.totalBaySize / 2 + UI.overhangRight;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX += -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n this.dimensionPlanMidleLeft.rotation.set(0, -Math.PI / 2, 0);\n }\n else {\n let offsetX = - this.totalBaySize / 2 - UI.overhangLeft;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX += -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n this.dimensionPlanMidleLeft.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMidleLeft.position.set(offsetX, 0, offsetZ);\n }\n }\n private drawDimensionMidle() {\n let offsetX = 0;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n offsetX = -this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n\n let dimLeft = this.utils.createArrowLine([{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }]);\n dimLeft.rotation.set(0, -Math.PI / 2, 0);\n dimLeft.visible = false;\n\n let textLeft = this.utils.createText(`${UI.patiosPitch} degree`, [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }], this.textParameter, new Vector3(-500, 0, 200));\n textLeft.userData.rotation = new Vector3(0, Math.PI / 2, 0)\n textLeft.visible = false;\n\n let dimRight = dimLeft.clone()\n dimRight.rotation.set(0, Math.PI / 2, 0);\n\n let textRight = textLeft.clone();\n textRight.position.setX(500);\n \n this.dimensionPlanMiddle.add(dimLeft);\n this.dimensionPlanMiddle.add(textLeft);\n this.dimensionPlanMiddle.add(dimRight);\n this.dimensionPlanMiddle.add(textRight);\n\n let offsetZ = - UI.existingWidth1 / 2 - this.MANAGER.patiosGroup.position.z - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0) + UI.span / 2;\n this.dimensionPlanMiddle.rotation.set(0, Math.PI / 2, 0);\n this.dimensionPlanMiddle.position.set(offsetX, 0, offsetZ);\n }\n private drawDimensionPatiosPlanBottom(){\n let offsetX = -this.totalBaySize / 2;\n //let offsetZ = this.box.max.z + this.dimensionDistance2;\n //let offsetZ = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.dimensionDistance3 - this.APP.sldExistingWidth1.currentValue/2;\n //if (this.APP.sldExistingWidth1.currentValue > this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue) {\n // offsetZ = this.APP.sldExistingWidth1.currentValue / 2 + this.dimensionDistance2\n // if(this.APP.sldExistingLength2.currentValue > 0){\n // offsetZ += 500;\n // }\n //}\n\n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n\n //this.dimensionPatiosPlanBottom.position.setZ(offsetZ);\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => \n el.userData?.groupType != DIMENSION_LABEL_TYPE.BAY\n || (el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY && el.userData?.bayNum < HomeComponent.ins.dialogEditBay.listBay.length)\n );\n \n for(let i = 0; i <= this.APP.dialogEditBay.listBay.length; i++){\n let b: IBay = {index: 0, value: 0, isCut: false};\n if(i < this.APP.dialogEditBay.listBay.length){\n b = this.APP.dialogEditBay.listBay[i];\n }\n\n // let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n // cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n // cap2.position.setX(offsetX);\n // this.dimensionPatiosPlanBottom.add(cap2);\n\n if(i < this.APP.dialogEditBay.listBay.length){\n let textStr = this.utils.getDimensionValue(b.value);\n let options : AddDimensionOptions = {... this.options,\n lineLength: b.value,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(offsetX + b.value / 2, 0, 0),\n textPos: new Vector3(offsetX + b.value / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.BAY,\n bayNum: i,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { bottom: true } }\n }\n let dimBay = this.dimensionPatiosPlanBottom.children.find(el => \n el.userData?.groupType == DIMENSION_LABEL_TYPE.BAY \n && el.userData?.bayNum == i\n ) as Dimension;\n if(!dimBay){\n new Dimension(options);\n } else {\n dimBay.update(options);\n }\n }\n offsetX += b.value;\n }\n\n //rakecut\n if(this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = -this.APP.dialogEditBay.totalBaySize/2 + this.APP.sldLeftCutHorizontal.currentValue/2 - this.APP.sldLeftOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL)\n }\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n let _offsetX = this.APP.dialogEditBay.totalBaySize/2 - this.APP.sldRightCutHorizontal.currentValue/2 + this.APP.sldRightOverhang.currentValue;\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutHorizontal.currentValue,\n container: this.dimensionPatiosPlanBottom,\n views: views,\n linePos: new Vector3(_offsetX, 500, 0),\n textPos: new Vector3(_offsetX, 500-200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanBottom.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL) as Dimension;\n if(!dimRake){\n new Dimension(options);\n } else {\n dimRake.update(options);\n }\n } else {\n this.dimensionPatiosPlanBottom.children = this.dimensionPatiosPlanBottom.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL)\n }\n //Left over hang\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldLeftOverhang.currentValue, views, \"Left\", 0, \"z\", DIMENSION_LABEL_TYPE.LEFT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanBottom, offsetX, this.APP.sldRightOverhang.currentValue, views, \"Right\", 0, \"z\", DIMENSION_LABEL_TYPE.RIGHT_OVERHANG);\n this.repositionDimension(this.dimensionPatiosPlanBottom, DIMENSION_LOCATION.PLAN_BOTTOM);\n }\n onDimDrag(event){\n this.utils.handlerDimDragEvent(event, this.startPos, this.startMatrix, this.startBayLength);\n this.startPos = event.object.position.clone();\n }\n onDimDragStart(event){\n this.startPos = event.object.position.clone();\n this.startMatrix = event.object.matrixWorld.clone();\n if(event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY){\n let bayNum = event.object.userData.bayNum;\n this.startBayLength = UI.listBay[+bayNum].value;\n }\n }\n private drawDimensionPatiosPlanRight(){\n \n let views = [ { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS } ];\n let offsetDimensionZ = this.APP.sldSpan.currentValue/2 \n - this.APP.sldExistingWidth1.currentValue/2 \n - this.APP.existingWallManager.geo_existingWallL1.width \n - this.APP.eaveManager.backOverhang;\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n\n let dimLength = this.APP.sldSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldSpan.currentValue);\n\n let options : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(0, 0, 0),\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimSpan = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.SPAN) as Dimension;\n if(!dimSpan){\n new Dimension(options);\n } else {\n dimSpan.update(options);\n }\n\n if(this.APP.sldMultiSpan.currentValue > 0){\n // let offsetX = this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue;\n // - this.APP.sldExistingWidth1.currentValue/2 \n // - this.APP.existingWallManager.geo_existingWallL1.width \n // - this.APP.eaveManager.backOverhang;\n dimLength += this.APP.sldMultiSpan.currentValue;\n\n let textStr = this.utils.getDimensionValue(this.APP.sldMultiSpan.currentValue);\n\n let optionsMul : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldMultiSpan.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, 0, 0),\n textPos: new Vector3(this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue / 2, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.MULTI_SPAN,\n hasTextClone: false,\n textUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneUserData: { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0, -Math.PI / 2, 0) },\n textCloneRotation: new Vector3(0, Math.PI, -Math.PI),\n textCloneVisible: false,\n textRotation: new Vector3(0, -Math.PI, 0),\n fitZ: -10\n }\n let dimMul = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.MULTI_SPAN) as Dimension;\n if(!dimMul){\n new Dimension(optionsMul);\n } else {\n dimMul.update(optionsMul);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.MULTI_SPAN)\n }\n\n let extraDistance = 0;\n //----Rake cut\n if(this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE){\n extraDistance = 500;\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n \n let offsetZ = dimLength/2 + UI.multiSpan / 2 + this.APP.sldFrontOverhang.currentValue - this.APP.sldRightCutVertical.currentValue/2;\n \n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldRightCutVertical.currentValue,\n container: this.dimensionPatiosPlanRight,\n views: views,\n linePos: new Vector3(offsetZ, 500, 0),\n textPos: new Vector3(offsetZ, 300, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL,\n textRotation: new Vector3( 0, Math.PI, 0),\n fitZ: -10,\n subtype: GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT\n }\n let dimRake = this.dimensionPatiosPlanRight.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n } else {\n this.dimensionPatiosPlanRight.children = this.dimensionPatiosPlanRight.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL)\n }\n //----End rake cut\n \n let offsetRight = this.APP.sldSpan.currentValue / 2 + this.APP.sldMultiSpan.currentValue;\n let offsetLeft = this.APP.sldSpan.currentValue / 2;// + this.APP.sldMultiSpan.currentValue;\n\n this.addOverhang(this.dimensionPatiosPlanRight, offsetRight, this.APP.sldFrontOverhang.currentValue, views, \"Right\", Math.PI,\"y\", DIMENSION_LABEL_TYPE.FRONT_OVERHANG);\n this.addOverhang(this.dimensionPatiosPlanRight, offsetLeft, this.APP.sldBackOverhang.currentValue, views, \"Left\", Math.PI, \"y\", DIMENSION_LABEL_TYPE.BACK_OVERHANG);\n\n this.repositionDimension(this.dimensionPatiosPlanRight, DIMENSION_LOCATION.PLAN_RIGHT, extraDistance);\n }\n private drawDimensionPatiosPlanLeft(){\n if(this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.NONE){\n this.dimensionPatiosPlanLeft.children = this.dimensionPatiosPlanLeft.children.filter(el => el.userData?.groupType != DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL)\n return;\n }\n\n let views = [{ viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }];\n\n let offsetDimensionZ = this.APP.sldSpan.currentValue\n + this.APP.sldMultiSpan.currentValue\n + this.APP.sldFrontOverhang.currentValue\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang\n - this.APP.sldLeftCutVertical.currentValue/2;\n\n let optionsRake : AddDimensionOptions = {... this.options,\n lineLength: HomeComponent.ins.sldLeftCutVertical.currentValue,\n container: this.dimensionPatiosPlanLeft,\n views: views,\n textPos: new Vector3(0, -200, 0),\n labelType: DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL,\n }\n let dimRake = this.dimensionPatiosPlanLeft.children.find(el => el.userData?.groupType == DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL) as Dimension;\n if(!dimRake){\n new Dimension(optionsRake);\n } else {\n dimRake.update(optionsRake);\n }\n\n //let offsetDimensionX = this.MANAGER.boundingBox.min.x - this.dimensionDistance2;\n this.dimensionPatiosPlanLeft.position.set(0, 0, offsetDimensionZ);\n this.repositionDimension(this.dimensionPatiosPlanLeft, DIMENSION_LOCATION.PLAN_LEFT);\n }\n private drawDimensionPatiosFrontBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n this.dimensionPatiosFrontBottom.position.set(0,dimOffsetY,0);\n\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanBottom.children.forEach( groupDim => {\n groupDim.children.filter(c => c.userData.subtype != GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT).forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.rotation.set(0,Math.PI,0);\n dim.userData['rotation'] = new Vector3(0,0,0);\n dim.userData['position'] = { ...e.userData.position, bottom: true };\n }\n this.dimensionPatiosFrontBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosFrontRight(){\n let views = [ { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS } ];\n\n let _dimensionDistane = this.dimensionDistance2;\n if(this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3){\n if(this.APP.sldExistingWidth1.currentValue > 0){\n _dimensionDistane = this.dimensionDistance;\n }\n }\n \n let height = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n let dimOffsetY = height/2;\n\n let scaleLength = height/this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-dimOffsetY);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(dimOffsetY);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(height);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, rotation: new Vector3(0,0,-Math.PI/2) };\n text.position.set(0,200,0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosFrontRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n this.repositionDimension(this.dimensionPatiosFrontRight, DIMENSION_LOCATION.FRONT_RIGHT);\n }\n private drawDimensionPatiosLeftBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosLeftBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n this.dimensionPatiosPlanRight.children.forEach( groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.rotation.set(0, 0, 0);\n dim.userData['views'] = [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }];\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true}; \n }\n this.dimensionPatiosLeftBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosLeftRight() {\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n\n let views = [ \n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n //{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength/2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength/2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(-Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftRight.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n\n this.repositionDimension(this.dimensionPatiosLeftRight, DIMENSION_LOCATION.LEFT_RIGHT);\n }\n private drawDimensionPatiosRightBottom(){\n let dimOffsetY = -this.dimensionDistance2;\n let dimOffsetZ = this.dimensionPatiosPlanRight.position.z - (this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n \n this.dimensionPatiosRightBottom.position.set(0,dimOffsetY,dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosPlanRight.children.forEach(groupDim => {\n groupDim.children.forEach(e => {\n if(e.userData?.subType == GEOMETRY_TYPE.DIMENSION_LINE_RAKECUT)\n return;\n \n let dim = e.clone();\n dim.userData['views'] = views;\n if (e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT) {\n dim.userData['rotation'] = new Vector3(0, 0, 0);\n dim.userData['position'] = {...e.userData.position, bottom: true};\n }\n this.dimensionPatiosRightBottom.add(dim);\n });\n })\n }\n private drawDimensionPatiosRightLeft(){\n this.dimensionPatiosRightLeft.position.set(0,this.dimensionPatiosLeftRight.position.y,this.dimensionPatiosLeftRight.position.z);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftRight.children.forEach(e => {\n let dim = e.clone();\n dim.userData['views'] = views;\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n dim.userData['rotation'] = new Vector3(Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n }\n this.dimensionPatiosRightLeft.add(dim);\n });\n\n this.repositionDimension(this.dimensionPatiosRightLeft, DIMENSION_LOCATION.RIGHT_LEFT);\n }\n private drawDimensionPatiosLeftLeft() { \n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n\n this.dimensionPatiosLeftLeft.position.set(0, dimOffsetY / 2, -dimOffsetZ);\n\n let views = [\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }\n ];\n\n let offsetLength = dimOffsetY;\n let scaleLength = offsetLength / this.lineGeo.length\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap1.position.setX(-offsetLength / 2);\n\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.materialManager.DIMENSION_TEXT);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: views };\n cap2.position.setX(offsetLength / 2);\n\n let line = new Mesh(this.lineGeo.geometry, this.materialManager.DIMENSION_TEXT);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: views };\n //line.position.setX(this.APP.sldSpan.currentValue/2 + this.APP.sldMultiSpan.currentValue/2);\n line.scale.setX(scaleLength);\n\n let textStr = this.utils.getDimensionValue(offsetLength);\n this.textGeo = new TextBufferGeometry(textStr, this.textParameter);\n this.textGeo.center();\n\n let text = new Mesh(this.textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS }], rotation: new Vector3(Math.PI / 2, 0, 0) };\n text.position.set(0, 200, 0);\n //text.rotation.set(0,-Math.PI,0);\n\n this.dimensionPatiosLeftLeft.add(line, cap1, cap2, text, ...this.utils.addArrowForLine(line));\n }\n private drawDimensionPatiosRightRight(){\n let dimOffsetY = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height;\n let dimOffsetZ = this.APP.sldExistingWidth1.currentValue / 2 + 1800;\n \n this.dimensionPatiosRightRight.position.set(0,dimOffsetY/2,-dimOffsetZ);\n\n let views = [ { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS } ];\n\n this.dimensionPatiosLeftLeft.children.forEach(e => {\n if(e.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT){\n let dim = e.clone();\n dim.userData['views'] = views;\n dim.userData['rotation'] = new Vector3(-Math.PI/2,0,0);\n dim.rotation.set(0,Math.PI,0);\n dim.position.set(dim.position.x, -dim.position.y, dim.position.z);\n this.dimensionPatiosRightRight.add(dim);\n }\n });\n }\n\n private addOverhang(groupDim: Object3D, offset: number, overhangValue: number, views: any, side: string, rotateText: number, axis: string, labelType?: string) {\n if (overhangValue == 0){\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(dim){\n groupDim.remove(dim)\n }\n return;\n }\n\n let textStr = this.utils.getDimensionValue(overhangValue);\n\n let textRotation = new Vector3();\n let textUserData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: views, position: { overhang: true }};\n if (axis === \"z\") {\n textRotation.setZ(rotateText);\n textUserData['rotation'] = new Vector3(0, 0, -rotateText / 2);\n textUserData['position']['bottom'] = true;\n }\n else if (axis === \"y\") {\n textRotation.setY(rotateText);\n textUserData['rotation'] = new Vector3(0, -rotateText / 2, 0);\n }\n else if (axis === \"x\") {\n textRotation.setX(rotateText);\n textUserData['rotation'] = new Vector3(-rotateText / 2, 0, 0);\n }\n\n let linePos = new Vector3();\n if (side === \"Left\") {\n linePos.setX(-offset - overhangValue / 2);\n }\n else if (side === \"Right\") {\n linePos.setX(offset + overhangValue / 2);\n }\n let fitZ = 0;\n if(labelType){\n if(axis === 'z'){\n fitZ = 10;\n } else if(axis === 'y'){\n fitZ = -10;\n }\n }\n let options : AddDimensionOptions = {... this.options,\n lineLength: overhangValue,\n container: groupDim,\n views: views,\n linePos: linePos,\n textPos: linePos.clone().setY(linePos.y - 200),\n labelType: labelType ? labelType : null,\n fitZ: fitZ,\n textRotation: textRotation,\n textUserData: textUserData\n }\n let dim = groupDim.children.find(el => el.userData?.groupType == labelType) as Dimension;\n if(!dim){\n new Dimension(options);\n } else {\n dim.update(options)\n }\n }\n private getTextCover(textGeo: TextBufferGeometry, labelType: string, pos: Vector3, fitZ = 0, bayNum?: number){\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize)\n\n let textCover = new Mesh(new BoxBufferGeometry(textSize.x, textSize.y, textSize.z + fitZ))\n textCover.position.set(pos.x , pos.y, pos.z);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if(bayNum !== undefined){\n textCover.userData['bayNum'] = bayNum;\n }\n textCover.material['opacity'] = 0;\n textCover.material['transparent'] = true;\n\n return textCover\n }\n\n public getOutlines(): Printing2DGeometry{\n let lsGeometries: Printing2DLine[] = [];\n let lsText: Print2DText[] = [];\n \n for(let dim of [\n ...this.dimensionPatiosPlanBottom.children,\n ...this.dimensionPatiosPlanRight.children,\n ...this.dimensionPatiosPlanLeft.children,\n ...this.dimensionPatiosFrontBottom.children,\n ...this.dimensionPatiosFrontRight.children,\n ...this.dimensionPatiosLeftBottom.children,\n ...this.dimensionPatiosLeftRight.children,\n ...this.dimensionPatiosRightBottom.children,\n ...this.dimensionPatiosRightLeft.children,\n ...this.dimensionPlanMiddle.children,\n ...this.dimensionPatiosPlanLeftOverHang.children,\n ...this.dimensionPatiosLeftLeft.children,\n ...this.dimensionPatiosRightRight.children,\n ...this.dimensionPlanMidleLeft.children\n\n ]){\n if(!dim.userData.views){\n // console.log(\"TEXT NO VIEW\", dim);\n continue;\n }\n\n if(dim.type == 'Group'){\n dim.children.forEach(el => {\n el.updateMatrix();\n let _clone = el.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(el.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n el.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(el.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(el.matrixWorld);\n\n let textRotation = el.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, el, pos, textRotation, points)\n })\n } else{\n dim.updateMatrix();\n let _clone = dim.clone();\n _clone.applyMatrix4(new Matrix4().getInverse(dim.matrix));\n let _box = new Box3().setFromObject(_clone);\n\n let _points = this.utils.getStartEndPoint(_box);\n let _line = new Line(new Geometry().setFromPoints(_points));\n \n dim.updateWorldMatrix(true, true);\n _line.geometry.applyMatrix4(dim.matrixWorld);\n\n let points = (_line.geometry as Geometry).vertices;\n let pos = new Vector3().applyMatrix4(dim.matrixWorld);\n\n let textRotation = dim.userData.rotation || new Vector3();\n this.getDimInfo(lsGeometries, lsText, dim, pos, textRotation, points)\n }\n }\n \n return { lines: lsGeometries, texts: lsText };\n }\n private getDimInfo(lsGeometries: Printing2DLine[], lsText: Print2DText[], dim: Object3D, pos: Vector3, textRotation: Vector3, points: Vector3[]){\n if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_TEXT && dim.userData.views && dim.userData.value) {\n let box = new Box3().setFromObject(dim.parent);\n let startEnd = this.utils.getStartEndPoint(box);\n let line = new Line3(startEnd[0], startEnd[1]);\n\n let projectPoint = new Vector3();\n line.closestPointToPoint(pos, true, projectPoint);\n let _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(10));\n\n if(dim.userData.position?.bottom){\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(180));\n }\n else{\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(120));\n }\n }\n else{\n if(dim.userData.position?.overhang){\n _pos = new Vector3().addVectors(projectPoint, new Vector3().subVectors(pos, projectPoint).normalize().multiplyScalar(100));\n }\n }\n\n let p = new Vector3().applyMatrix4(dim.matrixWorld);\n\n lsText.push({\n value: dim.userData.value,\n position: p,\n rotation: textRotation,\n views: dim.userData.views\n });\n\n \n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_LINE) {\n // this.scene.add(new LineSegments(new Geometry().setFromPoints(points), new LineBasicMaterial({color: new Color('red')})));\n\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == GEOMETRY_TYPE.DIMENSION_CAP) {\n lsGeometries.push({\n vertices: points,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n else if (dim.userData.type == \"Arrow\") {\n let geo = ((dim as Line).geometry as Geometry).clone();\n geo.applyMatrix4(dim.matrixWorld);\n lsGeometries.push({\n vertices: geo.vertices,\n objectType: dim.userData.type,\n views: dim.userData.views\n });\n }\n }\n\n private getGeometryFromBufferGeometry(bufferGeo: BufferGeometry) {\n let points: Vector3[] = [];\n let verties = bufferGeo.getAttribute('position').array;\n for (let i = 0; i < verties.length; i += 3) {\n points.push(new Vector3(verties[i], verties[i + 1], verties[i+2]));\n }\n\n return new Geometry().setFromPoints(points);\n }\n public destroy(): void {\n this.unregisterEvent();\n this.unload();\n }\n\n private registerEvent(): void {\n this.eventHandleId = this.uiChanged.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldSpan,\n this.APP.sldMultiSpan,\n this.APP.sldFrontOverhang,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sldExistingWallHeight,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltRoofPitch\n ];\n\n this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n \n //this.APP.sldSpan.addAction(this.eventHandleId);\n //this.APP.sldMultiSpan.addAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.addAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.addAction(this.eventHandleId);\n //this.APP.sldExistingLength.addAction(this.eventHandleId);\n //this.APP.sldExistingLength2.addAction(this.eventHandleId);\n //this.APP.sltExistingType.addAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.addAction(this.eventHandleId);\n //this.APP.dialogEditBay.addAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.addAction(this.eventHandleId);\n //this.APP.sldRightOverhang.addAction(this.eventHandleId);\n //this.APP.sldBackOverhang.addAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.addAction(this.eventHandleId);\n //this.APP.sltRoofPitch.addAction(this.eventHandleId);\n }\n private unregisterEvent(): void{\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.APP.sldSpan.removeAction(this.eventHandleId);\n //this.APP.sldMultiSpan.removeAction(this.eventHandleId);\n //this.APP.sldFrontOverhang.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth1.removeAction(this.eventHandleId);\n //this.APP.sldExistingWidth2.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength.removeAction(this.eventHandleId);\n //this.APP.sldExistingLength2.removeAction(this.eventHandleId);\n //this.APP.sltExistingType.removeAction(this.eventHandleId);\n //this.APP.sldExistingWallHeight.removeAction(this.eventHandleId);\n //this.APP.dialogEditBay.removeAction(this.eventHandleId);\n\n //this.APP.sldLeftOverhang.removeAction(this.eventHandleId);\n //this.APP.sldRightOverhang.removeAction(this.eventHandleId);\n //this.APP.sldBackOverhang.removeAction(this.eventHandleId);\n\n //this.APP.sldFlyOverBracketHeight.removeAction(this.eventHandleId);\n //this.APP.sltRoofPitch.removeAction(this.eventHandleId);\n }\n\n\n public uiChanged(preVal: number, curVal: number): void {\n this.draw();\n }\n private calulateBoundingBox(){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == 'BOX_HELPER_'));\n let patiosBox = this.MANAGER.boundingBox;\n \n let planRightBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanRight);\n planRightBox.min.x = patiosBox.max.x;\n planRightBox.max.x = patiosBox.max.x + 500;\n planRightBox.max.y = 10000;\n \n let planLeftBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanLeft);\n planLeftBox.min.x = patiosBox.min.x - 500;\n planLeftBox.max.x = patiosBox.min.x;\n planLeftBox.max.y = 10000;\n\n let planBottomBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosPlanBottom);\n let planBottomBoxWidth = planBottomBox.max.z - planBottomBox.min.z;\n planBottomBox.min.z = patiosBox.max.z;\n planBottomBox.max.z = patiosBox.max.z + planBottomBoxWidth;\n planBottomBox.max.y = 10000;\n \n let objs = [];\n\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.width1 || c.userData.position?.width2 || c.userData.position?.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n\n // for(let e of objs){\n // let boxModelHelper = new BoxHelper(e);\n // boxModelHelper.userData = {type: 'BOX_HELPER_'};\n // this.scene.add(boxModelHelper);\n // }\n\n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(planRightBox.intersectsBox(objBox)){\n intersectBox = true;\n planRightBox.translate(new Vector3(100,0,0))\n }\n if(planLeftBox.intersectsBox(objBox)){\n intersectBox = true;\n planLeftBox.translate(new Vector3(-100,0,0))\n }\n if(planBottomBox.intersectsBox(objBox)){\n intersectBox = true;\n planBottomBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(planRightBox);\n // boxHelper.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper);\n\n // let boxHelper2 = new Box3Helper(planLeftBox);\n // boxHelper2.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper2);\n\n // let boxHelper3 = new Box3Helper(planBottomBox);\n // boxHelper3.userData = {type: 'BOX_HELPER_'};\n // this.APP.scene.add(boxHelper3);\n \n return { left: planLeftBox.min.x, right: planRightBox.max.x, front: planBottomBox.max.z };\n }\n private repositionDimension(dimension, location, extraDistance = 0){\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n this.APP.scene.remove(...this.APP.scene.children.filter(c => c.userData.type == location));\n\n let patiosBox = this.MANAGER.boundingBox;\n \n if(location == DIMENSION_LOCATION.FRONT_RIGHT){\n let height = UI.eaveHeight + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n let dimOffsetY = height/2;\n dimension.position.setY(dimOffsetY);\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.z = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1 && !c.userData.position.length2)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1 && !c.userData.position.length2)\n );\n\n if(this.APP.sldExistingWidth2.currentValue > 0){\n objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && !c.userData.position.length1)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && !c.userData.position.length1)\n );\n }\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n\n dimension.position.setX(dimBox.max.x + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.PLAN_LEFT){\n // let offsetDimensionZ = this.APP.sldSpan.currentValue\n // + this.APP.sldMultiSpan.currentValue\n // + this.APP.sldFrontOverhang.currentValue\n // - this.APP.sldExistingWidth1.currentValue / 2\n // - this.APP.existingWallManager.geo_existingWallL1.width\n // - this.APP.eaveManager.backOverhang;\n // dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.min.x - 500;\n dimBox.max.x = patiosBox.min.x;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF || c.userData.type == GEOMETRY_TYPE.EXISTING_WALL\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(-100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.min.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_RIGHT){\n let offsetDimensionZ = this.APP.sldSpan.currentValue / 2\n - this.APP.sldExistingWidth1.currentValue / 2\n - this.APP.existingWallManager.geo_existingWallL1.width\n - this.APP.eaveManager.backOverhang;\n dimension.position.setZ(offsetDimensionZ);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n dimBox.min.x = patiosBox.max.x;\n dimBox.max.x = patiosBox.max.x + 500;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(100,0,0))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setX(dimBox.max.x + extraDistance);\n dimension.translateX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + this.APP.eaveManager.backOverhang - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0));\n }\n else if(location == DIMENSION_LOCATION.PLAN_BOTTOM){\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.max.y = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n\n if (this.APP.sltExistingType.currentValue == 1) {\n dimension.position.setX(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2)\n } else if(this.APP.sltExistingType.currentValue == 2) {\n dimension.position.setX( -(this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0)/2))\n } else {\n dimension.position.setX(0)\n }\n }\n else if(location == DIMENSION_LOCATION.LEFT_RIGHT){\n let dimOffsetY = UI.eaveHeight + + this.totalHeightFromEaveHeightToTopOfFlyoverBraket() + this.MANAGER.columnAndBeamManager.geo_superiorBeam.height + (UI.span + UI.multiSpan) / 2 * this.utils.tan(UI.patiosPitch);\n dimension.position.setY(dimOffsetY / 2);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(dimension);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.left)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.left)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n else if(location == DIMENSION_LOCATION.RIGHT_LEFT){\n let dimOffsetY = this.dimensionPatiosLeftRight.position.y;\n dimension.position.setY(dimOffsetY);\n\n let dimBox = this.APP.utils.getObjectBoundingBox(this.dimensionPatiosLeftRight);\n let width = dimBox.max.z - dimBox.min.z;\n dimBox.min.z = patiosBox.max.z;\n dimBox.max.z = patiosBox.max.z + width;\n \n dimBox.min.x = -10000;\n dimBox.max.x = 10000;\n\n let objs = this.APP.scene.children.filter(c =>\n (c.userData.type == GEOMETRY_TYPE.EXISTING_ROOF && c.userData.position?.right)\n || (c.userData.type == GEOMETRY_TYPE.EXISTING_WALL && c.userData.position?.right)\n );\n \n for(let i = 0; i < 100; i++){\n let intersectBox = false;\n for(let o of objs){\n let objBox = this.APP.utils.getObjectBoundingBox(o);\n if(dimBox.intersectsBox(objBox)){\n intersectBox = true;\n dimBox.translate(new Vector3(0,0,100))\n }\n }\n \n if(!intersectBox)\n break;\n }\n \n // let boxHelper = new Box3Helper(dimBox);\n // boxHelper.userData = {type: location};\n // this.APP.scene.add(boxHelper);\n\n \n dimension.position.setZ(dimBox.max.z + extraDistance);\n }\n }\n}\n","import { HomeComponent as AppComponent } from \"../../containers/home/home.component\";\nimport { ColumnAndBeamManager } from \"./column-and-beam.manager\";\nimport { RoofManager } from \"./roof.manager\";\nimport { Group, Box3, Vector3, Box3Helper } from \"three\";\nimport { GEOMETRY_CATEGORY, CONFIG, GEOMETRY_TYPE } from \"src/app/app.config\";\nimport { PatiosManager } from \"../patios.manager\";\nimport { Printing2DGeometry } from \"../models\";\nimport { DimensionManager } from \"./dimension.manager\";\nimport {\n EXISTING_BUILDING_CONFIG,\n CUTOUT_ENABLE,\n RAKECUT_TYPE,\n BUILDING_SIDE,\n} from \"src/app/app.constants\";\nimport { environment } from \"src/environments/environment\";\n// import { environment } from 'src/environments/environment';\n\nexport class PatiosGableLRFlyOverManager implements PatiosManager {\n public columnAndBeamManager: ColumnAndBeamManager;\n public roofManager: RoofManager;\n private APP: AppComponent;\n public patiosGroup: Group;\n public boundingBox: Box3;\n private updateEventHandle: any;\n public dimensionManager: DimensionManager;\n private controlsToRegisterEvent: Array;\n public ignoreBayEvent: boolean = false;\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n public patiosWidth: number;\n public patiosLength: number;\n public get cutoutCondition(): boolean {\n return (\n [this.APP.sldSpan, this.APP.sldMultiSpan, this.APP.sldFrontOverhang]\n .map((x) => x.currentValue)\n .reduce((a, b) => a + b, 0) -\n this.APP.sldExistingWidth1.currentValue >=\n EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW\n );\n }\n public get rakecutCondition(): boolean {\n this.patiosWidth =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue;\n\n return false;\n }\n\n public firstLoad = true;\n\n constructor(app: AppComponent) {\n this.APP = app;\n\n this.patiosGroup = new Group();\n this.patiosGroup.userData = {\n isGroup: true,\n category: GEOMETRY_CATEGORY.PATIOS,\n };\n app.scene.add(this.patiosGroup);\n\n this.roofManager = new RoofManager(app, this);\n this.columnAndBeamManager = new ColumnAndBeamManager(app, this);\n this.dimensionManager = new DimensionManager(app, this);\n\n this.registerEvents();\n }\n\n load(): Promise {\n return Promise.all([\n this.roofManager.optimize(),\n this.columnAndBeamManager.optimize(),\n this.dimensionManager.optimize(),\n ]).then(() => {\n this.roofManager.load();\n this.columnAndBeamManager.load();\n this.dimensionManager.load();\n });\n }\n loadBracket(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketsBack = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBack();\n }\n loadBracketCutout(bracketQuantity: number): void {\n this.columnAndBeamManager.numberOfBracketCutout = bracketQuantity;\n this.columnAndBeamManager.addPostOrBracketBackCutout();\n }\n loadSideGableBracket(bracketQuantity: number): void {}\n getOutlines(): Printing2DGeometry {\n let dimensionOutline = this.dimensionManager.getOutlines();\n return {\n lines: [\n ...this.columnAndBeamManager.getSection().lines,\n ...this.roofManager.getOutLines().lines,\n ...dimensionOutline.lines,\n ],\n texts: dimensionOutline.texts,\n };\n }\n public destroy(): void {\n this.columnAndBeamManager.destroy();\n this.roofManager.destroy();\n this.dimensionManager.destroy();\n this.unRegisterEvent();\n }\n registerEvents() {\n this.updateEventHandle = this.updateDefer.bind(this);\n\n this.controlsToRegisterEvent = [\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sltExistingType,\n this.APP.sltCutOut,\n this.APP.sldFrontOverhang,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourDownpipe,\n this.APP.sltColourRoof,\n this.APP.sldSpan,\n this.APP.sldExistingWallHeight,\n this.APP.sldEaveWidth,\n this.APP.sldFasciaDepth,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.dialogEditBay,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sldBackOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldMultiSpan,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sltColourBeam,\n this.APP.sltColourPost,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltRoofThickness,\n this.APP.sltGutterType,\n this.APP.sltLeftCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sltRightCutType,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltBeamLayoutShow,\n this.APP.sltPanelDirection,\n this.APP.sltPanelDirectionShow,\n this.APP.sltExistingRoofPitch,\n this.APP.btnTurnOnPanel,\n ];\n this.controlsToRegisterEvent.forEach((c) => {\n c.addAction(this.updateEventHandle);\n });\n }\n unRegisterEvent() {\n this.controlsToRegisterEvent.forEach((c) =>\n c.removeAction(this.updateEventHandle)\n );\n }\n\n updateDefer(previousValue: number, currentValue: number) {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES ||\n this.APP.sltLeftCutType.currentValue != RAKECUT_TYPE.NONE ||\n this.APP.sltRightCutType.currentValue != RAKECUT_TYPE.NONE\n ) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => {\n this.update(previousValue, currentValue);\n }, this.deferTimeout);\n } else {\n this.update(previousValue, currentValue);\n }\n }\n\n update(preVal: number, curVal: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n this.patiosWidth =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n this.patiosLength =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n\n let diff = this.APP.sldExistingLength.currentValue - totalBaySize;\n\n let extraWallWidth =\n this.APP.existingWallManager.geo_existingWallW1.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n -diff / 2 -\n this.APP.sldExistingLength2.currentValue -\n extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n -diff / 2 - this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(-diff / 2 - extraWallWidth);\n }\n } else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue + extraWallWidth\n );\n } else {\n this.patiosGroup.position.setX(\n diff / 2 + this.APP.sldExistingLength2.currentValue\n );\n }\n } else {\n this.patiosGroup.position.setX(diff / 2 + extraWallWidth);\n }\n } else {\n this.patiosGroup.position.setX(0);\n }\n\n this.patiosGroup.position.setZ(\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n this.APP.eaveManager.backOverhang -\n (this.columnAndBeamManager.geo_bracket?.width || 0)\n );\n\n Promise.all([\n this.roofManager.load(),\n this.columnAndBeamManager.load(),\n ]).then(() => {\n this.boundingBox = this.getPatiosBox();\n this.dimensionManager.draw();\n });\n }\n public getPatiosBox(): Box3 {\n let left =\n -this.APP.dialogEditBay.totalBaySize / 2 -\n this.APP.sldLeftOverhang.currentValue;\n let right =\n this.APP.dialogEditBay.totalBaySize / 2 +\n this.APP.sldRightOverhang.currentValue;\n let front =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n let back = 0;\n let height = this.APP.sldBuildingHeight.currentValue;\n let extraOffsetZ =\n this.APP.existingWallManager.geo_existingWallL1.width +\n this.APP.eaveManager.backOverhang;\n\n let box = new Box3();\n box = box.expandByPoint(new Vector3(left, 0, front));\n box = box.expandByPoint(new Vector3(right, height, back));\n box.translate(new Vector3(0, 0, -extraOffsetZ));\n\n if (this.APP.sltExistingType.currentValue == 1) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(-diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(this.APP.sldLeftOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(-this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 2) {\n let diff =\n (this.APP.sldExistingLength.currentValue -\n this.APP.dialogEditBay.totalBaySize) /\n 2;\n box.translate(new Vector3(diff, 0, 0));\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n box.translate(new Vector3(-this.APP.sldRightOverhang.currentValue, 0, 0));\n\n if (this.APP.sltCutOut.currentValue == 1 && this.cutoutCondition) {\n box.translate(\n new Vector3(this.APP.sldExistingLength2.currentValue, 0, 0)\n );\n }\n } else if (this.APP.sltExistingType.currentValue == 3) {\n box.translate(\n new Vector3(0, 0, -this.APP.sldExistingWidth1.currentValue / 2)\n );\n }\n\n // if (!environment.production) {\n // this.APP.scene.remove(...this.APP.scene.children.filter(o => o.userData.type == 'BOXHELPER'));\n // let boxHelper = new Box3Helper(box);\n // boxHelper.userData = { type: \"BOXHELPER\" };\n // this.APP.scene.add(boxHelper);\n // }\n\n return box;\n }\n}\n","\nimport { Mesh, Vector3, Material, Plane, Group, BufferGeometry, Geometry, BoxBufferGeometry, MeshLambertMaterial, Matrix4, Object3D, LineSegments, LineBasicMaterial, Box3, Box3Helper, Color } from \"three\";\nimport { Util } from \"../utils\";\nimport { GEOMETRY_TYPE, GEOMETRY_CATEGORY } from '../../app.config';\n// import { AppComponent } from \"../../app.component\";\nimport { HomeComponent as AppComponent } from '../../containers/home/home.component';\nimport { GeometryManager } from \"../geometry.manager\";\nimport { MaterialManager } from \"../material.manager\";\nimport { GeometryInfo, Print2DView, ViewType, LineType, Printing2DLine, Printing2DGeometry } from '../models';\nimport { PatiosGableLRFlyOverManager } from '.';\nimport { CSG } from 'three-csg-ts';\nimport { EXISTING_BUILDING_CONFIG, RAKECUT_TYPE, EXISTING_BUILDING_CONFIG as CONST, BUILDING_SIDE, CUTOUT_ENABLE, PANEL_DIRECTION, FIT_FLYOVER_BRAKET_ON_ROOF } from 'src/app/app.constants';\nimport { UI } from \"../ui\";\nimport HighLightBox from \"src/app/models/HighlightBox\";\n\nexport class RoofManager {\n private scene: Group;\n private APP: AppComponent;\n private MANAGER: PatiosGableLRFlyOverManager;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_RoofPanel: GeometryInfo;\n private geo_roofPanelBase: GeometryInfo;\n private gutterRakecutLeftInfo: GeometryInfo;\n private gutterRakecutRightInfo: GeometryInfo;\n private geo_roofPanelBargeCappingLeft: GeometryInfo;\n private geo_roofPanelBargeCappingRight: GeometryInfo;\n private geo_roofPanelBargeCappingBack: GeometryInfo;\n private geo_roofPanelBargeCappingFront: GeometryInfo;\n private geo_bargeCutoutLeftHor: GeometryInfo;\n private geo_bargeCutoutRightHor: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n private zFlashingGeo: GeometryInfo;\n private zFlashingRakecutRightGeo: GeometryInfo;\n private geo_gutterCap: GeometryInfo;\n public ridgeGeo: GeometryInfo;\n\n private geo_rakecutLeft: BoxBufferGeometry;\n private geo_rakecutRight: BoxBufferGeometry;\n private mesh_rakecutLeft: Mesh;\n private mesh_rakecutRight: Mesh;\n private csg_rakecutLeft: CSG;\n private csg_rakecutRight: CSG;\n\n private roofGroupFront: Group;\n private roofGroupBack: Group;\n\n private objectSizeChangedHandle: any;\n\n private totalBaySize: number;\n private extraOffsetZ: number;\n\n private controlsToRegisterEvent2: Array;\n\n private mesh_CutoutLeft: Mesh;\n private csg_cutoutLeft: CSG;\n private mesh_CutoutRight: Mesh;\n private csg_cutoutRight: CSG;\n private geo_cutoutLeft: BoxBufferGeometry;\n private geo_cutoutRight: BoxBufferGeometry;\n\n private geoCutGutter: BoxBufferGeometry;\n private meshCutGutterLeft1: Mesh;\n private csgCutGutterLeft1: CSG;\n private meshCutGutterLeft2: Mesh;\n private csgCutGutterLeft2: CSG;\n\n private meshCutGutterRight1: Mesh;\n private csgCutGutterRight1: CSG;\n private meshCutGutterRight2: Mesh;\n private csgCutGutterRight2: CSG\n \n private roofWidth: number;\n private roofLength: number;\n\n private deferHandle;\n private deferTimeout = EXISTING_BUILDING_CONFIG.CUTOUT_DEFFER_TIME_OUT;\n\n constructor(app: AppComponent, flyOverManager: PatiosGableLRFlyOverManager) {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n this.APP = app;\n this.MANAGER = flyOverManager;\n this.scene = new Group();\n flyOverManager.patiosGroup.add(this.scene)\n this.material = MaterialManager.Instance().ROOF;\n\n this.registerEvent();\n }\n\n\n public optimize(): Promise {\n return new Promise((resolve) => {\n\n this.geo_RoofPanel = this.geometryManager.getRoofSheetPanel();\n this.geo_RoofPanel.geometry\n .translate(this.geo_RoofPanel.width / 2 + 2, this.geo_RoofPanel.height / 2 -1, this.geo_RoofPanel.length / 2);\n\n this.geo_roofPanelBase = this.geometryManager.getRoofBase();\n this.geo_roofPanelBase.geometry\n .translate(this.geo_roofPanelBase.width / 2,\n this.geo_roofPanelBase.height / 2,\n this.geo_roofPanelBase.length / 2);\n\n this.zFlashingGeo = this.geometryManager.getZFlashing();\n this.zFlashingGeo.geometry.translate(0, -3, 0);\n\n this.zFlashingRakecutRightGeo = this.geometryManager.getZFlashing();\n this.zFlashingRakecutRightGeo.geometry.translate(-this.zFlashingRakecutRightGeo.length, -3, 0);\n\n //Barge capping\n\n this.geo_roofPanelBargeCappingLeft = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingLeft.geometry\n .rotateY(Math.PI)\n .translate(this.geo_roofPanelBargeCappingLeft.width / 2 - 3, this.geo_roofPanelBargeCappingLeft.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_roofPanelBargeCappingLeft.length / 2);\n\n this.geo_roofPanelBargeCappingRight = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingRight.geometry\n .translate(-this.geo_roofPanelBargeCappingRight.width / 2 + 3, this.geo_roofPanelBargeCappingRight.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_roofPanelBargeCappingRight.length / 2);\n\n this.geo_roofPanelBargeCappingBack = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingBack.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingBack.length / 2, this.geo_roofPanelBargeCappingBack.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_roofPanelBargeCappingBack.width / 2 - 3);\n\n this.geo_roofPanelBargeCappingFront = this.geometryManager.getBarge();\n this.geo_roofPanelBargeCappingFront.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_roofPanelBargeCappingFront.length / 2, this.geo_roofPanelBargeCappingFront.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), -this.geo_roofPanelBargeCappingFront.width / 2);\n //Gutter\n this.geo_gutterBack = this.geometryManager.getGutter();\n this.geo_gutterBack.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.geo_gutterBack.length / 2, -20, this.geo_gutterBack.width / 2);\n\n this.gutterRakecutLeftInfo = this.geometryManager.getGutter();\n this.gutterRakecutLeftInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(this.gutterRakecutLeftInfo.length / 2, -20, this.gutterRakecutLeftInfo.width / 2);\n \n this.gutterRakecutRightInfo = this.geometryManager.getGutter();\n this.gutterRakecutRightInfo.geometry\n .rotateY(-Math.PI / 2)\n .translate(-this.gutterRakecutRightInfo.length / 2, -20, this.gutterRakecutRightInfo.width / 2);\n\n //Gutter cap\n this.geo_gutterCap = this.geometryManager.getGuterEndCap();\n this.geo_gutterCap.geometry\n .rotateY(-Math.PI / 2)\n .translate(0, -20, this.geo_gutterCap.length / 2);\n\n this.geo_cutoutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutLeft.translate(-500, 500, -500);\n this.geo_cutoutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_cutoutRight.translate(500, 500, -500);\n\n this.geo_rakecutLeft = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutLeft.translate(-500, 500, 500);\n this.geo_rakecutRight = new BoxBufferGeometry(1000, 1000, 1000);\n this.geo_rakecutRight.translate(500, 500, 500);\n\n this.geoCutGutter = new BoxBufferGeometry(500, 10000, 500);\n this.geoCutGutter.translate(0, 0, -250);\n //Barge cutout left\n this.geo_bargeCutoutLeftHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutLeftHor.geometry\n .rotateY(Math.PI / 2)\n .translate(-this.geo_bargeCutoutLeftHor.length / 2, this.geo_bargeCutoutLeftHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutLeftHor.width / 2);\n\n //Barge cutout right\n this.geo_bargeCutoutRightHor = this.geometryManager.getBarge();\n this.geo_bargeCutoutRightHor.geometry\n .rotateY(Math.PI / 2)\n .translate(this.geo_bargeCutoutRightHor.length / 2, this.geo_bargeCutoutRightHor.height / 2 - (this.APP.sltDripBarge.currentValue ? 9 : 1), this.geo_bargeCutoutRightHor.width / 2);\n \n this.ridgeGeo = this.geometryManager.getRidge();\n this.ridgeGeo.geometry.translate(- this.ridgeGeo.width / 2, -this.ridgeGeo.height / 2, 0);\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve) => {\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.ROOF_PATIOS));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.SHEET_OUTLINE));\n\n //test\n //this.scene.remove(...this.scene.children.filter(x => x.userData.type == 'HELPER'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'RAKECUT'));\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTGUTTER'));\n this.extraOffsetZ = this.APP.existingWallManager.geo_existingWallL1.width + this.APP.eaveManager.backOverhang;\n this.totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n this.addRoofFront();\n this.addRoofBack();\n this.addCutout();\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX\n offsetLeft += offsetX\n }\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX\n offsetRight += offsetX\n }\n\n let clipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let clipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n\n this.material.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n MaterialManager.Instance().ROOF_BASE.clippingPlanes = [clipingPlaneLeft, clipingPlaneRight];\n let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n this.roofWidth = width;\n this.roofLength = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldBackOverhang.currentValue + this.APP.sldFrontOverhang.currentValue;\n let roofSheetingCount = Math.ceil(width / this.geo_RoofPanel.width);\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let panelDirectionOfset = 1;\n if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.RIGHT_TO_LEFT){\n offsetX = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.geo_RoofPanel.width;\n panelDirectionOfset = -1;\n }\n else if(this.APP.sltPanelDirection.currentValue == PANEL_DIRECTION.LEFT_TO_RIGHT){\n offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n }\n\n if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 1 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, []);\n this.addRoofSheetingBack(offsetX, [this.csg_cutoutLeft]);\n\n this.addRoofSheetingBaseFront(offsetX, last, []);\n this.addRoofSheetingBaseBack(offsetX, last, [this.csg_cutoutLeft]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 2 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, []);\n this.addRoofSheetingBack(offsetX, [this.csg_cutoutRight]);\n\n this.addRoofSheetingBaseFront(offsetX, last, []);\n this.addRoofSheetingBaseBack(offsetX, last, [this.csg_cutoutRight]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n else if (this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue == 3 && this.MANAGER.cutoutCondition) {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, []);\n this.addRoofSheetingBack(offsetX, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n this.addRoofSheetingBaseFront(offsetX, last, []);\n this.addRoofSheetingBaseBack(offsetX, last, [this.csg_cutoutLeft, this.csg_cutoutRight]);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n else {\n for (let index = 0; index < roofSheetingCount; index++) {\n let last = index == roofSheetingCount - 1;\n\n this.addRoofSheetingFront(offsetX, null);\n this.addRoofSheetingBack(offsetX, null);\n\n this.addRoofSheetingBaseFront(offsetX, last, []);\n this.addRoofSheetingBaseBack(offsetX, last, []);\n\n offsetX += this.geo_RoofPanel.width * panelDirectionOfset;\n }\n }\n this.addZFlashingFront();\n this.addZFlashingBack();\n\n this.addBargeCappingFront();\n this.addBargeCappingBack();\n\n this.addGutterFront();\n this.addGutterBack();\n\n this.addRidgeCapping();\n\n this.showPanelOutline();\n\n this.scene.visible = UI.showRoof\n\n resolve();\n });\n }\n private totalHeightFromEaveHeightToTopOfExistingRoof(){\n const height = \n this.geometryManager.EAVE.EAVE.height \n + UI.fasciaDepth \n + UI.eaveWidth * this.utils.tan(UI.existingRoofPitch) \n + this.geometryManager.EXISTING_ROOF.EXISTING_ROOF.height / this.utils.cos(UI.existingRoofPitch)\n \n return height\n }\n private totalHeightFromEaveHeightToTopOfFlyoverBraket(){\n const height = this.totalHeightFromEaveHeightToTopOfExistingRoof() + UI.braketHeight - FIT_FLYOVER_BRAKET_ON_ROOF;\n\n return height\n }\n private addCutout() {\n if (this.APP.sltCutOut.currentValue == 1) {\n this.APP.scene.remove(...this.APP.scene.children.filter(x => x.userData.type == 'CUTOUT'));\n\n let offsetX = this.APP.sldExistingLength.currentValue / 2 + this.APP.existingWallManager.geo_existingWallL2.width + 100;\n let offsetY = 0;\n let offsetZ = this.APP.sldExistingWidth1.currentValue / 2 - this.APP.existingWallManager.geo_existingWallL2.width - this.APP.sldBackOverhang.currentValue;\n\n let scaleX = (this.APP.sldExistingLength2.currentValue + 5000) / 1000;\n if (scaleX == 0) scaleX = 1;\n let scaleY = (this.APP.sldExistingWallHeight.currentValue + 5000) / 1000;\n let scaleZ = (this.APP.sldExistingWidth1.currentValue + this.APP.sldBackOverhang.currentValue + 5000) / 1000;\n if (scaleZ == 0) scaleZ = 1;\n\n if (this.APP.sltExistingType.currentValue == 1 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutLeft = new Mesh(this.geo_cutoutLeft, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutLeft.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutLeft.position.set(-offsetX, offsetY, offsetZ);\n this.mesh_CutoutLeft.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutLeft);\n\n this.mesh_CutoutLeft.updateMatrix();\n this.csg_cutoutLeft = CSG.fromMesh(this.mesh_CutoutLeft);\n }\n if (this.APP.sltExistingType.currentValue == 2 || this.APP.sltExistingType.currentValue == 3) {\n this.mesh_CutoutRight = new Mesh(this.geo_cutoutRight, new MeshLambertMaterial({ color: 'red', transparent: true, opacity: 0.5 }));\n this.mesh_CutoutRight.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: 'CUTOUT' };\n\n this.mesh_CutoutRight.position.set(offsetX, offsetY, offsetZ);\n this.mesh_CutoutRight.scale.set(scaleX, scaleY, scaleZ);\n\n // this.APP.scene.add(this.mesh_CutoutRight);\n\n this.mesh_CutoutRight.updateMatrix();\n this.csg_cutoutRight = CSG.fromMesh(this.mesh_CutoutRight);\n }\n }\n }\n\n public getOutLines(): Printing2DGeometry {\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL\n || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let gutterGroupObjs = this.roofGroupFront.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS)\n .concat(...this.roofGroupBack.children.filter(o => o.userData.type == GEOMETRY_TYPE.GUTTER_PATIOS));\n let gutterObjs: Object3D[] = [];\n for(let group of gutterGroupObjs){\n gutterObjs.push(...group.children);\n }\n objs = [...objs, ...gutterObjs];\n\n let lsGeometries: Printing2DLine[] = [];\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n outlineGeo.translate(0, 5000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n }\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneLeft);\n outlineGeo = this.utils.clipOutlineBasePanel(outlineGeo, roofClipingPlaneRight);\n }\n\n let simplifiedGeo = this.simplifyGeo(outlineGeo);\n lsGeometries.push({\n objectType: o.userData.type,\n vertices: simplifiedGeo.vertices,\n views: o.userData.views\n });\n }\n\n let ridgeCapping = this.scene.children.find(el => el.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING)\n if(ridgeCapping){\n ridgeCapping.children.forEach(el => {\n this.utils.createOutline(el as Mesh, lsGeometries);\n })\n }\n\n lsGeometries.push({\n objectType: GEOMETRY_TYPE.ROOF_COVER,\n vertices: this.makeRoofPolygon(),\n color: this.utils.convertHexColorToRgb(`#${new Color(UI.panelColor).getHexString()}`),\n views: [\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ]\n });\n\n return { lines: lsGeometries, texts: [] };\n }\n makeRoofPolygon() {\n const polygon = this.utils.getRoofCoverPolygonForLRRoof()\n this.MANAGER.patiosGroup.updateWorldMatrix(true, true)\n return polygon.map(el => (el as Vector3).applyMatrix4(this.MANAGER.patiosGroup.matrixWorld).add(new Vector3(this.roofGroupFront.position.x, 0, - UI.existingWidth1 / 2 - this.extraOffsetZ - UI.overhangBack)))\n }\n public showPanelOutline(){\n if(this.APP.sltPanelDirectionShow.currentValue == false)\n return;\n\n let objs = this.roofGroupFront.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n ).concat(\n ...this.roofGroupBack.children.filter(o =>\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL ||\n o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE\n )\n );\n\n let offsetLeft = this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue - this.MANAGER.patiosGroup.position.x;\n let offsetRight = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue + this.MANAGER.patiosGroup.position.x;\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetRight -= offsetX;\n offsetLeft += offsetX;\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n let offsetX =\n this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width +\n 100 -\n (this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n offsetLeft += offsetX;\n offsetRight += offsetX;\n }\n let roofClipingPlaneLeft = new Plane(new Vector3(1, 0, 0), offsetLeft);\n let roofClipingPlaneRight = new Plane(new Vector3(-1, 0, 0), offsetRight);\n \n\n for (let o of objs) {\n let outlineGeo = this.utils.getOutlineGeometryFromMeshNoScale((o as Mesh), 60);\n\n //let outlineBox = new Box3().setFromBufferAttribute(outlineGeo.getAttribute('position') as Buffer);\n\n o.updateWorldMatrix(true, true);\n outlineGeo.applyMatrix4(o.matrixWorld);\n //outlineGeo.translate(0, 1000, 0);\n\n if (o.userData.type == GEOMETRY_TYPE.ROOF_PANEL || o.userData.type == GEOMETRY_TYPE.ROOF_PANEL_BASE) {\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneRight);\n outlineGeo = this.utils.clipOutline(outlineGeo, roofClipingPlaneLeft);\n }\n\n var line = new LineSegments( outlineGeo, MaterialManager.Instance().MESH_OUTLINE );\n line.userData = {type: GEOMETRY_TYPE.SHEET_OUTLINE};\n this.APP.scene.add( line );\n }\n }\n public simplifyGeo(geo: BufferGeometry): Geometry {\n let simplifiedGeo = new Geometry();\n let vertices = geo.getAttribute('position').array;\n for (let i = 0; i < vertices.length; i += 3) {\n simplifiedGeo.vertices.push(new Vector3(vertices[i], vertices[i + 1] - 5000, vertices[i + 2]));\n }\n return simplifiedGeo;\n }\n\n public addRoofFront() {\n this.roofGroupFront = null;\n this.roofGroupFront = new Group();\n this.roofGroupFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(this.APP.sldExistingWidth1.currentValue / 2 + this.extraOffsetZ) + (UI.span + UI.multiSpan) / 2;\n\n this.roofGroupFront.position.setY(offsetY);\n this.roofGroupFront.position.setZ(offsetZ);\n this.roofGroupFront.rotateX(this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupFront.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupFront.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupFront);\n }\n\n public addRoofBack() {\n this.roofGroupBack = null;\n this.roofGroupBack = new Group();\n this.roofGroupBack.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PATIOS };\n\n let offsetY = this.getRoofOffsetY();\n let offsetZ = -(this.APP.sldExistingWidth1.currentValue / 2 + this.extraOffsetZ) + (UI.span + UI.multiSpan) / 2;\n\n this.roofGroupBack.position.setY(offsetY);\n this.roofGroupBack.position.setZ(offsetZ);\n this.roofGroupBack.rotateX(-this.utils.degreesToRadians(UI.patiosPitch));\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupBack.position.setX(- offsetX)\n }\n\n if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT){\n let offsetX = this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n this.roofGroupBack.position.setX(offsetX)\n }\n\n this.scene.add(this.roofGroupBack);\n }\n\n public addRoofSheetingFront(offsetX: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 30;\n }\n else {\n offsetSheet = 12;\n }\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = (((UI.span + UI.multiSpan) / 2 + this.APP.sldFrontOverhang.currentValue) / this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_RoofPanel.length;\n\n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.LEFT_TO_RIGHT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupFront.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupFront.add(meshResult);\n }\n else {\n this.roofGroupFront.add(mesh);\n }\n }\n public addRoofSheetingBack(offsetX: number, csgObjs: CSG[]) {\n let mesh = new Mesh(this.geo_RoofPanel.geometry, this.material);\n\n let offsetSheet = 0;\n if (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1) {\n offsetSheet = 30;\n }\n else {\n offsetSheet = 12;\n }\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZ = (((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_RoofPanel.length;\n\n let offsetY = this.geo_roofPanelBase.height - offsetSheet;\n let offsetZ = - scaleZ * this.geo_RoofPanel.length;;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { \n category: GEOMETRY_CATEGORY.PATIOS, \n type: GEOMETRY_TYPE.ROOF_PANEL, \n views: views,\n dir: UI.panelDirection === PANEL_DIRECTION.RIGHT_TO_LEFT ? \"L-R\" : \"R-L\"\n };\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX + this.MANAGER.patiosGroup.position.x, offsetY, offsetZ + this.roofGroupBack.position.z);\n mesh.updateMatrix();\n let meshResult = mesh.clone();\n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupBack.add(meshResult);\n }\n else {\n this.roofGroupBack.add(mesh);\n }\n }\n public addRoofSheetingBaseFront(offsetX: number, isLast: boolean, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n let offsetZ = 0;\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((UI.span + UI.multiSpan) / 2 + this.APP.sldFrontOverhang.currentValue) / this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch - 60) / this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if (isLast) {\n mesh.userData.last = true;\n }\n\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX+ this.MANAGER.patiosGroup.position.x, 0, offsetZ + this.roofGroupFront.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone(); \n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupFront.add(meshResult);\n }\n else {\n this.roofGroupFront.add(mesh);\n }\n }\n\n public addRoofSheetingBaseBack(offsetX: number, isLast: boolean, csgObjs: CSG[]) {\n let mesh: Mesh = new Mesh(this.geo_roofPanelBase.geometry, MaterialManager.Instance().ROOF_BASE);\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZ = (((UI.span + UI.multiSpan) / 2 + UI.overhangBack) / this.utils.cos(this.APP.sltRoofPitch.currentValue) - offsetPitch - 60) / this.geo_roofPanelBase.length;\n let offsetZ = - scaleZ * this.geo_roofPanelBase.length;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n mesh.position.set(offsetX, 0, offsetZ);\n mesh.scale.setZ(scaleZ);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ROOF_PANEL_BASE, views: views };\n if (isLast) {\n mesh.userData.last = true;\n }\n\n\n let cutoutCondition = this.APP.sltCutOut.currentValue == 1 && this.APP.sltExistingType.currentValue != 0 && this.APP.sldExistingLength2.currentValue > 0;\n if (cutoutCondition) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(offsetX+ this.MANAGER.patiosGroup.position.x, 0, offsetZ + this.roofGroupBack.position.z);\n mesh.updateMatrix();\n\n let meshResult = mesh.clone(); \n\n if (cutoutCondition) {\n for (let csgObj of csgObjs) {\n meshResult = CSG.toMesh(CSG.fromMesh(meshResult).subtract(csgObj), mesh.matrix);\n }\n }\n meshResult.userData = mesh.userData;\n meshResult.material = mesh.material;\n meshResult.applyMatrix4(new Matrix4().getInverse(mesh.matrix));\n meshResult.applyMatrix4(matrixBefore);\n\n this.roofGroupBack.add(meshResult);\n }\n else {\n this.roofGroupBack.add(mesh);\n }\n }\n\n private addBargeCappingBack() {\n let mesh: Mesh;\n\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n let offsetXL1 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue) + this.APP.sldExistingLength2.currentValue - extraWallWidth;\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n\n let offsetXR1 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue - this.APP.sldExistingLength2.currentValue + this.APP.existingWallManager.geo_existingWallW1.width + 100;\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n let totalLengthCutOut = UI.existingWidth1 < (UI.span + UI.multiSpan) / 2 ? UI.existingWidth1 : (UI.span + UI.multiSpan) / 2;\n\n let scaleCutoutVer = this.utils.getHypotenuseByCos(totalLengthCutOut + this.geo_roofPanelBargeCappingLeft.width, UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n let roofBackLength = (UI.span + UI.multiSpan) / 2 + UI.overhangBack;\n let bargeLeftLength = roofBackLength;\n let bargeRightLength = roofBackLength;\n\n let angleLength = roofBackLength / this.utils.cos(UI.patiosPitch);\n\n let offsetY = 0;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let isShowLeftBarge = true;\n let isShowRightBarge = true;\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingRight.length;\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n //left\n if(isShowLeftBarge){\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - this.geo_roofPanelBargeCappingLeft.length * scaleZLeft);\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n\n //right\n if(isShowRightBarge){\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - this.geo_roofPanelBargeCappingRight.length * scaleZRight);\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupBack.add(mesh);\n }\n }\n\n private addBargeCappingFront() {\n let mesh: Mesh;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let offsetXL2 = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetXR2 = this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue;\n\n let offsetZL = 0;\n let offsetZR = 0;\n\n let roofFrontLength = (UI.span + UI.multiSpan) / 2 + UI.overhangFront;\n let offsetY = 0;\n let bargeLeftLength = roofFrontLength;\n let bargeRightLength = roofFrontLength;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n const offsetPitch = this.geo_roofPanelBase.height * this.utils.tan(UI.patiosPitch)\n\n let scaleZLeft = (this.utils.getHypotenuseByCos(bargeLeftLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n let scaleZRight = (this.utils.getHypotenuseByCos(bargeRightLength, this.APP.sltRoofPitch.currentValue) - offsetPitch) / this.geo_roofPanelBargeCappingLeft.length;\n\n\n let fitScale = this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch) / this.geo_roofPanelBargeCappingLeft.length;\n //left\n mesh = new Mesh(this.geo_roofPanelBargeCappingLeft.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXL2, offsetY, offsetZL - this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch));\n mesh.scale.setZ(scaleZLeft + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n //right\n mesh = new Mesh(this.geo_roofPanelBargeCappingRight.geometry, MaterialManager.Instance().BARGE);\n mesh.position.set(offsetXR2, offsetY, offsetZR - this.geo_roofPanelBargeCappingLeft.height * this.utils.tan(UI.patiosPitch));\n mesh.scale.setZ(scaleZRight + fitScale);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n this.roofGroupFront.add(mesh);\n\n // //back\n // mesh = new Mesh(this.geo_roofPanelBargeCappingBack.geometry, MaterialManager.Instance().BARGE);\n // mesh.position.setX(offsetXB);\n // mesh.scale.setX(bargeBackLength/this.geo_roofPanelBargeCappingBack.length);\n // mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: this.APP.sltDripBarge.currentValue ? GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING : GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING, views: views };\n // this.roofGroupFront.add(mesh);\n }\n public addGutterFront() {\n\n let offsetXL = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetY = this.geo_roofPanelBase.height - 25;\n let offsetZ = ((UI.span + UI.multiSpan) / 2 + UI.overhangFront\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n let gutterLength = this.roofWidth;\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap,\n gutterLength, new Vector3(offsetXL, offsetY, offsetZ), new Vector3(-this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), 0, 0),\n views, 1, true, true);\n this.roofGroupFront.add(gutterGroup); \n }\n\n public addGutterBack() {\n let offsetX = (this.totalBaySize / 2 + UI.overhangRight);\n let offsetY = this.geo_roofPanelBase.height - 25;\n let gutterLength = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue);\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n //cutout\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if(this.APP.sldExistingWidth2.currentValue > 0){\n gutterLength -= this.APP.sldExistingLength2.currentValue;\n }\n else{\n gutterLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n }\n gutterLength -= this.APP.sldLeftOverhang.currentValue;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if(this.APP.sldExistingWidth2.currentValue > 0){\n offsetX -= this.APP.sldExistingLength2.currentValue;\n gutterLength -= this.APP.sldExistingLength2.currentValue;\n }\n else{\n offsetX -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n gutterLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n }\n offsetX -= this.APP.sldRightOverhang.currentValue;\n gutterLength -= this.APP.sldRightOverhang.currentValue;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX -= ((this.totalBaySize - (this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2)) / 2 - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK);\n gutterLength = this.APP.sldExistingLength.currentValue + extraWallWidth *2;\n }\n }\n\n\n let views: Print2DView[] = [\n { viewType: ViewType.FRONT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS },\n { viewType: ViewType.PLAN, lineType: LineType.CONTINOUS }\n ];\n\n let offsetZ = -((UI.span + UI.multiSpan) / 2 + UI.overhangBack\n - CONST.GUTTER_ROOF_OFFSET_Z) / this.utils.cos(this.APP.sltRoofPitch.currentValue);\n\n //back\n let gutterGroup = this.utils.createGutterGroup(this.geo_gutterBack, this.geo_gutterCap, gutterLength,\n new Vector3(offsetX, offsetY, offsetZ), new Vector3(this.utils.degreesToRadians(this.APP.sltRoofPitch.currentValue), Math.PI, 0), views, 1, true, true);\n\n this.roofGroupBack.add(gutterGroup);\n }\n\n public addRidgeCapping(){\n this.scene.remove(...this.scene.children.filter(x => x.userData.type == GEOMETRY_TYPE.RIDGE_CAPPING));\n\n let ridgeFront = this.createRidgeCapping();\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING};\n const height = this.getRoofOffsetY() + \n this.geo_roofPanelBase.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) + \n this.geo_RoofPanel.height / this.utils.cos(this.APP.sltRoofPitch.currentValue) - \n (this.APP.sltRoofSheetingType.currentValue == 0 || this.APP.sltRoofSheetingType.currentValue == 1 ? 20 : 10);\n \n let offsetX = (UI.overhangRight - UI.overhangLeft) / 2\n if(UI.existingType == BUILDING_SIDE.RIGHT){\n offsetX += - this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width - 100 + ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n if(UI.existingType == BUILDING_SIDE.LEFT){\n offsetX += this.APP.geometryManager.EXISTING_WALL.EXISTING_WALL.width + 100 - ( this.MANAGER.columnAndBeamManager.geo_bracket?.width || 0);\n }\n \n const ridgeLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n ridgeFront.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.RIDGE_CAPPING, length: ridgeLength, views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]};\n ridgeFront.scale.setZ(ridgeLength / this.ridgeGeo.length);\n ridgeFront.rotation.set(0, Math.PI / 2, 0)\n ridgeFront.position.set( offsetX, height, ( UI.span + UI.multiSpan ) / 2 - UI.existingWidth1 / 2 - this.extraOffsetZ);\n this.scene.add(ridgeFront)\n }\n public createRidgeCapping(){\n let leftCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n let rightCap = new Mesh(this.ridgeGeo.geometry, MaterialManager.Instance().RIDGE_CAPPING);\n \n rightCap.rotateY(Math.PI)\n \n leftCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n rightCap.rotateZ(this.utils.degreesToRadians(UI.patiosPitch))\n \n leftCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n rightCap.userData = {views: [{ viewType: ViewType.LEFT, lineType: LineType.CONTINOUS },{ viewType: ViewType.RIGHT, lineType: LineType.CONTINOUS }]}\n \n return new Group().add(leftCap, rightCap)\n }\n\n public addZFlashingFront() {\n let offsetX = -(this.totalBaySize / 2 + this.APP.sldLeftOverhang.currentValue);\n let offsetY = this.geo_roofPanelBase.height - 25;\n const offsetZ = (UI.overhangFront\n + (UI.span + UI.multiSpan) / 2\n ) / this.utils.cos(UI.patiosPitch);\n let zFlashingLength = this.roofWidth;\n let scaleX = zFlashingLength / this.zFlashingGeo.length;\n \n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n this.roofGroupFront.add(mesh);\n }\n public addZFlashingBack() {\n let offsetX = (this.totalBaySize / 2 + this.APP.sldRightOverhang.currentValue);\n let offsetY = this.geo_roofPanelBase.height - 25;\n\n let scaleX = (this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue) / this.zFlashingGeo.length;\n let flashingLength = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n let extraWallWidth = this.APP.existingWallManager.geo_existingWallW1.width + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n\n let cutoutLength = (this.totalBaySize - (UI.existingLength1 + UI.existingWallW1.width * 2)) / 2\n\n //cutout\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES && this.MANAGER.cutoutCondition) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT) {\n if(this.APP.sldExistingWidth2.currentValue > 0){\n flashingLength -= this.APP.sldExistingLength2.currentValue;\n }\n else{\n flashingLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n }\n flashingLength -= this.APP.sldLeftOverhang.currentValue;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT) {\n if(this.APP.sldExistingWidth2.currentValue > 0){\n offsetX -= this.APP.sldExistingLength2.currentValue;\n flashingLength -= this.APP.sldExistingLength2.currentValue;\n }\n else{\n offsetX -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n flashingLength -= (this.APP.sldExistingLength2.currentValue - extraWallWidth);\n }\n offsetX -= this.APP.sldRightOverhang.currentValue;\n flashingLength -= this.APP.sldRightOverhang.currentValue;\n }\n else if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n offsetX -= (cutoutLength - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK);\n flashingLength = this.APP.sldExistingLength.currentValue + this.APP.existingWallManager.geo_existingWallW1.width * 2 + EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK *2;\n }\n }\n\n scaleX = flashingLength/this.zFlashingGeo.length;\n\n const offsetZ = -(UI.overhangBack + (UI.span + UI.multiSpan) / 2) / this.utils.cos(UI.patiosPitch);\n\n let mesh = new Mesh(this.zFlashingGeo.geometry, MaterialManager.Instance().ZFLASHING);\n mesh.position.set(offsetX, offsetY, offsetZ);\n mesh.scale.set(scaleX, 1, 1);\n mesh.userData = { category: GEOMETRY_CATEGORY.PATIOS, type: GEOMETRY_TYPE.ZFLASHING, scale: mesh.scale };\n mesh.rotateY(Math.PI)\n this.roofGroupBack.add(mesh);\n }\n\n public getRoofOffsetY() {\n return UI.eaveHeight\n + this.totalHeightFromEaveHeightToTopOfFlyoverBraket()\n + this.geometryManager.getBeam().height\n + this.utils.tan(UI.patiosPitch) * ((UI.span + UI.multiSpan) / 2);\n }\n public destroy(): void {\n this.unregisterEvent();\n }\n private registerEvent(): void {\n this.objectSizeChangedHandle = this.objectSizeChanged.bind(this);\n\n //this.controlsToRegisterEvent.forEach(c => c.addAction(this.eventHandleId));\n\n this.controlsToRegisterEvent2 = [\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltGutterType,\n this.APP.sltRoofPitch\n ];\n this.controlsToRegisterEvent2.forEach(c => c.addAction(this.objectSizeChangedHandle));\n }\n private unregisterEvent(): void {\n //this.controlsToRegisterEvent.forEach(c => c.removeAction(this.eventHandleId));\n //this.controlsToRegisterEvent = undefined;\n\n this.controlsToRegisterEvent2.forEach(c => c.removeAction(this.objectSizeChangedHandle));\n this.controlsToRegisterEvent2 = undefined;\n }\n private objectSizeChanged() {\n this.optimize().then(() => { this.load() });\n }\n public uiChanged(): void {\n this.load();\n }\n uiCHangedDefer() {\n if (this.APP.sltCutOut.currentValue == 1) {\n if (this.deferHandle) {\n clearTimeout(this.deferHandle);\n }\n this.deferHandle = setTimeout(() => { this.load() }, this.deferTimeout);\n }\n else {\n this.load();\n }\n }\n}\n","import {\n BufferGeometry,\n Vector3,\n PlaneBufferGeometry,\n BoxBufferGeometry,\n} from \"three\";\nimport { environment as env } from \"src/environments/environment\";\nimport { STLLoader } from \"three/examples/jsm/loaders/STLLoader\";\nimport { Util } from \"../core/utils\";\nimport { GeometryInfo } from \"./models\";\nimport { HomeComponent } from \"../containers/home/home.component\";\nimport { EXISTING_BUILDING_CONFIG } from \"../app.constants\";\nimport { UI } from \"./ui\";\nimport _ from \"lodash\"\n\nexport class GeometryManager {\n APP: HomeComponent;\n private constructor() {\n this.utils = new Util();\n this.loader = new STLLoader();\n }\n public init(app: HomeComponent) {\n this.APP = app;\n }\n private static instance: GeometryManager;\n private loader: STLLoader;\n\n private utils: Util;\n\n public EXISTING_ROOF: {\n EXISTING_ROOF: GeometryInfo;\n } = {\n EXISTING_ROOF: new GeometryInfo(),\n };\n\n public EXISTING_WALL: {\n EXISTING_WALL: GeometryInfo;\n } = {\n EXISTING_WALL: new GeometryInfo(),\n };\n\n public FASCIA: {\n FASCIA: GeometryInfo;\n } = {\n FASCIA: new GeometryInfo(),\n };\n public EAVE: {\n EAVE: GeometryInfo;\n } = {\n EAVE: new GeometryInfo(),\n };\n\n public SUPERIOR_BEAM: {\n S65x110: GeometryInfo;\n S65x110_JOINT: GeometryInfo;\n S65x110_ENDCAP: GeometryInfo;\n S65x160: GeometryInfo;\n S65x160_JOINT: GeometryInfo;\n S65x160_ENDCAP: GeometryInfo;\n S65x210: GeometryInfo;\n S65x210_JOINT: GeometryInfo;\n S65x210_ENDCAP: GeometryInfo;\n S65x260: GeometryInfo;\n S65x260_JOINT: GeometryInfo;\n S65x260_ENDCAP: GeometryInfo;\n } = {\n S65x110: new GeometryInfo(),\n S65x110_JOINT: new GeometryInfo(),\n S65x110_ENDCAP: new GeometryInfo(),\n S65x160: new GeometryInfo(),\n S65x160_JOINT: new GeometryInfo(),\n S65x160_ENDCAP: new GeometryInfo(),\n S65x210: new GeometryInfo(),\n S65x210_JOINT: new GeometryInfo(),\n S65x210_ENDCAP: new GeometryInfo(),\n S65x260: new GeometryInfo(),\n S65x260_JOINT: new GeometryInfo(),\n S65x260_ENDCAP: new GeometryInfo(),\n };\n public TIMBER_BEAM: {\n S140x45: GeometryInfo;\n S190x45: GeometryInfo;\n S150x50: GeometryInfo;\n S200x50: GeometryInfo;\n S150x75: GeometryInfo;\n S200x75: GeometryInfo;\n S250x75: GeometryInfo;\n S150x50_ENDCAP: GeometryInfo;\n } = {\n S140x45: new GeometryInfo(),\n S190x45: new GeometryInfo(),\n S150x50: new GeometryInfo(),\n S200x50: new GeometryInfo(),\n S150x75: new GeometryInfo(),\n S200x75: new GeometryInfo(),\n S250x75: new GeometryInfo(),\n S150x50_ENDCAP: new GeometryInfo(),\n };\n\n public RidgeCapping: {\n // S_Ridge_100: GeometryInfo;\n // S_Ridge_125: GeometryInfo;\n // S_Ridge_150: GeometryInfo;\n // S_Ridge_200: GeometryInfo;\n // S_Ridge_225: GeometryInfo;\n // S_Ridge_250: GeometryInfo;\n S_Ridge_Custom: GeometryInfo;\n } = {\n S_Ridge_Custom: new GeometryInfo()\n };\n\n public SUPERIOR_POST: {\n S65x65: GeometryInfo;\n S90x90: GeometryInfo;\n TIMBER: GeometryInfo; // 150\n CENTER_POST_TIMBER: GeometryInfo;\n } = {\n S65x65: new GeometryInfo(),\n S90x90: new GeometryInfo(),\n TIMBER: new GeometryInfo(),\n CENTER_POST_TIMBER: new GeometryInfo(),\n };\n public FLY_OVER_BRACKET: {\n S65x3: GeometryInfo;\n } = {\n S65x3: new GeometryInfo(),\n };\n public MONO_PANEL: {\n S50MM: GeometryInfo;\n S50MM_BASE: GeometryInfo;\n S75MM: GeometryInfo;\n S75MM_BASE: GeometryInfo;\n S100MM: GeometryInfo;\n S100MM_BASE: GeometryInfo;\n S125MM: GeometryInfo;\n S125MM_BASE: GeometryInfo;\n S150MM: GeometryInfo;\n S150MM_BASE: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S50MM_BASE: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S75MM_BASE: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S100MM_BASE: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S125MM_BASE: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n S150MM_BASE: new GeometryInfo(),\n };\n\n public CORRO_PANEL: {\n S50MM: GeometryInfo;\n S50MM_BASE: GeometryInfo;\n S75MM: GeometryInfo;\n S75MM_BASE: GeometryInfo;\n S100MM: GeometryInfo;\n S100MM_BASE: GeometryInfo;\n S125MM: GeometryInfo;\n S125MM_BASE: GeometryInfo;\n S150MM: GeometryInfo;\n S150MM_BASE: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S50MM_BASE: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S75MM_BASE: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S100MM_BASE: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S125MM_BASE: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n S150MM_BASE: new GeometryInfo(),\n };\n\n public UPSTAND_BRAKET = {\n BRAKET_1: new GeometryInfo(),\n BRAKET_2: new GeometryInfo(),\n };\n\n public MONO_PANEL_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public CORRO_PANEL_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public MONO_PANEL_DRIP_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public CORRO_PANEL_DRIP_BARGE_CAPPING: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public MONO_PANEL_RECIEVER_CHANEL: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n public CORRO_PANEL_RECIEVER_CHANEL: {\n S50MM: GeometryInfo;\n S75MM: GeometryInfo;\n S100MM: GeometryInfo;\n S125MM: GeometryInfo;\n S150MM: GeometryInfo;\n } = {\n S50MM: new GeometryInfo(),\n S75MM: new GeometryInfo(),\n S100MM: new GeometryInfo(),\n S125MM: new GeometryInfo(),\n S150MM: new GeometryInfo(),\n };\n\n public GUTTER: {\n SQUARE_LINE: GeometryInfo;\n SQUARE_LINE_END_CAP: GeometryInfo;\n QUAD_150: GeometryInfo;\n QUAD_150_END_CAP: GeometryInfo;\n } = {\n SQUARE_LINE: new GeometryInfo(),\n SQUARE_LINE_END_CAP: new GeometryInfo(),\n QUAD_150: new GeometryInfo(),\n QUAD_150_END_CAP: new GeometryInfo(),\n };\n public DOWNPIPE: {\n PIPE_S90MM: GeometryInfo;\n L_S90MM: GeometryInfo;\n } = {\n PIPE_S90MM: undefined,\n L_S90MM: undefined,\n };\n\n public Z_FlASHING: {\n S50: GeometryInfo;\n S75: GeometryInfo;\n S100: GeometryInfo;\n S125: GeometryInfo;\n S150: GeometryInfo;\n } = {\n S50: new GeometryInfo(),\n S75: new GeometryInfo(),\n S100: new GeometryInfo(),\n S125: new GeometryInfo(),\n S150: new GeometryInfo(),\n };\n\n public DIMENSION = {\n LINE: new GeometryInfo(new PlaneBufferGeometry(1000, 15), 15, 1, 1000),\n CAP: new GeometryInfo(new PlaneBufferGeometry(15, 200), 200, 1, 15),\n };\n\n public UI_CONTROL = {\n LINE: new GeometryInfo(new PlaneBufferGeometry(1000, 30), 15, 1, 1000),\n };\n\n static Instance(): GeometryManager {\n if (!GeometryManager.instance) {\n GeometryManager.instance = new GeometryManager();\n }\n return GeometryManager.instance;\n }\n\n public loadAll(): Promise {\n return Promise.all([\n this.loadExistingRoof(),\n this.loadExistingWall(),\n this.loadFascia(),\n this.loadEave(),\n this.loadSuperiorBeam(),\n this.loadBeamJoint(),\n this.loadRidgeCapping(),\n this.loadSuperiorPost(),\n this.loadFlyOverBracket(),\n this.loadMonoPanel(),\n this.loadCorroPanel(),\n this.loadMonoPanelBargeCapping(),\n this.loadCorroPanelBargeCapping(),\n this.loadMonoPanelDripBargeCapping(),\n this.loadCorroPanelDripBargeCapping(),\n this.loadGutter(),\n this.loadMonoRecieverChanel(),\n this.loadCorroRecieverChanel(),\n this.loadDownPipe(),\n this.loadZFlashing(),\n this.loadBraket(),\n ]);\n }\n\n private downloadFile(fileName: string): Promise {\n return new Promise((resolve, reject) => {\n this.loader.load(\n env.modelBaseUrl + \"/assets/models/\" + fileName,\n (geometry) => {\n geometry.center();\n resolve(geometry);\n }\n );\n });\n }\n private downloadFileEx(\n fileName: string,\n vWidth: Vector3,\n vHeight: Vector3,\n vLength: Vector3,\n name: string = \"\"\n ): Promise {\n return new Promise((resolve, reject) => {\n this.loader.load(\n env.modelBaseUrl + \"/assets/models/\" + fileName,\n (geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(geometry, vWidth);\n const height = this.utils.getGeometryLength(geometry, vHeight);\n const length = this.utils.getGeometryLength(geometry, vLength);\n let object = new GeometryInfo(geometry, width, height, length, name);\n resolve(object);\n }\n );\n });\n }\n public loadExistingRoof(): Promise {\n // return this.downloadFile('existing_roof_left.stl')\n // .then((geometry) => {\n // geometry.center();\n // let width = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // this.EXISTING_ROOF.LEFT = new GeometryInfo(geometry, width, height, length);\n // return this.downloadFile('existing_roof_right.stl');\n // })\n // .then((geometry) => {\n // geometry.center();\n // let width = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // this.EXISTING_ROOF.RIGHT = new GeometryInfo(geometry, width, height, length);\n // })\n\n // return this.downloadFile('existing_roof.stl')\n // .then((geometry) => {\n // geometry.center();\n // let width = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // this.EXISTING_ROOF.LEFT = new GeometryInfo(geometry, width, height, length);\n // this.EXISTING_ROOF.RIGHT = new GeometryInfo(geometry.clone().rotateY(-Math.PI/2), width, height, length);\n // //return this.downloadFile('existing_roof_right.stl');\n // })\n\n return new Promise((resolve, reject) => {\n const geometry = new BoxBufferGeometry(3000, 20, 1800);\n\n this.EXISTING_ROOF.EXISTING_ROOF = new GeometryInfo(\n geometry,\n 1800,\n 20,\n 3000\n );\n // this.EXISTING_ROOF.RIGHT = new GeometryInfo(geometry, 1800, 20, 3000);\n resolve(geometry);\n });\n }\n public loadExistingWall(): Promise {\n // return this.downloadFile('eave_wall.stl')\n // .then((geometry) => {\n // geometry.center();\n\n // let width = this.utils.getGeometryLength(geometry, new Vector3(1,0,0));\n // let height = this.utils.getGeometryLength(geometry, new Vector3(0,1,0));\n // let length = this.utils.getGeometryLength(geometry, new Vector3(0,0,1));\n // this.EXISTING_WALL.EXISTING_WALL = new GeometryInfo(geometry, width, height, length);\n // })\n return new Promise((resolve, reject) => {\n const geometry = new BoxBufferGeometry(1000, 1000, 190);\n this.EXISTING_WALL.EXISTING_WALL = new GeometryInfo(\n geometry,\n 190,\n 1000,\n 1000\n );\n resolve(geometry);\n });\n }\n public loadEave(): Promise {\n return this.downloadFile(\"fascia_width.stl\").then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.EAVE.EAVE = new GeometryInfo(geometry, width, height, length);\n });\n }\n public loadFascia(): Promise {\n return this.downloadFile(\"fascia_depth.stl\").then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.FASCIA.FASCIA = new GeometryInfo(geometry, width, height, length);\n });\n }\n public loadRidgeCapping(): Promise {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n // this.downloadFileEx(\"Ridge Capping 10 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_100 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 12.5 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_125 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 15 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_150 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 20 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_200 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 22.5 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_225 = g;\n // }\n // ),\n // this.downloadFileEx(\"Ridge Capping 25 Deg (3D).stl\", vW, vH, vL).then(\n // (g) => {\n // this.RidgeCapping.S_Ridge_250 = g;\n // }\n // ),\n this.downloadFileEx(\"Ridge Capping (Customs).stl\", vW, vH, vL).then(\n (g) => {\n this.RidgeCapping.S_Ridge_Custom = g;\n }\n ),\n ]);\n }\n public loadBeamJoint(): Promise {\n let geo = new BoxBufferGeometry(60, 105, 500);\n this.SUPERIOR_BEAM.S65x110_JOINT = new GeometryInfo(geo, 60, 105, 500, \"BSIJ110\");\n let geo1 = new BoxBufferGeometry(60, 155, 500);\n this.SUPERIOR_BEAM.S65x160_JOINT = new GeometryInfo(geo1, 60, 155, 500, \"BSIJ160\");\n let geo2 = new BoxBufferGeometry(60, 205, 500);\n this.SUPERIOR_BEAM.S65x210_JOINT = new GeometryInfo(geo2, 60, 205, 500, \"BSIJ210\");\n let geo3 = new BoxBufferGeometry(60, 255, 500);\n this.SUPERIOR_BEAM.S65x260_JOINT = new GeometryInfo(geo3, 60, 255, 500, \"BSIJ260\");\n\n return Promise.resolve()\n }\n public loadSuperiorBeam(): Promise {\n let geo = new BoxBufferGeometry(45, 140, 1000);\n this.TIMBER_BEAM.S140x45 = new GeometryInfo(geo, 45, 140, 1000, \"S45x140\");\n let geo1 = new BoxBufferGeometry(90, 140, 1000);\n this.TIMBER_BEAM.S190x45 = new GeometryInfo(geo1, 90, 140, 1000, \"S45x190\");\n let geo2 = new BoxBufferGeometry(50, 150, 1000);\n this.TIMBER_BEAM.S150x50 = new GeometryInfo(geo2, 50, 150, 1000, \"S50x150\");\n let geo3 = new BoxBufferGeometry(50, 200, 1000);\n this.TIMBER_BEAM.S200x50 = new GeometryInfo(geo3, 50, 200, 1000, \"S50x200\");\n let geo4 = new BoxBufferGeometry(75, 150, 1000);\n this.TIMBER_BEAM.S150x75 = new GeometryInfo(geo4, 75, 150, 1000, \"S75x150\");\n let geo5 = new BoxBufferGeometry(75, 200, 1000);\n this.TIMBER_BEAM.S200x75 = new GeometryInfo(geo5, 75, 200, 1000, \"S75x200\");\n let geo6 = new BoxBufferGeometry(75, 250, 1000);\n this.TIMBER_BEAM.S250x75 = new GeometryInfo(geo6, 75, 250, 1000, \"S75x250\");\n let geoEndCap = new BoxBufferGeometry(50, 150, 50);\n this.TIMBER_BEAM.S150x50_ENDCAP = new GeometryInfo(geoEndCap, 50, 150, 50, \"S150x50_ENDCAP\");\n\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"Superior Beam 65x110 (3D).stl\", vW, vH, vL, \"S65x110\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x110 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x110 (3D).stl\", vW, vH, vL, \"BSEC110\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x110_ENDCAP = g;\n }\n ),\n this.downloadFileEx(\"Superior Beam 65x160 (3D).stl\", vW, vH, vL, \"S65x160\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x160 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x160 (3D).stl\", vW, vH, vL, \"BSEC160\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x160_ENDCAP = g;\n }\n ),\n this.downloadFileEx(\"Superior Beam 65x210 (3D).stl\", vW, vH, vL, \"S65x210\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x210 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x210 (3D).stl\", vW, vH, vL, \"BSEC210\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x210_ENDCAP = g;\n }\n ),\n this.downloadFileEx(\"Superior Beam 65x260 (3D).stl\", vW, vH, vL, \"S65x260\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x260 = g;\n }\n ),\n this.downloadFileEx(\"Beam End Cap 65x260 (3D).stl\", vW, vH, vL, \"BSEC260\").then(\n (g) => {\n this.SUPERIOR_BEAM.S65x260_ENDCAP = g;\n }\n ),\n ]);\n }\n public loadSuperiorPost(): Promise {\n let geo = new BoxBufferGeometry(100, 100, 1000);\n this.SUPERIOR_POST.TIMBER = new GeometryInfo(geo, 100, 1000, 100);\n let geoTimber = new BoxBufferGeometry(65, 65, 1000);\n this.SUPERIOR_POST.CENTER_POST_TIMBER = new GeometryInfo(geoTimber, 65, 1000, 65);\n\n return this.downloadFile(\"Superior Post 65x65 (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n this.SUPERIOR_POST.S65x65 = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"Post SHS 90x3 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n this.SUPERIOR_POST.S90x90 = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadFlyOverBracket(): Promise {\n return this.downloadFile(\"Fly Over Bracket 65x3 (3D).stl\").then(\n (geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n this.FLY_OVER_BRACKET.S65x3 = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n }\n );\n }\n private getValue(geometry: BufferGeometry, orderIndex: number): number {\n if (orderIndex == 0) {\n return this.utils.getGeometryLength(geometry, new Vector3(1, 0, 0));\n } else if (orderIndex == 1) {\n return this.utils.getGeometryLength(geometry, new Vector3(0, 1, 0));\n } else if (orderIndex == 2) {\n return this.utils.getGeometryLength(geometry, new Vector3(0, 0, 1));\n }\n\n return 0;\n }\n getFileNameWithoutExt(path: string) {\n return path.split(\"/\").pop().split('.').slice(0, -1).join('.');\n }\n public downloadFileAsGeometryInfo(\n fileName: string,\n axisWHLOrder: string,\n output: GeometryInfo,\n modifier?: (geo: BufferGeometry) => void,\n name?: string\n ) : Promise {\n return new Promise((resolve, reject) => {\n if (output === undefined) {\n console.log(\"fileName\", fileName);\n console.log(\"UNDEFINED\");\n }\n if (output?.geometry) {\n return resolve(output);\n }\n\n try {\n this.downloadFile(fileName).then(geometry => {\n const orders = axisWHLOrder.split(\",\");\n const width = this.getValue(geometry, orders.indexOf(\"w\"));\n const length = this.getValue(geometry, orders.indexOf(\"l\"));\n const height = this.getValue(geometry, orders.indexOf(\"h\"));\n \n const simplifiedGeo = geometry;\n if (modifier) {\n modifier(simplifiedGeo);\n }\n const _name = name || this.getFileNameWithoutExt(fileName);\n \n const geoInfo = new GeometryInfo(\n simplifiedGeo,\n width,\n height,\n length,\n _name\n );\n\n output.name = geoInfo.name;\n output.geometry = geoInfo.geometry;\n output.width = geoInfo.width;\n output.height = geoInfo.height;\n output.length = geoInfo.length;\n\n resolve(geoInfo)\n })\n } catch (err) {\n resolve(null)\n }\n })\n }\n public loadMonoPanel(): Promise {\n return Promise.all([\n this.downloadFileAsGeometryInfo(\n \"50mm Monopanel-1 (3D).stl\",\n \"w,h,l\",\n this.MONO_PANEL.S50MM,\n (geo) => {\n geo.center()\n geo.translate(0, 2, 0);\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"75mm Monopanel-1 (3D).stl\",\n \"w,h,l\",\n this.MONO_PANEL.S75MM,\n (geo) => {\n geo.center()\n geo.translate(0, 2, 0);\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"100mm Monopanel-1 (3D).stl\",\n \"w,h,l\",\n this.MONO_PANEL.S100MM,\n (geo) => {\n geo.center()\n geo.translate(0, 2, 0);\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"125mm Monopanel-1 (3D).stl\",\n \"w,h,l\",\n this.MONO_PANEL.S125MM,\n (geo) => {\n geo.center()\n geo.translate(0, 2, 0);\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"150mm Monopanel-1 (3D).stl\",\n \"w,h,l\",\n this.MONO_PANEL.S150MM,\n (geo) => {\n geo.center()\n geo.translate(0, 2, 0);\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"50mm Monopanel-1 (3D)-base.stl\",\n \"w,h,l\",\n this.MONO_PANEL.S50MM_BASE,\n (geo) => {\n geo.center()\n geo.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n )\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"75mm Monopanel-1 (3D)-base.stl\",\n \"w,h,l\",\n this.MONO_PANEL.S75MM_BASE,\n (geo) => {\n geo.center()\n geo.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n )\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"100mm Monopanel-1 (3D)-base.stl\",\n \"w,h,l\",\n this.MONO_PANEL.S100MM_BASE,\n (geo) => {\n geo.center()\n geo.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n )\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"125mm Monopanel-1 (3D)-base.stl\",\n \"w,h,l\",\n this.MONO_PANEL.S125MM_BASE,\n (geo) => {\n geo.center()\n geo.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n )\n }\n ),\n this.downloadFileAsGeometryInfo(\n \"150mm Monopanel-1 (3D)-base.stl\",\n \"w,h,l\",\n this.MONO_PANEL.S150MM_BASE,\n (geo) => {\n geo.center()\n geo.translate(\n EXISTING_BUILDING_CONFIG.ROOF_AND_BASE_OFFSET_X,\n 0,\n 0\n )\n }\n ),\n ]);\n }\n public loadCorroPanel(): Promise {\n return this.downloadFile(\"50mm Coropanel-1 (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel-1 (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"50mm Coropanel-1 (3D)-base.stl\");\n })\n\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S50MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel-1 (3D)-base.stl\");\n })\n\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S75MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S100MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S125MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel-1 (3D)-base.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL.S150MM_BASE = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadMonoPanelBargeCapping(): Promise {\n return this.downloadFile(\"50mm Monopanel Barge Capping (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Monopanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadMonoPanelDripBargeCapping(): Promise {\n return this.downloadFile(\"50MM TRIMSPAN DRIP BARGE.stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75MM TRIMSPAN DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100MM TRIMSPAN DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125MM TRIMSPAN DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150MM TRIMSPAN DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroPanelBargeCapping(): Promise {\n return this.downloadFile(\"50mm Coropanel Barge Capping (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel Barge Capping (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroPanelDripBargeCapping(): Promise {\n return this.downloadFile(\"50MM CORROPANEL DRIP BARGE .stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75MM CORROPANEL DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100MM CORROPANEL DRIP BARGE.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125MM CORROPANEL DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150MM CORROPANEL DRIP BARGE .stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadMonoRecieverChanel(): Promise {\n return this.downloadFile(\"50mm Monopanel Reveiver Channel (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Monopanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.MONO_PANEL_RECIEVER_CHANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadCorroRecieverChanel(): Promise {\n return this.downloadFile(\"50mm Coropanel Reveiver Channel (3D).stl\")\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n //geometry.rotateY(Math.PI/2)\n this.CORRO_PANEL_RECIEVER_CHANEL.S50MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"75mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S75MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"100mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S100MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"125mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S125MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"150mm Coropanel Reveiver Channel (3D).stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n this.CORRO_PANEL_RECIEVER_CHANEL.S150MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n public loadGutter(): Promise {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"Quad Gutter (3D).stl\", vW, vH, vL).then((g) => {\n this.GUTTER.QUAD_150 = g;\n }),\n this.downloadFileEx(\n \"End Cap Quad Gutter (3D).stl\",\n vW,\n vH,\n new Vector3(1, 0, 0)\n ).then((g) => {\n this.GUTTER.QUAD_150_END_CAP = g;\n }),\n this.downloadFileEx(\"Square Line Gutter (3D).stl\", vW, vH, vL).then(\n (g) => {\n this.GUTTER.SQUARE_LINE = g;\n }\n ),\n this.downloadFileEx(\n \"End Cap Square Line Gutter (3D).stl\",\n vW,\n vH,\n new Vector3(1, 0, 0)\n ).then((g) => {\n this.GUTTER.SQUARE_LINE_END_CAP = g;\n }),\n ]);\n }\n public loadBraket(): Promise {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"FUB Bracket 65x3_1.stl\", vW, vH, vL).then((g) => {\n this.UPSTAND_BRAKET.BRAKET_1 = g;\n }),\n this.downloadFileEx(\"FUB Bracket 65x3_2.stl\", vW, vH, vL).then((g) => {\n this.UPSTAND_BRAKET.BRAKET_2 = g;\n }),\n ]);\n }\n private loadDownPipe(): Promise {\n return this.downloadFile(\"90mm PVC (3D)-pipe.stl\")\n .then((geometry) => {\n geometry.center();\n\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n geometry.translate(0, height / 2, 0);\n this.DOWNPIPE.PIPE_S90MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n return this.downloadFile(\"90mm PVC (3D)-L.stl\");\n })\n .then((geometry) => {\n geometry.center();\n const width = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 0, 1)\n );\n const height = this.utils.getGeometryLength(\n geometry,\n new Vector3(0, 1, 0)\n );\n const length = this.utils.getGeometryLength(\n geometry,\n new Vector3(1, 0, 0)\n );\n geometry.translate(0, height / 2, 0);\n this.DOWNPIPE.L_S90MM = new GeometryInfo(\n geometry,\n width,\n height,\n length\n );\n });\n }\n private loadZFlashing() {\n let vW = new Vector3(1, 0, 0);\n let vH = new Vector3(0, 1, 0);\n let vL = new Vector3(0, 0, 1);\n return Promise.all([\n this.downloadFileEx(\"50mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S50 = g;\n }),\n this.downloadFileEx(\"75mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S75 = g;\n }),\n this.downloadFileEx(\"100mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S100 = g;\n }),\n this.downloadFileEx(\"125mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S125 = g;\n }),\n this.downloadFileEx(\"150mm Z Flashing (3D).stl\", vW, vH, vL).then((g) => {\n g.geometry\n .rotateY(Math.PI / 2)\n .translate(g.length / 2, -g.height / 2 - 2, -80);\n this.Z_FlASHING.S150 = g;\n }),\n ]);\n }\n public getBeam(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltBeamSize.currentValue == 0 ||\n this.APP.sltBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n if (this.APP.sltBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160);\n }\n if (this.APP.sltBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210);\n }\n if (this.APP.sltBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n if (\n this.APP.sltBeamSize.currentValue == 0 ||\n this.APP.sltBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S140x45);\n }\n if (this.APP.sltBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S190x45);\n }\n if (this.APP.sltBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50);\n }\n if (this.APP.sltBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x50);\n }\n if (this.APP.sltBeamSize.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x75);\n }\n if (this.APP.sltBeamSize.currentValue == 6) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x75);\n }\n if (this.APP.sltBeamSize.currentValue == 7) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S250x75);\n }\n }\n }\n\n public getBeamJoint(): GeometryInfo {\n if (UI.beamType == 0) {\n if (\n UI.beamSize == 0 || UI.beamSize == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n } else if (UI.beamSize == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_JOINT);\n } else if (UI.beamSize == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_JOINT);\n } else if (UI.beamSize == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_JOINT);\n } else if (UI.beamSize > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n }\n }\n\n return null\n }\n\n public getHouseBeamJoint(): GeometryInfo {\n if (UI.beamType == 0) {\n if (\n UI.houseBeamSize == 0 ||\n UI.houseBeamSize == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n }\n if (UI.houseBeamSize == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_JOINT);\n }\n if (UI.houseBeamSize == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_JOINT);\n }\n if (UI.houseBeamSize == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_JOINT);\n }\n if (UI.houseBeamSize > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_JOINT);\n }\n }\n\n return null\n }\n\n public getHouseBeam(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltHouseBeamSize.currentValue == 0 ||\n this.APP.sltHouseBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltHouseBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n if (\n this.APP.sltHouseBeamSize.currentValue == 0 ||\n this.APP.sltHouseBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S140x45);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S190x45);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x50);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x75);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 6) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S200x75);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 7) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S250x75);\n }\n }\n }\n public getRafterBeam(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160);\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50);\n }\n }\n public getRafterBeamEndCap(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_ENDCAP);\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50_ENDCAP);\n }\n }\n public getBeamEndCap(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltBeamSize.currentValue == 0 ||\n this.APP.sltBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_ENDCAP);\n }\n if (this.APP.sltBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_ENDCAP);\n }\n if (this.APP.sltBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_ENDCAP);\n }\n if (this.APP.sltBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_ENDCAP);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50_ENDCAP);\n }\n }\n\n public getHouseBeamEndCap(): GeometryInfo {\n //_SUPERIOR BEAM\n if (this.APP.sltBeamType.currentValue == 0) {\n if (\n this.APP.sltHouseBeamSize.currentValue == 0 ||\n this.APP.sltHouseBeamSize.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110_ENDCAP);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x160_ENDCAP);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x210_ENDCAP);\n }\n if (this.APP.sltHouseBeamSize.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x260_ENDCAP);\n }\n //FIXME: Bang - 2021.05.20: Xu ly loi khi tu TIMER -> SPC BEAM\n if (this.APP.sltHouseBeamSize.currentValue > 4) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_BEAM.S65x110);\n }\n }\n //_TIMBER BEAM\n else if (this.APP.sltBeamType.currentValue == 1) {\n return this.utils.cloneGeometryInfo(this.TIMBER_BEAM.S150x50_ENDCAP);\n }\n }\n\n public getPost() {\n if (this.APP.sltColumnType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.S65x65);\n } else if (\n this.APP.sltColumnType.currentValue == 1 ||\n this.APP.sltColumnType.currentValue == 2\n ) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.S90x90);\n } else {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.TIMBER);\n }\n }\n public getCenterPost() {\n if(UI.beamType == 1) {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.CENTER_POST_TIMBER)\n } else {\n return this.utils.cloneGeometryInfo(this.SUPERIOR_POST.S65x65)\n }\n }\n public getRoofSheetPanel(): GeometryInfo {\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S50MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S75MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S100MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S125MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S150MM);\n }\n } else if (this.APP.sltRoofSheetingType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S50MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S75MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S100MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S125MM);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S150MM);\n }\n }\n return null;\n }\n public getRoofBase(): GeometryInfo {\n if (\n this.APP.sltRoofSheetingType.currentValue == 0 ||\n this.APP.sltRoofSheetingType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S50MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S75MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S100MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S125MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.MONO_PANEL.S150MM_BASE);\n }\n } else if (this.APP.sltRoofSheetingType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S50MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S75MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S100MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S125MM_BASE);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.CORRO_PANEL.S150MM_BASE);\n }\n }\n return null;\n }\n public getRoofBaseHeight(): number {\n const roofBase = this.getRoofBase()\n return _.get(roofBase, ['height'], 0)\n }\n public getBarge(): GeometryInfo {\n if (this.APP.sltDripBarge.currentValue) {\n if (\n this.APP.sltBargeType.currentValue == 0 ||\n this.APP.sltBargeType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_DRIP_BARGE_CAPPING.S150MM\n );\n }\n } else if (this.APP.sltBargeType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_DRIP_BARGE_CAPPING.S150MM\n );\n }\n }\n } else {\n if (\n this.APP.sltBargeType.currentValue == 0 ||\n this.APP.sltBargeType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_BARGE_CAPPING.S150MM\n );\n }\n } else if (this.APP.sltBargeType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_BARGE_CAPPING.S150MM\n );\n }\n }\n }\n\n return null;\n }\n public getReceiverChannel(): GeometryInfo {\n if (\n this.APP.sltReceiverType.currentValue == 0 ||\n this.APP.sltReceiverType.currentValue == 1\n ) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.MONO_PANEL_RECIEVER_CHANEL.S150MM\n );\n }\n } else if (this.APP.sltReceiverType.currentValue == 2) {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S50MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S75MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S100MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S125MM\n );\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(\n this.CORRO_PANEL_RECIEVER_CHANEL.S150MM\n );\n }\n }\n return null;\n }\n public getGutter() {\n if (this.APP.sltGutterType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.GUTTER.SQUARE_LINE);\n } else if (\n this.APP.sltGutterType.currentValue == 1 ||\n this.APP.sltGutterType.currentValue == 2\n ) {\n return this.utils.cloneGeometryInfo(this.GUTTER.QUAD_150);\n }\n }\n public getGuterEndCap(): GeometryInfo {\n if (this.APP.sltGutterType.currentValue == 0) {\n return this.utils.cloneGeometryInfo(this.GUTTER.SQUARE_LINE_END_CAP);\n } else if (\n this.APP.sltGutterType.currentValue == 1 ||\n this.APP.sltGutterType.currentValue == 2\n ) {\n return this.utils.cloneGeometryInfo(this.GUTTER.QUAD_150_END_CAP);\n }\n }\n public getRidge(): GeometryInfo {\n return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_Custom);\n // if (\n // this.APP.sltRoofPitch.currentValue == 2 ||\n // this.APP.sltRoofPitch.currentValue == 3 ||\n // this.APP.sltRoofPitch.currentValue == 5 ||\n // this.APP.sltRoofPitch.currentValue == 7.5 ||\n // this.APP.sltRoofPitch.currentValue == 10\n // ) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_100);\n // } else if (this.APP.sltRoofPitch.currentValue == 12) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_125);\n // } else if (this.APP.sltRoofPitch.currentValue == 15) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_150);\n // } else if (this.APP.sltRoofPitch.currentValue == 20) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_200);\n // } else if (this.APP.sltRoofPitch.currentValue == 22.5) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_225);\n // } else if (this.APP.sltRoofPitch.currentValue == 25) {\n // return this.utils.cloneGeometryInfo(this.RidgeCapping.S_Ridge_250);\n // }\n }\n public getDownPipe(): GeometryInfo {\n if (this.APP.sltDownpipeType.currentValue == 0) {\n return this.DOWNPIPE.PIPE_S90MM;\n }\n return null;\n }\n public getDownPipeL(): GeometryInfo {\n if (this.APP.sltDownpipeType.currentValue == 0) {\n return this.DOWNPIPE.L_S90MM;\n }\n return null;\n }\n public getZFlashing(): GeometryInfo {\n if (\n this.APP.sltRoofThickness.currentValue == 0 ||\n this.APP.sltRoofThickness.currentValue == 1\n ) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S50);\n }\n if (this.APP.sltRoofThickness.currentValue == 2) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S75);\n }\n if (this.APP.sltRoofThickness.currentValue == 3) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S100);\n }\n if (this.APP.sltRoofThickness.currentValue == 4) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S125);\n }\n if (this.APP.sltRoofThickness.currentValue == 5) {\n return this.utils.cloneGeometryInfo(this.Z_FlASHING.S150);\n }\n\n return null;\n }\n public getDimensionLine() {\n return this.utils.cloneGeometryInfo(this.DIMENSION.LINE);\n }\n public getDimensionCap() {\n return this.utils.cloneGeometryInfo(this.DIMENSION.CAP);\n }\n public getUIControlLine() {\n return this.utils.cloneGeometryInfo(this.UI_CONTROL.LINE);\n }\n public getUpstandBraket(part: number) {\n if (part == 1) {\n return this.utils.cloneGeometryInfo(this.UPSTAND_BRAKET.BRAKET_1);\n } else if (part == 2) {\n return this.utils.cloneGeometryInfo(this.UPSTAND_BRAKET.BRAKET_2);\n }\n }\n}\n","import { Scene, Mesh, BufferGeometry, Vector3, Object3D, Color, Material, PlaneBufferGeometry, BoxBufferGeometry, CubeTextureLoader } from \"three\";\nimport { Util } from \"./utils\";\nimport { environment } from 'src/environments/environment';\nimport { CONFIG as env, GEOMETRY_TYPE } from '../app.config';\nimport { HomeComponent as AppComponent } from '../containers/home/home.component';\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport { GeometryInfo } from './models';\n\nexport class GroundManager {\n private scene: Scene;\n private APP: AppComponent;\n private material: Material;\n private utils: Util;\n\n private geometryManager: GeometryManager;\n\n private geo_ground: BufferGeometry;\n private geo_groundBase: GeometryInfo;\n\n private totalBaySize: number;\n\n private isReady = false;\n\n\n constructor() {\n this.utils = new Util();\n this.geometryManager = GeometryManager.Instance();\n }\n\n public init(app: AppComponent): Promise {\n return new Promise((resolve, reject) => {\n this.APP = app;\n this.scene = app.scene;\n this.material = MaterialManager.Instance().GROUND.clone();\n\n this.APP.sldExistingLength.addAction(this.uiChanged.bind(this));\n this.APP.sldExistingLength2.addAction(this.uiChanged.bind(this));\n this.APP.sldExistingWidth1.addAction(this.uiChanged.bind(this));\n this.APP.sldExistingWidth2.addAction(this.uiChanged.bind(this));\n this.APP.sldSpan.addAction(this.uiChanged.bind(this));\n this.APP.sldMultiSpan.addAction(this.uiChanged.bind(this));\n this.APP.dialogEditBay.addAction(this.uiChanged.bind(this));\n\n\n resolve();\n });\n }\n public optimize(): Promise {\n return new Promise((resolve, reject) => {\n this.geo_ground = new PlaneBufferGeometry(200000, 200000);\n this.geo_groundBase = new GeometryInfo();\n this.geo_groundBase.width = 1000;\n this.geo_groundBase.height = 1;\n this.geo_groundBase.length = 1000;\n this.geo_groundBase.geometry = new BoxBufferGeometry(this.geo_groundBase.width, this.geo_groundBase.height, this.geo_groundBase.length);\n this.geo_groundBase.geometry.translate(0,0,this.geo_groundBase.length/2);\n\n\n resolve();\n });\n }\n public load(): Promise {\n return new Promise((resolve, reject) => {\n //this.scene.remove(...this.scene.children.filter(o => o.userData.type == GEOMETRY_TYPE.GROUND_BASE));\n\n this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n\n this.isReady = true;\n\n this.addGround();\n this.addBase();\n\n resolve();\n });\n }\n\n public addGround() {\n let mesh = new Mesh(this.geo_ground, this.material);\n mesh.userData = { type: \"GROUND\" };\n mesh.position.y = -100;\n mesh.rotation.x = - Math.PI / 2;\n\n this.scene.add(mesh);\n //Skybox\n const cubeTextureLoader = new CubeTextureLoader();\n cubeTextureLoader.setPath(environment.modelBaseUrl + '/assets/images/skybox/' );\n const cubeTexture = cubeTextureLoader.load( [\n \"cube_f.jpg\", \"cube_b.jpg\",\n \"cube_u.jpg\", \"cube_d.jpg\",\n \"cube_l.jpg\", \"cube_r.jpg\"\n ] );\n this.scene.background = cubeTexture;\n }\n\n private addBase() {\n //return new Promise((resolve, reject) => {\n // if(!this.isReady){\n // resolve();\n // return;\n // }\n\n // this.APP.patiosManager.patiosGroup.remove(...this.APP.patiosManager.patiosGroup.children.filter(o => o.userData.type == GEOMETRY_TYPE.GROUND_BASE));\n // this.totalBaySize = this.APP.dialogEditBay.listBay.reduce((total, val) => total + val.value, 0);\n\n // let base = new Mesh(this.geo_groundBase.geometry, MaterialManager.Instance().BASE);\n // base.userData = { type: GEOMETRY_TYPE.GROUND_BASE };\n\n // let width = this.totalBaySize + this.APP.sldLeftOverhang.currentValue + this.APP.sldRightOverhang.currentValue;\n // let length = this.APP.sldSpan.currentValue + this.APP.sldMultiSpan.currentValue + this.APP.sldFrontOverhang.currentValue + this.APP.sldBackOverhang.currentValue;\n\n // let extraWidth = 0;\n\n // let offsetZ = this.APP.sldExistingWidth1.currentValue/2;\n\n // base.position.set(0,0,-offsetZ);\n // base.scale.set((width + extraWidth) / this.geo_groundBase.width, 1, (length + extraWidth) / this.geo_groundBase.length);\n\n // this.APP.patiosManager.patiosGroup.add(base);\n\n\n \n // resolve();\n //});\n }\n\n private uiChanged(pre: number, cur: number) {\n this.addBase();\n }\n}\n","import { MeshLambertMaterial, TextureLoader, MeshBasicMaterial, RepeatWrapping, DoubleSide, MeshPhongMaterial, LineBasicMaterial, Color, Texture, SpriteMaterial } from \"three\";\nimport { environment as env } from 'src/environments/environment';\nimport { HomeComponent } from '../containers/home/home.component';\nimport { UI } from \"./ui\";\n\nexport class MaterialManager {\n private textureLoader: TextureLoader;\n private APP: HomeComponent;\n\n private defaultColor = new Color(0x6D6C6E); //Basalt\n\n public DEFAULT: MeshPhongMaterial;\n public WALL: MeshLambertMaterial;\n public EAVE: MeshPhongMaterial;\n public FASCIA: MeshPhongMaterial;\n public EXISTING_ROOF: MeshPhongMaterial;\n public GROUND: MeshLambertMaterial;\n public BASE: MeshPhongMaterial;\n\n public BEAM: MeshPhongMaterial;\n public BEAM_TRANSPARENT: MeshPhongMaterial;\n public POST: MeshPhongMaterial;\n public GUTTER: MeshPhongMaterial;\n public BARGE: MeshPhongMaterial;\n public RECEIVER_CHANEL: MeshPhongMaterial;\n public DOWNPIPE: MeshPhongMaterial;\n public BRACKET: MeshPhongMaterial;\n public BRACKET_WARNING: MeshPhongMaterial;\n public FASCIA_BRACKET: MeshPhongMaterial;\n public ROOF: MeshPhongMaterial;\n public RIDGE_CAPPING: MeshPhongMaterial;\n public ROOF_BASE: MeshPhongMaterial;\n public ZFLASHING: MeshPhongMaterial;\n\n public EXISTING_WALL_L1_TEXTURE: Texture;\n public EXISTING_WALL_W1_TEXTURE: Texture;\n public EXISTING_WALL_L2_TEXTURE: Texture;\n public EXISTING_WALL_W2_TEXTURE: Texture;\n\n public EXISTING_ROOF_TEXTURE: {\n L1: Texture,\n L2: Texture,\n W1: Texture,\n W2: Texture\n } = {\n L1: null,\n L2: null,\n W1: null,\n W2: null\n }\n\n public DIMENSION_TEXT: MeshBasicMaterial;\n public HIGHLIGHT_DIMENSION_TEXT: MeshBasicMaterial;\n\n public MESH_OUTLINE: LineBasicMaterial;\n public BEAM_OUTLINE: LineBasicMaterial;\n\n public TEXTURE_UI_CONTROL: Texture;\n public TEXTURE_TIMBER: Texture;\n public UI_CONTROL: SpriteMaterial\n\n public TEXTURE_UI_CONTROL_DELETE: Texture;\n public UI_CONTROL_DELETE: SpriteMaterial\n\n public HIDDEN_UI_CONTROL: MeshBasicMaterial\n\n public TEXTURE_UI_CONTROL_CUTBEAM: Texture;\n public TEXTURE_UI_CONTROL_EXIT_CUTBEAM: Texture;\n public UI_CONTROL_CUTBEAM: SpriteMaterial\n public UI_CONTROL_EXIT_CUTBEAM: SpriteMaterial\n\n private static instance: MaterialManager;\n static Instance(): MaterialManager{\n if (!MaterialManager.instance) {\n MaterialManager.instance = new MaterialManager();\n }\n return MaterialManager.instance;\n }\n\n private constructor(){\n this.textureLoader = new TextureLoader();\n\n //default\n this.DEFAULT = new MeshPhongMaterial({\n color: 0x6D6C6E,\n side: DoubleSide\n });\n\n //Eave\n this.EAVE = new MeshPhongMaterial({\n color: new Color('white'),\n side: DoubleSide\n });\n\n //Eave\n this.FASCIA = new MeshPhongMaterial({\n color: new Color('white'),\n side: DoubleSide\n });\n\n //Ground\n var groundTexture = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/grass-dark.jpg\" );\n groundTexture.wrapS = groundTexture.wrapT = RepeatWrapping;\n groundTexture.repeat.set( 25, 25 );\n groundTexture.anisotropy = 16;\n this.GROUND = new MeshLambertMaterial({\n side: DoubleSide, \n map: groundTexture\n });\n\n //Base\n this.BASE = new MeshPhongMaterial({ color: new Color('white') });\n\n //Existing roof\n // var existingRoofTexture = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n // existingRoofTexture.wrapS = existingRoofTexture.wrapT = RepeatWrapping;\n // existingRoofTexture.repeat.set( 2, 2 );\n // existingRoofTexture.anisotropy = 16;\n this.EXISTING_ROOF = new MeshPhongMaterial({\n side: DoubleSide\n });\n\n //wall texture\n this.EXISTING_WALL_L1_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_L1_TEXTURE.wrapS = this.EXISTING_WALL_L1_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_L1_TEXTURE.anisotropy = 1;\n\n this.EXISTING_WALL_L2_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_L2_TEXTURE.wrapS = this.EXISTING_WALL_L2_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_L2_TEXTURE.anisotropy = 1;\n\n this.EXISTING_WALL_W1_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_W1_TEXTURE.wrapS = this.EXISTING_WALL_W1_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_W1_TEXTURE.anisotropy = 1;\n\n this.EXISTING_WALL_W2_TEXTURE = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/brick4.png\" );\n this.EXISTING_WALL_W2_TEXTURE.wrapS = this.EXISTING_WALL_W2_TEXTURE.wrapT = RepeatWrapping;\n this.EXISTING_WALL_W2_TEXTURE.anisotropy = 1;\n\n \n\n //Existing roof texture\n this.EXISTING_ROOF_TEXTURE.L1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L1.wrapS = this.EXISTING_ROOF_TEXTURE.L1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.L2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L2.wrapS = this.EXISTING_ROOF_TEXTURE.L2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L2.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W1.wrapS = this.EXISTING_ROOF_TEXTURE.W1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W2.wrapS = this.EXISTING_ROOF_TEXTURE.W2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W2.anisotropy = 1;\n\n //Wall\n this.WALL = new MeshLambertMaterial({\n side: DoubleSide, \n //map: this.BRICK_TEXTURE\n });\n\n //text\n this.DIMENSION_TEXT = new MeshBasicMaterial({ color: 0xffffff, side: DoubleSide });\n this.HIDDEN_UI_CONTROL = new MeshLambertMaterial({\n side: DoubleSide,\n color: 'white',\n transparent: true,\n opacity: 0\n })\n this.HIGHLIGHT_DIMENSION_TEXT = new MeshBasicMaterial({ color: 0xffff00, side: DoubleSide });\n\n this.MESH_OUTLINE = new LineBasicMaterial( { color: 'red' } );\n this.BEAM_OUTLINE = new LineBasicMaterial( { color: 'yellow' } );\n\n this.BARGE = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.RECEIVER_CHANEL = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.GUTTER = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //basalt\n this.DOWNPIPE = new MeshPhongMaterial({ color: new Color(0xffffff) }); //white\n this.BEAM = new MeshPhongMaterial({ color: new Color(0xE4E2D5), side: DoubleSide }); //surfmist\n this.BEAM_TRANSPARENT = new MeshPhongMaterial({ color: new Color(0xE4E2D5), side: DoubleSide, transparent: true, opacity: 0.5 }); //surfmist\n this.POST = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.BRACKET = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.BRACKET_WARNING = new MeshPhongMaterial({ color: new Color(0xFF0000) }); //red: always red\n this.FASCIA_BRACKET = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.ROOF = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.RIDGE_CAPPING = new MeshPhongMaterial({ color: new Color(0xE4E2D5) });\n this.ROOF_BASE = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n this.ZFLASHING = new MeshPhongMaterial({ color: new Color(0xE4E2D5) }); //surfmist\n }\n\n public init(app: HomeComponent){\n this.APP = app;\n this.registerEvent();\n\n return Promise.all([\n this.loadTexture('cut-beam.png').then(texture => {\n this.TEXTURE_UI_CONTROL_CUTBEAM = texture\n this.UI_CONTROL_CUTBEAM = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL_CUTBEAM, sizeAttenuation: true })\n }),\n this.loadTexture('join-beam.png').then(texture => {\n this.TEXTURE_UI_CONTROL_EXIT_CUTBEAM = texture\n this.UI_CONTROL_EXIT_CUTBEAM = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL_EXIT_CUTBEAM, sizeAttenuation: true })\n }),\n this.loadTexture('resize-icon.png').then(texture => {\n this.TEXTURE_UI_CONTROL = texture\n this.UI_CONTROL = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL, sizeAttenuation: false })\n }),\n\n this.loadTexture('delete-icon.png').then(texture => {\n this.TEXTURE_UI_CONTROL_DELETE = texture\n this.UI_CONTROL_DELETE = new SpriteMaterial({ map: this.TEXTURE_UI_CONTROL_DELETE, sizeAttenuation: false })\n }),\n\n this.loadTexture('timber-texture.jpg').then(texture => {\n this.TEXTURE_TIMBER = texture\n this.TEXTURE_TIMBER.repeat.set(1, 0.3)\n this.TEXTURE_TIMBER.wrapS = RepeatWrapping\n this.TEXTURE_TIMBER.wrapT = RepeatWrapping\n }),\n this.existingRoofTypeChanged(null,null)\n ])\n }\n private loadTexture(name: string) {\n return new Promise((resolve, reject) => {\n this.textureLoader.load(env.modelBaseUrl + \"/assets/images/textures/\" + name, (texture) => {\n resolve(texture)\n },\n () => { },\n (err) => { reject(err) });\n })\n }\n private controlsToRegisterEvent: Array;\n private registerEvent(){\n this.APP.sltColourBeam.addAction(this.beamColorChanged.bind(this), 1);\n this.APP.sltColourPost.addAction(this.postColorChanged.bind(this), 1);\n this.APP.sltColourBarge.addAction(this.bargeColorChanged.bind(this),1);\n this.APP.sltColourGutter.addAction(this.gutterColorChanged.bind(this), 1);\n this.APP.sltColourDownpipe.addAction(this.downpipeColorChanged.bind(this), 1);\n this.APP.sltColourBracket.addAction(this.bracketColorChanged.bind(this), 1);\n this.APP.sltColourFasciaBracket.addAction(this.fasciaBracketColorChanged.bind(this), 1);\n this.APP.sltColourRoof.addAction(this.roofColorChanged.bind(this), 1);\n this.APP.sltFlatBottom.addAction(this.roofBaseColorChanged.bind(this), 1);\n this.APP.sltColourZFlashing.addAction(this.zFlashingColorChanged.bind(this), 1);\n this.APP.sltExistingRoofType.addAction(this.existingRoofTypeChanged.bind(this), 1);\n }\n private postColorChanged(pre: number, cur: string){\n if(UI.postType == 3) {\n this.POST.color = new Color(UI.postColor);\n if(this.TEXTURE_TIMBER) {\n this.POST.color = new Color(0xFFFFFF);\n this.POST.map = this.TEXTURE_TIMBER\n this.POST.map.needsUpdate = true\n this.POST.needsUpdate = true\n }\n } else {\n this.POST.color = new Color(UI.postColor);\n this.POST.map = null\n this.POST.needsUpdate = true\n }\n }\n private bargeColorChanged(pre: number, cur: string){\n this.BARGE.color = new Color(parseInt(cur));\n }\n private gutterColorChanged(pre: number, cur: string){\n this.GUTTER.color = new Color(parseInt(cur));\n }\n private downpipeColorChanged(pre: number, cur: string){\n this.DOWNPIPE.color = new Color(parseInt(cur));\n }\n private beamColorChanged(pre: number, cur: string){\n if(UI.beamType == 1) {\n this.BEAM.color = new Color(UI.beamColor);\n this.BEAM_TRANSPARENT.color = new Color(UI.beamColor);\n if(this.TEXTURE_TIMBER) {\n this.BEAM.color = new Color(0xFFFFFF);\n this.BEAM.map = this.TEXTURE_TIMBER\n this.BEAM.map.needsUpdate = true\n this.BEAM.needsUpdate = true\n\n this.BEAM_TRANSPARENT.color = new Color(0xFFFFFF);\n this.BEAM_TRANSPARENT.map = this.TEXTURE_TIMBER\n this.BEAM_TRANSPARENT.map.needsUpdate = true\n this.BEAM_TRANSPARENT.needsUpdate = true\n }\n } else {\n this.BEAM.color = new Color(UI.beamColor);\n this.BEAM.map = null\n this.BEAM.needsUpdate = true\n\n this.BEAM_TRANSPARENT.color = new Color(UI.beamColor);\n this.BEAM_TRANSPARENT.map = null\n this.BEAM_TRANSPARENT.needsUpdate = true\n }\n }\n private bracketColorChanged(pre: number, cur: string){\n this.BRACKET.color = new Color(parseInt(cur));\n }\n private fasciaBracketColorChanged(pre: number, cur: string){\n this.FASCIA_BRACKET.color = new Color(parseInt(cur));\n }\n private roofColorChanged(pre: number, cur: string){\n this.ROOF.color = new Color(parseInt(cur));\n this.RIDGE_CAPPING.color = new Color(parseInt(cur));\n }\n private roofBaseColorChanged(pre: number, cur: string){\n this.ROOF_BASE.color = new Color(parseInt(cur));\n this.RECEIVER_CHANEL.color = new Color(parseInt(cur));\n }\n private zFlashingColorChanged(pre: number, cur: string) {\n this.ZFLASHING.color = new Color(parseInt(cur));\n }\n private existingRoofTypeChanged(pre: number, cur: number) {\n if(UI.existingRoofType == 0){\n this.EXISTING_ROOF_TEXTURE.L1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.L1.wrapS = this.EXISTING_ROOF_TEXTURE.L1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.L2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.L2.wrapS = this.EXISTING_ROOF_TEXTURE.L2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L2.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.W1.wrapS = this.EXISTING_ROOF_TEXTURE.W1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/custom_orb_accent_21_windspray.bmp\" );\n this.EXISTING_ROOF_TEXTURE.W2.wrapS = this.EXISTING_ROOF_TEXTURE.W2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W2.anisotropy = 1;\n } else if (UI.existingRoofType == 1){\n this.EXISTING_ROOF_TEXTURE.L1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L1.wrapS = this.EXISTING_ROOF_TEXTURE.L1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.L2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.L2.wrapS = this.EXISTING_ROOF_TEXTURE.L2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.L2.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W1 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W1.wrapS = this.EXISTING_ROOF_TEXTURE.W1.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W1.anisotropy = 1;\n\n this.EXISTING_ROOF_TEXTURE.W2 = this.textureLoader.load( env.modelBaseUrl + \"/assets/images/textures/131_Concrete roof tile texture-seamless.jpg\" );\n this.EXISTING_ROOF_TEXTURE.W2.wrapS = this.EXISTING_ROOF_TEXTURE.W2.wrapT = RepeatWrapping;\n this.EXISTING_ROOF_TEXTURE.W2.anisotropy = 1;\n } \n }\n}\n","import {\n BufferGeometry,\n Vector3,\n Geometry,\n Material,\n Mesh,\n Face3,\n} from \"three\";\n\nexport interface DropdownInputItemModel {\n id: number;\n value: any;\n selected?: boolean;\n disabled?: boolean;\n bottomValue?: any;\n}\nexport interface SelectInputItemModel {\n id: number;\n value: any;\n disabled: boolean;\n selected?: boolean;\n bottomValue?: any;\n}\n\nexport interface IBay {\n index: number;\n value: number;\n isCut?: boolean;\n}\nexport interface ICost {\n index: number;\n description: string;\n value: number;\n}\n\nexport class GeometryInfo {\n private _geometry: BufferGeometry;\n public get geometry(): BufferGeometry {\n return this._geometry;\n }\n public set geometry(value) {\n this._geometry = value;\n }\n\n private _width = 0;\n public get width(): number {\n return this._width;\n }\n public set width(value) {\n this._width = value;\n }\n private _height = 0;\n public get height(): number {\n return this._height;\n }\n public set height(value) {\n this._height = value;\n }\n private _length = 0;\n public get length(): number {\n return this._length;\n }\n public set length(value) {\n this._length = value;\n }\n\n private _name = \"\";\n public get name(): string {\n return this._name;\n }\n public set name(value) {\n this._name = value;\n }\n\n constructor(\n geometry?: BufferGeometry,\n width?: number,\n height?: number,\n length?: number,\n name: string = \"\"\n ) {\n this._geometry = geometry;\n this._width = width;\n this._height = height;\n this._length = length;\n this._name = name;\n }\n}\n\nexport interface Printing2DData {\n lines: Printing2DLine[];\n texts: Print2DText[];\n sceenshoot: string;\n meshes: Printing3DGeometry[];\n info: any;\n}\nexport interface Printing2DGeometry {\n lines: Printing2DLine[];\n texts: Print2DText[];\n}\nexport interface Printing3DGeometry {\n vertices: Vector3[];\n faces: Face[];\n}\nexport interface Face {\n a: number;\n b: number;\n c: number;\n}\n\nexport interface Print3DFace {\n a: number;\n b: number;\n c: number;\n}\n\nexport interface ColorShape {\n r: number;\n g: number;\n b: number;\n}\n\nexport interface Printing2DLine {\n vertices: Vector3[];\n objectType: string;\n color?: ColorShape;\n views: Print2DView[];\n}\n\nexport interface Print2DText {\n value: string;\n position: Vector3;\n rotation: Vector3;\n views: Print2DView[];\n}\n\nexport interface Print2DView {\n viewType: ViewType;\n lineType: LineType;\n}\n\nexport enum Printing2DGeometryType {\n Line,\n LineCap,\n}\nexport enum ViewType {\n FRONT,\n LEFT,\n RIGHT,\n PLAN,\n}\nexport enum LineType {\n CONTINOUS,\n DASHED,\n}\n\nexport interface CSGWrap {\n fromGeometry: (geo: Geometry | BufferGeometry) => CSGWrap;\n fromMesh: (mesh: Mesh) => CSGWrap;\n toMesh: (csg: CSGWrap, mat: Material) => Mesh;\n subtract: (csg: CSGWrap) => CSGWrap;\n}\n","// import { DropdownInputItemModel } from \"./models\"\nexport class Objects {\n public baseColourList = [\n { id: 0x6d6c6e, value: \"Basalt\", disabled: false },\n {\n id: 0x969799,\n value: \"Bluegum\",\n disabled: false,\n },\n { id: 0xe9dcb8, value: \"Classic Cream\", disabled: false },\n { id: 0x304c3c, value: \"Cottage Green\", disabled: false },\n { id: 0xa59f8a, value: \"Cove\", disabled: true },\n { id: 0x364152, value: \"Deep Ocean\", disabled: false },\n {\n id: 0xf9fbf1,\n value: \"Dover White\",\n disabled: false,\n },\n { id: 0xb1ada3, value: \"Dune\", disabled: false },\n { id: 0xc5c2aa, value: \"Evening Haze\", disabled: false },\n { id: 0x857e73, value: \"Gully\", disabled: false },\n { id: 0x3e434c, value: \"Ironstone\", disabled: false },\n { id: 0x6c6153, value: \"Jasper\", disabled: false },\n { id: 0x737562, value: \"Mangrove\", disabled: true },\n { id: 0x5e1d0e, value: \"Manor Red\", disabled: false },\n { id: 0x323233, value: \"Monument\", disabled: false },\n { id: 0x000000, value: \"Night Sky\", disabled: false },\n { id: 0x7c846a, value: \"Pale Eucalypt\", disabled: false },\n { id: 0xcabfa4, value: \"Paperbark\", disabled: false },\n { id: 0xbdbfba, value: \"Shale Grey\", disabled: false },\n {\n id: 0xd2d1cb,\n value: \"Southerly\",\n disabled: false,\n },\n { id: 0xe4e2d5, value: \"Surfmist\", disabled: false },\n { id: 0x67432e, value: \"Terrain\", disabled: true },\n { id: 0x7f7c78, value: \"Wallaby\", disabled: false },\n { id: 0xd8e5e6, value: \"White\", disabled: false },\n { id: 0x888b8a, value: \"Windspray\", disabled: false },\n { id: 0x4b4c46, value: \"Woodland Grey\", disabled: false },\n { id: 0xfcffff, value: \"Zinc\", disabled: false },\n ];\n public beamColourList = [\n { id: 0x000000, value: \"Black\", beamEndCapColorCode: \"B\" },\n { id: 0xe9dcb8, value: \"Cream\", beamEndCapColorCode: \"C\" },\n { id: 0xe4e2d5, value: \"Surfmist\", beamEndCapColorCode: \"SM\" },\n { id: 0xcabfa4, value: \"Paperbark\", beamEndCapColorCode: \"M\" },\n { id: 0x323233, value: \"Monument\", beamEndCapColorCode: \"MM\" },\n ];\n public postColourList = [\n { id: 0x000000, value: \"Black\" },\n { id: 0xe9dcb8, value: \"Cream\" },\n { id: 0xe4e2d5, value: \"Surfmist\" },\n { id: 0xcabfa4, value: \"Paperbark\" },\n { id: 0x323233, value: \"Monument\" },\n ];\n public rakeCutTypeList = [\n { id: 0, value: \"None\" },\n { id: 1, value: \"Left\" },\n { id: 2, value: \"Right\" },\n { id: 3, value: \"Left & Right\" },\n ];\n public rakeCutType = [\n { id: 0, value: \"None\" },\n { id: 1, value: \"Angle\" },\n { id: 2, value: \"Step\" },\n ];\n public downpipeColourList = [{ id: 0xd8e5e6, value: \"White\" }];\n public flyoverColourList = [\n { id: 0xd8e5e6, value: \"Non Standard Colour\" },\n { id: 0x000000, value: \"Black\" },\n { id: 0xe9dcb8, value: \"Cream\" },\n { id: 0xe4e2d5, value: \"Surfmist\" },\n { id: 0xcabfa4, value: \"Paperbark\" },\n { id: 0x323233, value: \"Monument\" },\n ];\n public fasciaColourList = [\n { id: 0x000000, value: \"Black\" },\n { id: 0xe9dcb8, value: \"Classic Cream\" },\n { id: 0xe4e2d5, value: \"Surfmist\" },\n { id: 0x323233, value: \"Monument\" },\n ];\n public existingRoofPitchList = [\n { id: 10, value: \"10\" },\n { id: 15, value: \"15\" },\n { id: 20, value: \"20\" },\n { id: 22.5, value: \"22.5\" },\n { id: 25, value: \"25\" },\n { id: 30, value: \"30\" },\n ];\n public roofPitchList = [\n { id: 2, value: \"2\" },\n { id: 3, value: \"3\" },\n { id: 5, value: \"5\" },\n { id: 7.5, value: \"7.5\" },\n { id: 10, value: \"10\" },\n ];\n public gableRoofPitchList = [\n { id: 7.5, value: \"7.5\" },\n { id: 10, value: \"10\" },\n { id: 12, value: \"12\" },\n { id: 15, value: \"15\" },\n { id: 20, value: \"20\" },\n { id: 22.5, value: \"22.5\" },\n { id: 25, value: \"25\" },\n ];\n public wallList = [{ id: 0, value: \"Bricks\" }];\n public structureTypeList = [\n { id: 0, value: \"Existing Building\" },\n { id: 1, value: \"Fly Over\" },\n { id: 2, value: \"Back Fly Over\" },\n { id: 3, value: \"To Fascia\" },\n { id: 5, value: \"Fascia Upstand\" },\n { id: 6, value: \"Back Fascia Upstand\" },\n { id: 4, value: \"Free Standing\" },\n ];\n public structureTypeListGableLR = [\n { id: 1, value: \"Fly Over\" },\n { id: 5, value: \"Fascia Upstand\" },\n { id: 4, value: \"Free Standing\" },\n ];\n public structureTypeListGableFB = [\n { id: 0, value: \"Existing Building\" },\n { id: 1, value: \"Fly Over\" },\n { id: 5, value: \"Fascia Upstand\" },\n ];\n public existingTypeList = [\n { id: 0, value: \"None\" },\n { id: 1, value: \"Left\" },\n { id: 2, value: \"Right\" },\n { id: 3, value: \"Both\" },\n ];\n public windClassList = [\n { id: 0, value: \"N2(W33)\" },\n { id: 1, value: \"N3(W41)\" },\n { id: 2, value: \"N4(W50)\" },\n { id: 3, value: \"C1(W41)\" },\n { id: 4, value: \"C2(W50)\" },\n { id: 5, value: \"C3(W60)\" },\n ];\n public windClassListGable = [\n { id: 0, value: \"N2(W33)\" },\n { id: 1, value: \"N3(W41)\" },\n { id: 2, value: \"N4(W50)\" },\n ];\n public roofSheetingTypeList = [\n { id: 0, value: \"Coolaspan Trimspan\" },\n { id: 1, value: \"Monopanel\" },\n { id: 2, value: \"Corropanel\" },\n ];\n public flatBottomList = [\n { id: 0xe4e2d5, value: \"Surfmist/Off White flat bottom\" },\n { id: 0xe9dcb8, value: \"Classic Cream bottom\" },\n ];\n public downpipeTypeList = [{ id: 0, value: \"90mm PVC\" }];\n public thicknessList = [\n { id: 0, value: \"N/A\" },\n { id: 1, value: \"50mm\" },\n { id: 2, value: \"75mm\" },\n { id: 3, value: \"100mm\" },\n { id: 4, value: \"125mm\" },\n { id: 5, value: \"150mm\" },\n ];\n public gutterTypeList = [\n { id: 0, value: \"Gutter Square Line\" },\n { id: 1, value: \"Quad 150 Low Front Gutter Unslotted\" },\n { id: 2, value: \"Quad 150 Hi Front Gutter Slotted\" },\n ];\n public beamTypeList = [\n { id: 0, value: \"SUPERIOR BEAMS\" },\n { id: 1, value: \"TIMBER\" },\n ];\n public beamSizeList = [\n { id: 0, value: \"N/A\", beamType: 0 },\n { id: 1, value: \"SB110\", beamType: 0 },\n { id: 2, value: \"SB160\", beamType: 0 },\n { id: 3, value: \"SB210\", beamType: 0 },\n { id: 4, value: \"SB260\", beamType: 0 },\n { id: 0, value: \"N/A\", beamType: 1 },\n { id: 1, value: \"140x45 F7\", beamType: 1 },\n { id: 2, value: \"190x45 F7\", beamType: 1 },\n { id: 3, value: \"150x50 F14\", beamType: 1 },\n { id: 4, value: \"200x50 F14\", beamType: 1 },\n { id: 5, value: \"150x75 F14\", beamType: 1 },\n { id: 6, value: \"200x75 F14\", beamType: 1 },\n { id: 7, value: \"250x75 F14\", beamType: 1 },\n ];\n\n public gableConditionList = [\n { windClass: [0, 1], beamSize: [1], maxBay: 4000, maxSpan: 4000 },\n { windClass: [0, 1], beamSize: [2], maxBay: 6000, maxSpan: 7000 },\n { windClass: [0, 1], beamSize: [3, 4], maxBay: 8000, maxSpan: 8500 },\n { windClass: [2], beamSize: [2], maxBay: 4000, maxSpan: 4000 },\n { windClass: [2], beamSize: [3, 4], maxBay: 6000, maxSpan: 7000 },\n ];\n\n public gableBeamConditionList = [\n { windClass: [0, 1], lengthMax: 4000, widthMax: 4000, beamSizeIndex: 1 },\n { windClass: [0, 1], lengthMax: 6000, widthMax: 7000, beamSizeIndex: 2 },\n { windClass: [0, 1], lengthMax: 8000, widthMax: 8500, beamSizeIndex: 3 },\n { windClass: [2], lengthMax: 4000, widthMax: 4000, beamSizeIndex: 2 },\n { windClass: [2], lengthMax: 6000, widthMax: 7000, beamSizeIndex: 3 },\n ];\n\n public columnTypeList = [\n { id: 0, value: \"Superior Post 65mm x 65mm\" },\n { id: 1, value: \"Superior 90 x 90 Aluminium Post\" },\n { id: 2, value: \"Superior Post RHS 90mm x 90mm x 3.5mm\" },\n { id: 3, value: \"Timber\" },\n ];\n public columnTypeList2 = [\n {\n id: -1,\n value: \"N/A\",\n columnHeight: -1,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: -1,\n },\n {\n id: 0,\n value: \"Superior Post 65mm x 65mm\",\n columnHeight: 3000,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: 0,\n },\n {\n id: 2,\n value: \"Superior Post RHS 90mm x 90mm x 3.5mm\",\n columnHeight: 3600,\n baseFixingType: \"1\", // 'Post In Ground',\n idx: 2,\n },\n {\n id: 1,\n value: \"Superior 90 x 90 Aluminium Post\",\n columnHeight: 4000,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: 1,\n },\n {\n id: 2,\n value: \"Superior Post RHS 90mm x 90mm x 3.5mm\",\n columnHeight: 4000,\n baseFixingType: \"0\", // 'Dynabolt',\n idx: 3,\n },\n {\n id: 3,\n value: \"Timber\",\n columnHeight: 4000,\n baseFixingType: \"0, 1\", // 'Dynabolt, Post In Ground',\n idx: 4,\n },\n ];\n public baseFixingTypeList = [\n { id: 0, value: \"Dynabolt\" },\n { id: 1, value: \"Post In Ground\" },\n ];\n public roles = {\n user: \"User\",\n customer: \"Customer\",\n admin: \"Admin\",\n };\n public cutOutList = [\n { id: 0, value: \"No\" },\n { id: 1, value: \"Yes\" },\n ];\n public roofTypeList = [\n { id: 0, value: \"Steel Roof\" },\n { id: 1, value: \"Tiled Roof\" },\n ];\n public fasciaBracketList = [\n { id: 0, value: \"None\" },\n { id: 150, value: \"150\" },\n { id: 300, value: \"300\" },\n { id: 450, value: \"450\" },\n { id: 600, value: \"600\" },\n ];\n}\n","import { Vector3 } from \"three\";\n\ntype Edge = [Vector3, Vector3]\ntype Polygon = Array;\n\nexport const PolygonUtils = {\n getVectorLength(vector): number {\n return Math.sqrt(vector.x * vector.x + vector.y * vector.y + vector.z * vector.z);\n },\n dotProduct(v0, v1): number {\n return v0.x * v1.x + v0.y * v1.y + v0.z * v1.z;\n },\n \n /**\n * Get projected point P' of P on a segment\n * @return projected point p.\n */\n getProjectedPointOnSegment(segment: Edge, point: any): any {\n // get dot product of e1, e2\n const e1 = this.toVector(...segment);\n const e2 = this.toVector(segment[0], point);\n const valDp = this.dotProduct(e1, e2);\n // get length of vectors\n const lenLineE1 = this.getVectorLength(e1);\n const lenLineE2 = this.getVectorLength(e2);\n const cos = valDp / (lenLineE1 * lenLineE2);\n // length of v1P'\n const projLenOfLine = cos * lenLineE2;\n return new Vector3(segment[0].x + (projLenOfLine * e1.x) / lenLineE1, segment[0].y + (projLenOfLine * e1.y) / lenLineE1, segment[0].z + (projLenOfLine * e1.z) / lenLineE1)\n },\n isProjectionOnSegment(point, segment: Edge): boolean {\n const e1 = this.toVector(...segment);\n const dp = this.dotProduct(this.toVector(point, segment[1]), e1);\n const max = e1.x * e1.x + e1.y * e1.y + e1.z * e1.z;\n return dp >= 0 && dp <= max;\n },\n \n /**\n * Convert a polygon a list of edges\n * Except last point to start point\n * @param polygon\n */\n toEdgeList(polygon: Polygon): Array {\n const result: Array = [];\n for (let i = 0; i < polygon.length - 1; i++) {\n const pointA = polygon[i];\n const pointB = polygon[i === polygon.length - 1 ? 0 : i + 1];\n result.push([pointA, pointB]);\n }\n return result;\n },\n toVector(A: Vector3, B: Vector3): Vector3 {\n return new Vector3( B.x - A.x, B.y - A.y, B.z - A.z)\n },\n \n /**\n * Return the cumulated rotation around a point of another point\n * which is translating on a polygon edge.\n * The returned value is floored to deal with javscript float number imprecision.\n * So if the absolute value winding number is lower than 1, it\n * means that the rotation is null.\n * @param polygon\n * @param point\n */\n getWindingNumber(polygon: Polygon, point: any): number {\n const angles = [];\n let result: number = 0;\n for (let index = 0; index < polygon.length; index++) {\n const vertex = polygon[index];\n const nextVertex =\n index === polygon.length - 1 ? polygon[0] : polygon[index + 1];\n // Get the angle between the previous vertex, the point and the current vertex\n const angle = this.getAngle(vertex, point, nextVertex);\n angles.push(angle);\n result += angle;\n }\n return Math.floor(result);\n },\n \n /**\n * Calculates the signed (counter/clockwize) angle ABC (in radian).\n * @param A\n * @param B\n * @param C\n */\n getAngle(A: any, B: any, C: any): number {\n const v0 = { x: A.x - B.x, y: A.y - B.y, z: A.z - B.z };\n const v1 = { x: C.x - B.x, y: C.y - B.y, z: C.z - B.z };\n const angle = new Vector3(v0.x, v0.y, v0.z).angleTo(new Vector3(v1.x, v1.y, v1.z));\n // Special case, the angle cross over the complete circle\n return this.round(\n Math.abs(angle) > Math.PI\n ? angle < 0\n ? angle + 2 * Math.PI\n : angle - 2 * Math.PI\n : angle\n );\n },\n \n /**\n * Return true if a point lies on a segment\n * @param segment\n * @param point\n */\n isPointOnSegment(segment: Edge, point: any): boolean {\n const distAP = segment[0].distanceTo(point);\n const distBP = segment[1].distanceTo(point);\n const distAB = segment[1].distanceTo(segment[0]);\n return distAB.toFixed(5) === (distAP + distBP).toFixed(5);\n },\n getDistance(A: any, B: any): number {\n return Math.sqrt((A.x - B.x) * (A.x - B.x) + (A.y - B.y) * (A.y - B.y));\n },\n \n /**\n * Workaround javascript imprecision\n */\n round(number: number) {\n return Math.round((number + Number.EPSILON) * 100) / 100;\n },\n\n getClosestPointInsidePolygon(poly: Polygon, pos: any): any {\n // Except case: Inside the polygon. Never happen.\n // // Case I\n // const wn = this.getWindingNumber(poly, pos);\n // if (Math.abs(wn) > 1) {\n // return pos;\n // }\n\n // Case II\n if (this.toEdgeList(poly).some(edge => this.isPointOnSegment(edge, pos))) {\n return pos;\n }\n\n // Case III - A\n // Get edges which faces the points.\n \n const closestPointOnEdge = this.toEdgeList(poly)\n .filter(edge => this.isProjectionOnSegment(pos, edge))\n .reduce(\n ([_pp, minDistance], edge) => {\n // Get the projected point on this edge\n const pp = this.getProjectedPointOnSegment(edge, pos);\n // Get the distance from the edge\n const distance = this.getDistance(pos, pp);\n // Return this projection if the distance is smaller\n return distance < minDistance ? [pp, distance] : [_pp, minDistance];\n },\n [undefined, Infinity] as [any | undefined, number]\n )[0];\n \n // Case III - B\n const closestVertex = poly.reduce(\n ([closestVertex, minDistance], vertex) => {\n // Get distance from vertex to target\n const distance = this.getDistance(vertex, pos);\n // Return this vertex if the distance is smaller\n return distance < minDistance\n ? [vertex, distance]\n : [closestVertex, minDistance];\n },\n [undefined, Infinity] as [any | undefined, number]\n )[0];\n if (!closestPointOnEdge) {\n return closestVertex;\n }\n // At this point we can get both an edge and a vertex.\n // Get the closest between the edge and the vertex\n return this.getDistance(pos, closestPointOnEdge) < this.getDistance(pos, closestVertex)\n ? closestPointOnEdge\n : closestVertex;\n }\n}","import { Util } from \"./utils\";\n// import { AppComponent } from '../app.component';\nimport { HomeComponent as AppComponent } from \"../containers/home/home.component\";\nimport { Scene } from \"three\";\nimport { Printing2DLine, Printing2DData } from \"./models\";\nimport { environment } from \"src/environments/environment\";\n\nexport class Printing2DManager {\n private scene: Scene;\n private APP: AppComponent;\n private utils: Util;\n\n public constructor(app: AppComponent) {\n this.utils = new Util();\n this.APP = app;\n this.scene = this.APP.scene;\n }\n\n public print(jobInfo: any): void {\n let dimemsionGeo = this.APP.dimensionManager.getOutlines();\n let patiosOutlines = this.APP.patiosManager.getOutlines();\n let lines: Printing2DLine[] = [\n ...patiosOutlines.lines,\n ...this.APP.existingRoofManager.getOutLines().lines,\n ...this.APP.existingWallManager.getOutLines().lines,\n ...this.APP.fasciaManager.getOutLines().lines,\n ...this.APP.eaveManager.getOutLines().lines,\n ...dimemsionGeo.lines,\n ];\n\n let texts = [...dimemsionGeo.texts, ...patiosOutlines.texts];\n\n let model: Printing2DData = {\n lines: lines,\n texts: texts,\n sceenshoot: this.APP.canvas.toDataURL(),\n meshes: null,\n info: jobInfo,\n };\n\n this.APP.printService.printPDF(model).subscribe(\n (rs) => {\n const updateInfo = {\n id: jobInfo.id,\n files: {\n engineeringFile: rs.engineeringFile,\n quotationFile: rs.quotationFile,\n thumbnailFile: rs.thumbnailFile,\n },\n };\n this.APP.onUpdateJobFiles(updateInfo);\n },\n (error) => {\n this.APP.message.error(\"PDF file upload failed\");\n this.APP.isUploading = false;\n this.APP.currentStep = 0;\n }\n );\n }\n\n public printTest() {\n let dimemsionGeo = this.APP.dimensionManager.getOutlines();\n let patiosOutlines = this.APP.patiosManager.getOutlines();\n let lines: Printing2DLine[] = [\n ...patiosOutlines.lines,\n ...this.APP.existingRoofManager.getOutLines().lines,\n ...this.APP.existingWallManager.getOutLines().lines,\n ...this.APP.fasciaManager.getOutLines().lines,\n ...this.APP.eaveManager.getOutLines().lines,\n ...dimemsionGeo.lines,\n ];\n\n let texts = [...dimemsionGeo.texts, ...patiosOutlines.texts];\n\n // let meshes = this.getAllMesh(this.scene);\n // console.log('MESHES NE', meshes);\n\n let model: Printing2DData = {\n lines: lines,\n texts: texts,\n sceenshoot: this.APP.canvas.toDataURL(),\n meshes: null,\n info: {\n userId: \"5e437a5b400f7958b4cfdbf7\",\n id: \"6466fd04426553c1543c10d8\",\n uploadFolder: \"superiorsoftware_api/upload/dataFiles\",\n pathLogo: \"superiorsoftware_api/media/\",\n pathPDF: \"\",\n quoteNo: \"ABCDE20251\",\n quoteBy: \"User SPC\",\n windClass: \"N2(W33)\",\n clientName: \"TEST\",\n siteAddress: \"\",\n date: \"2023-05-19T04:36:41.152Z\",\n builder: \"SPC Dev\",\n caseType: \"A\",\n structureType: \"To Existing Building\",\n roofPitch: 2,\n roofSheetingType: \"Coolaspan Trimspan\",\n roofOverallLength: 3810,\n roofOverallWidth: 4200,\n maxSpan: 5100,\n span: 4000,\n multiSpan: 0,\n beamType: \"Superior Beam 110mm x 65mm (Surfmist)\",\n columnType: \"Superior Post 65mm x 65mm\",\n largestBay: 3810,\n maxUpliftOfBeam: 4.55,\n upliftLoadOnBeam: 1.28,\n maxPostUplift: 1.91,\n postUplift: 2.437,\n baseFixingType: \"Dynabolt\",\n footingSize: \"Min 100mm slab\",\n maxFootingHoldDown: \"16\",\n thickness: \"50mm\",\n ABNNo: \"\",\n licenseNumber: \"\",\n company: \"SPC Dev\",\n userAddress: \"43 Commerce Circuit\",\n userEmail: \"tester@gmail.com\",\n userPhone: \"0738073955\",\n bankName: \"\",\n accountNumber: \"\",\n BSBNumber: \"\",\n suburb: \"\",\n postcode: \"\",\n state: \"\",\n phone: \"\",\n email: \"\",\n baySize: 3810,\n noOfBay: 1,\n buildingHeight: 2200,\n frontOverhang: 200,\n backOverhang: 0,\n leftOverhang: 0,\n rightOverhang: 0,\n flatBottom: \"Surfmist/Off White flat bottom\",\n bargeType: \"Coolaspan Trimspan\",\n gutterType: \"Gutter Square Line\",\n zFlashingType: \"Coolaspan Trimspan\",\n downpipeType: \"90mm PVC\",\n beamSize: \"SB110\",\n colourRoof: \"Surfmist\",\n colourBarge: \"Surfmist\",\n colourGutter: \"Surfmist\",\n colourZFlashing: \"Surfmist\",\n colourPost: \"Surfmist\",\n colourBeam: \"Surfmist\",\n colourDownpipe: \"White\",\n note: \"\\n\",\n supplyType: \"Supply and Install\",\n totalPrice: 2417.88,\n deposit: 0,\n stage1: 0,\n stage2: 0,\n finalPayment: 2417.88,\n fullAddress: \"\",\n depositText: \"Deposit\",\n stage1Text: \"Stage 1\",\n stage2Text: \"Stage 2\",\n listBay: [\n {\n index: 1,\n value: 3810,\n isCut: false,\n },\n ],\n },\n };\n\n // console.log('2D PRINTING DATA', model);\n\n //return;\n\n this.APP.printService.printPDF(model).subscribe(\n (rs) => {\n // let a = document.createElement(\"a\");\n // a.href = rs.file_url;\n // a.target = '_blank';\n // document.body.appendChild(a);\n // a.click();\n // a.remove();\n },\n (error) => {\n // this.message.error(error);\n this.APP.message.error(\"PDF file upload failed\");\n this.APP.isUploading = false;\n this.APP.currentStep = 0;\n }\n );\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Object3D, Raycaster, Vector2 } from \"three\";\nimport { DragControls } from \"../libs/DragControls\";\nimport { HomeComponent } from \"src/app/containers/home/home.component\";\nimport { MOUSE_EVENT, OBJECT_TYPE } from \"../app.constants\";\nimport { TransformControls } from \"three/examples/jsm/controls/TransformControls\";\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from \"../app.config\";\nimport { UI } from \"./ui\";\n\n@Injectable({\n providedIn: 'root'\n})\nexport default class SelectionManager {\n static ins: SelectionManager\n\n mouse: Vector2;\n\n onMouseClickPtr = this.onMouseClick.bind(this)\n onMouseDownPtr = this.onMouseDown.bind(this)\n onMouseMovePtr = this.onMouseMove.bind(this)\n onMouseUpPtr = this.onMouseUp.bind(this)\n\n onDragStartPtr = this.onDragStart.bind(this)\n onDragEndPtr = this.onDragEnd.bind(this)\n onDragPtr = this.onDrag.bind(this)\n\n private raycaster: Raycaster;\n selectEnabled = true;\n debounceMouseMoveHld = undefined;\n\n dragControl: DragControls\n transformControl: TransformControls\n\n dragObjects: Object3D[] = []\n\n clickEventHandlers = []\n mouseHoverEventHandlers = []\n mouseMoveEventHandlers = []\n mouseDownEventHandlers = []\n mouseUpEventHandlers = []\n\n dragStartEventHandlers = []\n dragEndEventHandlers = []\n dragEventHandlers = []\n\n init() {\n SelectionManager.ins = this\n return new Promise(resolve => {\n this.dragControl = new DragControls(this.dragObjects, HomeComponent.ins.camera, HomeComponent.ins.renderer.domElement);\n this.transformControl = new TransformControls(HomeComponent.ins.camera, HomeComponent.ins.renderer.domElement);\n this.transformControl.addEventListener('change', () => { HomeComponent.ins.renderStatic() });\n this.transformControl.addEventListener('dragging-changed', function (event) {\n HomeComponent.ins.control.enabled = !event.value;\n });\n HomeComponent.ins.scene.add(this.transformControl)\n this.raycaster = this.dragControl.raycaster\n this.dragControl.addEventListener('dragstart', (event) => {\n HomeComponent.ins.control.enabled = false;\n this.onDragStart(event)\n });\n this.dragControl.addEventListener('drag', (event) => {\n this.onDrag(event)\n })\n this.dragControl.addEventListener('dragend', (event) => {\n HomeComponent.ins.control.enabled = true;\n this.onDragEnd(event)\n });\n console.log('drag control', this.dragControl.raycaster)\n resolve()\n })\n }\n\n enable() {\n this.mouse = new Vector2(0, 0);\n //this.raycaster = new Raycaster();\n\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.DOWN, this.onMouseDownPtr, false);\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.MOVE, this.onMouseMovePtr, false);\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.UP, this.onMouseUpPtr, false);\n HomeComponent.ins.canvas.addEventListener(MOUSE_EVENT.CLICK, this.onMouseClickPtr, false);\n\n\n }\n disable() {\n this.dragControl.deactivate()\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.DOWN, this.onMouseDownPtr, false);\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.MOVE, this.onMouseMovePtr, false);\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.UP, this.onMouseUpPtr, false);\n HomeComponent.ins.canvas.removeEventListener(MOUSE_EVENT.CLICK, this.onMouseClickPtr, false);\n }\n enableTransformObject(intersects) {\n const obj = intersects.reduce((prev, cur) => {\n if (cur.distance < prev.distance\n && cur.object.name !== 'ground'\n && (!cur.object.userData || cur.object.userData.type !== 'PANEL_BACK')\n && (!cur.object.userData || cur.object.userData.type !== 'PANEL_FRONT')\n && (!cur.object.userData.wallPlane)\n ) {\n prev = cur\n }\n return prev\n }, { distance: 999999, object: null })\n\n if (!obj.object) {\n return;\n }\n\n this.transformControl.attach(obj.object)\n }\n executeRayCast() {\n this.raycaster.setFromCamera(this.mouse, HomeComponent.ins.camera);\n const objects = []\n HomeComponent.ins.scene.traverse((o) => {\n if(o.userData?.type === OBJECT_TYPE.HIGHLIGHT_BOX \n || o.userData?.type === GEOMETRY_TYPE.TEXT_COVER\n || o.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2\n || o.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1\n || o.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2\n || o.userData?.type === OBJECT_TYPE.CLICK_CONTROL_CUTOUT\n || o.userData?.type === OBJECT_TYPE.CUT_BEAM\n ){\n //if(o.type === 'Mesh'){\n objects.push(o)\n }\n })\n return this.raycaster.intersectObjects(objects, true);\n }\n executeRayCastScene(){\n this.raycaster.setFromCamera(this.mouse, HomeComponent.ins.camera);\n return this.raycaster.intersectObjects(HomeComponent.ins.scene.children, true);\n }\n onMouseDown(event) {\n //this.mouseDownEventHandlers.forEach(a => { a(event) })\n }\n onMouseMove(event) {\n event.preventDefault();\n const offsetX = HomeComponent.ins.isVisibleProperty ? 400 : 0;\n this.mouse.x =\n ((event.clientX - offsetX) / HomeComponent.ins.canvas.width) * 2 - 1;\n this.mouse.y =\n -((event.clientY - 90) / HomeComponent.ins.canvas.height) * 2 + 1;\n\n // if(this.debounceMouseMoveHld){\n // clearTimeout(this.debounceMouseMoveHld)\n // }\n\n const intersects = this.executeRayCast()\n // if(intersects.length > 0){\n // this.mouseHoverEventHandlers.forEach(a => { a(intersects) })\n // }\n\n this.mouseHoverEventHandlers.forEach(a => { a(intersects) })\n\n // //temporary treat drag = ctrl + move\n // //if(event.ctrlKey){\n // this.mouseMoveEventHandlers.forEach(a => { a(event) })\n // //}\n }\n onMouseUp(event) {\n //this.mouseUpEventHandlers.forEach(a => { a(event) })\n }\n onMouseClick(event) {\n const intersects = this.executeRayCast()\n\n if (intersects.length === 0) {\n return;\n }\n // intersects.forEach(el => console.log(el.object.userData))\n\n this.selectObject(intersects, event)\n // this.enableTransformObject(intersects)\n\n this.clickEventHandlers.forEach(a => { a(intersects) })\n }\n selectObject(intersects, event){\n if (!this.selectEnabled) {\n return\n }\n const obj = intersects.reduce((prev, cur) => {\n if (cur.distance < prev.distance\n && cur.object.type != 'TransformControlsPlane'\n && cur.object.type != 'HIGHLIGHT_BOX'\n ) {\n prev = cur\n }\n return prev\n }, { distance: 999999, object: null })\n\n if (!obj.object) {\n return;\n }\n if(!UI.enableControl) {\n return\n }\n if(obj.object.userData.type && obj.object.userData.type === GEOMETRY_TYPE.TEXT_COVER){\n const labelType = obj.object.userData.labelType\n if(!labelType){\n return\n }\n\n switch(labelType){\n case DIMENSION_LABEL_TYPE.LENGTH_1:\n case DIMENSION_LABEL_TYPE.LENGTH_2:\n case DIMENSION_LABEL_TYPE.WIDTH_1:\n case DIMENSION_LABEL_TYPE.WIDTH_2:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL:\n case DIMENSION_LABEL_TYPE.FRONT_OVERHANG:\n case DIMENSION_LABEL_TYPE.BACK_OVERHANG:\n case DIMENSION_LABEL_TYPE.LEFT_OVERHANG:\n case DIMENSION_LABEL_TYPE.RIGHT_OVERHANG:\n case DIMENSION_LABEL_TYPE.SPAN:\n case DIMENSION_LABEL_TYPE.MULTI_SPAN:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL:\n case DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL:\n HomeComponent.ins.dialogDimension.show(true, labelType)\n break\n case DIMENSION_LABEL_TYPE.BAY:\n HomeComponent.ins.dialogDimension.show(true, labelType, { bayIndex: obj.object.userData.bayNum })\n break\n }\n }\n if(obj.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH1){\n if(obj.object?.userData?.left){\n if(UI.existingType == 3){\n HomeComponent.ins.sltExistingType.setSelected(2)\n } else {\n HomeComponent.ins.sltExistingType.setSelected(0)\n }\n } else if (obj.object?.userData?.right){\n if(UI.existingType == 3){\n HomeComponent.ins.sltExistingType.setSelected(1)\n } else {\n HomeComponent.ins.sltExistingType.setSelected(0)\n }\n }\n } else if(obj.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_LENGTH2){\n HomeComponent.ins.sldExistingLength2.setValue(0);\n } else if(obj.object?.userData?.type === OBJECT_TYPE.UI_CONTROL_EDIT_WALL_WIDTH2){\n HomeComponent.ins.sldExistingWidth2.setValue(0);\n }\n if(obj.object?.userData?.type === OBJECT_TYPE.CLICK_CONTROL_CUTOUT){\n HomeComponent.ins.sltCutOut.setSelected(1);\n } else if(obj.object?.userData?.type === OBJECT_TYPE.CUT_BEAM){\n const bayIndex = obj.object?.userData.bayIndex\n UI.listBay[bayIndex].isCut = !!!UI.listBay[bayIndex].isCut\n HomeComponent.ins.dialogEditBay.onOK()\n }\n }\n onDragStart(event) {\n this.dragStartEventHandlers.forEach(a => { a(event) })\n }\n onDragEnd(event) {\n this.dragEndEventHandlers.forEach(a => { a(event) })\n }\n onDrag(event) {\n this.dragEventHandlers.forEach(a => { a(event) })\n }\n\n\n addEventListener(event, handler, dragObject?) {\n if (event === MOUSE_EVENT.CLICK) {\n if(this.clickEventHandlers.indexOf(handler) < 0){\n this.clickEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.HOVER) {\n if(this.mouseHoverEventHandlers.indexOf(handler) < 0){\n this.mouseHoverEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.DOWN) {\n if(this.mouseDownEventHandlers.indexOf(handler) < 0){\n this.mouseDownEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.MOVE) {\n if(this.mouseMoveEventHandlers.indexOf(handler) < 0){\n this.mouseMoveEventHandlers.push(handler)\n }\n }\n if (event === MOUSE_EVENT.UP) {\n if(this.mouseUpEventHandlers.indexOf(handler) < 0){\n this.mouseUpEventHandlers.push(handler)\n }\n }\n if (event == MOUSE_EVENT.DRAG_START) {\n if(this.dragStartEventHandlers.indexOf(handler) < 0){\n this.dragStartEventHandlers.push(handler)\n }\n }\n if (event == MOUSE_EVENT.DRAG_END) {\n if(this.dragEndEventHandlers.indexOf(handler) < 0){\n this.dragEndEventHandlers.push(handler)\n }\n }\n if (event == MOUSE_EVENT.DRAG) {\n if(this.dragEventHandlers.indexOf(handler) < 0){\n this.dragEventHandlers.push(handler)\n }\n \n this.dragObjects.push(dragObject)\n }\n }\n removeEventListener(event, handler) {\n if (event === MOUSE_EVENT.CLICK) {\n const idx = this.clickEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.clickEventHandlers.splice(idx, 1)\n }\n\n }\n if (event === MOUSE_EVENT.HOVER) {\n const idx = this.mouseHoverEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseHoverEventHandlers.splice(idx, 1)\n }\n }\n if (event === MOUSE_EVENT.DOWN) {\n const idx = this.mouseDownEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseDownEventHandlers.splice(idx, 1)\n }\n }\n if (event === MOUSE_EVENT.MOVE) {\n const idx = this.mouseMoveEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseMoveEventHandlers.splice(idx, 1)\n }\n }\n if (event === MOUSE_EVENT.UP) {\n const idx = this.mouseUpEventHandlers.indexOf(handler)\n if (idx > -1) {\n this.mouseUpEventHandlers.splice(idx, 1)\n }\n }\n }\n}","import {\n CONFIG,\n OFFSET_GUTTER_TO_WALL,\n PATIOS_ROOF_TYPE,\n} from \"src/app/app.config\";\nimport { environment } from \"src/environments/environment\";\nimport { Scene } from \"three\";\nimport { GEOMETRY_CATEGORY, GEOMETRY_TYPE, INIT } from \"../app.config\";\nimport {\n BUILDING_SIDE,\n CONNECTION_TYPE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n FASCIA_BRACKET_FIT,\n RAKECUT_TYPE,\n} from \"../app.constants\";\nimport { HomeComponent } from \"../containers/home\";\nimport { PatiosBackFlyOverManager } from \"./back_flyover\";\nimport { ExistingBuildingManager } from \"./existing_building\";\nimport { FasciaManager } from \"./fascia/index\";\nimport { PatiosFlyOverManager } from \"./flyover\";\nimport { PatiosFreeStandingManager } from \"./free_standing\";\nimport { PatiosGableFreeStandingManager } from \"./gable_free_standing\";\nimport { PatiosGableLRFlyOverManager } from \"./gable_lr_flyover\";\nimport { GeometryManager } from \"./geometry.manager\";\nimport { UI } from \"./ui\";\nimport { GableFBExistingBuildingManager } from \"./gable_fb_existing_building\";\nimport { PatiosGableFBFlyOverManager } from \"./gable_fb_flyover\";\nimport { GableLRFasciaManager } from \"./gable_lr_fascia\";\nimport { GableFBFasciaManager } from \"./gable_fb_fascia\";\nimport _ from \"lodash\";\nimport { Util } from \"./utils\";\n\ndeclare var $;\n\nexport class UIManager {\n private scene: Scene;\n private APP: HomeComponent;\n private debouncingHandle;\n private debouncingTimeout = 500; //ms\n private ignoreEnableCutoutEvent = false;\n private utils: Util;\n public previousShouldSnapFasciaRoofToWall: Boolean = false;\n public shouldSnapFasciaRoofToWall: Boolean = false;\n\n // private totalBaySize: number;\n constructor(app: HomeComponent) {\n this.APP = app;\n this.scene = app.scene;\n this.utils = new Util();\n\n // Should register this event before handle any action\n this.APP.sldBackOverhang.addAction(this.onBackOverhangChanged.bind(this));\n\n this.APP.sltFasciaUpstandBrackets.addAction(\n this.onFasciaUpstandBracketChanged.bind(this)\n );\n\n this.APP.sldFlyOverBracketHeight.addAction(this.onSetColumnType.bind(this));\n this.APP.sldSpan.addAction(this.updateOverallValue.bind(this));\n this.APP.sldMultiSpan.addAction(this.updateOverallValue.bind(this));\n this.APP.sldLeftOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.sldRightOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.sldBackOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.sldFrontOverhang.addAction(this.updateOverallValue.bind(this));\n this.APP.dialogEditBay.addAction(this.updateOverallValue.bind(this));\n this.APP.dialogEditBay.addAction(this.onDialogEditBayChanged.bind(this));\n this.APP.sldSpan.addAction(this.onSpanChanged.bind(this));\n this.APP.sldBaySize.addAction(this.onBaySizeChanged.bind(this));\n\n this.APP.sltStructureType.addAction(this.onStructureTypeChanged.bind(this));\n this.APP.sldExistingLength2.addAction(this.onLength2Changed.bind(this));\n this.APP.sldExistingWidth1.addAction(this.onWidth1Changed.bind(this));\n this.APP.sldExistingWidth2.addAction(this.onWidth2Changed.bind(this));\n this.APP.sldBuildingHeight.addAction(\n this.onBuildingHeightChanged.bind(this)\n );\n this.APP.sldExistingWallHeight.addAction(\n this.onExistingWallHeightChanged.bind(this),\n 1\n );\n\n this.APP.sltBeamType.addAction(this.onBeamTypeChanged.bind(this));\n this.APP.sltColumnType.addAction(this.onColumnTypeChanged.bind(this));\n this.APP.sltBaseFixingType.addAction(\n this.onBaseFixingTypeChanged.bind(this)\n );\n\n this.APP.sltCutOut.addAction(this.onCutoutChanged.bind(this));\n this.APP.sltLeftCutType.addAction(this.onRakeCutLeftChanged.bind(this));\n this.APP.sltRightCutType.addAction(this.onRakeCutRightChanged.bind(this));\n this.APP.sldSpan.addAction(this.onSetColumnType.bind(this));\n this.APP.sldMultiSpan.addAction(this.onSetColumnType.bind(this));\n [\n this.APP.sldEaveWidth,\n this.APP.sldExistingWallHeight,\n this.APP.sldFasciaDepth,\n this.APP.sldBaySize,\n this.APP.sldExistingLength,\n this.APP.sldExistingLength2,\n this.APP.sldExistingWidth1,\n this.APP.sldExistingWidth2,\n this.APP.sltExistingType,\n this.APP.sltStructureType,\n this.APP.sltWindClass,\n this.APP.sltWallType,\n this.APP.sltExistingRoofType,\n this.APP.sldMultiSpan,\n this.APP.sldBuildingHeight,\n this.APP.sldFrontOverhang,\n this.APP.sldBackOverhang,\n this.APP.sldLeftOverhang,\n this.APP.sldRightOverhang,\n this.APP.sltRoofPitch,\n this.APP.sldFlyOverBracketHeight,\n this.APP.sldNoOfBay,\n this.APP.dialogEditBay,\n this.APP.sltExistingRoofPitch,\n this.APP.sldRoofOverallLength,\n this.APP.sldRoofOverallWidth,\n this.APP.sldMinHeight,\n this.APP.sltLeftCutType,\n this.APP.sltRightCutType,\n this.APP.sldLeftCutVertical,\n this.APP.sldLeftCutHorizontal,\n this.APP.sldRightCutVertical,\n this.APP.sldRightCutHorizontal,\n this.APP.sltFlatBottom,\n this.APP.sltZFlashingType,\n // -----------------------\n this.APP.sltRoofSheetingType,\n this.APP.sltBaseFixingType,\n this.APP.sltRoofThickness,\n this.APP.sltBargeType,\n this.APP.sltDripBarge,\n this.APP.sltDownpipeType,\n this.APP.sltGutterType,\n this.APP.sltBeamType,\n this.APP.sltBeamSize,\n this.APP.sltHouseBeamSize,\n this.APP.sltReceiverType,\n this.APP.sltColumnType,\n this.APP.sltColourRoof,\n this.APP.sltColourBarge,\n this.APP.sltColourGutter,\n this.APP.sltColourZFlashing,\n this.APP.sltColourPost,\n this.APP.sltColourBeam,\n this.APP.sltColourBracket,\n this.APP.sltColourFasciaBracket,\n this.APP.sltColourDownpipe,\n this.APP.sltFasciaUpstandBrackets,\n this.APP.sltUpFasciaUpstandBracket,\n this.APP.chkRapidSetCement,\n this.APP.chkHasHouseBeam,\n ].forEach((c) => c.addAction(this.onUIChanged.bind(this), 4));\n\n this.APP.dialogEditBay.addAction(this.setBeamSize.bind(this));\n this.APP.sldBaySize.addAction(this.setBeamSize.bind(this));\n this.APP.sldSpan.addAction(this.setBeamSize.bind(this));\n this.APP.sltWindClass.addAction(this.setBeamSize.bind(this));\n this.APP.sltBeamType.addAction(this.setBeamSize.bind(this));\n this.APP.sltBeamSize.addAction(this.setMaxSpan.bind(this));\n\n this.APP.sltWindClass.addAction(this.setMaxSpan.bind(this));\n\n [\n this.APP.sltCutOut,\n this.APP.sltStructureType,\n this.APP.sldExistingWallHeight,\n this.APP.sldExistingWidth1,\n this.APP.sldEaveWidth,\n this.APP.sltRoofPitch,\n this.APP.sltExistingType,\n this.APP.sltRoofSheetingType,\n this.APP.sltRoofThickness,\n ].forEach((c) =>\n c.addAction(this.handleSnapRoofToExistingWhenCutOut.bind(this), 5)\n );\n }\n\n public load(): Promise {\n return new Promise((resolve, reject) => {\n this.updateOverallValue(null, null);\n this.APP.sltStructureType.setSelected(INIT.CONNECTION_TYPE); // <= setSelected doesn't work in case value = 0, need to call onStructureTypeChanged instead\n this.onStructureTypeChanged(null, INIT.CONNECTION_TYPE);\n this.validateCutout();\n\n //this.setDefaultValueForTest();\n resolve();\n });\n }\n\n setDefaultValueForTest() {\n if (environment.production) {\n return;\n }\n\n // this.APP.sltExistingType.setSelected(1);\n // this.APP.sldExistingWidth1.setValue(2000);\n // this.APP.sldExistingLength2.setValue(3000);\n // this.APP.sldExistingWidth2.setValue(2800);\n\n setTimeout(() => {\n //this.APP.sltCutOut.setSelected(1);\n this.APP.sltStructureType.setSelected(CONNECTION_TYPE.FASCIA);\n this.APP.sltColourRoof.setSelected(0x304c3c);\n }, 1000);\n }\n\n onUIChanged(previousValue: number, currentValue: number) {\n this.validateCutout();\n this.validateRakeCut();\n this.APP.onSetMaxValue();\n if (this.debouncingHandle) {\n clearTimeout(this.debouncingHandle);\n }\n this.debouncingHandle = setTimeout(() => {\n this.onUIChangedDefer(previousValue, currentValue);\n }, this.debouncingTimeout);\n\n this.APP.renderStatic();\n }\n\n onUIChangedDefer(previousValue: number, currentValue: number) {\n this.APP.onCalcPrice();\n this.APP.renderStatic();\n }\n onStructureTypeChanged(previousValue: number, currentValue: number) {\n this.scene.remove(\n ...this.scene.children.filter(\n (o) => o.userData.category === GEOMETRY_CATEGORY.PATIOS\n )\n );\n // this.APP.dimensionManager.unload();\n\n if (this.APP.patiosManager) {\n this.APP.patiosManager.destroy();\n this.APP.patiosManager = null;\n }\n\n this.APP.sldBackOverhang.isDisabled = false;\n this.APP.sldBuildingHeight.isDisabled = true;\n let _flag = false;\n const _curVal = +currentValue;\n if (_curVal === CONNECTION_TYPE.FREE_STANDING) {\n this.APP.baseFixingTypeList = this.APP.objects.baseFixingTypeList.filter(\n (f) => f.id === 1\n );\n this.APP.sltBaseFixingType.setSelected(1);\n } else {\n this.APP.baseFixingTypeList = [...this.APP.objects.baseFixingTypeList];\n }\n switch (_curVal) {\n case CONNECTION_TYPE.EXISTING:\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new GableFBExistingBuildingManager(this.APP);\n } else {\n this.APP.patiosManager = new ExistingBuildingManager(this.APP);\n }\n break;\n case CONNECTION_TYPE.FLY_OVER:\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n !this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new PatiosGableLRFlyOverManager(this.APP);\n } else if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new PatiosGableFBFlyOverManager(this.APP);\n } else {\n this.APP.patiosManager = new PatiosFlyOverManager(this.APP);\n }\n break;\n case CONNECTION_TYPE.BLACK_FLY_OVER:\n this.APP.patiosManager = new PatiosBackFlyOverManager(this.APP);\n break;\n case CONNECTION_TYPE.FASCIA:\n case CONNECTION_TYPE.BACK_FASCIA_UPSTAND:\n case CONNECTION_TYPE.FASCIA_UPSTAND:\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n !this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new GableLRFasciaManager(this.APP);\n } else if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n this.APP.patiosManager = new GableFBFasciaManager(this.APP);\n } else {\n this.APP.patiosManager = new FasciaManager(this.APP);\n }\n break;\n case CONNECTION_TYPE.FREE_STANDING:\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF) {\n this.APP.patiosManager = new PatiosFreeStandingManager(this.APP);\n break;\n } else {\n this.APP.patiosManager = new PatiosGableFreeStandingManager(this.APP);\n break;\n }\n }\n\n UI.oldBackOverhang = this.APP.sldBackOverhang.currentValue;\n\n this.APP.patiosManager\n .load()\n .then(() => {\n this.APP.dimensionManager.load();\n // this.APP.patiosManager.loadBracket(this.APP.flyoverBracketNumber); // số lượng bracket mặc định load lần đầu\n return this.APP.groundManager.load();\n })\n .then(() => {\n this.APP.sltFasciaUpstandBrackets.setDisable(true);\n\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n if (!this.APP.isFBRoof) {\n this.APP.sldBackOverhang.setValue(200);\n this.APP.sldBackOverhang.setMin(200);\n this.APP.sldFrontOverhang.setValue(200);\n this.APP.sldFrontOverhang.setMin(200);\n this.APP.sldBackOverhang.setDisable(false);\n this.APP.sldBackOverhang.setDisable(false);\n\n this.APP.sldLeftOverhang.setMin(0);\n this.APP.sldRightOverhang.setMin(0);\n } else {\n this.APP.sldLeftOverhang.setValue(200);\n this.APP.sldLeftOverhang.setMin(200);\n this.APP.sldRightOverhang.setValue(200);\n this.APP.sldRightOverhang.setMin(200);\n\n this.APP.sldBackOverhang.setMin(0);\n this.APP.sldFrontOverhang.setMin(0);\n }\n\n this.APP.sltLeftCutType.setSelected(0);\n this.APP.sltRightCutType.setSelected(0);\n this.APP.sltLeftCutType.setDisable(true);\n this.APP.sltRightCutType.setDisable(true);\n\n this.APP.sldMultiSpan.setValue(0);\n this.APP.sldMultiSpan.setDisable(true);\n } else {\n this.APP.sldBackOverhang.setMin(0);\n this.APP.sldFrontOverhang.setMin(0);\n\n this.APP.sltLeftCutType.setDisable(false);\n this.APP.sltRightCutType.setDisable(false);\n\n this.APP.sldMultiSpan.setDisable(false);\n }\n\n switch (_curVal) {\n case CONNECTION_TYPE.EXISTING:\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBuildingHeight.isDisabled = false;\n this.APP.sldBackOverhang.isDisabled = true;\n this.APP.sldExistingWallHeight.isDisabled = false;\n if (this.APP.sltExistingType.currentValue == 3) {\n _flag = true;\n }\n break;\n case CONNECTION_TYPE.FLY_OVER:\n this.APP.sldExistingWallHeight.isDisabled = false;\n if (this.APP.sldBackOverhang.currentValue == 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n }\n break;\n case CONNECTION_TYPE.BLACK_FLY_OVER:\n if (this.APP.sldBackOverhang.currentValue == 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n }\n this.APP.sldExistingWallHeight.isDisabled = false;\n break;\n case CONNECTION_TYPE.FASCIA:\n case CONNECTION_TYPE.BACK_FASCIA_UPSTAND:\n case CONNECTION_TYPE.FASCIA_UPSTAND:\n this.APP.sltFasciaUpstandBrackets.setSelected(\n _curVal == CONNECTION_TYPE.FASCIA_UPSTAND ||\n _curVal == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n ? CONFIG.fasciaUpstandBrackets.max\n : 0\n );\n this.APP.sltUpFasciaUpstandBracket.setValue(\n _curVal == CONNECTION_TYPE.BACK_FASCIA_UPSTAND\n );\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBackOverhang.isDisabled = true;\n //Bang - 2022.03.22\n if (this.APP.sltFasciaUpstandBrackets.currentValue > 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n this.APP.sldBackOverhang.isDisabled = false;\n } else {\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBackOverhang.isDisabled = true;\n }\n this.APP.sldBuildingHeight.setValue(\n this.APP.sldExistingWallHeight.currentValue\n );\n this.APP.sldExistingWallHeight.isDisabled = false;\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n UI.existingRoofType == BUILDING_SIDE.BOTH &&\n UI.patiosRoofType == PATIOS_ROOF_TYPE.FLAT_ROOF\n ) {\n if (!this.calcShouldSnapRoofToExistingWhenCutout()) {\n this.APP.sldExistingLength.setValue(\n UI.totalBayLength + UI.eaveWidth * 2\n );\n }\n _flag = true;\n }\n this.APP.sltFasciaUpstandBrackets.setDisable(\n _curVal == CONNECTION_TYPE.FASCIA_UPSTAND ? false : true\n );\n\n if (_curVal === CONNECTION_TYPE.FASCIA) {\n this.APP.sltUpFasciaUpstandBracket.setValue(false);\n }\n break;\n case CONNECTION_TYPE.FREE_STANDING:\n if (this.APP.sldBackOverhang.currentValue == 0) {\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n }\n this.APP.sldBuildingHeight.isDisabled = false;\n this.APP.sldExistingWallHeight.isDisabled = true;\n // this.sldExistingWidth1.setValue(0);\n break;\n }\n if (this.APP.sltExistingType.currentValue == 3) {\n this.onExistingTypeChanged(null, 3);\n }\n this.APP.sldLeftOverhang.isDisabled = _flag;\n this.APP.sldRightOverhang.isDisabled = _flag;\n this.APP.patiosManager.update(null, null);\n setTimeout(() => {\n this.setColumnType(\"\", _curVal, -1);\n }, 500);\n this.onExistingWallHeightChanged(\n 0,\n this.APP.sldExistingWallHeight.currentValue\n );\n this.APP.renderStatic();\n });\n }\n\n updateOverallValue(pre: number, cur: number) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n let _roofOverallWidth =\n this.APP.sldSpan.currentValue +\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue +\n this.APP.sldBackOverhang.currentValue;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n _roofOverallWidth =\n UI.span + UI.multiSpan + UI.overhangLeft + UI.overhangRight;\n }\n\n this.APP.sldRoofOverallWidth.setValue(_roofOverallWidth);\n\n let _roofOverallLength =\n totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n _roofOverallLength = totalBaySize + UI.overhangFront + UI.overhangBack;\n }\n this.APP.sldRoofOverallLength.setValue(_roofOverallLength);\n this.APP.getRoofPercent(_roofOverallLength);\n //this.onDialogEditBayChanged();\n //this.APP.renderStatic();\n }\n\n public setMaxSpan() {\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n if (UI.beamType == 0) {\n // const findCondition = this.APP.objects.gableConditionList.find((f) =>\n // // f.beamSize.includes(UI.beamSize) && //Bang - 2024.01.02\n // f.windClass.includes(UI.windClass)\n // );\n const findCondition = this.APP.objects.gableConditionList.filter((f) =>\n f.windClass.includes(UI.windClass)\n );\n if (findCondition.length > 0) {\n this.APP.maxSpan = findCondition[findCondition.length - 1].maxSpan;\n this.APP.maxSpanText = `${\n findCondition[findCondition.length - 1].maxSpan\n } max`;\n this.APP.maxBaySize = findCondition[findCondition.length - 1].maxBay;\n this.APP.maxBaySizeText = `${\n findCondition[findCondition.length - 1].maxBay\n } max`;\n }\n } else {\n if (UI.windClass == 0 || UI.windClass == 1) {\n this.APP.maxSpan = 8500;\n this.APP.maxSpanText = \"8500 max\";\n this.APP.maxBaySize = 8000;\n this.APP.maxBaySizeText = \"8000 max\";\n } else {\n this.APP.maxSpan = 7000;\n this.APP.maxSpanText = \"7000 max\";\n this.APP.maxBaySize = 6000;\n this.APP.maxBaySizeText = \"6000 max\";\n }\n }\n }\n }\n\n public setBeamSize() {\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n let minBeam = 1;\n let maxBeam = 4;\n\n let length = this.APP.dialogEditBay.totalBaySize;\n let width = UI.span;\n let windClass = UI.windClass;\n\n const filterValue = Math.max(length, width);\n const filterField = length > width ? \"lengthMax\" : \"widthMax\";\n const findCondition = this.APP.objects.gableBeamConditionList.find(\n (f) => f.windClass.includes(windClass) && f[filterField] >= filterValue\n );\n if (findCondition) {\n minBeam = findCondition.beamSizeIndex;\n }\n\n this.APP.beamSizeList = this.APP.objects.beamSizeList.filter(\n (el) =>\n el.beamType == this.APP.sltBeamType.currentValue &&\n el.id >= minBeam &&\n el.id <= maxBeam\n );\n this.setMaxSpan();\n this.APP.sltBeamSize.setSelectedAndHandleEvent(minBeam);\n }\n }\n\n public onFasciaUpstandBracketChanged(prevVal: number, curVal: number): void {\n // Bang - 2022.03.22\n if (\n UI.upstandBraketType > 0 &&\n !HomeComponent.ins.sltFasciaUpstandBrackets.isDisabled\n ) {\n this.APP.sldBackOverhang.isDisabled = false;\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n } else {\n this.APP.sldBackOverhang.setValue(0);\n this.APP.sldBackOverhang.isDisabled = true;\n }\n this.onSetColumnType(null, null);\n }\n\n public onWidth1Changed(prevVal: number, curVal: number): void {\n if (curVal < 620) {\n this.APP.sldExistingLength2.setValue(0);\n this.APP.sldExistingLength2Visible = false;\n } else {\n this.APP.sldExistingLength2Visible = true;\n }\n\n //change baysize when can cutout and can not cutout\n if (this.APP.sltCutOut.currentValue == 1) {\n //let cutoutCondition = this.APP.patiosManager.cutoutCondition.map(x => x.currentValue).reduce((a,b) => a + b, 0) - this.APP.sldExistingWidth1.currentValue >= EXISTING_BUILDING_CONFIG.CUTOUT_ALLOW;\n if (this.APP.patiosManager.cutoutCondition && !window[\"cutout\"]) {\n this.setEnableCutout(true);\n window[\"cutout\"] = true;\n } else if (!this.APP.patiosManager.cutoutCondition) {\n this.setEnableCutout(false);\n window[\"cutout\"] = false;\n }\n }\n //this.validateCutout();\n }\n public onWidth2Changed(prevVal: number, curVal: number): void {\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH\n ) {\n if (curVal == 0) {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 2000);\n\n this.APP.setPatiosWidth(\n this.APP.dialogEditBay.totalBaySize -\n (this.APP.existingWallManager.geo_existingWallW2.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) *\n 2\n );\n } else {\n let totalExistingWidth =\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2 +\n (this.APP.existingWallManager.geo_existingWallW2.width +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK) *\n 2;\n if (\n this.APP.sltStructureType.currentValue == 1 ||\n this.APP.sltStructureType.currentValue == 2\n ) {\n totalExistingWidth =\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2 +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2;\n }\n if (this.APP.dialogEditBay.totalBaySize < totalExistingWidth) {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 2000);\n\n this.APP.setPatiosWidth(totalExistingWidth);\n }\n }\n }\n }\n public onLength2Changed(prevVal: number, curVal: number): void {\n if (curVal < 1200) {\n this.APP.sldExistingWidth2.setValue(0);\n this.APP.sldExistingWidth2Visible = false;\n } else {\n this.APP.sldExistingWidth2Visible = true;\n }\n\n if (!prevVal) prevVal = curVal;\n let diff = curVal - prevVal;\n\n this.onAdjustListBayWhenCutOut(diff);\n }\n public onAdjustListBayWhenCutOut(diff) {\n if (UI.cutOutType == CUTOUT_ENABLE.YES) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.RIGHT\n ) {\n let baySize = UI.baySize + diff / UI.noOfBay;\n if (baySize > CONFIG.baySize.max) {\n let noOfBay = UI.noOfBay + 1;\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldNoOfBay.setValue(noOfBay);\n baySize = UI.totalBayLength / noOfBay;\n }\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldBaySize.setValue(Math.ceil(baySize));\n } else {\n let baySize =\n UI.baySize + (diff * 2) / this.APP.sldNoOfBay.currentValue;\n if (baySize > CONFIG.baySize.max) {\n let noOfBay = this.APP.sldNoOfBay.currentValue + 1;\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldNoOfBay.setValue(noOfBay);\n baySize = UI.totalBayLength / noOfBay;\n }\n this.ignoreEnableCutoutEvent = true;\n this.APP.sldBaySize.setValue(Math.ceil(baySize));\n }\n }\n }\n public onCutoutChanged(prevVal: number, curVal: number) {\n //this.APP.patiosManager.enableCutout(curVal == 1 && this.APP.patiosManager.cutoutCondition);\n //window['baySize'] = this.APP.sldBaySize.currentValue;\n this.setEnableCutout(curVal == 1 && this.APP.patiosManager.cutoutCondition);\n }\n public onRakeCutLeftChanged(pre: number, cur: number) {\n //If left cut is ON disable left over hang\n this.APP.sldLeftOverhang.setDisable(false);\n if (cur != RAKECUT_TYPE.NONE) {\n this.APP.sldLeftOverhang.setValue(0);\n this.APP.sldLeftOverhang.setDisable(true);\n }\n\n if (cur == RAKECUT_TYPE.NONE) {\n this.APP.sldLeftCutHorizontal.setValue(0);\n }\n }\n public onRakeCutRightChanged(pre: number, cur: number) {\n //If right cut is ON disable right over hang\n this.APP.sldRightOverhang.setDisable(false);\n if (cur != RAKECUT_TYPE.NONE) {\n this.APP.sldRightOverhang.setValue(0);\n this.APP.sldRightOverhang.setDisable(true);\n }\n\n if (cur == RAKECUT_TYPE.NONE) {\n this.APP.sldRightCutHorizontal.setValue(0);\n }\n }\n\n // this is hight priority (1), must be called first to setup BUILDING HEIGHT for patios manager to use\n private onExistingWallHeightChanged(prevVal: number, curVal: number): void {\n const currentBeam = GeometryManager.Instance().getBeam();\n const _typeVal = +this.APP.sltStructureType.currentValue;\n let _buildingHeightMax = 0;\n if (_typeVal === CONNECTION_TYPE.EXISTING) {\n // Existing Building\n _buildingHeightMax =\n curVal - EXISTING_BUILDING_CONFIG.BUILDING_HEIGHT_OFFSET;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n if (\n curVal - this.APP.sldBuildingHeight.currentValue <=\n EXISTING_BUILDING_CONFIG.BUILDING_HEIGHT_OFFSET\n ) {\n this.APP.sldBuildingHeight.setValue(_buildingHeightMax);\n }\n } else if (\n _typeVal === CONNECTION_TYPE.FASCIA ||\n _typeVal === CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n // Fascia\n _buildingHeightMax = CONFIG.eaveHeight.max;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n this.APP.sldBuildingHeight.setValue(curVal);\n } else if (_typeVal === CONNECTION_TYPE.FREE_STANDING) {\n _buildingHeightMax = CONFIG.height.free_standing_max;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n this.APP.sldBuildingHeight.setValue(curVal);\n } else {\n // _buildingHeightMax= CONFIG.height.max;\n _buildingHeightMax = CONFIG.eaveHeight.max;\n this.APP.sldBuildingHeight.setMax(_buildingHeightMax);\n this.APP.sldBuildingHeight.setValue(\n curVal +\n this.APP.sldFlyOverBracketHeight.currentValue +\n currentBeam.height\n );\n }\n\n setTimeout(() => {\n this.setColumnType(\"\", _typeVal, -1);\n }, 500);\n this.APP.renderStatic();\n }\n\n public onExistingWallHeightChanged2(prevVal: number, curVal: number): void {}\n\n private changeToExistingTypeBoth() {\n this.setEnableCutout(\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.patiosManager.cutoutCondition\n );\n }\n private setEnableCutout(enable: boolean) {\n if (HomeComponent.ins.currentBuildingInfo.isOpen) {\n return;\n }\n if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FLY_OVER ||\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n //Change patios width o day thi khong cho length1 chay theo patios width\n //set bien nay true thi length1 khong chay theo patios width\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 3000);\n\n if (enable) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.NONE) {\n this.APP.setPatiosWidth(this.APP.sldExistingLength.currentValue);\n } else if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n this.APP.setPatiosWidth(\n CONFIG.baySize.min + this.APP.sldExistingLength2.currentValue\n );\n } else {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2 +\n this.APP.sldExistingLength2.currentValue * 2\n );\n } else {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2\n );\n }\n }\n } else {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n this.APP.sltCutOut.setSelected(\"0\");\n }\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FASCIA ||\n this.APP.sltStructureType.currentValue ==\n CONNECTION_TYPE.BACK_FASCIA_UPSTAND ||\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 1000);\n\n if (enable) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n this.APP.setPatiosWidth(\n CONFIG.baySize.min + this.APP.sldExistingLength2.currentValue\n );\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n this.calcShouldSnapRoofToExistingWhenCutout()\n ) {\n this.APP.setPatiosWidth(\n UI.existingLength1 + UI.existingLength2 * 2\n );\n } else {\n this.APP.setPatiosWidth(\n UI.existingLength1 + UI.existingLength2 * 2 - UI.eaveWidth * 2\n );\n }\n }\n } else {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue -\n this.APP.sldEaveWidth.currentValue * 2\n );\n this.APP.sltCutOut.setSelected(\"0\");\n }\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.EXISTING\n ) {\n //Change patios width o day thi khong cho length1 chay theo patios width\n //set bien nay true thi length1 khong chay theo patios width\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n }, 3000);\n\n if (enable) {\n if (\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT\n ) {\n this.APP.setPatiosWidth(\n CONFIG.baySize.min + this.APP.sldExistingLength2.currentValue\n );\n }\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n this.APP.setPatiosWidth(\n this.APP.sldExistingLength.currentValue +\n this.APP.sldExistingLength2.currentValue * 2\n );\n }\n } else {\n this.APP.setPatiosWidth(this.APP.sldExistingLength.currentValue);\n this.APP.sltCutOut.setSelected(\"0\");\n }\n }\n }\n // When the highest point of cutout roof (To fascia) is lower eave height, we should snap this roof to wall, like existing roof\n public handleSnapRoofToExistingWhenCutOut(): void {\n this.previousShouldSnapFasciaRoofToWall = this.shouldSnapFasciaRoofToWall;\n this.shouldSnapFasciaRoofToWall =\n this.calcShouldSnapRoofToExistingWhenCutout();\n\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n UI.existingType != BUILDING_SIDE.NONE &&\n UI.cutOutType == CUTOUT_ENABLE.YES\n ) {\n this.setEnableCutout(\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n HomeComponent.ins.patiosManager.cutoutCondition\n );\n }\n }\n public calcShouldSnapRoofToExistingWhenCutout(): boolean {\n const roofBaseHeight =\n HomeComponent.ins.geometryManager.getRoofBaseHeight();\n\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA &&\n UI.existingType != BUILDING_SIDE.NONE &&\n UI.cutOutType == CUTOUT_ENABLE.YES &&\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.FLAT_ROOF\n ) {\n const cutOutRoofHeightIfSnapToExisting =\n UI.eaveHeight -\n (UI.existingWidth1 - UI.eaveWidth) * this.utils.tan(UI.patiosPitch) +\n roofBaseHeight / this.utils.cos(UI.patiosPitch);\n if (cutOutRoofHeightIfSnapToExisting < UI.eaveHeight) {\n return true;\n }\n }\n\n return false;\n }\n\n public onBackOverhangChanged() {\n UI.oldBackOverhang = UI.overhangBack;\n }\n\n public onExistingTypeChanged(prevVal: number, val: number) {\n this.APP.sldLeftOverhang.setDisable(false);\n this.APP.sldRightOverhang.setDisable(false);\n\n //this.validateCutout();\n\n if (val == 0) {\n this.alignWallToPatios(false);\n this.APP.sldExistingWidth1.setValue(0);\n this.APP.sldExistingWidth2.setValue(0);\n this.APP.sldExistingLength2.setValue(0);\n }\n if (val == 1 || val == 2) {\n this.alignWallToPatios(true);\n this.setEnableCutout(\n this.APP.sltCutOut.currentValue == 1 &&\n this.APP.patiosManager.cutoutCondition\n );\n }\n if (val == 3) {\n this.alignWallToPatios(true);\n\n this.APP.sldLeftOverhang.setValue(0);\n this.APP.sldLeftOverhang.setDisable(true);\n this.APP.sldRightOverhang.setValue(0);\n this.APP.sldRightOverhang.setDisable(true);\n\n if (\n this.APP.isFBRoof &&\n UI.structureType == CONNECTION_TYPE.EXISTING &&\n UI.existingType == BUILDING_SIDE.BOTH &&\n this.APP.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n this.APP.sldLeftOverhang.setValue(200);\n this.APP.sldRightOverhang.setValue(200);\n }\n this.changeToExistingTypeBoth();\n }\n\n const _structureType = +this.APP.sltStructureType.currentValue;\n if (_structureType === 0) {\n this.APP.sldBackOverhang.isDisabled = true;\n } else if (_structureType === 3 || _structureType === 5) {\n this.APP.sldBackOverhang.isDisabled = true;\n // Bang - 2022.03.22\n if (this.APP.sltFasciaUpstandBrackets.currentValue > 0) {\n this.APP.sldBackOverhang.isDisabled = false;\n this.APP.sldBackOverhang.setValue(UI.oldBackOverhang);\n } else {\n this.APP.sldBackOverhang.isDisabled = true;\n }\n } else {\n this.APP.sldBackOverhang.isDisabled = false;\n }\n // Disable Length1\n this.APP.sldExistingLength.isDisabled = val === 3;\n\n //Change panel direction\n // if(this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT){\n // this.APP.sltPanelDirection.setValue(PANEL_DIRECTION.RIGHT_TO_LEFT);\n // }\n // else{\n // this.APP.sltPanelDirection.setValue(PANEL_DIRECTION.LEFT_TO_RIGHT);\n // }\n }\n\n public onSpanChanged() {\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n if (!this.APP.patiosManager.ignoreBayEvent) {\n if (\n this.APP.sltStructureType.currentValue ==\n CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n this.APP.sldExistingLength.setValue(\n Math.ceil(\n UI.span +\n this.APP.sldEaveWidth.currentValue * 2 +\n 2 * FASCIA_BRACKET_FIT\n )\n );\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FLY_OVER\n ) {\n this.APP.sldExistingLength.setValue(\n UI.span - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(\n UI.span +\n UI.overhangLeft +\n UI.overhangRight +\n OFFSET_GUTTER_TO_WALL * 2\n );\n }\n }\n }\n }\n }\n\n public onDialogEditBayChanged() {\n // this.APP.patiosManager.loadBracket(5);\n if (\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF &&\n this.APP.isFBRoof\n ) {\n return;\n }\n\n if (this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH) {\n let totalBaySize = this.APP.dialogEditBay.totalBaySize;\n\n if (!this.APP.patiosManager.ignoreBayEvent) {\n if (\n UI.structureType == CONNECTION_TYPE.FASCIA ||\n UI.structureType == CONNECTION_TYPE.BACK_FASCIA_UPSTAND ||\n UI.structureType == CONNECTION_TYPE.FASCIA_UPSTAND\n ) {\n //Facia\n if (\n this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES &&\n this.APP.patiosManager.cutoutCondition\n ) {\n if (this.calcShouldSnapRoofToExistingWhenCutout()) {\n this.APP.sldExistingLength.setValue(\n totalBaySize - UI.existingLength2 * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize - UI.existingLength2 * 2 + UI.eaveWidth * 2\n );\n }\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize + this.APP.sldEaveWidth.currentValue * 2\n );\n }\n } else if (\n this.APP.sltStructureType.currentValue == CONNECTION_TYPE.FLY_OVER ||\n this.APP.sltStructureType.currentValue ==\n CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n if (this.APP.sldExistingWidth2.currentValue > 0) {\n this.APP.sldExistingLength.setValue(\n totalBaySize -\n this.APP.sldExistingLength2.currentValue * 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize - this.APP.sldExistingLength2.currentValue * 2\n );\n }\n } else {\n this.APP.sldExistingLength.setValue(\n totalBaySize - EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK * 2\n );\n }\n } else {\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n this.APP.sldExistingLength.setValue(\n totalBaySize - this.APP.sldExistingLength2.currentValue * 2\n );\n } else {\n this.APP.sldExistingLength.setValue(totalBaySize);\n }\n }\n }\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n //this.APP.setNoOfBayFromBaySize(this.APP.dialogEditBay.totalBaySize , this.APP.sldBaySize.currentValue);\n if (\n this.APP.dialogEditBay.totalBaySize <\n this.APP.sldExistingLength2.currentValue + CONFIG.baySize.min &&\n !this.ignoreEnableCutoutEvent\n ) {\n this.setEnableCutout(false);\n }\n }\n //validate rake cut\n this.onBaySizeChanged(null, null);\n\n let roofOverallLength =\n UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n if (\n HomeComponent.ins.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF &&\n HomeComponent.ins.isFBRoof\n ) {\n roofOverallLength =\n UI.totalBayLength + UI.overhangFront + UI.overhangBack;\n }\n\n // Check beam length > 9m, 2 bay, and not cut, auto cut this\n if (\n roofOverallLength > EXISTING_BUILDING_CONFIG.MAXIMUM_LENGTH_PER_BEAM &&\n UI.listBay.length == 2\n ) {\n if (!UI.listBay[0].isCut) {\n UI.listBay[0].isCut = true;\n HomeComponent.ins.dialogEditBay.onOK();\n }\n }\n }\n public onBaySizeChanged(preVal: number, curVal: number) {\n // this.APP.patiosManager.loadBracket(this.APP.flyoverBracketNumber); // khi thay đổi UI truyền lại số lượng bracket\n //Reduce cut horizotal if totalcut larger than baymax\n let bayMax =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let totalCut =\n this.APP.sldLeftCutHorizontal.currentValue +\n this.APP.sldRightCutHorizontal.currentValue;\n\n //if(this.app)\n\n if (totalCut >= bayMax) {\n this.APP.sldLeftCutHorizontal.setValue(\n this.APP.sldLeftCutHorizontal.maxValue\n );\n this.APP.sldRightCutHorizontal.setValue(\n this.APP.sldRightCutHorizontal.maxValue\n );\n }\n }\n onBeamTypeChanged(pre, cur: number) {\n this.APP.beamSizeList = this.APP.objects.beamSizeList.filter(\n (f) => f.beamType == cur\n );\n\n this.APP.houseBeamSizeList = this.APP.objects.beamSizeList.filter(\n (f) => f.beamType == cur\n );\n if (cur === 1) {\n this.APP.sltColourBeam.setSelected(0xcabfa4);\n } else {\n this.APP.sltColourBeam.setSelected(0xe4e2d5);\n }\n }\n\n onColumnTypeChanged(pre, cur: number) {\n if (cur === 3) {\n this.APP.sltColourPost.setSelected(0xcabfa4);\n } else {\n this.APP.sltColourPost.setSelected(0xe4e2d5);\n }\n }\n onBaseFixingTypeChanged(pre, cur: number) {\n setTimeout(() => {\n this.setColumnType(cur.toString(), -1, -1);\n if (cur === 0) {\n this.APP.chkRapidSetCement.setValue(false);\n }\n }, 500);\n }\n onBuildingHeightChanged(pre, cur: number) {\n setTimeout(() => {\n this.setColumnType(\"\", -1, cur);\n }, 500);\n }\n\n onSetColumnType(pre, cur: number) {\n setTimeout(() => {\n this.setColumnType(\"\", -1, -1);\n }, 500);\n }\n\n setColumnType(\n baseFixingType: string,\n structureType: number,\n buildingHeight: number\n ) {\n const groups = this.scene.children.filter(\n (x) =>\n (x.userData.category === GEOMETRY_CATEGORY.PATIOS &&\n x.children.length > 0) ||\n x.userData.type === GEOMETRY_TYPE.SUPERIOR_POST\n );\n const listPosts = this.APP.getPosts(groups);\n if (listPosts.length > 0) {\n buildingHeight = _.round(\n _.maxBy(listPosts, (o) => o.length).length * 1000,\n 0\n );\n } else {\n buildingHeight = this.APP.sldBuildingHeight.currentValue;\n }\n\n // get column type list\n const _columnType = +this.APP.sltColumnType.currentValue;\n if (baseFixingType === \"\") {\n baseFixingType = this.APP.sltBaseFixingType.currentValue.toString();\n }\n if (structureType === -1) {\n structureType = this.APP.sltStructureType.currentValue;\n }\n // if (buildingHeight === -1) {\n // buildingHeight = this.APP.sldBuildingHeight.currentValue;\n // }\n if (buildingHeight) {\n if (structureType == 4) {\n this.APP.columnTypeList = this.APP.objects.columnTypeList2.filter(\n (f) =>\n f.baseFixingType.includes(baseFixingType) &&\n f.columnHeight >= buildingHeight &&\n f.idx >= 2\n );\n } else {\n this.APP.columnTypeList = this.APP.objects.columnTypeList2.filter(\n (f) =>\n f.baseFixingType.includes(baseFixingType) &&\n f.columnHeight >= buildingHeight\n );\n }\n if (this.APP.columnTypeList.length === 0) {\n this.APP.columnTypeList = this.APP.objects.columnTypeList2.filter(\n (f) => f.id === -1\n );\n this.APP.sltColumnType.setSelected(-1);\n } else {\n if (\n this.APP.columnTypeList.findIndex(\n (value, index) => value.id === _columnType\n ) >= 0\n ) {\n this.APP.sltColumnType.setSelected(_columnType);\n } else {\n this.APP.sltColumnType.setSelected(this.APP.columnTypeList[0].id);\n }\n }\n }\n //\n }\n loadFromObject(obj) {\n var promise = new Promise((resolve, rejects) => {\n this.APP.patiosManager.ignoreBayEvent = true;\n setTimeout(() => {\n this.APP.patiosManager.ignoreBayEvent = false;\n resolve();\n }, 3000);\n const _rightToLeft = obj.rightToLeft || false;\n this.APP.sltPanelDirection.setValue(_rightToLeft);\n let _structureType = obj.structureType.value.toString();\n const _fasciaBracketHeight = obj.fasciaBracketHeight || 0;\n if (_structureType == 3 && _fasciaBracketHeight > 0) {\n _structureType = \"5\";\n }\n const _hasHouseBeam = obj.hasHouseBeam || false;\n this.APP.chkHasHouseBeam.setValue(_hasHouseBeam);\n this.APP.sltStructureType.setSelected(_structureType);\n this.APP.sltExistingType.setSelected(obj.existingType.value.toString());\n this.APP.sldExistingLength.setValue(obj.existingLength);\n this.APP.sldExistingLength2.setValue(obj.existingLength2);\n this.APP.sldExistingWidth1.setValue(obj.existingWidth1);\n this.APP.sldExistingWidth2.setValue(obj.existingWidth2);\n this.APP.sldFasciaDepth.setValue(obj.fasciaDepth);\n this.APP.sldExistingWallHeight.setValue(obj.eaveHeight);\n this.APP.sldBuildingHeight.setValue(obj.buildingHeight);\n this.APP.sldEaveWidth.setValue(obj.eaveWidth);\n this.APP.sldFlyOverBracketHeight.setValue(obj.flyoverBracketHeight);\n this.APP.sldSpan.setValue(obj.span);\n this.APP.sldMultiSpan.setValue(obj.multiSpan);\n this.APP.sldBaySize.setValue(obj.baySize);\n this.APP.sldRoofOverallLength.setValue(obj.roofOverallLength);\n this.APP.sldRoofOverallWidth.setValue(obj.roofOverallWidth);\n this.APP.sldMinHeight.setValue(Math.round(obj.minHeight));\n //HACK: Xử lý lỗi cho các job cũ\n const _cutOut = obj.cutOut ? obj.cutOut.value : 0;\n this.APP.sltFasciaUpstandBrackets.setSelected(_fasciaBracketHeight);\n const _backFascia = obj.backFascia || false;\n this.APP.sltUpFasciaUpstandBracket.setValue(_backFascia);\n\n this.APP.sltWindClass.setSelected(obj.windClass.value);\n this.APP.sltBaseFixingType.setSelected(obj.baseFixingType.value);\n this.APP.sltBeamType.setSelected(obj.beamType.value);\n this.APP.sltCutOut.setSelected(_cutOut);\n\n this.APP.sltGutterType.setSelected(obj.gutterType.value);\n this.APP.sltDownpipeType.setSelected(obj.downpipeType.value);\n this.APP.sltZFlashingType.setSelected(obj.zFlashingType.value);\n this.APP.sltReceiverType.setSelected(obj.receiverType.value);\n this.APP.sltBargeType.setSelected(obj.bargeType.value);\n this.APP.sltFlatBottom.setSelected(obj.flatBottom.value);\n this.APP.sltRoofThickness.setSelected(obj.thickness.value);\n\n this.APP.sltRoofSheetingType.setSelected(obj.roofSheetingType.value);\n this.APP.sltWallType.setSelected(obj.wallType.value);\n const _existingRoofType = obj.existingRoofType\n ? obj.existingRoofType.value\n : 0;\n this.APP.sltExistingRoofType.setSelected(_existingRoofType);\n\n this.APP.sltExistingRoofPitch.setSelected(obj.existingRoofPitch);\n this.APP.sltRoofPitch.setSelected(obj.roofPitch);\n this.APP.sltColumnType.setSelected(obj.columnType.value);\n this.APP.sltBeamSize.setSelected(obj.beamSize.value);\n const _houseBeamSize = obj.hasHouseBeam\n ? obj.houseBeamSize.value\n : obj.beamSize.value;\n this.APP.sltHouseBeamSize.setSelected(_houseBeamSize);\n const _isRapidSetCement = obj.isRapidSetCement || false;\n this.APP.chkRapidSetCement.setValue(_isRapidSetCement);\n const _isDripBarge = obj.isDripBarge || false;\n this.APP.sltDripBarge.setValue(_isDripBarge);\n\n this.APP.sltColourDownpipe.setSelected(obj.colourDownpipe.value);\n this.APP.sltColourBracket.setSelected(obj.colourBracket.value);\n const _colourFasciaBracket = obj.colourFasciaBracket\n ? obj.colourFasciaBracket.value\n : 0xe4e2d50;\n this.APP.sltColourFasciaBracket.setSelected(_colourFasciaBracket);\n this.APP.sltColourZFlashing.setSelected(obj.colourZFlashing.value);\n this.APP.sltColourGutter.setSelected(obj.colourGutter.value);\n this.APP.sltColourBarge.setSelected(obj.colourBarge.value);\n this.APP.sltColourRoof.setSelected(obj.colourRoof.value);\n\n this.APP.isFBRoof = obj.isFBRoof;\n this.APP.patiosRoofType =\n obj.patiosRoofType || PATIOS_ROOF_TYPE.FLAT_ROOF;\n\n setTimeout(() => {\n this.APP.sldNoOfBay.setValue(obj.noOfBay);\n //----RakeCut\n const _leftCutType = obj.leftCutType ? obj.leftCutType.value : 0;\n const _rightCutType = obj.rightCutType ? obj.rightCutType.value : 0;\n const _leftCutVertical = obj.leftCutVertical || 0;\n const _rightCutVertical = obj.rightCutVertical || 0;\n const _leftCutHorizontal = obj.leftCutHorizontal || 0;\n const _rightCutHorizontal = obj.rightCutHorizontal || 0;\n\n this.APP.sltLeftCutType.setSelected(_leftCutType);\n this.APP.sltRightCutType.setSelected(_rightCutType);\n this.APP.sldLeftCutVertical.setValue(_leftCutVertical);\n this.APP.sldLeftCutHorizontal.setValue(_leftCutHorizontal);\n this.APP.sldRightCutVertical.setValue(_rightCutVertical);\n this.APP.sldRightCutHorizontal.setValue(_rightCutHorizontal);\n //Bang - 2021.04.06 -> Tranh loi khi default lại mau khi xay ra su kien onColumnTypeChanged()\n this.APP.sltColourPost.setSelected(obj.colourPost.value);\n this.APP.sltColourBeam.setSelected(obj.colourBeam.value);\n this.APP.sldBackOverhang.setValue(obj.backOverhang);\n this.APP.sldFrontOverhang.setValue(obj.frontOverhang);\n // this.APP.dialogEditBay.setValue(obj.listBay);\n setTimeout(() => {\n // Bang - 2022.08.15 -> Lỗi khi open lại thì Bay load về default 4400\n this.APP.dialogEditBay.setValue(obj.listBay);\n this.APP.sldRightOverhang.setValue(obj.rightOverhang);\n this.APP.sldLeftOverhang.setValue(obj.leftOverhang);\n this.APP.sldBuildingHeight.setValueAndHandleEvent(\n obj.buildingHeight,\n true\n );\n\n if (this.APP.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n this.APP.sldSpan.setValue(obj.span);\n }\n }, 300);\n //----\n }, 500);\n });\n return promise;\n }\n alignWallToPatios(enable) {\n if (HomeComponent.ins.currentBuildingInfo.isOpen) {\n return;\n }\n let patiosLength =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldSpan.currentValue +\n this.APP.sldBackOverhang.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n if (enable && this.APP.sldExistingWidth1.currentValue < 1000) {\n this.APP.sldExistingWidth1.setValue(patiosLength);\n this.APP.sldExistingWidth1.setMin(1000);\n } else if (!enable) {\n this.APP.sldExistingWidth1.setMin(0);\n }\n }\n validateCutout() {\n if (HomeComponent.ins.currentBuildingInfo.isOpen) {\n return;\n }\n let cutoutCondition =\n this.APP.sltExistingType.currentValue != 0 &&\n this.APP.patiosManager.cutoutCondition &&\n this.APP.sldExistingWidth1.currentValue > 0 &&\n this.APP.sldExistingLength2.currentValue > 0;\n\n if (\n cutoutCondition &&\n this.APP.patiosRoofType === PATIOS_ROOF_TYPE.FLAT_ROOF\n ) {\n this.APP.sltCutOut.setDisable(false);\n } else {\n this.APP.sltCutOut.setSelected(\"0\");\n this.APP.sltCutOut.setDisable(true);\n }\n }\n validateRakeCut() {\n let maxSpanLeft =\n this.APP.sldSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n let maxSpanRight =\n this.APP.sldSpan.currentValue + this.APP.sldFrontOverhang.currentValue;\n\n //\n if (\n this.APP.sldMultiSpan.currentValue > 0 &&\n this.APP.sldSpan.currentValue\n ) {\n maxSpanLeft =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n maxSpanRight =\n this.APP.sldMultiSpan.currentValue +\n this.APP.sldFrontOverhang.currentValue;\n }\n\n if (this.APP.sltCutOut.currentValue == CUTOUT_ENABLE.YES) {\n let cond =\n this.APP.sldMultiSpan.currentValue == 0 ||\n (this.APP.sldMultiSpan.currentValue > 0 &&\n this.APP.sldSpan.currentValue <\n this.APP.sldExistingWidth1.currentValue);\n if (\n cond &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.LEFT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n maxSpanLeft =\n this.APP.patiosManager.patiosLength -\n this.APP.sldExistingWidth1.currentValue;\n }\n if (\n cond &&\n (this.APP.sltExistingType.currentValue == BUILDING_SIDE.RIGHT ||\n this.APP.sltExistingType.currentValue == BUILDING_SIDE.BOTH)\n ) {\n maxSpanRight =\n this.APP.patiosManager.patiosLength -\n this.APP.sldExistingWidth1.currentValue;\n }\n }\n //In case of step cut the remaining space at least 500\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n maxSpanLeft -= 500;\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n maxSpanRight -= 500;\n }\n\n let sizeLeft = this.APP.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.LEFT\n );\n let sizeRight = this.APP.utils.getBeamRakeCutInfo(\n this.APP,\n BUILDING_SIDE.RIGHT\n );\n\n //Ensure left cut and right cut do not overlap each other\n //And can not be over first bay\n let bayMax =\n this.APP.dialogEditBay.totalBaySize +\n this.APP.sldLeftOverhang.currentValue +\n this.APP.sldRightOverhang.currentValue;\n let postInfo = null;\n if (this.APP.geometryManager.SUPERIOR_POST.S65x65) {\n postInfo = this.APP.geometryManager.getPost();\n }\n if (this.APP.sldNoOfBay.currentValue == 1) {\n let maxLeft1 = bayMax - sizeRight.l;\n let maxLeft2 =\n (maxLeft1 * this.APP.sldLeftCutVertical.currentValue) / sizeLeft.j;\n\n let maxRight1 = bayMax - sizeLeft.l;\n let maxRight2 =\n (maxRight1 * this.APP.sldRightCutVertical.currentValue) / sizeRight.j;\n\n let FO = this.APP.sldFrontOverhang.currentValue;\n let CHL = this.APP.sldLeftCutHorizontal.currentValue;\n let CVL = this.APP.sldLeftCutVertical.currentValue;\n let dMaxleft =\n (FO * Math.sqrt(Math.pow(CHL, 2) + Math.pow(CVL, 2))) / CVL -\n (FO * CHL) / CVL;\n\n maxLeft2 =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldLeftOverhang.currentValue -\n dMaxleft -\n (postInfo?.width || 0);\n\n let CHR = this.APP.sldRightCutHorizontal.currentValue;\n let CVR = this.APP.sldRightCutVertical.currentValue;\n let dMaxRight =\n (FO * Math.sqrt(Math.pow(CHR, 2) + Math.pow(CVR, 2))) / CVR -\n (FO * CHR) / CVR;\n\n maxRight2 =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldRightOverhang.currentValue -\n dMaxRight -\n (postInfo?.width || 0);\n\n this.APP.sldRightCutHorizontal.setMax(Math.round(maxRight2));\n this.APP.sldLeftCutHorizontal.setMax(Math.round(maxLeft2));\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n if (\n bayMax -\n this.APP.sldLeftCutHorizontal.currentValue -\n dMaxRight -\n (postInfo?.width || 0) >\n 0\n ) {\n this.APP.sldRightCutHorizontal.setMax(\n Math.round(\n bayMax -\n this.APP.sldLeftCutHorizontal.currentValue -\n dMaxRight -\n (postInfo?.width || 0)\n )\n );\n } else {\n this.APP.sldRightCutHorizontal.setMax(\n this.APP.sldRightCutHorizontal.minValue\n );\n this.APP.sltRightCutType.setSelected(\"0\");\n }\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.ANGLE) {\n if (\n bayMax -\n this.APP.sldRightCutHorizontal.currentValue -\n dMaxleft -\n (postInfo?.width || 0) >\n 0\n ) {\n this.APP.sldLeftCutHorizontal.setMax(\n Math.round(\n bayMax -\n this.APP.sldRightCutHorizontal.currentValue -\n dMaxleft -\n (postInfo?.width || 0)\n )\n );\n } else {\n this.APP.sldLeftCutHorizontal.setMax(\n this.APP.sldRightCutHorizontal.minValue\n );\n this.APP.sltLeftCutType.setSelected(\"0\");\n }\n }\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldLeftCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldRightCutHorizontal.currentValue - 762)\n );\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldRightCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldLeftCutHorizontal.currentValue - 762)\n );\n }\n } else {\n let maxBayLeft =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldLeftOverhang.currentValue;\n let maxBayRight =\n this.APP.dialogEditBay.listBay[this.APP.dialogEditBay.noOfBay - 1]\n .value + this.APP.sldRightOverhang.currentValue;\n let FO = this.APP.sldFrontOverhang.currentValue;\n let CHL = this.APP.sldLeftCutHorizontal.currentValue;\n let CVL = this.APP.sldLeftCutVertical.currentValue;\n let dMaxleft =\n (FO * Math.sqrt(Math.pow(CHL, 2) + Math.pow(CVL, 2))) / CVL -\n (FO * CHL) / CVL;\n\n maxBayLeft =\n this.APP.dialogEditBay.listBay[0].value +\n this.APP.sldLeftOverhang.currentValue -\n dMaxleft -\n (postInfo?.width || 0);\n\n let CHR = this.APP.sldRightCutHorizontal.currentValue;\n let CVR = this.APP.sldRightCutVertical.currentValue;\n let dMaxRight =\n (FO * Math.sqrt(Math.pow(CHR, 2) + Math.pow(CVR, 2))) / CVR -\n (FO * CHR) / CVR;\n\n maxBayRight =\n this.APP.dialogEditBay.listBay[this.APP.dialogEditBay.noOfBay - 1]\n .value +\n this.APP.sldRightOverhang.currentValue -\n dMaxRight -\n (postInfo?.width || 0);\n\n this.APP.sldLeftCutHorizontal.setMax(Math.round(maxBayLeft));\n this.APP.sldRightCutHorizontal.setMax(Math.round(maxBayRight));\n\n if (this.APP.sltLeftCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldLeftCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldRightCutHorizontal.currentValue - 762)\n );\n }\n if (this.APP.sltRightCutType.currentValue == RAKECUT_TYPE.STEP) {\n this.APP.sldRightCutHorizontal.setMax(\n Math.round(bayMax - this.APP.sldLeftCutHorizontal.currentValue - 762)\n );\n }\n }\n\n //Vertical cut can not be over first span\n this.APP.sldLeftCutVertical.setMax(maxSpanLeft);\n this.APP.sldRightCutVertical.setMax(maxSpanRight);\n\n //If vertical cut is over span size reduce vertical cut\n if (this.APP.sldLeftCutVertical.currentValue > maxSpanLeft) {\n this.APP.sldLeftCutVertical.setValue(maxSpanLeft);\n }\n if (this.APP.sldRightCutVertical.currentValue > maxSpanRight) {\n this.APP.sldRightCutVertical.setValue(maxSpanRight);\n }\n //Only allow rakecut if have post\n if (this.APP.patiosManager) {\n // this.f();\n this.APP.patiosManager.firstLoad = false;\n }\n }\n\n f() {\n let postLeft = this.APP.patiosManager?.patiosGroup?.children.find(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n c.userData.position?.left\n );\n if (!postLeft) {\n this.APP.sltLeftCutType.setSelected(\"0\");\n this.APP.sltLeftCutType.setDisable(true);\n } else {\n this.APP.sltLeftCutType.setDisable(false);\n }\n\n let postRight = this.APP.patiosManager?.patiosGroup?.children.find(\n (c) =>\n c.userData.type == GEOMETRY_TYPE.SUPERIOR_POST &&\n c.userData.position?.right\n );\n if (!postRight) {\n this.APP.sltRightCutType.setSelected(\"0\");\n this.APP.sltRightCutType.setDisable(true);\n } else {\n this.APP.sltRightCutType.setDisable(false);\n }\n }\n}\nexport function registerEvents(controls, action) {\n controls.forEach((control) => {\n if (HomeComponent.ins[control]) {\n HomeComponent.ins[control].addAction(action);\n }\n });\n}\nexport function unRegisterEvents(controls, action) {\n controls.forEach((control) => {\n if (HomeComponent.ins[control]) {\n HomeComponent.ins[control].removeAction(action);\n }\n });\n}\n","import { HomeComponent } from \"../containers/home\";\nimport { utils } from \"./utils\";\nexport class UI {\n public static readonly Controls = {\n SPAN: \"sldSpan\",\n MULTI_SPAN: \"sldMultiSpan\",\n OVERHANG_FRONT: \"sldFrontOverhang\",\n OVERHANG_LEFT: \"sldLeftOverhang\",\n OVERHANG_RIGHT: \"sldRightOverhang\",\n OVERHANG_BACK: \"sldBackOverhang\",\n BAYSZIE: \"sldBaySize\",\n RAKECUT_LEFT_TYPE: \"sltLeftCutType\",\n LENGTH1: \"sldExistingLength\",\n LENGTH2: \"sldExistingLength2\",\n WIDTH1: \"sldExistingWidth1\",\n WIDTH2: \"sldExistingWidth2\",\n EXISTING_TYPE: \"sltExistingType\",\n BAYS: \"dialogEditBay\",\n EAVE_WIDTH: \"sldEaveWidth\",\n STRUCTURE_TYPE: \"sltStructureType\",\n CUTOUT: \"sltCutOut\",\n PATIOS_ROOF_PITCH: \"sltRoofPitch\",\n FASCIA_DEPTH: \"sldFasciaDepth\",\n EXISTING_ROOF_PITCH: \"existingRoofPitch\",\n FLYOVER_BRAKET_HEIGHT: \"sldFlyOverBracketHeight\",\n FASCIA_UPSTAND_BRAKET: \"sltFasciaUpstandBrackets\",\n EXISTING_WALL_HEIGHT: \"sldExistingWallHeight\",\n ROOF_SHEETING_TYPE: \"sltRoofSheetingType\",\n ROOF_THICKNESS: \"sltRoofThickness\",\n };\n static getHeightByRoofPitch(isSpan): number {\n if (isSpan) {\n return (\n utils.tan(HomeComponent.ins.sltRoofPitch.currentValue) *\n HomeComponent.ins.sldSpan.currentValue\n );\n } else {\n return (\n utils.tan(HomeComponent.ins.sltRoofPitch.currentValue) *\n (HomeComponent.ins.sldSpan.currentValue +\n HomeComponent.ins.sldMultiSpan.currentValue)\n );\n }\n }\n\n static get beamSize() {\n return +HomeComponent.ins.sltBeamSize.currentValue;\n }\n static get houseBeamSize() {\n return +HomeComponent.ins.sltHouseBeamSize.currentValue;\n }\n\n static get beamType() {\n return +HomeComponent.ins.sltBeamType.currentValue;\n }\n static get postType() {\n return +HomeComponent.ins.sltColumnType.currentValue;\n }\n static get windClass() {\n return +HomeComponent.ins.sltWindClass.currentValue;\n }\n\n static get rakeCutLeftType() {\n return HomeComponent.ins.sltLeftCutType.currentValue;\n }\n static get rakeCutRightType() {\n return HomeComponent.ins.sltRightCutType.currentValue;\n }\n static get eaveHeight() {\n return HomeComponent.ins.sldExistingWallHeight.currentValue;\n }\n static get existingLength1() {\n return HomeComponent.ins.sldExistingLength.currentValue;\n }\n static get existingLength2() {\n return HomeComponent.ins.sldExistingLength2.currentValue;\n }\n static get existingWidth1() {\n return HomeComponent.ins.sldExistingWidth1.currentValue;\n }\n static get existingWidth2() {\n return HomeComponent.ins.sldExistingWidth2.currentValue;\n }\n static get existingType() {\n return HomeComponent.ins.sltExistingType.currentValue;\n }\n static get height() {\n return HomeComponent.ins.sldBuildingHeight.currentValue;\n }\n static get frontHeight() {\n return (\n utils.tan(HomeComponent.ins.sltRoofPitch.currentValue) *\n (HomeComponent.ins.sldSpan.currentValue +\n HomeComponent.ins.sldMultiSpan.currentValue)\n );\n }\n static get totalBayLength() {\n return HomeComponent.ins.dialogEditBay.totalBaySize;\n }\n static get overhangLeft() {\n return HomeComponent.ins.sldLeftOverhang.currentValue;\n }\n static get overhangRight() {\n return HomeComponent.ins.sldRightOverhang.currentValue;\n }\n static get overhangFront() {\n return HomeComponent.ins.sldFrontOverhang.currentValue;\n }\n static get overhangBack() {\n return HomeComponent.ins.sldBackOverhang.currentValue;\n }\n static get span() {\n return HomeComponent.ins.sldSpan.currentValue;\n }\n static get multiSpan() {\n return +HomeComponent.ins.sldMultiSpan.currentValue;\n }\n static get rakeCutLeftHor() {\n return HomeComponent.ins.sldLeftCutHorizontal.currentValue;\n }\n static get rakeCutLeftVer() {\n return HomeComponent.ins.sldLeftCutVertical.currentValue;\n }\n static get rakeCutRightHor() {\n return HomeComponent.ins.sldRightCutHorizontal.currentValue;\n }\n static get rakeCutRightVer() {\n return HomeComponent.ins.sldRightCutVertical.currentValue;\n }\n static get structureType() {\n return +HomeComponent.ins.sltStructureType.currentValue;\n }\n static get patiosRoofType() {\n return HomeComponent.ins.patiosRoofType;\n }\n static get listBay() {\n return HomeComponent.ins.dialogEditBay.listBay;\n }\n static get cutOutType() {\n return HomeComponent.ins.sltCutOut.currentValue;\n }\n static get upstandBraketType() {\n return +HomeComponent.ins.sltFasciaUpstandBrackets.currentValue;\n }\n static get existingWallHeight() {\n return HomeComponent.ins.sldExistingWallHeight.currentValue;\n }\n static get eaveWidth() {\n return HomeComponent.ins.sldEaveWidth.currentValue;\n }\n static get patiosPitch() {\n return HomeComponent.ins.sltRoofPitch.currentValue;\n }\n static get existingRoofPitch() {\n return HomeComponent.ins.sltExistingRoofPitch.currentValue;\n }\n static get isUpFasciaUpstandardBracket() {\n return HomeComponent.ins.sltUpFasciaUpstandBracket.currentValue;\n }\n static get existingRoofType() {\n return HomeComponent.ins.sltExistingRoofType.currentValue;\n }\n static get braketHeight() {\n return HomeComponent.ins.sldFlyOverBracketHeight.currentValue;\n }\n static get existingWallLength1() {\n return HomeComponent.ins.existingWallManager.geo_existingWallL1.width;\n }\n static get existingWallW1() {\n return HomeComponent.ins.existingWallManager.geo_existingWallW1;\n }\n static get existingWallL2() {\n return HomeComponent.ins.existingWallManager.geo_existingWallL2;\n }\n static get panelDirection() {\n return HomeComponent.ins.sltPanelDirection.currentValue;\n }\n static get beamColor() {\n return HomeComponent.ins.sltColourBeam.currentValue;\n }\n static get postColor() {\n return HomeComponent.ins.sltColourPost.currentValue;\n }\n static set oldBackOverhang(value: number) {\n HomeComponent.ins.oldOverhangBack = value;\n }\n static get oldBackOverhang() {\n return HomeComponent.ins.oldOverhangBack;\n }\n\n static get fasciaDepth() {\n return HomeComponent.ins.sldFasciaDepth.currentValue;\n }\n\n static get showRoof() {\n return HomeComponent.ins.btnTurnOnPanel.currentValue;\n }\n\n static get beamLayoutShow() {\n return HomeComponent.ins.sltBeamLayoutShow.currentValue;\n }\n\n static get panelColor() {\n return HomeComponent.ins.sltColourRoof.currentValue;\n }\n\n static get baySize() {\n return HomeComponent.ins.sldBaySize.currentValue;\n }\n static get noOfBay() {\n return HomeComponent.ins.sldNoOfBay.currentValue;\n }\n\n static get roofSheetingType() {\n return HomeComponent.ins.sltRoofSheetingType.currentValue;\n }\n\n static get enableControl() {\n return HomeComponent.ins.btnEnableControl.currentValue;\n }\n}\n","import _ from \"lodash\";\nimport * as THREE from \"three\";\nimport {\n Box3,\n BoxBufferGeometry,\n BoxHelper,\n BufferGeometry,\n Color,\n EdgesGeometry,\n Float32BufferAttribute,\n Geometry,\n Group,\n Line3,\n LineBasicMaterial,\n LineSegments,\n Material,\n Matrix4,\n Mesh,\n Object3D,\n Plane,\n PlaneBufferGeometry,\n Shape,\n ShapeBufferGeometry,\n TextBufferGeometry,\n Vector2,\n Vector3,\n} from \"three\";\nimport { CSG } from \"three-csg-ts\";\nimport {\n DIMENSION_LABEL_TYPE,\n GEOMETRY_CATEGORY,\n GEOMETRY_TYPE,\n PATIOS_ROOF_TYPE,\n} from \"../app.config\";\nimport {\n BUILDING_SIDE,\n CONNECTION_TYPE,\n CUTOUT_ENABLE,\n EXISTING_BUILDING_CONFIG,\n OBJECT_TYPE,\n RAKECUT_TYPE,\n} from \"../app.constants\";\nimport { HomeComponent } from \"../containers/home\";\nimport { GeometryManager } from \"./geometry.manager\";\nimport { MaterialManager } from \"./material.manager\";\nimport {\n ColorShape,\n GeometryInfo,\n Printing2DLine,\n Printing3DGeometry,\n ViewType,\n} from \"./models\";\nimport SelectionManager from \"./selection.manager\";\nimport { UI } from \"./ui\";\nimport { Print2DView } from \"./models\";\nimport { PolygonUtils } from \"./polygonUtils\";\nimport * as mathjs from \"mathjs\";\nimport { BeamCapAndJointInfo } from \"./patios.manager\";\nexport class Util {\n private lineArrowGeo: GeometryInfo;\n private geo_gutterBack: GeometryInfo;\n constructor() {\n this.lineArrowGeo = new GeometryInfo();\n this.geo_gutterBack = new GeometryInfo();\n this.lineArrowGeo.geometry = new PlaneBufferGeometry(100, 30);\n this.lineArrowGeo.geometry.translate(50, 0, 0);\n this.lineArrowGeo.width = 30;\n this.lineArrowGeo.length = 100;\n }\n public getGeometryLength(\n geometry: THREE.BufferGeometry,\n axis: THREE.Vector3\n ): number {\n geometry.computeBoundingBox();\n let box = geometry.boundingBox;\n if (axis.x > 0) {\n return box.max.x - box.min.x;\n } else if (axis.y > 0) {\n return box.max.y - box.min.y;\n } else {\n return box.max.z - box.min.z;\n }\n }\n public getMeshLength(mesh: THREE.Mesh, axis: THREE.Vector3): number {\n let box = new Box3().setFromObject(mesh);\n if (axis.x > 0) {\n return box.max.x - box.min.x;\n } else if (axis.y > 0) {\n return box.max.y - box.min.y;\n } else {\n return box.max.z - box.min.z;\n }\n }\n public convertHexColorToRgb(hex): ColorShape {\n const color: ColorShape = {\n r: 0,\n g: 0,\n b: 0,\n };\n\n const result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n if (result) {\n color.r = parseInt(result[1], 16) / 255;\n color.g = parseInt(result[2], 16) / 255;\n color.b = parseInt(result[3], 16) / 255;\n }\n\n return color;\n }\n public getRoofCoverPolygonForFBRoof() {\n const totalRoofLength =\n UI.span + UI.multiSpan + UI.overhangLeft + UI.overhangRight;\n const totalRoofWidth =\n UI.totalBayLength + UI.overhangFront + UI.overhangBack;\n\n const minX = -(UI.span + UI.multiSpan) / 2 - UI.overhangLeft;\n const minZ = 0;\n\n const frontLeft = new Vector3(minX, 0, minZ + totalRoofWidth);\n const frontRight = new Vector3(\n minX + totalRoofLength,\n 0,\n minZ + totalRoofWidth\n );\n const backLeft = new Vector3(minX, 0, minZ);\n const backRight = new Vector3(minX + totalRoofLength, 0, minZ);\n\n let lineFrontLeft = [frontLeft];\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofWidth - UI.rakeCutLeftVer),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofWidth),\n ];\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofWidth - UI.rakeCutLeftVer),\n new Vector3(\n minX + UI.rakeCutLeftHor,\n 0,\n minZ + totalRoofWidth - UI.rakeCutLeftVer\n ),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofWidth),\n ];\n }\n\n let lineFrontRight = [frontRight];\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofLength - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofWidth\n ),\n new Vector3(\n minX + totalRoofLength,\n 0,\n minZ + totalRoofWidth - UI.rakeCutRightVer\n ),\n ];\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofLength - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofWidth\n ),\n new Vector3(\n minX + totalRoofLength - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofWidth - UI.rakeCutRightVer\n ),\n new Vector3(\n minX + totalRoofLength,\n 0,\n minZ + totalRoofWidth - UI.rakeCutRightVer\n ),\n ];\n }\n let lineFront = [...lineFrontLeft, ...lineFrontRight];\n\n let lineBackLeft = [backLeft];\n let lineBackRight = [backRight];\n let cutoutLength = UI.existingLength2;\n if (\n UI.structureType == CONNECTION_TYPE.FLY_OVER ||\n UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n if (UI.existingType == BUILDING_SIDE.BOTH) {\n if (UI.existingWidth2 > 0) {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width;\n } else {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width * 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n }\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackLeft = [\n new Vector3(minX + cutoutLength, 0, minZ),\n new Vector3(minX + cutoutLength, 0, minZ + UI.existingWidth1),\n new Vector3(minX, 0, minZ + UI.existingWidth1),\n ];\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackRight = [\n new Vector3(minX + totalRoofWidth, 0, minZ + UI.existingWidth1),\n new Vector3(\n minX + totalRoofWidth - cutoutLength,\n 0,\n minZ + UI.existingWidth1\n ),\n new Vector3(minX + totalRoofWidth - cutoutLength, 0, minZ),\n ];\n }\n }\n\n let lineBack = [...lineBackRight, ...lineBackLeft];\n\n return [...lineFront, ...lineBack];\n }\n public getRoofCoverPolygonForLRRoof() {\n const totalRoofLength =\n UI.span + UI.multiSpan + UI.overhangFront + UI.overhangBack;\n const totalRoofWidth =\n UI.totalBayLength + UI.overhangLeft + UI.overhangRight;\n\n const minX = -UI.totalBayLength / 2 - UI.overhangLeft;\n const minZ = 0;\n\n const frontLeft = new Vector3(minX, 0, minZ + totalRoofLength);\n const frontRight = new Vector3(\n minX + totalRoofWidth,\n 0,\n minZ + totalRoofLength\n );\n const backLeft = new Vector3(minX, 0, minZ);\n const backRight = new Vector3(minX + totalRoofWidth, 0, minZ);\n\n let lineFrontLeft = [frontLeft];\n if (UI.rakeCutLeftType == RAKECUT_TYPE.ANGLE) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofLength - UI.rakeCutLeftVer),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofLength),\n ];\n } else if (UI.rakeCutLeftType == RAKECUT_TYPE.STEP) {\n lineFrontLeft = [\n new Vector3(minX, 0, minZ + totalRoofLength - UI.rakeCutLeftVer),\n new Vector3(\n minX + UI.rakeCutLeftHor,\n 0,\n minZ + totalRoofLength - UI.rakeCutLeftVer\n ),\n new Vector3(minX + UI.rakeCutLeftHor, 0, minZ + totalRoofLength),\n ];\n }\n\n let lineFrontRight = [frontRight];\n if (UI.rakeCutRightType == RAKECUT_TYPE.ANGLE) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofWidth - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofLength\n ),\n new Vector3(\n minX + totalRoofWidth,\n 0,\n minZ + totalRoofLength - UI.rakeCutRightVer\n ),\n ];\n } else if (UI.rakeCutRightType == RAKECUT_TYPE.STEP) {\n lineFrontRight = [\n new Vector3(\n minX + totalRoofWidth - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofLength\n ),\n new Vector3(\n minX + totalRoofWidth - UI.rakeCutRightHor,\n 0,\n minZ + totalRoofLength - UI.rakeCutRightVer\n ),\n new Vector3(\n minX + totalRoofWidth,\n 0,\n minZ + totalRoofLength - UI.rakeCutRightVer\n ),\n ];\n }\n let lineFront = [...lineFrontLeft, ...lineFrontRight];\n\n let lineBackLeft = [backLeft];\n let lineBackRight = [backRight];\n let cutoutLength = UI.existingLength2;\n let cutOutWidth = UI.existingWidth1;\n if (\n UI.structureType == CONNECTION_TYPE.FLY_OVER ||\n UI.structureType == CONNECTION_TYPE.BLACK_FLY_OVER\n ) {\n if (UI.existingType == BUILDING_SIDE.BOTH) {\n if (UI.existingWidth2 > 0) {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width;\n } else {\n cutoutLength =\n UI.existingLength2 -\n HomeComponent.ins.existingWallManager.geo_existingWallL2.width * 2 -\n EXISTING_BUILDING_CONFIG.EAVE_OFFSET_BACK;\n }\n }\n } else if (UI.structureType == CONNECTION_TYPE.FASCIA) {\n const shouldSnap =\n HomeComponent.ins.uiManager.calcShouldSnapRoofToExistingWhenCutout();\n if (shouldSnap) {\n cutoutLength = UI.existingLength2 + UI.eaveWidth;\n cutOutWidth = UI.existingWidth1 - UI.eaveWidth;\n }\n }\n if (UI.cutOutType == CUTOUT_ENABLE.YES) {\n if (\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackLeft = [\n new Vector3(minX + cutoutLength, 0, minZ),\n new Vector3(minX + cutoutLength, 0, minZ + cutOutWidth),\n new Vector3(minX, 0, minZ + cutOutWidth),\n ];\n }\n if (\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH\n ) {\n lineBackRight = [\n new Vector3(minX + totalRoofWidth, 0, minZ + cutOutWidth),\n new Vector3(\n minX + totalRoofWidth - cutoutLength,\n 0,\n minZ + cutOutWidth\n ),\n new Vector3(minX + totalRoofWidth - cutoutLength, 0, minZ),\n ];\n }\n }\n\n let lineBack = [...lineBackRight, ...lineBackLeft];\n\n return [...lineFront, ...lineBack];\n }\n private drawBoundingBox(object: THREE.Object3D): void {\n // geometry.computeBoundingBox();\n // var box = geometry.boundingBox;\n // let cubeGeo = new THREE.BoxGeometry(10, 10, 10);\n // let cube = new THREE.Mesh(cubeGeo, new THREE.MeshBasicMaterial({ color: 0x74d00b }));\n // cube.position.set(box.min.x, box.min.y, box.min.z);\n // this.scene.add(cube);\n // cube = new THREE.Mesh(cubeGeo, new THREE.MeshBasicMaterial({ color: 0x74d00b }));\n // cube.position.set(box.max.x, box.max.y, box.max.z);\n // this.scene.add(cube);\n }\n private fitCameraToSelection(camera, controls, selection, fitOffset = 1.2) {\n const box = new Box3();\n\n for (const object of selection) box.expandByObject(object);\n\n const size = box.getSize(new Vector3());\n const center = box.getCenter(new Vector3());\n\n const maxSize = Math.max(size.x, size.y, size.z);\n const fitHeightDistance =\n maxSize / (2 * Math.atan((Math.PI * camera.fov) / 360));\n const fitWidthDistance = fitHeightDistance / camera.aspect;\n const distance = fitOffset * Math.max(fitHeightDistance, fitWidthDistance);\n\n const direction = controls.target\n .clone()\n .sub(camera.position)\n .normalize()\n .multiplyScalar(distance);\n\n controls.maxDistance = distance * 10;\n controls.target.copy(center);\n\n camera.near = distance / 100;\n camera.far = distance * 100;\n camera.updateProjectionMatrix();\n\n camera.position.copy(controls.target).sub(direction);\n\n controls.update();\n }\n fitCameraToObject(camera, object, offset, controls) {\n offset = offset || 1.25;\n\n const boundingBox = new THREE.Box3();\n\n // get bounding box of object - this will be used to setup controls and camera\n boundingBox.setFromObject(object);\n\n let center: THREE.Vector3;\n boundingBox.getCenter(center);\n let size: THREE.Vector3;\n boundingBox.getSize(size);\n\n // get the max side of the bounding box (fits to width OR height as needed )\n const maxDim = Math.max(size.x, size.y, size.z);\n const fov = camera.fov * (Math.PI / 180);\n let cameraZ = Math.abs((maxDim / 4) * Math.tan(fov * 2));\n\n cameraZ *= offset; // zoom out a little so that objects don't fill the screen\n\n camera.position.z = cameraZ;\n\n const minZ = boundingBox.min.z;\n const cameraToFarEdge = minZ < 0 ? -minZ + cameraZ : cameraZ - minZ;\n\n camera.far = cameraToFarEdge * 3;\n camera.updateProjectionMatrix();\n\n if (controls) {\n // set camera to rotate around center of loaded object\n controls.target = center;\n\n // prevent camera from zooming out far enough to create far plane cutoff\n controls.maxDistance = cameraToFarEdge * 2;\n\n controls.saveState();\n } else {\n camera.lookAt(center);\n }\n }\n degreesToRadians(degrees: number) {\n var pi = Math.PI;\n return this.round(degrees * (pi / 180));\n }\n round(num: number): number {\n return parseFloat(num.toFixed(3));\n }\n sin(degrees: number): number {\n return this.round(Math.sin(this.degreesToRadians(degrees)));\n }\n cos(degrees: number): number {\n return this.round(Math.cos(this.degreesToRadians(degrees)));\n }\n tan(degrees: number): number {\n return this.round(Math.tan(this.degreesToRadians(degrees)));\n }\n public createArrowLine(views: Print2DView[]): THREE.Line {\n let origin = new Vector3(0, 0, 0);\n let head = new Vector3(0, 0, 1000);\n let hand1 = new Vector3(-50, 0, 950);\n let hand2 = new Vector3(50, 0, 950);\n\n let geoLine = new Geometry();\n geoLine.vertices.push(origin);\n geoLine.vertices.push(head);\n\n geoLine.vertices.push(head);\n geoLine.vertices.push(hand1);\n\n geoLine.vertices.push(hand1);\n geoLine.vertices.push(hand2);\n\n geoLine.vertices.push(hand2);\n geoLine.vertices.push(head);\n\n let dim = new THREE.Line(geoLine);\n dim.userData = { type: \"Arrow\", views: views };\n\n return dim;\n }\n public createText(\n textStr: string,\n views: Print2DView[],\n textParameter,\n position: Vector3\n ): Mesh {\n let textGeo = new TextBufferGeometry(textStr, textParameter);\n textGeo.center();\n\n let text = new Mesh(textGeo, MaterialManager.Instance().DIMENSION_TEXT);\n text.userData = {\n type: GEOMETRY_TYPE.DIMENSION_TEXT,\n value: textStr,\n views: views,\n rotation: new Vector3(0, 0, 0),\n };\n text.position.setZ(position.z);\n text.position.setX(position.x);\n\n return text;\n }\n getOutlineGeometry(\n geo: Geometry | BufferGeometry,\n threshold: number\n ): EdgesGeometry {\n return new EdgesGeometry(geo, threshold);\n }\n getOutlineGeometryFromMesh(mesh: Mesh, threshold: number) {\n let geo = mesh.geometry.clone();\n geo.scale(mesh.scale.x, mesh.scale.y, mesh.scale.z);\n return new EdgesGeometry(geo, threshold);\n }\n getOutlineGeometryFromMeshNoScale(mesh: Mesh, threshold: number) {\n let geo = mesh.geometry.clone();\n //geo.scale(mesh.scale.x, mesh.scale.y, mesh.scale.z);\n return new EdgesGeometry(geo, threshold);\n }\n clipOutline(geo: EdgesGeometry, plane: Plane): BufferGeometry {\n let vertices = geo.getAttribute(\"position\").array;\n let newVertices = [];\n\n let intersectPoints: Vector3[] = [];\n\n for (let i = 0; i < vertices.length; i += 6) {\n let v1 = new Vector3(vertices[i], vertices[i + 1], vertices[i + 2]);\n let v2 = new Vector3(vertices[i + 3], vertices[i + 4], vertices[i + 5]);\n\n let line = new Line3(v1, v2);\n let intersectPoint = new Vector3();\n let rs = plane.intersectLine(line, intersectPoint);\n\n let dis1 = plane.distanceToPoint(v1);\n let dis2 = plane.distanceToPoint(v2);\n\n if (dis1 < 0 && dis2 < 0) continue;\n\n if (rs) {\n if (dis1 > 0) {\n newVertices.push(v1);\n } else {\n newVertices.push(v2);\n }\n\n newVertices.push(intersectPoint);\n intersectPoints.push(intersectPoint);\n } else {\n newVertices.push(v1, v2);\n }\n }\n\n for (let i = 0; i < intersectPoints.length - 1; i++) {\n newVertices.push(intersectPoints[i]);\n newVertices.push(intersectPoints[i + 1]);\n }\n\n return new BufferGeometry().setFromPoints(newVertices);\n }\n clipOutlineBasePanel(geo: EdgesGeometry, plane: Plane): BufferGeometry {\n let vertices = geo.getAttribute(\"position\").array;\n let newVertices = [];\n\n let intersectPoints: Vector3[] = [];\n\n for (let i = 0; i < vertices.length; i += 6) {\n let v1 = new Vector3(vertices[i], vertices[i + 1], vertices[i + 2]);\n let v2 = new Vector3(vertices[i + 3], vertices[i + 4], vertices[i + 5]);\n\n let line = new Line3(v1, v2);\n let intersectPoint = new Vector3();\n let rs = plane.intersectLine(line, intersectPoint);\n\n let dis1 = plane.distanceToPoint(v1);\n let dis2 = plane.distanceToPoint(v2);\n\n if (dis1 < 0 && dis2 < 0) continue;\n\n if (rs) {\n if (dis1 > 0) {\n newVertices.push(v1);\n } else {\n newVertices.push(v2);\n }\n\n newVertices.push(intersectPoint);\n intersectPoints.push(intersectPoint);\n } else {\n newVertices.push(v1, v2);\n }\n }\n\n if (HomeComponent.ins.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF) {\n if (intersectPoints.length === 4) {\n intersectPoints = this.createPolygon(intersectPoints);\n }\n }\n for (let i = 0; i < intersectPoints.length - 1; i++) {\n newVertices.push(intersectPoints[i]);\n newVertices.push(intersectPoints[i + 1]);\n }\n\n return new BufferGeometry().setFromPoints(newVertices);\n }\n public createPolygon(initPoints) {\n if (initPoints.length > 3) {\n let points = this.sortPoints(\n initPoints,\n initPoints[0].x !== initPoints[1].x ? \"x\" : \"z\"\n );\n\n let polygon = [...points.slice(0, 3)];\n points.splice(0, 3);\n this.findNextPoinst(polygon, points, 2);\n return polygon;\n } else {\n return initPoints;\n }\n }\n public findNextPoinst(polygon, restOfPoints, indexOfMaxPoint) {\n if (restOfPoints.length === 0) {\n return;\n }\n let r1 = [\n polygon[indexOfMaxPoint],\n polygon[indexOfMaxPoint === polygon.length - 1 ? 0 : indexOfMaxPoint + 1],\n ];\n let r2 = [polygon[indexOfMaxPoint - 1], polygon[indexOfMaxPoint]];\n\n let simpleMaxPolygon = [\n polygon[indexOfMaxPoint - 1],\n polygon[indexOfMaxPoint],\n polygon[indexOfMaxPoint === polygon.length - 1 ? 0 : indexOfMaxPoint + 1],\n ];\n\n let nextPoint = restOfPoints.splice(0, 1)[0];\n let closestPoint = PolygonUtils.getClosestPointInsidePolygon(\n simpleMaxPolygon,\n nextPoint\n );\n\n let isPointOnSegmentR1 = PolygonUtils.isPointOnSegment(\n r1 as [Vector3, Vector3],\n closestPoint\n );\n let isPointOnSegmentR2 = PolygonUtils.isPointOnSegment(\n r2 as [Vector3, Vector3],\n closestPoint\n );\n\n if (!(isPointOnSegmentR1 && isPointOnSegmentR2)) {\n if (isPointOnSegmentR1) {\n polygon.splice(indexOfMaxPoint + 1, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint + 1);\n }\n if (isPointOnSegmentR2) {\n polygon.splice(indexOfMaxPoint, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint);\n }\n } else {\n let r1_1 = [r1[0], nextPoint];\n let r1_2 = [r1[1], nextPoint];\n\n let inter1 = mathjs.intersect(\n this.vector3ToArray(r1_1[0]),\n this.vector3ToArray(r1_1[1]),\n this.vector3ToArray(r2[0]),\n this.vector3ToArray(r2[1])\n );\n let inter2 = mathjs.intersect(\n this.vector3ToArray(r1_2[0]),\n this.vector3ToArray(r1_2[1]),\n this.vector3ToArray(r2[0]),\n this.vector3ToArray(r2[1])\n );\n\n if (\n inter1 &&\n inter2 &&\n PolygonUtils.isPointOnSegment(\n r2 as [Vector3, Vector3],\n this.arrayToVector3(inter1)\n ) &&\n PolygonUtils.isPointOnSegment(\n r2 as [Vector3, Vector3],\n this.arrayToVector3(inter2)\n )\n ) {\n // Add point in r2\n polygon.splice(indexOfMaxPoint, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint);\n } else {\n // Add point in r1\n polygon.splice(indexOfMaxPoint + 1, 0, nextPoint);\n this.findNextPoinst(polygon, restOfPoints, indexOfMaxPoint + 1);\n }\n }\n }\n public vector3ToArray(vector) {\n return [vector.x, vector.y, vector.z];\n }\n public arrayToVector3(array) {\n return new Vector3(array[0], array[1], array[2]);\n }\n public sortPoints(points, direction) {\n let clonePoints = [...points];\n clonePoints.sort((a, b) => {\n if (a[direction] !== b[direction]) {\n return a[direction] - b[direction];\n } else {\n return a.y - b.y;\n }\n });\n\n return clonePoints;\n }\n public getOutlineRafterBeam(mesh: Mesh, lines: Printing2DLine[]) {\n let views = mesh.userData.views;\n\n mesh.updateWorldMatrix(true, true);\n let meshClone = new Mesh((mesh as Mesh).geometry);\n\n let box = new BoxHelper(meshClone);\n box.applyMatrix4(mesh.matrixWorld);\n\n box.updateWorldMatrix(true, true);\n let _geo = box[\"geometry\"].clone() as BufferGeometry;\n _geo.applyMatrix4(box.matrixWorld);\n\n let positions: any = _geo.attributes[\"position\"].array;\n let boxGeo = new BufferGeometry().setAttribute(\n \"position\",\n new Float32BufferAttribute(positions.slice(0, positions.length / 2), 3)\n );\n\n this.getOutlineByViews(mesh, boxGeo, lines, views);\n }\n public getOutlineByViews(\n group: THREE.Object3D,\n boxGeo: BufferGeometry,\n lines: Printing2DLine[],\n views\n ) {\n let mat = (group as Mesh).material as Material;\n let outLineClip = boxGeo;\n if (mat.clippingPlanes && mat.clippingPlanes.length > 0) {\n for (let i = 0; i < mat.clippingPlanes.length; i++) {\n let clipPlane = mat.clippingPlanes[i].clone() as Plane;\n\n outLineClip = this.clipOutline(outLineClip, clipPlane);\n }\n }\n\n lines.push({\n vertices: this.getVerticeFromBufferGeo(outLineClip),\n views: views,\n objectType: group.userData?.type,\n });\n }\n public createOutline(\n mesh: Mesh,\n lines: Printing2DLine[],\n viewMesh?: Print2DView[]\n ) {\n mesh.updateWorldMatrix(true, true);\n let views = mesh.userData.views;\n if (viewMesh) {\n views = viewMesh;\n }\n //Side view\n let data = this.getEngineeringObjetOutline(mesh, views);\n\n lines.push(data.line as Printing2DLine);\n }\n public getEngineeringObjetOutline(\n obj: Object3D,\n views: Print2DView[],\n isLineSegment?: boolean\n ) {\n obj.updateWorldMatrix(true, true);\n\n let _geo = obj[\"geometry\"].clone() as BufferGeometry;\n _geo.applyMatrix4(obj.matrixWorld);\n\n let outline = this.createOutLineGeo(_geo, null, null);\n\n let objectType = \"\";\n if (obj.userData && obj.userData.type) {\n objectType = obj.userData.type;\n }\n\n let mat = new LineBasicMaterial({ color: 0x000000 });\n let outLineMesh = new LineSegments(outline, mat);\n outLineMesh.userData = { type: objectType };\n\n return {\n line: {\n vertices: this.getVerticeFromBufferGeo(outline),\n views,\n objectType: obj.userData?.type,\n },\n mesh: outLineMesh,\n };\n }\n public createOutLineGeo(geo, plane, thresholdAngle?: number) {\n let outLine: EdgesGeometry = new EdgesGeometry(geo);\n\n if (thresholdAngle) {\n outLine = new EdgesGeometry(geo, thresholdAngle);\n }\n return outLine;\n }\n public getVerticeFromBufferGeo(geo: BufferGeometry) {\n let positions = geo.attributes[\"position\"].array;\n let vertices: Vector3[] = [];\n for (let i = 0; i < positions.length; i += 3) {\n const vertex = new Vector3(\n positions[i],\n positions[i + 1],\n positions[i + 2]\n );\n vertices.push(vertex);\n }\n\n return vertices;\n }\n public getStartEndPoint(box: Box3): Vector3[] {\n let maxHeight = 0;\n let p1: Vector3;\n let p2: Vector3;\n\n if (box.max.x - box.min.x > maxHeight) {\n maxHeight = box.max.x - box.min.x;\n\n p1 = new Vector3(\n box.min.x,\n (box.max.y + box.min.y) / 2,\n (box.max.z + box.min.z) / 2\n );\n p2 = new Vector3(\n box.max.x,\n (box.max.y + box.min.y) / 2,\n (box.max.z + box.min.z) / 2\n );\n }\n if (box.max.y - box.min.y > maxHeight) {\n maxHeight = box.max.y - box.min.y;\n\n p1 = new Vector3(\n (box.max.x + box.min.x) / 2,\n box.min.y,\n (box.max.z + box.min.z) / 2\n );\n p2 = new Vector3(\n (box.max.x + box.min.x) / 2,\n box.max.y,\n (box.max.z + box.min.z) / 2\n );\n }\n if (box.max.z - box.min.z > maxHeight) {\n p1 = new Vector3(\n (box.max.x + box.min.x) / 2,\n (box.max.y + box.min.y) / 2,\n box.min.z\n );\n p2 = new Vector3(\n (box.max.x + box.min.x) / 2,\n (box.max.y + box.min.y) / 2,\n box.max.z\n );\n }\n\n return [p1, p2];\n }\n public getDimensionValue(value: number) {\n //return parseFloat(`${value/1000}`).toFixed(2) + 'm';\n return Math.round(value).toString(); //parseFloat(`${value/1000}`).toFixed(3);\n }\n\n private getAllMesh(parent: Object3D): Printing3DGeometry[] {\n let lsMesh: Printing3DGeometry[] = [];\n for (let _mesh of parent.children) {\n if (_mesh.type !== \"Mesh\" && _mesh.type !== \"Group\") {\n continue;\n }\n\n if (_mesh.type === \"Mesh\") {\n let mesh = _mesh as Mesh;\n mesh.updateWorldMatrix(true, true);\n\n if (mesh.geometry.type === \"BufferGeometry\") {\n let geo = new Geometry().fromBufferGeometry(\n mesh.geometry as BufferGeometry\n );\n geo.applyMatrix4(mesh.matrixWorld);\n lsMesh.push({\n vertices: geo.vertices,\n faces: geo.faces.map((f) => ({ a: f.a, b: f.b, c: f.c })),\n });\n } else if (mesh.geometry.type === \"Geometry\") {\n let geo = mesh.geometry as Geometry;\n geo.applyMatrix4(mesh.matrixWorld);\n lsMesh.push({\n vertices: geo.vertices,\n faces: geo.faces.map((f) => ({ a: f.a, b: f.b, c: f.c })),\n });\n }\n }\n\n if (_mesh.children && _mesh.children.length > 0) {\n lsMesh.push(...this.getAllMesh(_mesh));\n }\n }\n\n return lsMesh;\n }\n public cloneGeometryInfo(original): GeometryInfo {\n let newGeoInfo = new GeometryInfo();\n newGeoInfo.geometry = original.geometry.clone();\n newGeoInfo.width = original.width;\n newGeoInfo.length = original.length;\n newGeoInfo.height = original.height;\n newGeoInfo.name = original.name;\n return newGeoInfo;\n }\n public getHeightByAngle(\n height: number,\n length: number,\n angle: number,\n cons: number\n ) {\n let allow = cons;\n if (UI.structureType == 5 && UI.isUpFasciaUpstandardBracket) {\n allow = -cons;\n }\n return height + this.tan(angle) * length * allow;\n }\n public getHeightByAngle2(\n height: number,\n length: number,\n angle: number,\n cons: number\n ) {\n return height + (length / this.tan(angle)) * cons;\n }\n public getHypotenuseByCos(length, angle) {\n return length / this.cos(angle);\n }\n public getSceneBox() {\n let left1 = UI.existingLength1 / 2;\n let right1 = UI.existingLength1 / 2;\n let back1 = UI.existingWidth1 / 2 + 1000;\n let front1 = UI.existingWidth1 / 2;\n\n let leftCondition =\n UI.existingType == BUILDING_SIDE.LEFT ||\n UI.existingType == BUILDING_SIDE.BOTH;\n let rightCondition =\n UI.existingType == BUILDING_SIDE.RIGHT ||\n UI.existingType == BUILDING_SIDE.BOTH;\n let eave = 1500 - UI.eaveWidth;\n\n if (UI.existingWidth1 > 0) {\n if (leftCondition) {\n left1 += eave;\n }\n if (rightCondition) {\n right1 += eave;\n }\n }\n if (UI.existingLength2 > eave) {\n if (leftCondition) {\n left1 += UI.existingLength2 - eave;\n }\n if (rightCondition) {\n right1 += UI.existingLength2 - eave;\n }\n }\n if (UI.existingWidth2 > 0) {\n if (leftCondition) {\n left1 += eave;\n }\n if (rightCondition) {\n right1 += eave;\n }\n }\n\n //Front\n if (front1 < UI.eaveWidth) {\n front1 = UI.eaveWidth - UI.existingWidth1;\n }\n if (UI.existingType != 0) {\n if (UI.existingLength2 > 0) {\n front1 += UI.eaveWidth;\n }\n if (UI.existingWidth2 > 0) {\n front1 += UI.existingWidth2;\n front1 -= UI.eaveWidth;\n }\n }\n\n let point1 = new Vector3(-left1, 0, front1);\n let point2 = new Vector3(right1, 5000, -back1);\n\n let box1 = new Box3().setFromPoints([point1, point2]);\n\n let existingHousetLeft = UI.totalBayLength / 2 + UI.overhangLeft;\n let existingHouseRight = UI.totalBayLength / 2 + UI.overhangRight;\n let existingHouseBack = UI.existingWidth1 / 2 + 1000;\n let existingHouseFront =\n UI.span + UI.multiSpan + UI.overhangFront - UI.existingWidth1 / 2;\n\n let diff = UI.existingLength1 - UI.totalBayLength;\n let translate = 0;\n if (UI.existingType == BUILDING_SIDE.LEFT) {\n translate = -diff / 2 + UI.overhangLeft;\n } else if (UI.existingType == BUILDING_SIDE.RIGHT) {\n translate = diff / 2 - UI.overhangRight;\n } else {\n translate = 0;\n }\n\n let point3 = new Vector3(-existingHousetLeft, 0, existingHouseFront);\n let point4 = new Vector3(existingHouseRight, 5000, -existingHouseBack);\n\n let box2 = new Box3().setFromPoints([point3, point4]);\n box2.translate(new Vector3(translate, 0, 0));\n\n return box1.union(box2);\n }\n public getAllMeshDescendant(parent: Object3D): Object3D[] {\n let meshes: Object3D[] = [];\n if (!parent.children) return [];\n\n for (let child of parent.children) {\n if (child.children) {\n meshes = meshes.concat(this.getAllMeshDescendant(child));\n } else {\n meshes.push(child);\n }\n }\n\n return meshes;\n }\n public getObjectsBoundingBox(objects: Object3D[]) {\n //this function has problem that is, updateMatrixWorld() has some delay\n\n let objectCloned: Object3D[] = [];\n let box = new Box3();\n\n for (let obj of objects) {\n if (obj.children.length > 0) {\n // var objChildren = this.getChildDescendent(obj);\n objectCloned.push(...obj.children);\n } else {\n objectCloned.push(obj);\n }\n }\n\n for (let obj of objectCloned) {\n if (obj[\"geometry\"]) {\n var geo = (obj as Mesh).geometry;\n geo.computeBoundingBox();\n // var min = geo.boundingBox.min;\n // var max = geo.boundingBox.max;\n\n var objBox = geo.boundingBox.clone();\n\n obj.updateMatrixWorld();\n objBox.applyMatrix4(obj.matrixWorld);\n\n // min.x += obj.position.x;\n // min.y += obj.position.y;\n // min.z += obj.position.z;\n\n // max.x += obj.position.x;\n // max.y += obj.position.y;\n // max.z += obj.position.z;\n\n box = box.expandByPoint(objBox.min);\n box = box.expandByPoint(objBox.max);\n }\n }\n\n //objectCloned = objectCloned.filter(o => o.constructor.name == 'Mesh');\n\n // for(let obj of objectCloned){\n // //if(obj.constructor.name != 'Mesh') continue;\n // box = box.expandByObject(obj);\n // }\n\n return box;\n }\n public getObjectBoundingBox(obj: Object3D): Box3 {\n let box = new Box3();\n return box.expandByObject(obj);\n }\n public getChildDescendent(group: Object3D): Object3D[] {\n if (!group.children || group.children.length == 0) return [];\n\n let children: Object3D[] = [];\n\n for (let child of group.children) {\n children.push(child);\n if (child.children && child.children.length > 0) {\n children.push(...this.getChildDescendent(child));\n }\n }\n\n return children;\n }\n public addArrowForLine(\n line: Mesh,\n userData: any = null,\n onDragCallback = null\n ): Object3D[] {\n let box = new Box3().setFromObject(line);\n let lineLength = box.max.x - box.min.x;\n let arrowLength = 150;\n let angle = 15;\n\n if (lineLength < 300) {\n return [];\n }\n\n let y = this.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0, 0);\n shape1.lineTo(arrowLength, y);\n shape1.lineTo(arrowLength, -y);\n shape1.closePath();\n const mat = MaterialManager.Instance().DIMENSION_TEXT.clone();\n let arrow1 = new Mesh(new ShapeBufferGeometry(shape1), mat);\n arrow1.userData = {\n type: GEOMETRY_TYPE.DIMENSION_CAP,\n views: line.userData.views,\n ...userData,\n };\n arrow1.position.set(\n line.position.x - lineLength / 2,\n line.position.y,\n line.position.z\n );\n let arrow2 = arrow1.clone();\n arrow2.rotateZ(Math.PI);\n arrow2.userData = {\n type: GEOMETRY_TYPE.DIMENSION_CAP,\n views: line.userData.views,\n ...userData,\n };\n arrow2.position.set(\n line.position.x + lineLength / 2,\n line.position.y,\n line.position.z\n );\n\n if (userData?.arrowColor) {\n mat.color = new Color(userData.arrowColor);\n }\n\n if (onDragCallback) {\n SelectionManager.ins.addEventListener(\"drag\", onDragCallback, arrow1);\n SelectionManager.ins.addEventListener(\"drag\", onDragCallback, arrow2);\n }\n\n return [arrow1, arrow2];\n }\n public createBeamGroup(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n isHighLightBeam = false,\n beamEndCapAndJointInfo: BeamCapAndJointInfo = {\n hasStartCap: false,\n hasEndCap: false,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n ) {\n let scale = length / beamGeo.length;\n\n let mesh = new Mesh(\n beamGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BEAM_TRANSPARENT\n : MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.scale.setX(scale);\n\n let startCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let endCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n if (directionOffset < 0) {\n startCap.position.set(\n -length + beamCapGeo.length / 2 - 2,\n 0,\n beamCapGeo.width / 2\n );\n endCap.position.set(-beamCapGeo.length / 2 + 2, 0, beamCapGeo.width / 2);\n } else if (directionOffset > 0) {\n startCap.position.set(\n 0 + beamCapGeo.length / 2 - 2,\n 0,\n beamCapGeo.width / 2\n );\n endCap.position.set(\n length - beamCapGeo.length / 2 + 2,\n 0,\n beamCapGeo.width / 2\n );\n } else {\n startCap.position.set(\n -length / 2 + beamCapGeo.length / 2 - 2,\n 0,\n beamCapGeo.width / 2\n );\n endCap.position.set(\n length / 2 - beamCapGeo.length / 2 + 2,\n 0,\n beamCapGeo.width / 2\n );\n }\n\n startCap.rotateY(Math.PI / 2);\n endCap.rotateY(-Math.PI / 2);\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n beamGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n beamGroup.add(mesh);\n\n if (beamEndCapAndJointInfo.hasStartCap) {\n beamGroup.add(startCap);\n }\n if (beamEndCapAndJointInfo.hasEndCap) {\n beamGroup.add(endCap);\n }\n\n if (beamEndCapAndJointInfo.jointGeo) {\n const startJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n const endJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n if (directionOffset < 0) {\n startJoint.position.set(\n -length + beamCapGeo.length / 2 - 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n endJoint.position.set(\n -beamCapGeo.length / 2 + 2,\n 0,\n beamCapGeo.width / 2\n );\n } else if (directionOffset > 0) {\n startJoint.position.set(\n 0 + beamCapGeo.length / 2 - 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n endJoint.position.set(\n length - beamCapGeo.length / 2 + 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n } else {\n startJoint.position.set(\n -length / 2 + beamCapGeo.length / 2 - 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n endJoint.position.set(\n length / 2 - beamCapGeo.length / 2 + 2,\n beamEndCapAndJointInfo.jointGeo.height / 2 +\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamCapGeo.width / 2\n );\n }\n\n startJoint.rotateY(Math.PI / 2);\n endJoint.rotateY(-Math.PI / 2);\n\n if (beamEndCapAndJointInfo.hasStartJoint) {\n beamGroup.add(startJoint);\n }\n if (beamEndCapAndJointInfo.hasEndJoint) {\n beamGroup.add(endJoint);\n }\n }\n\n return beamGroup;\n }\n\n public getListSeperateBeamsByBaysForFbGable(\n startEndOfBayZ,\n startBeamStartZ,\n startBeamEndZ,\n startEndCutBeamZ,\n startStartCutBeamZ\n ) {\n let endOfBayZ = startEndOfBayZ;\n let beamStartZ = startBeamStartZ;\n let endCutBeamZ = startEndCutBeamZ;\n let beamEndZ = startBeamEndZ;\n let startCutBeamZ = startStartCutBeamZ;\n\n const beams = [];\n for (let i = 0; i < UI.listBay.length; i++) {\n endOfBayZ += UI.listBay[i].value;\n if (beamStartZ > endOfBayZ) {\n continue;\n }\n\n let shouldAddBeam = false;\n if (UI.listBay[i].isCut) {\n endCutBeamZ = endOfBayZ;\n shouldAddBeam = true;\n }\n if (i == UI.listBay.length - 1 || beamEndZ < endOfBayZ) {\n endCutBeamZ = beamEndZ;\n shouldAddBeam = true;\n }\n\n if (shouldAddBeam) {\n beams.push([startCutBeamZ, endCutBeamZ]);\n startCutBeamZ = endCutBeamZ;\n }\n\n if (beamEndZ < endOfBayZ) {\n break;\n }\n }\n\n return beams;\n }\n\n public getListSeperateBeamsByBays(\n startEndOfBayX,\n startBeamStartX,\n startBeamEndX,\n startEndCutBeamX,\n startStartCutBeamX\n ) {\n const beams = [];\n let endOfBayX = startEndOfBayX;\n let beamStartX = startBeamStartX;\n let endCutBeamX = startEndCutBeamX;\n let beamEndX = startBeamEndX;\n let startCutBeamX = startStartCutBeamX;\n\n for (let i = 0; i < UI.listBay.length; i++) {\n endOfBayX += UI.listBay[i].value;\n if (beamStartX > endOfBayX) {\n continue;\n }\n\n let shouldAddBeam = false;\n if (UI.listBay[i].isCut) {\n endCutBeamX = endOfBayX;\n shouldAddBeam = true;\n }\n if (i == UI.listBay.length - 1 || beamEndX < endOfBayX) {\n endCutBeamX = beamEndX;\n shouldAddBeam = true;\n }\n\n if (shouldAddBeam) {\n beams.push([startCutBeamX, endCutBeamX]);\n startCutBeamX = endCutBeamX;\n }\n\n if (beamEndX < endOfBayX) {\n break;\n }\n }\n\n return beams;\n }\n\n public createBeamGroup2(\n beamGeo: GeometryInfo,\n beamCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n userDataPos: any,\n beamGeoTranslationZ: number,\n beamDirection: string,\n isHighLightBeam = false,\n beamEndCapAndJointInfo: BeamCapAndJointInfo = {\n hasStartCap: false,\n hasEndCap: false,\n hasStartJoint: false,\n hasEndJoint: false,\n jointGeo: null,\n }\n ) {\n let scale = length / beamGeo.length;\n\n let mesh = new Mesh(\n beamGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BEAM_TRANSPARENT\n : MaterialManager.Instance().BEAM\n );\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n mesh.scale.setX(scale);\n\n let startCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n let endCap = new Mesh(\n beamCapGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endCap.userData = {\n type: GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP,\n code: getBeamEndCapCode(\n beamCapGeo.name,\n HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode\n ),\n };\n if (beamDirection == \"x\") {\n if (directionOffset < 0) {\n startCap.position.set(\n -length + beamCapGeo.length / 2 - 2,\n 0,\n beamGeoTranslationZ\n );\n endCap.position.set(-beamCapGeo.length / 2 + 2, 0, beamGeoTranslationZ);\n } else if (directionOffset > 0) {\n startCap.position.set(\n 0 + beamCapGeo.length / 2 - 2,\n 0,\n beamGeoTranslationZ\n );\n endCap.position.set(\n length - beamCapGeo.length / 2 + 2,\n 0,\n beamGeoTranslationZ\n );\n } else {\n startCap.position.set(\n -length / 2 + beamCapGeo.length / 2 - 2,\n 0,\n beamGeoTranslationZ\n );\n endCap.position.set(\n length / 2 - beamCapGeo.length / 2 + 2,\n 0,\n beamGeoTranslationZ\n );\n }\n\n startCap.rotateY(Math.PI / 2);\n endCap.rotateY(-Math.PI / 2);\n } else if (beamDirection == \"z\") {\n if (directionOffset < 0) {\n startCap.position.set(\n beamGeoTranslationZ,\n 0,\n -length + beamCapGeo.length / 2 - 2\n );\n endCap.position.set(beamGeoTranslationZ, 0, -beamCapGeo.length / 2 + 2);\n } else if (directionOffset > 0) {\n startCap.position.set(\n beamGeoTranslationZ,\n 0,\n beamCapGeo.length / 2 - 2\n );\n endCap.position.set(\n beamGeoTranslationZ,\n 0,\n length - beamCapGeo.length / 2 + 2\n );\n } else {\n startCap.position.set(\n beamGeoTranslationZ,\n 0,\n -length / 2 + beamCapGeo.length / 2 - 2\n );\n endCap.position.set(\n beamGeoTranslationZ,\n 0,\n length / 2 - beamCapGeo.length / 2 + 2\n );\n }\n\n // startCap.rotateY(Math.PI / 2);\n // endCap.rotateY(-Math.PI / 2);\n }\n\n let beamGroup = new Group();\n beamGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.SUPERIOR_BEAM,\n position: userDataPos,\n views: views,\n };\n beamGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n beamGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n beamGroup.add(mesh);\n\n if (beamEndCapAndJointInfo.hasStartCap) {\n beamGroup.add(startCap);\n }\n if (beamEndCapAndJointInfo.hasEndCap) {\n beamGroup.add(endCap);\n }\n\n if (beamEndCapAndJointInfo.jointGeo) {\n const startJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n startJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n const endJoint = new Mesh(\n beamEndCapAndJointInfo.jointGeo.geometry,\n isHighLightBeam\n ? MaterialManager.Instance().BRACKET_WARNING\n : MaterialManager.Instance().BEAM\n );\n endJoint.userData = {\n type: GEOMETRY_TYPE.INTERNAL_JOINT,\n name: beamEndCapAndJointInfo.jointGeo.name,\n };\n if (beamDirection == \"x\") {\n if (directionOffset < 0) {\n startJoint.position.set(\n -length,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n endJoint.position.set(\n -beamCapGeo.length / 2 + 2,\n 0,\n beamGeoTranslationZ\n );\n } else if (directionOffset > 0) {\n startJoint.position.set(\n 0,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n endJoint.position.set(\n length,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n } else {\n startJoint.position.set(\n -length / 2,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n endJoint.position.set(\n length / 2,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n beamGeoTranslationZ\n );\n }\n\n startJoint.rotateY(Math.PI / 2);\n endJoint.rotateY(-Math.PI / 2);\n } else if (beamDirection == \"z\") {\n if (directionOffset < 0) {\n startJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n -length\n );\n endJoint.position.set(\n beamGeoTranslationZ,\n 0,\n -beamCapGeo.length / 2 + 2\n );\n } else if (directionOffset > 0) {\n startJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n 0\n );\n endJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n length\n );\n } else {\n startJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n -length / 2\n );\n endJoint.position.set(\n beamGeoTranslationZ,\n -beamEndCapAndJointInfo.jointGeo.height / 2 -\n EXISTING_BUILDING_CONFIG.FIT_JOINT,\n length / 2\n );\n }\n }\n if (beamEndCapAndJointInfo.hasStartJoint) {\n beamGroup.add(startJoint);\n }\n if (beamEndCapAndJointInfo.hasEndJoint) {\n beamGroup.add(endJoint);\n }\n }\n\n return beamGroup;\n }\n public createGutterGroup(\n gutterGeo: GeometryInfo,\n gutterCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n hasStartCap?: boolean,\n hasEndCap?: boolean,\n clippingCsg?: CSG,\n parent?: Object3D\n ) {\n let scale = length / gutterGeo.length;\n\n let mesh = new Mesh(gutterGeo.geometry, MaterialManager.Instance().GUTTER);\n mesh.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n mesh.scale.setX(scale);\n\n let startCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n let endCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n\n if (directionOffset < 0) {\n startCap.position.set(-length, 0, 0);\n endCap.position.set(0, 0, 0);\n } else if (directionOffset > 0) {\n startCap.position.set(0, 0, 0);\n endCap.position.set(length, 0, 0);\n } else {\n startCap.position.set(-length / 2, 0, 0);\n endCap.position.set(length / 2, 0, 0);\n }\n\n let gutterGroup = new Group();\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n gutterGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n if (clippingCsg) {\n mesh.updateMatrix();\n let matrixBefore = mesh.matrix.clone();\n\n mesh.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n mesh.rotation.set(rot.x, rot.y, rot.z);\n }\n\n mesh.updateMatrix();\n\n const meshCliped = CSG.toMesh(\n CSG.fromMesh(mesh).subtract(clippingCsg),\n mesh.matrix\n );\n meshCliped.userData = mesh.userData;\n meshCliped.material = mesh.material;\n meshCliped.applyMatrix4(new Matrix4().getInverse(mesh.matrix)); //back to origin\n meshCliped.applyMatrix4(matrixBefore);\n gutterGroup.add(meshCliped);\n } else {\n gutterGroup.add(mesh);\n }\n\n if (hasStartCap) {\n gutterGroup.add(startCap);\n }\n if (hasEndCap) {\n gutterGroup.add(endCap);\n }\n\n return gutterGroup;\n }\n public createGutterGroupWithMesh(\n gutterMesh: Mesh,\n gutterCapGeo: GeometryInfo,\n length: number,\n pos: Vector3,\n rot: Vector3,\n views: any,\n directionOffset: number,\n hasStartCap?: boolean,\n hasEndCap?: boolean\n ) {\n let startCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n let endCap = new Mesh(\n gutterCapGeo.geometry,\n MaterialManager.Instance().GUTTER\n );\n\n if (directionOffset < 0) {\n startCap.position.set(-length, 0, 0);\n endCap.position.set(0, 0, 0);\n } else if (directionOffset > 0) {\n startCap.position.set(0, 0, 0);\n endCap.position.set(length, 0, 0);\n } else {\n startCap.position.set(-length / 2, 0, 0);\n endCap.position.set(length / 2, 0, 0);\n }\n\n let gutterGroup = new Group();\n gutterGroup.userData = {\n category: GEOMETRY_CATEGORY.PATIOS,\n type: GEOMETRY_TYPE.GUTTER_PATIOS,\n views: views,\n };\n gutterGroup.position.set(pos.x, pos.y, pos.z);\n if (rot) {\n gutterGroup.rotation.set(rot.x, rot.y, rot.z);\n }\n\n gutterGroup.add(gutterMesh);\n\n if (hasStartCap) {\n gutterGroup.add(startCap);\n }\n if (hasEndCap) {\n gutterGroup.add(endCap);\n }\n\n return gutterGroup;\n }\n public createPositionHelper(point: Vector3, size: number) {\n let geo = new BufferGeometry();\n geo.setFromPoints([\n new Vector3(point.x - size, point.y, point.z),\n new Vector3(point.x + size, point.y, point.z),\n new Vector3(point.x, point.y - size, point.z),\n new Vector3(point.x, point.y + size, point.z),\n ]);\n return new LineSegments(geo, new LineBasicMaterial({ color: \"red\" }));\n }\n\n public getIntersection(line1: Line3, line2: Line3): Vector2 {\n let line1StartX = line1.start.x;\n let line1StartY = line1.start.y;\n let line1EndX = line1.end.x;\n let line1EndY = line1.end.y;\n let line2StartX = line2.start.x;\n let line2StartY = line2.start.y;\n let line2EndX = line2.end.x;\n let line2EndY = line2.end.y;\n\n // if the lines intersect, the result contains the x and y of the intersection (treating the lines as infinite) and booleans for whether line segment 1 or line segment 2 contain the point\n var denominator,\n a,\n b,\n numerator1,\n numerator2,\n result = {\n x: null,\n y: null,\n };\n denominator =\n (line2EndY - line2StartY) * (line1EndX - line1StartX) -\n (line2EndX - line2StartX) * (line1EndY - line1StartY);\n if (denominator == 0) {\n return undefined;\n }\n a = line1StartY - line2StartY;\n b = line1StartX - line2StartX;\n numerator1 = (line2EndX - line2StartX) * a - (line2EndY - line2StartY) * b;\n numerator2 = (line1EndX - line1StartX) * a - (line1EndY - line1StartY) * b;\n a = numerator1 / denominator;\n b = numerator2 / denominator;\n\n // if we cast these lines infinitely in both directions, they intersect here:\n result.x = line1StartX + a * (line1EndX - line1StartX);\n result.y = line1StartY + a * (line1EndY - line1StartY);\n /*\n // it is worth noting that this should be the same as:\n x = line2StartX + (b * (line2EndX - line2StartX));\n y = line2StartX + (b * (line2EndY - line2StartY));\n */\n // if line1 is a segment and line2 is infinite, they intersect if:\n // if (a > 0 && a < 1) {\n // result.onLine1 = true;\n // }\n // // if line2 is a segment and line1 is infinite, they intersect if:\n // if (b > 0 && b < 1) {\n // result.onLine2 = true;\n // }\n // if line1 and line2 are segments, they intersect if both of the above are true\n return new Vector2(result.x, result.y);\n }\n public createMesh(\n geo: BufferGeometry | Geometry,\n material: Material,\n userData: any,\n posX: number,\n posY: number,\n posZ: number,\n rotX: number,\n rotY: number,\n rotZ: number,\n scaleX: number,\n scaleY: number,\n scaleZ: number\n ): Mesh {\n let mesh = new Mesh(geo, material);\n mesh.userData = userData;\n mesh.position.set(posX, posY, posZ);\n mesh.rotation.set(rotX, rotY, rotZ);\n mesh.scale.set(scaleX, scaleY, scaleZ);\n\n return mesh;\n }\n //NOTE: for bindBuildingInfo() function\n public getInfoFromGeometry(\n app: HomeComponent,\n children: Object3D[],\n geoManager: GeometryManager,\n isCutOut: boolean,\n isRakeCut: boolean\n ): any {\n this.geo_gutterBack = geoManager.getGutter();\n\n const _roofPatios = [];\n children.map((group) => {\n _roofPatios.push(\n ...group.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n });\n if (_roofPatios.length === 0) {\n children.map((group) => {\n if (group.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(group);\n }\n if (group.type == \"Group\") {\n group.traverse((object) => {\n if (object.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(object);\n }\n });\n }\n return group;\n });\n }\n const elementArray = [];\n children.map((group) => {\n if (\n group.userData.type === GEOMETRY_TYPE.DOWNPIPE ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM\n ) {\n elementArray.push(group);\n }\n });\n children.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n (f.userData.type === GEOMETRY_TYPE.DOWNPIPE &&\n f.children.length > 0) ||\n (f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM &&\n f.children.length > 0) ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n )\n );\n // return group;\n });\n _roofPatios.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL ||\n f.userData.type === GEOMETRY_TYPE.ZFLASHING\n )\n );\n return group;\n });\n let _beams = [];\n let _internalJoints = [];\n let _normalBeamEndCaps = [];\n let _angleBrackets = 0;\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM)\n .map((beam) => {\n if (beam.userData.angle) {\n _angleBrackets += 2;\n }\n let _length = 0;\n let _position = null;\n if (beam.userData.category) {\n _length =\n beam.children.length > 0\n ? beam.children[0].scale.z !== 1\n ? beam.children[0].scale.z\n : beam.children[0].scale.x\n : beam.scale.x;\n _position =\n beam.children.length > 0\n ? beam.children[0].userData.position\n : beam.userData.position;\n } else {\n beam.children\n .filter((f) => f.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_BEAM)\n .map((m) => {\n _length = m.scale.x;\n _position = { back: true };\n });\n }\n _beams.push({\n length: _length,\n position: _position,\n });\n //\n if (_.has(beam, [\"children\"])) {\n beam.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.INTERNAL_JOINT)\n .forEach((el) => {\n _internalJoints.push({\n code: el.userData.name,\n });\n });\n beam.children\n .filter(\n (el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP\n )\n .forEach((el) => {\n _normalBeamEndCaps.push({\n code: el.userData.code,\n });\n });\n }\n _beams = _beams.map((m) => {\n return {\n ...m,\n isHouseBeam: !app.chkHasHouseBeam.currentValue\n ? false\n : m.position?.back || m.position?.cutout\n ? true\n : false,\n };\n });\n });\n const _jointGroupJoints = _.groupBy(_internalJoints, (el) => el.code);\n _internalJoints = [];\n Object.entries(_jointGroupJoints).forEach(([key, value]) => {\n _internalJoints.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n const _jointGroupEndCaps = _.groupBy(_normalBeamEndCaps, (el) => el.code);\n _normalBeamEndCaps = [];\n Object.entries(_jointGroupEndCaps).forEach(([key, value]) => {\n _normalBeamEndCaps.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n const _panels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL)\n .map((panel) => {\n let _length = 0;\n if (isRakeCut || isCutOut) {\n let _boxPanel = new Box3().setFromObject(panel);\n let direction = \"z\";\n if (\n HomeComponent.ins.isFBRoof &&\n HomeComponent.ins.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n direction = \"x\";\n }\n _length = _.round(\n Math.ceil(_boxPanel.max[direction] - _boxPanel.min[direction]) /\n 1000,\n 2\n );\n _length = _.min([_.round(panel.scale.z, 2), _length]);\n } else {\n _length = _.round(panel.scale.z, 2);\n }\n _panels.push({\n length: _length / this.cos(UI.patiosPitch),\n //HACK: Check\n // length: _.round(Math.ceil(_boxPanel.min.distanceTo(_boxPanel.max)) / 1000, 2)\n });\n });\n let _downpipes = 0;\n let _nozzles = 0;\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE)\n .map((downpipe) => {\n const _countDownpipe = downpipe.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE_NOZZLE\n );\n if (_countDownpipe.length === 0) {\n _downpipes++;\n } else {\n _nozzles++;\n }\n });\n\n const _gutters = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS)\n .map((gutter) => {\n _gutters.push({\n length:\n (gutter.children[0].scale.x * this.geo_gutterBack.length) / 1000,\n });\n });\n const _barges = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING)\n .map((barge) => {\n _barges.push({\n length:\n barge.scale.x != barge.scale.z && barge.scale.x != 1\n ? this.round(barge.scale.x)\n : this.round(barge.scale.z),\n });\n });\n //Drip Barge\n elementArray\n .filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n .map((drip) => {\n _barges.push({\n length:\n drip.scale.x != drip.scale.z && drip.scale.x != 1\n ? this.round(drip.scale.x)\n : this.round(drip.scale.z),\n });\n });\n\n const _zflashings = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ZFLASHING)\n .map((zflashing) => {\n _zflashings.push({\n length:\n zflashing.scale.x != zflashing.scale.z && zflashing.scale.x != 1\n ? this.round(zflashing.scale.x)\n : this.round(zflashing.scale.z),\n });\n });\n\n let _recChanels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL)\n .map((receiver_chanel) => {\n _recChanels.push({\n length:\n receiver_chanel.scale.x != receiver_chanel.scale.z &&\n receiver_chanel.scale.x != 1\n ? this.round(receiver_chanel.scale.x)\n : this.round(receiver_chanel.scale.z),\n });\n });\n let listRecChanels = _.groupBy(_recChanels, (item) => item.length);\n _recChanels = [];\n let _keys = Object.keys(listRecChanels);\n _keys.forEach((el) => {\n _recChanels.push({\n length: +el,\n qty: listRecChanels[el].length,\n });\n });\n //HACK: conflict\n const flyOverBrackets = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n !f.userData.position.cutout\n ).length;\n\n const flyOverBracketCutOuts = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n f.userData.position.cutout\n ).length;\n\n const extFlyOverBracket =\n elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET\n ).length -\n flyOverBracketCutOuts -\n flyOverBrackets;\n\n return {\n downpipes: _downpipes,\n angleBrackets: _angleBrackets,\n bottomAngleBrackets: 0,\n nozzles: _nozzles,\n extFlyoverBrackets: extFlyOverBracket,\n flyoverBrackets: flyOverBrackets,\n flyoverBracketCutOuts: flyOverBracketCutOuts,\n gutters: _gutters,\n beams: _beams,\n internalJoints: _internalJoints,\n normalBeamEndCaps: _normalBeamEndCaps,\n barges: _barges,\n zflashings: _zflashings,\n receiver_chanels: _recChanels,\n panels: _panels,\n fasciaBrackets: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET\n ).length,\n fasciaBracketCutouts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n ).length,\n fasciaBracketExts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n ).length,\n };\n }\n public getInfoFromGeometryGableRoof(\n app: HomeComponent,\n children: Object3D[],\n geoManager: GeometryManager,\n isCutOut: boolean,\n isRakeCut: boolean\n ): any {\n this.geo_gutterBack = geoManager.getGutter();\n\n let _centerPosts = [];\n _centerPosts = children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n );\n const _patios = children.filter(\n (x) => x.userData.category === GEOMETRY_CATEGORY.PATIOS\n );\n _patios.map((value) => {\n _centerPosts.push(\n ...value.children.filter(\n (x) => x.userData.type === GEOMETRY_TYPE.SUPERIOR_CENTER_POST\n )\n );\n return value;\n });\n\n let listCenterPost = _.groupBy(_centerPosts, (item) => item.scale.y);\n\n _centerPosts = [];\n let _keys = Object.keys(listCenterPost);\n _keys.forEach((el) => {\n _centerPosts.push({\n length: _.round(+el, 2),\n qty: listCenterPost[el].length,\n });\n });\n\n const _roofPatios = [];\n children.map((group) => {\n _roofPatios.push(\n ...group.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PATIOS\n )\n );\n });\n if (_roofPatios.length === 0) {\n children.map((group) => {\n if (group.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(group);\n }\n if (group.type == \"Group\") {\n group.traverse((object) => {\n if (object.userData.type === GEOMETRY_TYPE.ROOF_PATIOS) {\n _roofPatios.push(object);\n }\n });\n }\n return group;\n });\n }\n const elementArray = [];\n children.map((group) => {\n if (\n group.userData.type === GEOMETRY_TYPE.DOWNPIPE ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM ||\n group.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n ) {\n elementArray.push(group);\n }\n });\n children.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET ||\n (f.userData.type === GEOMETRY_TYPE.DOWNPIPE &&\n f.children.length > 0) ||\n (f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM &&\n f.children.length > 0) ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT ||\n f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n );\n // return group;\n });\n _roofPatios.map((group) => {\n elementArray.push(\n ...group.children.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING ||\n f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL ||\n f.userData.type === GEOMETRY_TYPE.ROOF_PANEL ||\n f.userData.type === GEOMETRY_TYPE.ZFLASHING\n )\n );\n return group;\n });\n\n let _ridgeCapping = [];\n children.map((group) => {\n _ridgeCapping.push(\n ...group.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.RIDGE_CAPPING\n )\n );\n });\n\n _ridgeCapping = _ridgeCapping.map((el) => {\n return {\n length: el.userData.length / 1000,\n qty: 1,\n };\n });\n\n let _beams = [];\n let _internalJoints = [];\n let _normalBeamEndCaps = [];\n let angleBrackets = 0; //Default\n let bottomAngleBrackets = 0; //Default\n elementArray\n .filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_BEAM ||\n f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n )\n .map((beam) => {\n // if (beam.userData.angle) {\n // _angleBrackets += 2;\n // }\n let _length = 0;\n let _name = null;\n if (beam.userData.category) {\n _length =\n beam.children.length > 0\n ? beam.children[0].scale.z !== 1\n ? beam.children[0].scale.z\n : beam.children[0].scale.x\n : beam.scale.x;\n _name = beam.userData.name || beam.children[0].userData.name;\n } else {\n beam.children\n .filter((f) => f.userData.type == GEOMETRY_TYPE.UPSTAND_BRAKET_BEAM)\n .map((m) => {\n _length = m.scale.x;\n _name = beam.userData.name;\n });\n }\n _beams.push({\n length: _.round(_length, 2),\n name:\n beam.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM\n ? \"RF\"\n : _name,\n });\n if (_.has(beam, [\"children\"])) {\n beam.children\n .filter((el) => el.userData.type == GEOMETRY_TYPE.INTERNAL_JOINT)\n .forEach((el) => {\n _internalJoints.push({\n code: el.userData.name,\n });\n });\n beam.children\n .filter(\n (el) => el.userData.type == GEOMETRY_TYPE.SUPERIOR_BEAM_END_CAP\n )\n .forEach((el) => {\n _normalBeamEndCaps.push({\n code: el.userData.code,\n });\n });\n }\n if (beam.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM) {\n angleBrackets += 1;\n bottomAngleBrackets += 1;\n }\n });\n const _jointGroup = _.groupBy(_internalJoints, (el) => el.code);\n _internalJoints = [];\n Object.entries(_jointGroup).forEach(([key, value]) => {\n _internalJoints.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n const _jointGroupEndCaps = _.groupBy(_normalBeamEndCaps, (el) => el.code);\n _normalBeamEndCaps = [];\n Object.entries(_jointGroupEndCaps).forEach(([key, value]) => {\n _normalBeamEndCaps.push({\n code: key,\n qty: _.get(value, [\"length\"], 0),\n });\n });\n let listBeam = _.groupBy(_beams, (item) => `\"${item.length}+${item.name}\"`);\n\n _beams = [];\n _keys = Object.keys(listBeam);\n _keys.forEach((el) => {\n _beams.push({\n ...listBeam[el][0],\n qty: listBeam[el].length,\n });\n });\n\n let _panels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL)\n .map((panel) => {\n let _length = 0;\n\n let direction = \"z\";\n if (\n HomeComponent.ins.isFBRoof &&\n HomeComponent.ins.patiosRoofType === PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n direction = \"x\";\n }\n let _boxPanel = new Box3().setFromObject(panel);\n _length = _.round(\n Math.ceil(_boxPanel.max[direction] - _boxPanel.min[direction]) / 1000,\n 2\n );\n\n _panels.push({\n length: _length / this.cos(UI.patiosPitch),\n dir: panel.userData.dir,\n });\n });\n\n let listPanels = _.groupBy(_panels, (item) => `${item.length}-${item.dir}`);\n _panels = [];\n _keys = Object.keys(listPanels);\n _keys.forEach((el) => {\n _panels.push({\n length: +listPanels[el][0].length,\n dir: listPanels[el][0].dir,\n qty: listPanels[el].length,\n });\n });\n\n let _downpipes = 0;\n let _nozzles = 0;\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE)\n .map((downpipe) => {\n const _countDownpipe = downpipe.children.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.DOWNPIPE_NOZZLE\n );\n if (_countDownpipe.length === 0) {\n _downpipes++;\n } else {\n _nozzles++;\n }\n });\n\n let _gutters = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.GUTTER_PATIOS)\n .map((gutter) => {\n _gutters.push({\n length:\n (gutter.children[0].scale.x * this.geo_gutterBack.length) / 1000,\n });\n });\n\n let listGutters = _.groupBy(_gutters, (item) => item.length);\n _gutters = [];\n _keys = Object.keys(listGutters);\n _keys.forEach((el) => {\n _gutters.push({\n length: +el,\n qty: listGutters[el].length,\n });\n });\n\n let _barges = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_BARGE_CAPPING)\n .map((barge) => {\n _barges.push({\n length:\n barge.scale.x != barge.scale.z && barge.scale.x != 1\n ? this.round(barge.scale.x)\n : this.round(barge.scale.z),\n });\n });\n\n //Drip Barge\n elementArray\n .filter(\n (f) => f.userData.type === GEOMETRY_TYPE.ROOF_PANEL_DRIP_BARGE_CAPPING\n )\n .map((drip) => {\n _barges.push({\n length:\n drip.scale.x != drip.scale.z && drip.scale.x != 1\n ? this.round(drip.scale.x)\n : this.round(drip.scale.z),\n });\n });\n\n let listBarges = _.groupBy(_barges, (item) => item.length);\n _barges = [];\n _keys = Object.keys(listBarges);\n _keys.forEach((el) => {\n _barges.push({\n length: +el,\n qty: listBarges[el].length,\n });\n });\n\n let _zflashings = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.ZFLASHING)\n .map((zflashing) => {\n _zflashings.push({\n length:\n zflashing.scale.x != zflashing.scale.z && zflashing.scale.x != 1\n ? this.round(zflashing.scale.x)\n : this.round(zflashing.scale.z),\n });\n });\n\n let listZflashings = _.groupBy(_zflashings, (item) => item.length);\n _zflashings = [];\n _keys = Object.keys(listZflashings);\n _keys.forEach((el) => {\n _zflashings.push({\n length: +el,\n qty: listZflashings[el].length,\n });\n });\n\n let _recChanels = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.RECEIVER_CHANEL)\n .map((receiver_chanel) => {\n _recChanels.push({\n length:\n receiver_chanel.scale.x != receiver_chanel.scale.z &&\n receiver_chanel.scale.x != 1\n ? this.round(receiver_chanel.scale.x)\n : this.round(receiver_chanel.scale.z),\n });\n });\n\n let listRecChanels = _.groupBy(_recChanels, (item) => item.length);\n _recChanels = [];\n _keys = Object.keys(listRecChanels);\n _keys.forEach((el) => {\n _recChanels.push({\n length: +el,\n qty: listRecChanels[el].length,\n });\n });\n\n let _rafterEndCap = [];\n elementArray\n .filter((f) => f.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM)\n .map((beam) => {\n beam.children.forEach((el) => {\n if (el.userData.type === GEOMETRY_TYPE.SUPERIOR_RAFTER_BEAM_END_CAP) {\n _rafterEndCap.push({\n name: el.userData.name,\n });\n }\n });\n });\n\n let listRafterEndCap = _.groupBy(_rafterEndCap, (item) => item.name);\n\n _rafterEndCap = [];\n _keys = Object.keys(listRafterEndCap);\n _keys.forEach((el) => {\n _rafterEndCap.push({\n code: el,\n qty: listRafterEndCap[el].length,\n });\n });\n\n const flyOverBrackets = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n !f.userData.position.cutout\n ).length;\n const flyOverBracketCutOuts = elementArray.filter(\n (f) =>\n f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET &&\n f.userData.position.back &&\n f.userData.position.cutout\n ).length;\n const extFlyOverBracket =\n elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.FLY_OVER_BRACKET\n ).length -\n flyOverBracketCutOuts -\n flyOverBrackets;\n\n return {\n centerPost: _centerPosts,\n downpipes: _downpipes,\n angleBrackets: angleBrackets,\n bottomAngleBrackets: bottomAngleBrackets,\n nozzles: _nozzles,\n extFlyoverBrackets: extFlyOverBracket,\n flyoverBrackets: flyOverBrackets,\n flyoverBracketCutOuts: flyOverBracketCutOuts,\n gutters: _gutters,\n beams: _beams,\n internalJoints: _internalJoints,\n normalBeamEndCaps: _normalBeamEndCaps,\n barges: _barges,\n zflashings: _zflashings,\n receiver_chanels: _recChanels,\n panels: _panels,\n ridgeCapping: _ridgeCapping,\n rafterEndCap: _rafterEndCap,\n fasciaBrackets: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET\n ).length,\n fasciaBracketCutouts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_CUTOUT\n ).length,\n fasciaBracketExts: elementArray.filter(\n (f) => f.userData.type === GEOMETRY_TYPE.UPSTAND_BRAKET_EXT\n ).length,\n };\n }\n public getBeamRakeCutInfo(APP: HomeComponent, cutSide: BUILDING_SIDE) {\n let k, k_, j, l, m, v, a, b;\n if (cutSide == BUILDING_SIDE.LEFT) {\n k = Math.sqrt(\n Math.pow(APP.sldLeftCutHorizontal.currentValue, 2) +\n Math.pow(APP.sldLeftCutVertical.currentValue, 2)\n );\n k_ =\n (k * APP.sldFrontOverhang.currentValue) /\n APP.sldLeftCutHorizontal.currentValue;\n j =\n APP.sldLeftCutVertical.currentValue +\n k_ -\n APP.sldFrontOverhang.currentValue;\n l =\n (j * APP.sldLeftCutHorizontal.currentValue) /\n APP.sldLeftCutVertical.currentValue;\n m = Math.sqrt(Math.pow(j, 2) + Math.pow(l, 2));\n v =\n APP.sldLeftCutVertical.currentValue - APP.sldFrontOverhang.currentValue;\n\n a = j - (APP.sldSpan.currentValue + APP.sldMultiSpan.currentValue);\n b = a / this.cos(APP.sltRoofPitch.currentValue);\n } else if (cutSide == BUILDING_SIDE.RIGHT) {\n k = Math.sqrt(\n Math.pow(APP.sldRightCutHorizontal.currentValue, 2) +\n Math.pow(APP.sldRightCutVertical.currentValue, 2)\n );\n k_ =\n (k * APP.sldFrontOverhang.currentValue) /\n APP.sldRightCutHorizontal.currentValue;\n j =\n APP.sldRightCutVertical.currentValue +\n k_ -\n APP.sldFrontOverhang.currentValue;\n l =\n (j * APP.sldRightCutHorizontal.currentValue) /\n APP.sldRightCutVertical.currentValue;\n m = Math.sqrt(Math.pow(j, 2) + Math.pow(l, 2));\n v =\n APP.sldRightCutVertical.currentValue -\n APP.sldFrontOverhang.currentValue;\n\n a = j - (APP.sldSpan.currentValue + APP.sldMultiSpan.currentValue);\n b = a / this.cos(APP.sltRoofPitch.currentValue);\n }\n\n return {\n k: k == Infinity || isNaN(k) ? 0 : k,\n j: j == Infinity || isNaN(j) ? 0 : j,\n m: m == Infinity || isNaN(m) ? 0 : m,\n v: v == Infinity || isNaN(v) ? 0 : v,\n a: a == Infinity || isNaN(a) ? 0 : a,\n b: b == Infinity || isNaN(b) ? 0 : b,\n l: l == Infinity || isNaN(l) ? 0 : l,\n k_: k_ == Infinity || isNaN(k_) ? 0 : k_,\n };\n }\n\n public createDownpipeGroup(\n APP: HomeComponent,\n downpipeGroup: Group,\n geoPipe: GeometryInfo,\n geoL: GeometryInfo,\n offsetX: number,\n offsetY: number,\n offsetZ: number,\n offsetZNozzle: number,\n rotationY: number,\n connectLength: number,\n pipeLength: number,\n haveNozzle: boolean\n ) {\n let userData = { type: GEOMETRY_TYPE.DOWNPIPE };\n downpipeGroup.position.set(offsetX, 0, offsetZ);\n\n if (APP.sltGutterType.currentValue == 0) {\n pipeLength -= 80;\n } else {\n pipeLength -= 60;\n }\n\n if (connectLength > 100) {\n if (haveNozzle) {\n pipeLength -= 250;\n\n let meshLBottom = new Mesh(\n geoL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLBottom.userData = userData;\n meshLBottom.position.set(0, pipeLength, 20);\n meshLBottom.rotateY(Math.PI / 2);\n\n let meshLTop = new Mesh(\n geoL.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshLTop.userData = userData;\n meshLTop.rotation.set(Math.PI, Math.PI / 2, 0);\n meshLTop.position.set(0, pipeLength + 230, connectLength - 100);\n\n let meshPipeConnect = new Mesh(\n geoPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipeConnect.userData = userData;\n meshPipeConnect.rotation.set(Math.PI / 2, 0, 0);\n meshPipeConnect.position.set(0, pipeLength + 115, 50);\n meshPipeConnect.scale.set(1, (connectLength - 140) / geoPipe.height, 1);\n\n downpipeGroup.add(meshLBottom, meshLTop, meshPipeConnect);\n } else {\n pipeLength += 100;\n offsetY += 100;\n }\n }\n\n let meshPipe = new Mesh(\n geoPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = userData;\n meshPipe.scale.setY(pipeLength / geoPipe.height);\n\n downpipeGroup.add(meshPipe);\n\n //Check intersec eave\n let isIntersect = false;\n let boxDownPipe = new Box3().setFromObject(downpipeGroup);\n\n for (let eave of APP.eaveManager.listEave) {\n let boxEave = new Box3().setFromObject(eave);\n\n if (boxEave.intersectsBox(boxDownPipe)) {\n isIntersect = true;\n break;\n }\n }\n\n if (isIntersect) {\n downpipeGroup.children = [];\n this.createDownpipeNozzle(\n APP,\n downpipeGroup,\n geoPipe,\n offsetX,\n offsetY,\n offsetZNozzle\n );\n }\n\n return downpipeGroup;\n }\n public createDownpipeNozzle(\n APP: HomeComponent,\n downpipeGroup: Group,\n geoPipe: GeometryInfo,\n posX: number,\n posY: number,\n posZ: number\n ) {\n let meshPipe = new Mesh(\n geoPipe.geometry,\n MaterialManager.Instance().DOWNPIPE\n );\n meshPipe.userData = { type: GEOMETRY_TYPE.DOWNPIPE_NOZZLE };\n meshPipe.scale.setY(100 / geoPipe.height);\n meshPipe.position.set(0, posY - 100 - 100, 0);\n\n downpipeGroup.add(meshPipe);\n downpipeGroup.position.set(posX, 0, posZ);\n return downpipeGroup;\n }\n public handlerDimDragEvent(\n event,\n startPos,\n startMatrix?: Matrix4,\n startBayLength?: number\n ) {\n if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BAY) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n event.object.position.z = 0;\n event.object.position.y = 0;\n let bayNum = obj.userData.bayNum;\n const pos = obj.position.clone();\n let bayOffset = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) < +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n let bayStartPos = -UI.totalBayLength / 2 + bayOffset;\n let bayEndPos = bayStartPos + UI.listBay[bayNum].value;\n if (\n UI.existingType == 0 ||\n UI.existingType == 3 ||\n UI.structureType == 4\n ) {\n if (event.object.position.x > bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n if (event.object.position.x < bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n }\n } else if (UI.existingType == 1) {\n if (obj.userData.right) {\n if (event.object.position.x < bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n if (event.object.position.x > bayStartPos) {\n event.object.position.x = bayStartPos;\n }\n }\n } else if (UI.existingType == 2) {\n if (obj.userData.left) {\n if (event.object.position.x > bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n if (event.object.position.x < bayEndPos) {\n event.object.position.x = bayEndPos;\n }\n }\n }\n let distance = HomeComponent.ins.dialogEditBay.listBay[bayNum].value;\n if (startPos.x == pos.x) {\n return;\n }\n if (obj.userData.left) {\n if (UI.existingType == 1 && UI.structureType != 4) {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const startPointOld = -totalBayStartLength / 2 + bayOffset;\n distance = pos.x - startPointOld;\n\n // const fit = distance / 2 - startBayLength / 2;\n // event.object.position.x = pos.x - fit;\n }\n } else {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const startCenter =\n -totalBayStartLength / 2 + bayOffset + startBayLength / 2;\n distance = 2 * (pos.x - startCenter);\n }\n // if(pos.x > startPos.x){\n // distance = distance + (pos.x - startPos.x);\n // } else if (pos.x < startPos.x){\n // distance = distance - (startPos.x - pos.x);\n // }\n }\n } else {\n if (UI.existingType == 2 && UI.structureType != 4) {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const endPointOld =\n -totalBayStartLength / 2 + bayOffset + startBayLength;\n distance = endPointOld - pos.x;\n }\n } else {\n if (startBayLength) {\n const restStartLength = UI.listBay\n .filter((b) => UI.listBay.findIndex((e) => e == b) != +bayNum)\n .reduce((pre, cur) => {\n return pre + cur.value;\n }, 0);\n const totalBayStartLength = restStartLength + startBayLength;\n const startCenter =\n -totalBayStartLength / 2 + bayOffset + startBayLength / 2;\n distance = 2 * (startCenter - pos.x);\n }\n // if (pos.x > startPos.x) {\n // distance = distance - (pos.x - startPos.x);\n // } else if (pos.x < startPos.x) {\n // distance = distance + (startPos.x - pos.x);\n // }\n }\n }\n distance = Math.round(distance / 10) * 10;\n if (distance < 1000) {\n distance = 1000;\n }\n if (distance > 8000) {\n distance = 8000;\n }\n HomeComponent.ins.dialogEditBay.listBay[bayNum].value = distance;\n HomeComponent.ins.dialogEditBay.onOK();\n // if(obj.userData.left){\n // if (UI.existingType == 1 && UI.structureType != 4){\n // event.object.position.x = UI.totalBayLength + bayOffset + distance;\n // }\n // }\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_HORIZONTAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 500;\n if (\n event.object.position.x >\n -UI.totalBayLength / 2 + HomeComponent.ins.sldLeftCutHorizontal.maxValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 +\n HomeComponent.ins.sldLeftCutHorizontal.maxValue;\n }\n if (event.object.position.x < -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n -UI.totalBayLength / 2 +\n HomeComponent.ins.sldLeftCutHorizontal.minValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 +\n HomeComponent.ins.sldLeftCutHorizontal.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n }\n let distance = HomeComponent.ins.sldLeftCutHorizontal.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldLeftCutHorizontal.minValue) {\n distance = HomeComponent.ins.sldLeftCutHorizontal.minValue;\n }\n if (distance > HomeComponent.ins.sldLeftCutHorizontal.maxValue) {\n distance = HomeComponent.ins.sldLeftCutHorizontal.maxValue;\n }\n HomeComponent.ins.sldLeftCutHorizontal.setValue(distance);\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_HORIZONTAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 500;\n if (event.object.position.x > UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n if (\n event.object.position.x <\n UI.totalBayLength / 2 - HomeComponent.ins.sldRightCutHorizontal.maxValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 -\n HomeComponent.ins.sldRightCutHorizontal.maxValue;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n UI.totalBayLength / 2 -\n HomeComponent.ins.sldRightCutHorizontal.minValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 -\n HomeComponent.ins.sldRightCutHorizontal.minValue;\n }\n }\n let distance = HomeComponent.ins.sldRightCutHorizontal.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldRightCutHorizontal.minValue) {\n distance = HomeComponent.ins.sldRightCutHorizontal.minValue;\n }\n if (distance > HomeComponent.ins.sldRightCutHorizontal.maxValue) {\n distance = HomeComponent.ins.sldRightCutHorizontal.maxValue;\n }\n HomeComponent.ins.sldRightCutHorizontal.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.LEFT_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n event.object.position.z = 0;\n event.object.position.y = 0;\n const pos = obj.position.clone();\n if (\n event.object.position.x <\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.maxValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.maxValue;\n }\n if (event.object.position.x > -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < -UI.totalBayLength / 2) {\n event.object.position.x = -UI.totalBayLength / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.minValue\n ) {\n event.object.position.x =\n -UI.totalBayLength / 2 - HomeComponent.ins.sldLeftOverhang.minValue;\n }\n }\n let distance = HomeComponent.ins.sldLeftOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldLeftOverhang.minValue) {\n distance = HomeComponent.ins.sldLeftOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldLeftOverhang.maxValue) {\n distance = HomeComponent.ins.sldLeftOverhang.maxValue;\n }\n HomeComponent.ins.sldLeftOverhang.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.RIGHT_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n if (\n event.object.position.x >\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.maxValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.maxValue;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.minValue\n ) {\n event.object.position.x =\n UI.totalBayLength / 2 + HomeComponent.ins.sldLeftOverhang.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > UI.totalBayLength / 2) {\n event.object.position.x = UI.totalBayLength / 2;\n }\n }\n let distance = HomeComponent.ins.sldRightOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldRightOverhang.minValue) {\n distance = HomeComponent.ins.sldRightOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldRightOverhang.maxValue) {\n distance = HomeComponent.ins.sldRightOverhang.maxValue;\n }\n HomeComponent.ins.sldRightOverhang.setValue(distance);\n } else if (event.object.userData?.dimType === DIMENSION_LABEL_TYPE.SPAN) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n if (event.object.position.x > HomeComponent.ins.sldSpan.maxValue / 2) {\n event.object.position.x = HomeComponent.ins.sldSpan.maxValue / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < HomeComponent.ins.sldSpan.minValue / 2) {\n event.object.position.x = HomeComponent.ins.sldSpan.minValue / 2;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n }\n let distance = HomeComponent.ins.sldSpan.currentValue;\n let fit = 0;\n if (obj.userData.left) {\n if (pos.x == UI.span / 2) {\n return;\n }\n // Existing building\n if (UI.structureType == 0) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit =\n distance / 2 -\n (startMatrix.elements[14] + UI.existingWidth1 / 2) / 2;\n distance = distance - fit;\n }\n }\n // Fly over, Back fly over\n else if (UI.structureType == 1 || UI.structureType == 2) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit =\n distance / 2 -\n (startMatrix.elements[14] +\n UI.existingWidth1 / 2 +\n HomeComponent.ins.existingWallManager.geo_existingWallL1.width +\n UI.overhangBack) /\n 2;\n distance = distance - fit;\n }\n }\n //Fascia\n else if (UI.structureType == 3 || UI.structureType == 5) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit =\n distance / 2 -\n (startMatrix.elements[14] +\n UI.existingWidth1 / 2 -\n UI.eaveWidth) /\n 2;\n distance = distance - fit;\n }\n }\n //Free standing\n else if (UI.structureType == 4) {\n distance = pos.x * 2;\n if (startMatrix) {\n fit = distance / 2 - startMatrix.elements[14] / 2;\n distance = distance - fit;\n }\n }\n } else {\n if (\n UI.structureType == 4 &&\n UI.patiosRoofType == PATIOS_ROOF_TYPE.GABLE_ROOF\n ) {\n distance = -pos.x * 2;\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n }\n distance = Math.round(distance / 100) * 100;\n\n if (distance < HomeComponent.ins.sldSpan.minValue) {\n distance = HomeComponent.ins.sldSpan.minValue;\n }\n if (distance > HomeComponent.ins.sldSpan.maxValue) {\n distance = HomeComponent.ins.sldSpan.maxValue;\n }\n if (obj.userData.left) {\n event.object.position.x = distance / 2;\n }\n HomeComponent.ins.sldSpan.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.MULTI_SPAN\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (event.object.position.x < UI.span / 2) {\n event.object.position.x = UI.span / 2;\n }\n if (\n event.object.position.x >\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.maxValue\n ) {\n event.object.position.x =\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.maxValue;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.minValue\n ) {\n event.object.position.x =\n UI.span / 2 + HomeComponent.ins.sldMultiSpan.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > UI.span / 2) {\n event.object.position.x = UI.span / 2;\n }\n }\n let distance = HomeComponent.ins.sldMultiSpan.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance / 100) * 100;\n\n if (distance < HomeComponent.ins.sldMultiSpan.minValue) {\n distance = HomeComponent.ins.sldMultiSpan.minValue;\n }\n if (distance > HomeComponent.ins.sldMultiSpan.maxValue) {\n distance = HomeComponent.ins.sldMultiSpan.maxValue;\n }\n HomeComponent.ins.sldMultiSpan.setValue(distance);\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_RIGHT_VERTICAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 500;\n if (\n event.object.position.x <\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.maxValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.maxValue;\n }\n if (\n event.object.position.x >\n UI.span / 2 + UI.overhangFront + UI.multiSpan\n ) {\n event.object.position.x = UI.span / 2 + UI.overhangFront + UI.multiSpan;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.span / 2 + UI.overhangFront + UI.multiSpan\n ) {\n event.object.position.x =\n UI.span / 2 + UI.overhangFront + UI.multiSpan;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.minValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.overhangFront +\n UI.multiSpan -\n HomeComponent.ins.sldRightCutVertical.minValue;\n }\n }\n let distance = HomeComponent.ins.sldRightCutVertical.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldRightCutVertical.minValue) {\n distance = HomeComponent.ins.sldRightCutVertical.minValue;\n }\n if (distance > HomeComponent.ins.sldRightCutVertical.maxValue) {\n distance = HomeComponent.ins.sldRightCutVertical.maxValue;\n }\n HomeComponent.ins.sldRightCutVertical.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.FRONT_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n event.object.position.z = 0;\n event.object.position.y = 0;\n const pos = obj.position.clone();\n if (event.object.position.x < UI.span / 2 + UI.multiSpan) {\n event.object.position.x = UI.span / 2 + UI.multiSpan;\n }\n if (\n event.object.position.x >\n UI.span / 2 + UI.multiSpan + HomeComponent.ins.sldFrontOverhang.maxValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.multiSpan +\n HomeComponent.ins.sldFrontOverhang.maxValue;\n }\n if (event.object.userData?.left) {\n if (\n event.object.position.x <\n UI.span / 2 +\n UI.multiSpan +\n HomeComponent.ins.sldFrontOverhang.minValue\n ) {\n event.object.position.x =\n UI.span / 2 +\n UI.multiSpan +\n HomeComponent.ins.sldFrontOverhang.minValue;\n }\n }\n if (event.object.userData?.right) {\n if (event.object.position.x > UI.span / 2 + UI.multiSpan) {\n event.object.position.x = UI.span / 2 + UI.multiSpan;\n }\n }\n let distance = HomeComponent.ins.sldFrontOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldFrontOverhang.minValue) {\n distance = HomeComponent.ins.sldFrontOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldFrontOverhang.maxValue) {\n distance = HomeComponent.ins.sldFrontOverhang.maxValue;\n }\n HomeComponent.ins.sldFrontOverhang.setValue(distance);\n } else if (\n event.object.userData?.dimType === DIMENSION_LABEL_TYPE.BACK_OVERHANG\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (\n event.object.position.x <\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.maxValue\n ) {\n event.object.position.x =\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.maxValue;\n }\n if (event.object.position.x > -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < -UI.span / 2) {\n event.object.position.x = -UI.span / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.minValue\n ) {\n event.object.position.x =\n -UI.span / 2 - HomeComponent.ins.sldBackOverhang.minValue;\n }\n }\n let distance = HomeComponent.ins.sldBackOverhang.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldBackOverhang.minValue) {\n distance = HomeComponent.ins.sldBackOverhang.minValue;\n }\n if (distance > HomeComponent.ins.sldBackOverhang.maxValue) {\n distance = HomeComponent.ins.sldBackOverhang.maxValue;\n }\n HomeComponent.ins.sldBackOverhang.setValue(distance);\n } else if (\n event.object.userData?.dimType ===\n DIMENSION_LABEL_TYPE.RAKE_CUT_LEFT_VERTICAL\n ) {\n const obj = event.object as Mesh;\n obj.position.z = 0;\n obj.updateMatrixWorld();\n const pos = obj.position.clone();\n event.object.position.z = 0;\n event.object.position.y = 0;\n if (\n event.object.position.x <\n -HomeComponent.ins.sldLeftCutVertical.maxValue / 2\n ) {\n event.object.position.x =\n -HomeComponent.ins.sldLeftCutVertical.maxValue / 2;\n }\n if (event.object.position.x > UI.rakeCutLeftVer / 2) {\n event.object.position.x = UI.rakeCutLeftVer / 2;\n }\n if (event.object.userData?.left) {\n if (event.object.position.x < UI.rakeCutLeftVer / 2) {\n event.object.position.x = UI.rakeCutLeftVer / 2;\n }\n }\n if (event.object.userData?.right) {\n if (\n event.object.position.x >\n -HomeComponent.ins.sldLeftCutVertical.minValue / 2\n ) {\n event.object.position.x =\n -HomeComponent.ins.sldLeftCutVertical.minValue / 2;\n }\n }\n let distance = HomeComponent.ins.sldLeftCutVertical.currentValue;\n if (obj.userData.left) {\n if (pos.x > startPos.x) {\n distance = distance + (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance - (startPos.x - pos.x);\n }\n } else {\n if (pos.x > startPos.x) {\n distance = distance - (pos.x - startPos.x);\n } else if (pos.x < startPos.x) {\n distance = distance + (startPos.x - pos.x);\n }\n }\n distance = Math.round(distance);\n\n if (distance < HomeComponent.ins.sldLeftCutVertical.minValue) {\n distance = HomeComponent.ins.sldLeftCutVertical.minValue;\n }\n if (distance > HomeComponent.ins.sldLeftCutVertical.maxValue) {\n distance = HomeComponent.ins.sldLeftCutVertical.maxValue;\n }\n HomeComponent.ins.sldLeftCutVertical.setValue(distance);\n }\n }\n}\nexport function getBeamEndCapCode(endCapPreCode, endCapColorCode) {\n const availableCodes = [\n \"BSEC110B\",\n \"BSEC110C\",\n \"BSEC110MM\",\n \"BSEC110M\",\n \"BSEC110SM\",\n \"BSEC110W\",\n \"BSCE150B\",\n \"BSCE150C\",\n \"BSCE150P\",\n \"BSCE150W\",\n \"BSEC160B\",\n \"BSEC160C\",\n \"BSEC160MM\",\n \"BSEC160M\",\n \"BSEC160SM\",\n \"BSEC160W\",\n \"BSCE200B\",\n \"BSCE200C\",\n \"BSCE200W\",\n \"BSEC210B\",\n \"BSEC210C\",\n \"BSEC210MM\",\n \"BSEC210M\",\n \"BSEC210SM\",\n \"BSEC210W\",\n \"BSEC260B\",\n \"BSEC260C\",\n \"BSEC260MM\",\n \"BSEC260M\",\n \"BSEC260SM\",\n \"BSEC260W\",\n ];\n let code = `${endCapPreCode}${endCapColorCode}`;\n\n // Paperbark some time = P and sometime = M\n if (!availableCodes.find((el) => el == code)) {\n code = `${endCapPreCode}P`;\n }\n if (!availableCodes.find((el) => el == code)) {\n code = `${endCapPreCode}SM`;\n }\n\n return code;\n}\n// Rafter always 160\nexport function getRafterBeamEndCapCode(beamSize = 160, isTop = false) {\n if (isTop) {\n let colorCode = HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode;\n if (colorCode == \"M\" && beamSize == 160) {\n colorCode = \"P\";\n }\n\n return `BSA${beamSize}15${colorCode}`;\n } else {\n let colorCode = HomeComponent.ins.sltColourBeam.currentBeamEndCapColorCode;\n if (colorCode == \"M\" && beamSize == 160) {\n colorCode = \"P\";\n }\n\n return `BSAGB${beamSize}${colorCode}`;\n }\n}\nexport const utils = {\n tan(degrees: number): number {\n return this.round(Math.tan(this.degreesToRadians(degrees)));\n },\n degreesToRadians(degrees: number) {\n var pi = Math.PI;\n return this.round(degrees * (pi / 180));\n },\n round(num: number): number {\n return parseFloat(num.toFixed(3));\n },\n getDimensionValue(value: number) {\n //return parseFloat(`${value/1000}`).toFixed(2) + 'm';\n return Math.round(value).toString(); //parseFloat(`${value/1000}`).toFixed(3);\n },\n getTextCover(\n textGeo: TextBufferGeometry,\n labelType: string,\n pos: Vector3,\n fitZ = 0,\n bayNum?: number\n ) {\n let textSize = new Vector3();\n textGeo.boundingBox.getSize(textSize);\n\n let textCover = new Mesh(\n new BoxBufferGeometry(textSize.x, textSize.y, textSize.z)\n );\n textCover.position.set(pos.x, pos.y, pos.z + fitZ);\n textCover.userData = { type: GEOMETRY_TYPE.TEXT_COVER, labelType };\n if (bayNum !== undefined) {\n textCover.userData[\"bayNum\"] = bayNum;\n }\n textCover.material[\"opacity\"] = 0;\n textCover.material[\"transparent\"] = true;\n\n return textCover;\n },\n};\n","import { Injectable } from '@angular/core';\nimport { Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot } from '@angular/router';\n\nimport { AuthenticationService } from '../services';\n\n@Injectable({ providedIn: 'root' })\nexport class AuthGuard implements CanActivate {\n constructor(\n private router: Router,\n private authenticationService: AuthenticationService\n ) { }\n\n canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot) {\n const currentUser = this.authenticationService.currentUserValue;\n if (currentUser) {\n // logged in so return true\n return true;\n }\n\n // not logged in so redirect to login page with the return url\n this.router.navigate(['/login'], { queryParams: { returnUrl: state.url } });\n return false;\n }\n}","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable, throwError } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { AuthenticationService } from '../services';\n\n@Injectable()\nexport class ErrorInterceptor implements HttpInterceptor {\n constructor(private authenticationService: AuthenticationService) { }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n return next.handle(request).pipe(catchError(err => {\n if (err.status === 401) {\n // auto logout if 401 response returned from api\n this.authenticationService.logout();\n location.reload(true);\n }\n\n const error = err.error.message || err.statusText;\n return throwError(error);\n }))\n }\n}","export * from './auth.guard';\nexport * from './error.interceptor';\n// export * from './fake-backend';\nexport * from './jwt.interceptor';\n","import { Injectable } from '@angular/core';\nimport { HttpRequest, HttpHandler, HttpEvent, HttpInterceptor } from '@angular/common/http';\nimport { Observable } from 'rxjs';\n\nimport { AuthenticationService } from '../services';\n\n@Injectable()\nexport class JwtInterceptor implements HttpInterceptor {\n constructor(private authenticationService: AuthenticationService) { }\n\n intercept(request: HttpRequest, next: HttpHandler): Observable> {\n // add authorization header with jwt token if available\n let currentUser = this.authenticationService.currentUserValue;\n if (currentUser && currentUser.token) {\n request = request.clone({\n setHeaders: {\n Authorization: `${currentUser.token}` // Bearer \n }\n });\n }\n\n return next.handle(request);\n }\n}","/**\n * @author zz85 / https://github.com/zz85\n * @author mrdoob / http://mrdoob.com\n * Running this will allow you to drag three.js objects around the screen.\n */\n\nimport {\n\tEventDispatcher,\n\tMatrix4,\n\tPlane,\n\tRaycaster,\n\tVector2,\n\tVector3\n} from \"three\";\n\nvar DragControls = function ( _objects, _camera, _domElement ) {\n\n\tvar _plane = new Plane();\n\tvar _raycaster = new Raycaster();\n\n\tvar _mouse = new Vector2();\n\tvar _offset = new Vector3();\n\tvar _intersection = new Vector3();\n\tvar _worldPosition = new Vector3();\n\tvar _inverseMatrix = new Matrix4();\n\n\tvar _selected = null, _hovered = null;\n\n\t//\n\n\tvar scope = this;\n\n\tfunction activate() {\n\n\t\t_domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t_domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t_domElement.addEventListener( 'mouseup', onDocumentMouseCancel, false );\n\t\t_domElement.addEventListener( 'mouseleave', onDocumentMouseCancel, false );\n\t\t_domElement.addEventListener( 'touchmove', onDocumentTouchMove, false );\n\t\t_domElement.addEventListener( 'touchstart', onDocumentTouchStart, false );\n\t\t_domElement.addEventListener( 'touchend', onDocumentTouchEnd, false );\n\n\t}\n\n\tfunction deactivate() {\n\n\t\t_domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );\n\t\t_domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );\n\t\t_domElement.removeEventListener( 'mouseup', onDocumentMouseCancel, false );\n\t\t_domElement.removeEventListener( 'mouseleave', onDocumentMouseCancel, false );\n\t\t_domElement.removeEventListener( 'touchmove', onDocumentTouchMove, false );\n\t\t_domElement.removeEventListener( 'touchstart', onDocumentTouchStart, false );\n\t\t_domElement.removeEventListener( 'touchend', onDocumentTouchEnd, false );\n\n\t}\n\n\tfunction dispose() {\n\n\t\tdeactivate();\n\n\t}\n\n\tfunction onDocumentMouseMove( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tif ( _selected && scope.enabled ) {\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\treturn;\n\n\t\t}\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tvar intersects = _raycaster.intersectObjects( _objects, true );\n\n\t\tif ( intersects.length > 0 ) {\n\n\t\t\tvar object = intersects[ 0 ].object;\n\n\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( object.matrixWorld ) );\n\n\t\t\tif ( _hovered !== object ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'hoveron', object: object } );\n\n\t\t\t\t_domElement.style.cursor = 'pointer';\n\t\t\t\t_hovered = object;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( _hovered !== null ) {\n\n\t\t\t\tscope.dispatchEvent( { type: 'hoveroff', object: _hovered } );\n\n\t\t\t\t_domElement.style.cursor = 'auto';\n\t\t\t\t_hovered = null;\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\tfunction onDocumentMouseDown( event ) {\n\n\t\tevent.preventDefault();\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tvar intersects = _raycaster.intersectObjects( _objects, true );\n\n\t\tif ( intersects.length > 0 ) {\n\n\t\t\t_selected = intersects[ 0 ].object;\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_inverseMatrix.getInverse( _selected.parent.matrixWorld );\n\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t}\n\n\n\t}\n\n\tfunction onDocumentMouseCancel( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tif ( _selected ) {\n\n\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t_selected = null;\n\n\t\t}\n\n\t\t_domElement.style.cursor = _hovered ? 'pointer' : 'auto';\n\n\t}\n\n\tfunction onDocumentTouchMove( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent = event.changedTouches[ 0 ];\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tif ( _selected && scope.enabled ) {\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_selected.position.copy( _intersection.sub( _offset ).applyMatrix4( _inverseMatrix ) );\n\n\t\t\t}\n\n\t\t\tscope.dispatchEvent( { type: 'drag', object: _selected } );\n\n\t\t\treturn;\n\n\t\t}\n\n\t}\n\n\tfunction onDocumentTouchStart( event ) {\n\n\t\tevent.preventDefault();\n\t\tevent = event.changedTouches[ 0 ];\n\n\t\tvar rect = _domElement.getBoundingClientRect();\n\n\t\t_mouse.x = ( ( event.clientX - rect.left ) / rect.width ) * 2 - 1;\n\t\t_mouse.y = - ( ( event.clientY - rect.top ) / rect.height ) * 2 + 1;\n\n\t\t_raycaster.setFromCamera( _mouse, _camera );\n\n\t\tvar intersects = _raycaster.intersectObjects( _objects, true );\n\n\t\tif ( intersects.length > 0 ) {\n\n\t\t\t_selected = intersects[ 0 ].object;\n\n\t\t\t_plane.setFromNormalAndCoplanarPoint( _camera.getWorldDirection( _plane.normal ), _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\tif ( _raycaster.ray.intersectPlane( _plane, _intersection ) ) {\n\n\t\t\t\t_inverseMatrix.getInverse( _selected.parent.matrixWorld );\n\t\t\t\t_offset.copy( _intersection ).sub( _worldPosition.setFromMatrixPosition( _selected.matrixWorld ) );\n\n\t\t\t}\n\n\t\t\t_domElement.style.cursor = 'move';\n\n\t\t\tscope.dispatchEvent( { type: 'dragstart', object: _selected } );\n\n\t\t}\n\n\n\t}\n\n\tfunction onDocumentTouchEnd( event ) {\n\n\t\tevent.preventDefault();\n\n\t\tif ( _selected ) {\n\n\t\t\tscope.dispatchEvent( { type: 'dragend', object: _selected } );\n\n\t\t\t_selected = null;\n\n\t\t}\n\n\t\t_domElement.style.cursor = 'auto';\n\n\t}\n\n\tactivate();\n\n\t// API\n\n\tthis.enabled = true;\n\n\tthis.activate = activate;\n\tthis.deactivate = deactivate;\n\tthis.dispose = dispose;\n\tthis.raycaster = _raycaster\n\n};\n\nDragControls.prototype = Object.create( EventDispatcher.prototype );\nDragControls.prototype.constructor = DragControls;\n\nexport { DragControls };\n","import { BoxBufferGeometry, Color, Mesh, MeshBasicMaterial, Object3D, PlaneBufferGeometry, DoubleSide, Vector3, Shape, ShapeBufferGeometry } from \"three\";\nimport { HIGHLIGHT_BOX_COLOR } from \"../app.config\";\nimport { HomeComponent } from \"../containers/home\";\nimport SelectionManager from \"../core/selection.manager\";\nimport { GeometryManager } from \"../core/geometry.manager\";\nimport { GeometryInfo } from \"../core/models\";\nimport { utils } from \"../core/utils\";\n\nexport default class ArrowControl extends Mesh {\n container: Object3D\n options: any\n mat: MeshBasicMaterial\n\n constructor(container, options: {\n pos: Vector3,\n userData: any,\n rotation?: Vector3\n }){\n let arrowLength = 500;\n let angle = 20;\n let y = utils.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0, 0,);\n shape1.lineTo(arrowLength, y);\n shape1.lineTo(arrowLength, -y);\n shape1.closePath();\n const geo = new ShapeBufferGeometry(shape1);\n geo.translate( - arrowLength, 0, 0)\n const mat = new MeshBasicMaterial({ color: 0xffff00, side: DoubleSide });\n super(geo, mat)\n\n this.position.set(options.pos.x, options.pos.y, options.pos.z)\n if(options.rotation){\n this.rotateX(options.rotation.x)\n this.rotateY(options.rotation.y)\n this.rotateZ(options.rotation.z)\n }\n\n this.userData = options.userData;\n container.add(this)\n\n this.mat = mat;\n this.container = container\n this.options = options\n }\n}","import { BoxBufferGeometry, Color, Mesh, MeshBasicMaterial, Object3D, PlaneBufferGeometry, DoubleSide, Vector3, Shape, ShapeBufferGeometry } from \"three\";\nimport { HIGHLIGHT_BOX_COLOR } from \"../app.config\";\nimport { HomeComponent } from \"../containers/home\";\nimport SelectionManager from \"../core/selection.manager\";\nimport { GeometryManager } from \"../core/geometry.manager\";\nimport { GeometryInfo } from \"../core/models\";\nimport { utils } from \"../core/utils\";\n\nexport default class ClickControl extends Mesh {\n container: Object3D\n options: any\n mat: MeshBasicMaterial\n\n constructor(container, options: {\n pos: Vector3,\n userData: any,\n rotation?: Vector3\n }){\n let arrowLength = 500;\n let angle = 30;\n let y = utils.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0,0);\n shape1.lineTo(0 , y / 2);\n shape1.lineTo(arrowLength / 2 , y / 2);\n shape1.lineTo(arrowLength / 2 , y);\n shape1.lineTo(3 / 2 * arrowLength , 0);\n shape1.lineTo(arrowLength / 2 , - y);\n shape1.lineTo(arrowLength / 2 , - y / 2);\n shape1.lineTo(0 , - y / 2);\n shape1.closePath();\n const geo = new ShapeBufferGeometry(shape1);\n const mat = new MeshBasicMaterial({ color: 0xffff00, side: DoubleSide });\n super(geo, mat)\n\n this.position.set(options.pos.x, options.pos.y, options.pos.z)\n if(options.rotation){\n this.rotateX(options.rotation.x)\n this.rotateY(options.rotation.y)\n this.rotateZ(options.rotation.z)\n }\n\n this.userData = options.userData;\n container.add(this)\n\n this.mat = mat;\n this.container = container\n this.options = options\n }\n}","import { BoxBufferGeometry, DoubleSide, Mesh, MeshBasicMaterial, MeshLambertMaterial, PlaneBufferGeometry, SphereGeometry } from \"three\"\nimport { GeometryManager } from \"../core/geometry.manager\";\nimport { MaterialManager } from \"../core/material.manager\";\nimport { GeometryInfo } from \"../core/models\";\nimport BaseUIControlEntity from \"./base.model\"\n\nexport class DeleteControl extends BaseUIControlEntity {\n geo: BoxBufferGeometry\n lineGeometry: GeometryInfo\n\n draw(){\n const size = 200;\n this.lineGeometry = GeometryManager.Instance().getUIControlLine();\n const deleteMaterial = MaterialManager.Instance().HIDDEN_UI_CONTROL;\n const lineMaterial = MaterialManager.Instance().HIGHLIGHT_DIMENSION_TEXT;\n this.geo = new BoxBufferGeometry(size, 10, size)\n this.mesh = new Mesh(this.geo, deleteMaterial)\n this.mesh.userData = this.options.userData\n this.mesh.position.set(this.position[0], this.position[1], this.position[2])\n if(this.rotation){\n this.mesh.rotateY(this.rotation.x);\n this.mesh.rotateY(this.rotation.y);\n this.mesh.rotateZ(this.rotation.z);\n }\n this.mesh.renderOrder = 0\n this.mesh.visible = this.visible\n\n let line1 = new Mesh(this.lineGeometry.geometry, lineMaterial);\n line1.scale.setX(size * Math.sqrt(2) / this.lineGeometry.length);\n line1.position.set(this.position[0], this.position[1], this.position[2]);\n line1.rotateX(Math.PI / 2);\n line1.rotateZ(Math.PI / 4);\n\n let line2 = line1.clone();\n line2.rotateZ(Math.PI / 2);\n\n this.container.add(this.mesh, line1, line2)\n }\n}","import { BoxBufferGeometry, Color, Vector3, Group, Mesh, MeshBasicMaterial, MeshLambertMaterial, Object3D, Shape, ShapeBufferGeometry, TextBufferGeometry } from \"three\";\nimport { DIMENSION_LABEL_TYPE, GEOMETRY_TYPE } from \"../app.config\";\nimport { BUILDING_SIDE, MOUSE_EVENT, OBJECT_TYPE } from \"../app.constants\";\nimport { HomeComponent } from \"../containers/home\";\nimport { MaterialManager } from \"../core/material.manager\";\nimport { GeometryInfo } from \"../core/models\";\nimport SelectionManager from \"../core/selection.manager\";\nimport { utils } from \"../core/utils\";\nimport { GeometryManager } from \"../core/geometry.manager\";\n\nexport interface AddDimensionOptions {\n container: Object3D,\n start: {x: number, y: number, z: number},\n end: {x: number, y: number, z: number},\n textPos: {x: number, y: number, z: number},\n linePos: {x: number, y: number, z: number},\n lineLength: number;\n views: any,\n allowDrag: boolean,\n textParameter: any,\n labelType: string,\n fitZ: number,\n hasTextClone:boolean,\n axis: string,\n onDragCallback: (obj: Mesh) => void,\n onDragStartCallback: (obj: Mesh) => void,\n subtype?: string,\n textCloneUserData?: {},\n textCloneRotation?: Vector3,\n textCloneVisible?: boolean,\n bayNum?: number,\n textUserData?: {},\n textRotation?: {x: number, y: number, z: number},\n side?: number,\n visible?: boolean\n}\n\nexport default class Dimension extends Group {\n options: AddDimensionOptions\n mat: MeshBasicMaterial\n lineGeometry: GeometryInfo\n lineCapGeo: GeometryInfo\n meshText: Mesh\n meshBayNo: Mesh\n meshLine: Mesh\n meshCap1: Mesh\n meshCap2: Mesh\n meshTextCover: Mesh\n meshTextClone: Mesh\n meshArrow1: Mesh\n meshArrow2: Mesh\n\n static create(options: AddDimensionOptions){\n return new Dimension(options)\n }\n\n constructor(options: AddDimensionOptions){\n super()\n if(!options){\n return this;\n }\n\n this.lineGeometry = GeometryManager.Instance().getDimensionLine();\n this.lineCapGeo = GeometryManager.Instance().getDimensionCap();\n this.options = options\n\n this.mat = MaterialManager.Instance().DIMENSION_TEXT.clone();\n\n let cap1 = new Mesh(this.lineCapGeo.geometry, this.mat);\n cap1.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: this.options.views };\n let cap2 = new Mesh(this.lineCapGeo.geometry, this.mat);\n cap2.userData = { type: GEOMETRY_TYPE.DIMENSION_CAP, views: this.options.views };\n\n if(this.options.axis === 'x'){\n cap1.position.setX( this.options.linePos.x - this.options.lineLength/2 );\n cap2.position.setX( this.options.linePos.x + this.options.lineLength/2 );\n cap1.position.setY(this.options.linePos.y);\n cap2.position.setY(this.options.linePos.y);\n }\n \n let line = new Mesh(this.lineGeometry.geometry, this.mat);\n line.userData = { type: GEOMETRY_TYPE.DIMENSION_LINE, views: this.options.views };\n line.scale.setX( this.options.lineLength / this.lineGeometry.length);\n line.position.set( this.options.linePos.x, this.options.linePos.y, this.options.linePos.z)\n\n let textStr = utils.getDimensionValue(this.options.lineLength);\n const textGeo = new TextBufferGeometry(textStr, this.options.textParameter);\n textGeo.center();\n\n let text = new Mesh(textGeo, this.options.allowDrag ? MaterialManager.Instance().HIGHLIGHT_DIMENSION_TEXT : this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: this.options.views };\n if(this.options.textUserData){\n text.userData = this.options.textUserData;\n }\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n if(this.options.textCloneUserData && this.options.textCloneUserData['rotation']){\n text.userData.rotation = this.options.textCloneUserData['rotation']\n }\n text.position.set( this.options.textPos.x, this.options.textPos.y, this.options.textPos.z);\n \n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ, this.options.bayNum);\n this.add(textCover);\n this.meshTextCover = textCover;\n } else {\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ);\n this.add(textCover);\n this.meshTextCover = textCover;\n }\n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n const textGeoBayNo = new TextBufferGeometry(`#${this.options.bayNum + 1}`, this.options.textParameter);\n textGeoBayNo.center();\n\n let text = new Mesh(textGeoBayNo, this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: `#${this.options.bayNum + 1}`, views: [] };\n\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n if(this.options.textCloneUserData && this.options.textCloneUserData['rotation']){\n text.userData.rotation = this.options.textCloneUserData['rotation']\n }\n text.position.set( this.options.textPos.x, - this.options.textPos.y, this.options.textPos.z);\n\n this.meshBayNo = text\n this.add(this.meshBayNo);\n }\n if(this.options.subtype){\n cap1.userData['subtype'] = this.options.subtype;\n cap2.userData['subtype'] = this.options.subtype;\n line.userData['subtype'] = this.options.subtype;\n text.userData['subtype'] = this.options.subtype;\n }\n if(this.options.hasTextClone){\n let textClone = text.clone();\n textClone.userData = {...this.options.textCloneUserData, isTextClone: true};\n textClone.rotation.set( this.options.textCloneRotation.x, this.options.textCloneRotation.y, this.options.textCloneRotation.z);\n textClone.visible = this.options.textCloneVisible;\n this.meshTextClone = textClone;\n this.add(this.meshTextClone);\n }\n this.meshText = text;\n this.meshLine = line;\n this.meshCap1 = cap1;\n this.meshCap2 = cap2;\n\n this.add(this.meshText, this.meshLine, this.meshCap1, this.meshCap2);\n // this.add(text, line, cap1, cap2);\n this.addArrow();\n this.userData.groupType = this.options.labelType\n if(options.side != null && options.side != undefined){\n this.userData.side = options.side\n }\n if(options.bayNum !== undefined){\n this.userData.bayNum = options.bayNum\n }\n this.userData.views = this.options.views || []\n if(!this.options.visible){\n this.visible = this.options.visible\n }\n this.options.container.add(this);\n }\n \n update(options: AddDimensionOptions){\n this.options = options;\n if(this.options.axis === 'x'){\n this.meshCap1.position.setX( this.options.linePos.x - this.options.lineLength/2 );\n this.meshCap2.position.setX( this.options.linePos.x + this.options.lineLength/2 );\n this.meshCap1.position.setY(this.options.linePos.y);\n this.meshCap2.position.setY(this.options.linePos.y);\n }\n\n this.meshLine.scale.setX( this.options.lineLength / this.lineGeometry.length);\n this.meshLine.position.set( this.options.linePos.x, this.options.linePos.y, this.options.linePos.z)\n\n let textStr = utils.getDimensionValue(this.options.lineLength);\n const textGeo = new TextBufferGeometry(textStr, this.options.textParameter);\n textGeo.center();\n\n let text = new Mesh(textGeo, this.options.allowDrag ? MaterialManager.Instance().HIGHLIGHT_DIMENSION_TEXT : this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: textStr, views: this.options.views };\n if(this.options.textUserData){\n text.userData = this.options.textUserData;\n }\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n text.position.set( this.options.textPos.x, this.options.textPos.y, this.options.textPos.z);\n \n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ, this.options.bayNum);\n this.meshTextCover = textCover;\n } else {\n let textCover = utils.getTextCover(textGeo, this.options.labelType, new Vector3(this.options.textPos.x, this.options.textPos.y, this.options.textPos.z), this.options.fitZ);\n this.meshTextCover = textCover;\n }\n\n this.meshText = text;\n this.children = this.children.filter(el => el.userData.type != GEOMETRY_TYPE.DIMENSION_TEXT && el.userData.type != GEOMETRY_TYPE.TEXT_COVER);\n this.add(this.meshText, this.meshTextCover)\n\n if(this.options.labelType === DIMENSION_LABEL_TYPE.BAY && this.options.bayNum !== undefined){\n const textGeoBayNo = new TextBufferGeometry(`#${this.options.bayNum + 1}`, this.options.textParameter);\n textGeoBayNo.center();\n\n let text = new Mesh(textGeoBayNo, this.mat);\n text.userData = { type: GEOMETRY_TYPE.DIMENSION_TEXT, value: `#${this.options.bayNum + 1}`, views: [] };\n\n if(this.options.textRotation){\n text.rotateX(this.options.textRotation.x)\n text.rotateY(this.options.textRotation.y)\n text.rotateZ(this.options.textRotation.z)\n }\n if(this.options.textCloneUserData && this.options.textCloneUserData['rotation']){\n text.userData.rotation = this.options.textCloneUserData['rotation']\n }\n text.position.set( this.options.textPos.x, - this.options.textPos.y, this.options.textPos.z);\n\n this.meshBayNo = text\n this.add(this.meshBayNo);\n }\n\n if(this.options.hasTextClone){\n let textClone = text.clone();\n textClone.userData = {...this.options.textCloneUserData, isTextClone: true};\n textClone.rotation.set( this.options.textCloneRotation.x, this.options.textCloneRotation.y, this.options.textCloneRotation.z);\n textClone.visible = this.options.textCloneVisible;\n this.meshTextClone = textClone;\n this.children = this.children.filter(el => !el.userData.isTextClone);\n this.add(this.meshTextClone)\n }\n\n if(this.options.lineLength >= 300){\n this.meshArrow1.visible = true;\n this.meshArrow2.visible = true;\n } else {\n this.meshArrow1.visible = false;\n this.meshArrow2.visible = false;\n }\n\n if(this.options.axis === 'x'){\n this.meshArrow1.position.set( this.options.linePos.x - this.options.lineLength / 2, 0, 0);\n this.meshArrow2.position.set( this.options.linePos.x + this.options.lineLength / 2, 0, 0);\n this.meshArrow1.position.setY(this.options.linePos.y);\n this.meshArrow2.position.setY(this.options.linePos.y);\n }\n }\n\n onHover(intersects){\n // if(intersects.find(o => o.object.uuid === this.uuid)){\n // (this.material as MeshLambertMaterial).opacity = 1\n // HomeComponent.ins.renderStatic()\n // }\n // else{\n // // (this.material as MeshLambertMaterial).color = new Color('green')\n // //this.visible = false\n \n // (this.material as MeshLambertMaterial).opacity = 0\n // HomeComponent.ins.renderStatic()\n // }\n }\n onClick(intersects){\n // const obj = intersects.find(o => o.object.uuid === this.uuid)\n // if(obj){\n // HomeComponent.ins.dialogRakeCut.show(true, obj.object?.userData?.side)\n // }\n }\n\n addArrow(){\n let arrowLength = 150;\n let angle = 15;\n\n // if(this.options.lineLength < 300){\n // return ;\n // }\n \n let y = utils.tan(angle) * arrowLength;\n let shape1 = new Shape();\n shape1.moveTo(0, 0,);\n shape1.lineTo(arrowLength, y);\n shape1.lineTo(arrowLength, -y);\n shape1.closePath();\n const mat = MaterialManager.Instance().DIMENSION_TEXT.clone();\n \n let arrow1 = new Mesh(new ShapeBufferGeometry(shape1), mat);\n arrow1.userData = { views: this.options.views, type: GEOMETRY_TYPE.DIMENSION_CAP, dimType: this.options.labelType, right: true };\n let arrow2 = arrow1.clone();\n arrow2.rotateZ(Math.PI);\n arrow2.userData = { views: this.options.views, type: GEOMETRY_TYPE.DIMENSION_CAP, dimType: this.options.labelType, left: true};\n\n if( this.options.labelType === DIMENSION_LABEL_TYPE.BAY){\n arrow1.userData['bayNum'] = this.options.bayNum;\n arrow2.userData['bayNum'] = this.options.bayNum;\n }\n if(this.options.axis === 'x'){\n arrow1.position.set( this.options.linePos.x - this.options.lineLength / 2, 0, 0);\n arrow2.position.set( this.options.linePos.x + this.options.lineLength / 2, 0, 0);\n arrow1.position.setY(this.options.linePos.y);\n arrow2.position.setY(this.options.linePos.y);\n }\n\n if(this.options.allowDrag){\n mat.color = new Color('yellow');\n }\n if(this.options.subtype){\n arrow1.userData['subtype'] = this.options.subtype;\n arrow2.userData['subtype'] = this.options.subtype;\n }\n\n if(this.options.lineLength < 300){\n arrow1.visible = false;\n arrow2.visible = false;\n }\n\n this.meshArrow1 = arrow1;\n this.meshArrow2 = arrow2;\n\n this.add(this.meshArrow1, this.meshArrow2)\n // this.add(arrow1, arrow2)\n\n if(this.options.allowDrag){\n SelectionManager.ins.addEventListener('dragstart', this.options.onDragStartCallback, this.meshArrow1)\n SelectionManager.ins.addEventListener('dragstart', this.options.onDragStartCallback, this.meshArrow2)\n\n SelectionManager.ins.addEventListener('drag', this.options.onDragCallback, this.meshArrow1)\n SelectionManager.ins.addEventListener('drag', this.options.onDragCallback, this.meshArrow2)\n }\n }\n}","import { BoxBufferGeometry, Color, Mesh, MeshLambertMaterial, Object3D } from \"three\";\nimport { HIGHLIGHT_BOX_COLOR } from \"../app.config\";\nimport { BUILDING_SIDE, MOUSE_EVENT, OBJECT_TYPE } from \"../app.constants\";\nimport { HomeComponent } from \"../containers/home\";\nimport SelectionManager from \"../core/selection.manager\";\nimport { UI } from \"../core/ui\";\n\nexport default class HighLightBox extends Mesh {\n container: Object3D\n options: any\n mat: MeshLambertMaterial\n\n constructor(container, options: {\n min: {x: number, y: number, z: number},\n max: {x: number, y: number, z: number},\n userData: any\n }){\n const geo = new BoxBufferGeometry(100, 120, 100)\n geo.translate(0,50,0)\n const mat = new MeshLambertMaterial({ color: HIGHLIGHT_BOX_COLOR.GREEN, transparent: true, opacity: 0 })\n super(geo, mat)\n\n const width = options.max.x - options.min.x\n const _length = options.max.z - options.min.z\n const height = Math.abs(options.max.y - options.min.y)\n\n this.position.set(options.min.x + width/2, options.min.y, options.min.z + _length/2)\n this.scale.set(width/100, height / 120 > 0 ? height / 120 : 1, _length/100)\n \n\n this.userData = { ...options.userData, type: 'HIGHLIGHT_BOX' }\n container.add(this)\n\n SelectionManager.ins.addEventListener(MOUSE_EVENT.HOVER, (intersects) => {\n this.onHover(intersects)\n })\n SelectionManager.ins.addEventListener(MOUSE_EVENT.CLICK, (intersects) => {\n this.onClick(intersects)\n })\n\n this.mat = mat;\n this.container = container\n this.options = options\n }\n \n update(){\n this.position.set(this.options.x, this.options.y, this.options.z)\n }\n\n onHover(intersects){\n if(intersects.length == 0){\n if(!this.material || (this.material as MeshLambertMaterial).opacity == 0){\n return\n }\n }\n if(intersects.find(o => o.object.uuid === this.uuid)){\n if((this.material as MeshLambertMaterial).opacity == 1){\n return\n }\n (this.material as MeshLambertMaterial).opacity = 1\n HomeComponent.ins.renderStatic()\n }\n else{\n // (this.material as MeshLambertMaterial).color = new Color('green')\n //this.visible = false\n if((this.material as MeshLambertMaterial).opacity == 0){\n return\n }\n \n (this.material as MeshLambertMaterial).opacity = 0\n HomeComponent.ins.renderStatic()\n }\n }\n onClick(intersects){\n if(!UI.enableControl) {\n return\n }\n const obj = intersects.find(o => o.object.uuid === this.uuid)\n if(obj){\n if(obj.object?.userData?.side){\n HomeComponent.ins.dialogRakeCut.show(true, obj.object?.userData?.side)\n } else if (obj.object?.userData?.wallSide){\n HomeComponent.ins.dialogComfirm.show(true, obj.object?.userData?.wallSide)\n }\n }\n }\n}","import { Group, Mesh, MeshPhongMaterial, Vector3} from \"three\";\nimport { GEOMETRY_TYPE } from \"../app.config\";\nimport { GeometryInfo } from \"../core/models\";\n\nexport interface UpstandBraketOptions {\n container: Group, \n geoBraket_1: GeometryInfo, \n geoBraket_2: GeometryInfo, \n material: MeshPhongMaterial,\n height: number,\n position: Vector3,\n rotation?: Vector3,\n userData?: {}\n}\n\n\nexport default class UpstandBraket extends Group{\n options: UpstandBraketOptions\n\n static create(options: UpstandBraketOptions){\n return new UpstandBraket(options)\n }\n\n constructor(options: UpstandBraketOptions){\n super()\n this.options = options;\n let braket1 = new Mesh(this.options.geoBraket_1.geometry, this.options.material);\n braket1.translateZ(this.options.geoBraket_2.height / 4 + this.options.geoBraket_1.width / 2);\n braket1.scale.setY(this.options.height / this.options.geoBraket_1.length);\n this.add(braket1)\n\n let braket2 = new Mesh(this.options.geoBraket_2.geometry, this.options.material);\n this.add(braket2)\n\n this.position.set( this.options.position.x, this.options.position.y, this.options.position.z);\n if(this.options.userData){\n this.userData = this.options.userData;\n } else {\n this.userData = { type: GEOMETRY_TYPE.UPSTAND_BRAKET};\n }\n\n this.options.container.add(this);\n }\n}","import { Vector3, Object3D, MeshLambertMaterial, SpriteMaterial } from \"three\"\nimport { MaterialManager } from \"../core/material.manager\"\n\nexport default class BaseUIControlEntity{\n public size: Array\n public position: Array\n public container: Object3D\n public material: SpriteMaterial\n public rotation: Vector3\n public options\n public mesh: Object3D\n public visible = true;\n\n constructor(size: Array, position: Array, options, visible = true){\n this.size = size\n this.position = position\n this.container = options.container\n this.material = options.material ? options.material : MaterialManager.Instance().UI_CONTROL;\n this.rotation = options.rotation ? options.rotation : new Vector3;\n this.options = options\n this.visible = visible\n this.draw()\n }\n\n draw(){}\n}","import { Sprite } from \"three\"\nimport BaseUIControlEntity from \"./base.model\"\n\nexport class UIControl extends BaseUIControlEntity {\n draw(){\n this.mesh = new Sprite(this.material)\n this.mesh.userData = this.options.userData\n let scaleUniform = 1\n if(this.material.sizeAttenuation) {\n scaleUniform = 5000\n }\n\n this.mesh.scale.set(this.size[0] * scaleUniform, this.size[1] * scaleUniform, this.size[2] * scaleUniform)\n this.mesh.position.set(this.position[0], this.position[1], this.position[2])\n this.mesh.renderOrder = 0\n this.mesh.visible = this.visible\n this.container.add(this.mesh)\n }\n}","import { Injectable } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { BehaviorSubject, Observable } from \"rxjs\";\nimport { map } from \"rxjs/operators\";\n\nimport { environment } from \"../../environments/environment\";\nimport { User } from \"../models\";\n\n@Injectable({ providedIn: \"root\" })\nexport class AuthenticationService {\n private currentUserSubject: BehaviorSubject;\n public currentUser: Observable;\n\n constructor(private http: HttpClient) {\n this.currentUserSubject = new BehaviorSubject(\n JSON.parse(localStorage.getItem(\"SPCUser\"))\n );\n this.currentUser = this.currentUserSubject.asObservable();\n }\n\n public get currentUserValue(): User {\n return this.currentUserSubject.value;\n }\n\n login(userName: string, password: string) {\n return this.http\n .post(`${environment.apiDbUrl}/auth/login`, {\n userName,\n password,\n })\n .pipe(\n map((user) => {\n // store user details and jwt token in local storage to keep user logged in between page refreshes\n localStorage.setItem(\"SPCUser\", JSON.stringify(user.data));\n this.currentUserSubject.next(user.data);\n return user;\n })\n );\n }\n\n logout() {\n // remove user from local storage to log user out\n localStorage.removeItem(\"SPCUser\");\n this.currentUserSubject.next(null);\n }\n}\n","import { Injectable } from \"@angular/core\";\nimport { Workbook } from \"exceljs\";\nimport * as fs from \"file-saver\";\n\n@Injectable({ providedIn: \"root\" })\nexport class ExcelService {\n exportExcel(dataSource, dataSourceTotal, jobNo, isShowPrice = false) {\n // const { dataSource, dataSourceTotal } = this.state;\n const _fileName = `${jobNo}-BOM.xlsx`;\n const workbook = new Workbook();\n const worksheet = workbook.addWorksheet(\"BOM\");\n\n // add column headers\n const _headerStyle = {\n font: { name: \"tahoma\" },\n // alignment: { vertical: \"middle\", horizontal: \"center\" },\n };\n const _headerWidth = 10;\n const _headerList = [\n {\n header: \"#\",\n key: \"idx\",\n width: _headerWidth,\n style: _headerStyle,\n },\n { header: \"Item No.\", key: \"itemNo\", width: 25, style: _headerStyle },\n { header: \"Qty\", key: \"qty\", width: _headerWidth, style: _headerStyle },\n {\n header: \"Length\",\n key: \"length\",\n width: _headerWidth,\n style: _headerStyle,\n },\n {\n header: \"Cut BK\",\n key: \"cutBk\",\n width: _headerWidth,\n style: _headerStyle,\n },\n { header: \"Dir\", key: \"dri\", width: _headerWidth, style: _headerStyle },\n {\n header: \"Description\",\n key: \"description\",\n width: 70,\n style: _headerStyle,\n },\n { header: \"UoM\", key: \"uom\", width: _headerWidth, style: _headerStyle },\n { header: \"Total UoM\", key: \"totalUom\", width: 20, style: _headerStyle },\n {\n header: \"Unit Price\",\n key: \"unitPrice\",\n width: 20,\n style: { ..._headerStyle, numFmt: '\"$\"#,##0.00;[Red]-\"$\"#,##0.00' },\n },\n {\n header: \"Price\",\n key: \"price\",\n width: 20,\n style: { ..._headerStyle, numFmt: '\"$\"#,##0.00;[Red]-\"$\"#,##0.00' },\n },\n ];\n worksheet.columns = _headerList;\n let rowHeader = worksheet.getRow(1);\n for (let i = 0; i < _headerList.length; i++) {\n const cell = rowHeader.getCell(_headerList[i].key);\n cell.fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"2295ec\" },\n };\n cell.font = { bold: true };\n cell.alignment = { horizontal: \"center\" };\n cell.border = {\n top: { style: \"thin\" },\n left: { style: \"thin\" },\n bottom: { style: \"thin\" },\n right: { style: \"thin\" },\n };\n }\n // Add row using key mapping to columns\n dataSource.map((value, index) => {\n worksheet.addRow([\n value.idx,\n value.itemNo,\n value.qty,\n value.length,\n value.cutBk,\n value.dri,\n value.description,\n value.uom,\n value.totalUom,\n isShowPrice ? value.unitPrice : 0,\n isShowPrice ? value.price : 0,\n ]);\n if (value.isAdd) {\n const _row = worksheet.lastRow;\n _row.eachCell((cell) => {\n cell.fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"CCFFCC\" },\n };\n });\n }\n });\n let _rowCount = dataSource.length + 1;\n const _totalPanelStyle = {\n font: { bold: true },\n numFmt: '\"$\"#,##0.00;[Red]-\"$\"#,##0.00',\n alignment: { horizontal: \"right\" },\n fill: {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"cbe8fb\" },\n },\n };\n dataSourceTotal.map((value, index) => {\n _rowCount++;\n const _newRow = worksheet.addRow({\n totalUom: value.description,\n price: value.price,\n });\n const _mergeRange = `I${_rowCount}:J${_rowCount}`;\n worksheet.mergeCells(_mergeRange);\n const _unitPricecell = _newRow.getCell(\"price\");\n const _totalUomcell = _newRow.getCell(\"totalUom\");\n if (_rowCount === dataSource.length + dataSourceTotal.length + 1) {\n _totalUomcell.font = {\n ..._totalPanelStyle.font,\n color: { argb: \"f00000\" },\n };\n _totalUomcell.numFmt = _totalPanelStyle.numFmt;\n _totalUomcell.alignment = { horizontal: \"right\" };\n _totalUomcell.fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"cbe8fb\" },\n };\n _unitPricecell.style = _totalUomcell.style;\n } else {\n _totalUomcell.font = _totalPanelStyle.font;\n _totalUomcell.numFmt = _totalPanelStyle.numFmt;\n _totalUomcell.alignment = { horizontal: \"right\" };\n _totalUomcell.fill = {\n type: \"pattern\",\n pattern: \"solid\",\n fgColor: { argb: \"cbe8fb\" },\n };\n _unitPricecell.style = _totalUomcell.style;\n }\n });\n // save workbook to disk\n workbook.xlsx.writeBuffer().then((data: any) => {\n const blob = new Blob([data], {\n type: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\",\n });\n fs.saveAs(blob, _fileName);\n });\n }\n}\n","export * from './authentication.service';\nexport * from './user.service';\nexport * from './printing.service';\nexport * from './job.service';\nexport * from './excel.service';\n","import { Injectable } from \"@angular/core\";\nimport { HttpClient } from \"@angular/common/http\";\nimport { map } from \"rxjs/operators\";\nimport { environment } from \"../../environments/environment\";\nimport { User } from \"../models\";\n\n@Injectable({ providedIn: \"root\" })\nexport class JobService {\n constructor(private http: HttpClient) {}\n\n getAll() {\n return this.http.get(`${environment.apiDbUrl}/users`);\n }\n createJob(info: any) {\n return this.http.post(`${environment.apiDbUrl}/job/add`, info).pipe(\n map((newJob) => {\n return newJob;\n })\n );\n }\n UpdateJob(id: any, info: any) {\n return this.http\n .put(`${environment.apiDbUrl}/job/edit/${id}`, info)\n .pipe(\n map((newJob) => {\n return newJob;\n })\n );\n }\n // getBOM(id: any) {\n // return this.http.get(`${environment.apiDbUrl}/job-bom?id=${id}`);\n // }\n getBOMById(id: any) {\n return this.http.get(\n `${environment.apiDbUrl}/job/get-bom-by-id?id=${id}`\n );\n }\n calcBOMByPara(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/calc-bom-by-para`, info)\n .pipe(\n map((jobInfo) => {\n return jobInfo;\n })\n );\n }\n\n calcRibSpanInfo(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/calc-rib-span-info`, info)\n .pipe(\n map((jobInfo) => {\n return jobInfo;\n })\n );\n }\n\n checkData(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/check-data`, info)\n .pipe(\n map((info) => {\n return info;\n })\n );\n }\n calcQuoteInfo(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/calc-quote-info`, info)\n .pipe(\n map((quoteInfo) => {\n return quoteInfo;\n })\n );\n }\n updateJobFiles(id: any, info: any) {\n return this.http\n .put(`${environment.apiDbUrl}/job/edit-files/${id}`, info)\n .pipe(\n map((rs) => {\n return rs;\n })\n );\n }\n getJobByUserId(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/get-by-user-id`, info)\n .pipe(\n map((jobInfo) => {\n return jobInfo;\n })\n );\n }\n genJobNo(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/gen-job-no`, info)\n .pipe(\n map((jobInfo) => {\n return jobInfo;\n })\n );\n }\n genJobNoRevised(info: any) {\n return this.http\n .post(`${environment.apiDbUrl}/job/gen-job-no-revised`, info)\n .pipe(\n map((jobInfo) => {\n return jobInfo;\n })\n );\n }\n getById(id: any) {\n return this.http.get(`${environment.apiDbUrl}/job/get-by-id?id=${id}`);\n }\n copyOrRevisedById(id: any, type: any) {\n return this.http.get(\n `${environment.apiDbUrl}/job/copy-revised-by-id?id=${id}&type=${type}`\n );\n }\n}\n","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { environment } from '../../environments/environment';\n\n@Injectable({ providedIn: \"root\" })\nexport class MaterialService {\n constructor(private http: HttpClient) { }\n\n getAll() {\n return this.http.get(`${environment.apiDbUrl}/material/list`);\n }\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { environment } from '../../environments/environment';\n\n@Injectable({ providedIn: \"root\" })\nexport class PriceService {\n constructor(private http: HttpClient) { }\n\n public searchByQuery(group: string, description): Observable {\n return this.http.get(\n `${environment.apiDbUrl}/price/list-by-query?itemGroup=${group}&itemDescription=${description}`\n );\n }\n}","import { Injectable } from '@angular/core';\nimport { Observable } from 'rxjs';\nimport { HttpClient } from '@angular/common/http';\nimport { environment } from 'src/environments/environment';\n\n@Injectable({\n providedIn: 'root'\n})\nexport class PrintingService {\n private baseUrl: string = `${environment.apiBaseUrl}/api/default`;\n private urlPrintPDF: string = `${this.baseUrl}/exportpdf`;\n \n \n\n constructor(private http: HttpClient) {\n\n }\n\n public printPDF(data: any): Observable {\n return this.http.post(this.urlPrintPDF, data);\n }\n// public getAll(): Observable{\n// return this.http.get(this.urlGetAll);\n// }\n// public getById(id: string): Observable{\n// return this.http.get(`${this.urlGetBuId}/${id}`);\n// }\n\n// public getJSON(url: string): Observable {\n// return this.http.get(url);\n// }\n}","import { HttpClient } from '@angular/common/http';\nimport { Injectable } from '@angular/core';\n\nimport { map } from 'rxjs/operators';\nimport { environment } from '../../environments/environment';\n\n@Injectable({ providedIn: 'root' })\nexport class UserService {\n constructor(private http: HttpClient) { }\n\n updateCustomText(id: any, info: any) {\n return this.http\n .put(`${environment.apiDbUrl}/user/update-custom-text/${id}`, info)\n .pipe(\n map(ret => {\n return ret;\n })\n );\n }\n}","// The file contents for the current environment will overwrite these during build.\n// The build system defaults to the dev environment which uses `environment.ts`, but if you do\n// `ng build --env=prod` then `environment.prod.ts` will be used instead.\n// The list of which env maps to which file can be found in `.angular-cli.json`.\n\nexport const environment = {\n production: true,\n version: require(\"../../package.json\").version,\n modelBaseUrl: \".\",\n uploadFolder: \"superiorsoftware_api/upload/dataFiles\",\n mediaFolder: \"superiorsoftware_api/media\",\n // VPS\n // apiBaseUrl: \".\",\n // apiDbUrl: \"http://demo.superiorsoftware.net.au:8080/api\",\n // uploadUrl: \"http://demo.superiorsoftware.net.au:8080/upload/dataFiles\",\n // backendUrl: \"http://admin.superiorsoftware.net.au/\",\n // BUILD\n apiBaseUrl: \"https://patios.superiorsoftware.net.au\",\n apiDbUrl: \"https://patios.superiorsoftware.net.au:9999/api\",\n uploadUrl: \"https://patios.superiorsoftware.net.au:9999/upload/dataFiles\",\n backendUrl: \"https://admin.superiorsoftware.net.au/\",\n\n // DEMO\n // apiBaseUrl: \".\",\n // apiDbUrl: \"https://patios.superiorsoftware.net.au:8080/api\",\n // uploadUrl: \"https://patios.superiorsoftware.net.au:8080/upload/dataFiles\",\n // backendUrl: \"https://admin.superiorsoftware.net.au/\",\n // Local\n // apiBaseUrl: \"http://localhost:5000\",\n // apiDbUrl: \"http://127.0.0.1:8080/api\",\n // uploadUrl: \"http://127.0.0.1:8080/upload/dataFiles\",\n // backendUrl: \"http://localhost:3000/\",\n};\n","import { enableProdMode, ViewEncapsulation } from '@angular/core';\nimport { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\n\nimport { AppModule } from './app/app.module';\nimport { environment } from './environments/environment';\n\nif (environment.production) {\n enableProdMode();\n}\n\nplatformBrowserDynamic().bootstrapModule(AppModule, [{\n defaultEncapsulation: ViewEncapsulation.None\n}]).catch(err => console.log(err));\n","/* (ignored) */"],"sourceRoot":"webpack:///"}
\n Quote Includes\n

{{ currentQuoteInfo.quoteInfo.note }}

\n