{"version":3,"file":"main.js","mappings":"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AAE,GAAG,EAAE,6BAA6B,EAAE,CAAC,CAAC;iBACxG;gBAAC,OAAO,KAAK,EAAE;oBACd,OAAO,CAAC,GAAG,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;iBAChC;aACF;QACH,CAAC,CAAC;QAhSA,IAAI,CAAC,SAAS,CAAC,GAAG,GAAG,cAAc,CAAC,QAAQ,CAAC;IAC/C,CAAC;;gBAzBM,qDAAQ;gBACR,gEAAS;gBAUT,qDAAY;gBACZ,4DAAc;;IAIV,KAAK;QADjB,0DAAU,EAAE;yCAIS,qDAAQ;YACX,gEAAS;YACT,qDAAY;YACJ,4DAAc;OAN5B,KAAK,CAySjB;IAAD,YAAC;CAAA;AAzSiB;;;;;;;;;;;ACjBlB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;;AAEA;AACA;AACA;AACA,EAAE;AACF;AACA,wCAAwC;AACxC;AACA;;;;;;;;;;;;ACvRA,+DAAe,6FAA6F;;;;;;;;;;;;ACA5G,+DAAe,ulBAAulB;;;;;;;;;;;;ACAtmB,+DAAe,kcAAkc,88DAA88D;;;;;;;;;;;;ACA/5E,+DAAe,0nEAA0nE;;;;;;;;;;;;ACAzoE,+DAAe,gqBAAgqB,wOAAwO,2kBAA2kB,MAAM,8BAA8B,8BAA8B,6JAA6J,sBAAsB,gUAAgU,0IAA0I,muBAAmuB,gGAAgG,2wBAA2wB,MAAM,uDAAuD,mHAAmH,sBAAsB,oTAAoT,sJAAsJ,WAAW,w0BAAw0B,kFAAkF,WAAW,+4GAA+4G,oBAAoB,wrBAAwrB,kBAAkB,izFAAizF;;;;;;;;;;;;ACA7sY,+DAAe,2UAA2U,kpEAAkpE;;;;;;;;;;;;ACA5+E,+DAAe,m6CAAm6C,2EAA2E,mGAAmG,sVAAsV,uJAAuJ,+qBAA+qB,qBAAqB,MAAM,2LAA2L,sBAAsB,yHAAyH,sBAAsB,qJAAqJ;;;;;;;;;;;;ACA5wG,+DAAe,ixBAAixB,0HAA0H,cAAc,+MAA+M,2fAA2f,wHAAwH,aAAa,8MAA8M,stFAAstF;;;;;;;;;;;;ACA3pJ,+DAAe,gWAAgW,oyCAAoyC,gJAAgJ,UAAU,sxCAAsxC,8EAA8E,iBAAiB,y3CAAy3C,2IAA2I,qBAAqB,w+EAAw+E;;;;;;;;;;;;ACAnqO,+DAAe,yxBAAyxB,qFAAqF,yBAAyB,qNAAqN,yjBAAyjB,oFAAoF,wBAAwB,gNAAgN,gmBAAgmB,oFAAoF,wBAAwB,gNAAgN,s3BAAs3B;;;;;;;;;;;;ACAlvH,+DAAe,8oBAA8oB,wGAAwG,iCAAiC,2YAA2Y,uCAAuC,oHAAoH;;;;;;;;;;;;ACA50C,+DAAe,4hUAA4hU,sXAAsX,+MAA+M,g0HAAg0H,0WAA0W,yMAAyM,6wgBAA6wgB,cAAc,qEAAqE,2BAA2B,KAAK,8IAA8I,2BAA2B,o8BAAo8B,0CAA0C,m5BAAm5B,wEAAwE,6cAA6c,sHAAsH,oUAAoU,8HAA8H,4wCAA4wC,uCAAuC,o8CAAo8C,uCAAuC,ghDAAghD,gCAAgC,miBAAmiB,6DAA6D,yKAAyK,gCAAgC,mnBAAmnB,KAAK,aAAa,6NAA6N,wBAAwB,IAAI,iBAAiB,mlBAAmlB,2CAA2C,GAAG,+GAA+G,mHAAmH,iFAAiF,+LAA+L,iBAAiB,GAAG,ykCAAykC,0NAA0N,qlBAAqlB,6DAA6D,yPAAyP,sHAAsH,sgBAAsgB,kOAAkO,qlBAAqlB,6DAA6D,yPAAyP,8HAA8H,wsBAAwsB,gCAAgC,kEAAkE,4TAA4T,wBAAwB,IAAI,iBAAiB,goBAAgoB,2CAA2C,GAAG,+GAA+G,mHAAmH,iFAAiF,sOAAsO,iBAAiB,GAAG,k6EAAk6E,eAAe,w1CAAw1C,eAAe,glBAAglB;;;;;;;;;;;;ACAl1oD,+DAAe,uNAAuN,4mBAA4mB,sCAAsC,MAAM,saAAsa,qCAAqC,MAAM,whBAAwhB,uCAAuC,MAAM,+hBAA+hB,iDAAiD,MAAM,8eAA8e,oCAAoC,0JAA0J,8CAA8C,scAAsc,+KAA+K,uCAAuC,MAAM,2QAA2Q,yBAAyB,+FAA+F,mJAAmJ,iHAAiH,MAAM,04DAA04D,qLAAqL,gFAAgF,MAAM,4QAA4Q,yBAAyB,8FAA8F,mJAAmJ,gHAAgH,MAAM,2oIAA2oI,mBAAmB,0qBAA0qB,qDAAqD,MAAM,6oDAA6oD,kCAAkC,mYAAmY,0BAA0B,gSAAgS,MAAM,MAAM,63BAA63B,sCAAsC,MAAM,yfAAyf,qCAAqC,aAAa,6nBAA6nB,qCAAqC,MAAM,mjBAAmjB,uCAAuC,MAAM,krBAAkrB,iDAAiD,MAAM,omBAAomB,uCAAuC,MAAM,kdAAkd,cAAc,yEAAyE,oCAAoC,yJAAyJ,8CAA8C,mgGAAmgG,mBAAmB,osBAAosB,qDAAqD,MAAM,0vDAA0vD,kCAAkC,spBAAspB,0BAA0B,ghCAAghC,g9CAAg9C;;;;;;;;;;;;ACA1j4B,+DAAe,2pBAA2pB,kBAAkB,kWAAkW,sBAAsB,kWAAkW,uBAAuB,kWAAkW,qBAAqB,oCAAoC;;;;;;;;;;;;ACAx0D,+DAAe,4TAA4T,yNAAyN,YAAY,sEAAsE,wFAAwF,4CAA4C;;;;;;;;;;;;ACA1vB,+DAAe,uOAAuO,kqEAAkqE,iMAAiM,WAAW,86GAA86G,6EAA6E,imBAAimB,6EAA6E,6zCAA6zC;;;;;;;;;;;;ACA1kQ,+DAAe,iPAAiP;;;;;;;;;;;;ACAhQ,+DAAe,mdAAmd;;;;;;;;;;;;ACAle,+DAAe,iPAAiP;;;;;;;;;;;;ACAhQ,+DAAe,g/CAAg/C;;;;;;;;;;;;ACA//C,+DAAe,0vDAA0vD;;;;;;;;;;;;ACAzwD,+DAAe,yWAAyW,+BAA+B,IAAI,sBAAsB,uSAAuS,cAAc,2dAA2d","sources":["./$_lazy_route_resources|lazy|groupOptions: {}|namespace object","./src/app/app-routing.module.ts","./src/app/app.component.ts","./src/app/app.module.ts","./src/app/completeRegistration/completeRegistration.module.ts","./src/app/completeRegistration/completeRegistration.service.ts","./src/app/completeRegistration/completeRegistration.ts","./src/app/forgotPassword/forgottenPassword.module.ts","./src/app/forgotPassword/forgottenPassword.service.ts","./src/app/forgotPassword/forgottenPassword.ts","./src/app/login/login.guard.ts","./src/app/login/login.module.ts","./src/app/login/login.service.ts","./src/app/login/login.ts","./src/app/registration/registration.module.ts","./src/app/registration/registration.service.ts","./src/app/registration/registration.ts","./src/app/resetPassword/resetPassword.module.ts","./src/app/resetPassword/resetPassword.service.ts","./src/app/resetPassword/resetPassword.ts","./src/app/tool/endmill/endmill.service.ts","./src/app/tool/endmill/endmill.ts","./src/app/tool/hardness.model.ts","./src/app/tool/machine/machine.ts","./src/app/tool/material/material.service.ts","./src/app/tool/material/material.ts","./src/app/tool/operation/operation.service.ts","./src/app/tool/operation/operation.ts","./src/app/tool/operation/toolPathSelector/toolPathSelector.ts","./src/app/tool/parameters/parameters.ts","./src/app/tool/recommendations/recommendations.ts","./src/app/tool/start/start.ts","./src/app/tool/summary/summary.ts","./src/app/tool/tool.module.ts","./src/app/tool/tool.service.ts","./src/app/tool/tool.ts","./src/config.ts","./src/main.ts","./src/service/common.service.ts","./src/service/constants.ts","./src/service/dialog/alert/alert.ts","./src/service/dialog/confirm/confirm.ts","./src/service/dialog/error/error.ts","./src/service/dialog/gCode/gCode.ts","./src/service/dialog/pdfInfo/pdfInfo.ts","./src/service/dialog/workOffline/workOffline.ts","./src/service/formulas/conversionsFormulas.ts","./src/service/formulas/formulas.ts","./src/service/formulas/objects.ts","./src/service/formulas/standardFormulas.ts","./src/service/image-constants.ts","./src/service/ng-knob2.ts","./src/service/provider.interface.ts","./src/service/utils.ts","./node_modules/@ionic/core/dist/esm|lazy|/^/.*/.entry/.js$/|include: /.entry/.js$/|exclude: /.system/.entry/.js$/|groupOptions: {}|namespace object","./src/app/app.html","./src/app/completeRegistration/completeRegistration.html","./src/app/forgotPassword/forgottenPassword.html","./src/app/login/login.html","./src/app/registration/registration.html","./src/app/resetPassword/resetPassword.html","./src/app/tool/endmill/endmill.html","./src/app/tool/machine/machine.html","./src/app/tool/material/material.html","./src/app/tool/operation/operation.html","./src/app/tool/operation/toolPathSelector/toolPathSelector.html","./src/app/tool/parameters/parameters.html","./src/app/tool/recommendations/recommendations.html","./src/app/tool/start/start.html","./src/app/tool/summary/summary.html","./src/app/tool/tool.html","./src/service/dialog/alert/alert.html","./src/service/dialog/confirm/confirm.html","./src/service/dialog/error/error.html","./src/service/dialog/gCode/gCode.html","./src/service/dialog/pdfInfo/pdfInfo.html","./src/service/dialog/workOffline/workOffline.html"],"sourcesContent":["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;\nwebpackEmptyAsyncContext.id = 98255;\nmodule.exports = webpackEmptyAsyncContext;","import { ForgottenPasswordPage } from './forgotPassword/forgottenPassword';\r\nimport { NgModule } from '@angular/core';\r\nimport { PreloadAllModules, RouterModule, Routes } from '@angular/router';\r\nimport { LoginPage } from './login/login';\r\nimport { RegistrationPage } from './registration/registration';\r\nimport { ResetPasswordPage } from './resetPassword/resetPassword';\r\nimport { CompleteRegistrationPage } from './completeRegistration/completeRegistration';\r\nimport { ToolPage } from './tool/tool';\r\nimport { LoginGuard } from './login/login.guard';\r\n\r\nconst routes: Routes = [\r\n { path: '', redirectTo: 'tool/null/null', pathMatch: 'full' },\r\n { path: 'register', component: RegistrationPage },\r\n { path: 'login', component: LoginPage },\r\n { path: 'forgotten-password', component: ForgottenPasswordPage },\r\n { path: 'reset-password/:id/:token', component: ResetPasswordPage },\r\n { path: 'complete-registration/:token', component: CompleteRegistrationPage },\r\n { path: 'tool/:brand/:sku', component: ToolPage, canActivate: [LoginGuard] },\r\n { path: 'tool', redirectTo: 'tool/null/null', pathMatch: 'full' }\r\n];\r\n\r\n@NgModule({\r\n imports: [RouterModule.forRoot(routes, { preloadingStrategy: PreloadAllModules, relativeLinkResolution: 'legacy' })],\r\n exports: [RouterModule]\r\n})\r\nexport class AppRoutingModule {}\r\n","import { Component } from '@angular/core';\r\nimport { Platform, NavController } from '@ionic/angular';\r\nimport { CacheService } from 'ionic-cache';\r\n\r\nimport { StatusBar } from '@ionic-native/status-bar/ngx';\r\nimport { SplashScreen } from '@ionic-native/splash-screen/ngx';\r\n\r\ndeclare var Apptentive;\r\n\r\n@Component({\r\n selector: 'app-root',\r\n templateUrl: 'app.html'\r\n})\r\nexport class App {\r\n constructor(\r\n public platform: Platform,\r\n public statusBar: StatusBar,\r\n public splashScreen: SplashScreen,\r\n public cache: CacheService\r\n ) {\r\n this.initializeApp();\r\n this.cache.setOfflineInvalidate(true);\r\n }\r\n\r\n initializeApp() {\r\n this.platform.ready().then(() => {\r\n if (!this.platform.is('mobileweb') && (this.platform.is('android') || this.platform.is('ios'))) {\r\n if (this.platform.is('ios')) {\r\n this.statusBar.overlaysWebView(false);\r\n }\r\n this.statusBar.backgroundColorByHexString('#294574');\r\n this.splashScreen.hide();\r\n //Add try catch for apprentive so the app doesn't break.\r\n //Some cases Apptentive had an issue on their end or it tries to fire it when it's not supposed to be used\r\n try {\r\n Apptentive.deviceReady();\r\n } catch (error) {\r\n console.log('Error: ' + error);\r\n }\r\n\r\n try {\r\n Apptentive.addUnreadMessagesListener(\r\n function(unreadMessages) {\r\n console.log('UnreadMessages: ' + unreadMessages);\r\n },\r\n function(errorMessage) {\r\n console.log('Error: ' + errorMessage);\r\n }\r\n );\r\n } catch (error) {\r\n console.log('Error: ' + error);\r\n }\r\n // Okay, so the platform is ready and our plugins are available.\r\n // Here you can do any higher level native things you might need.\r\n } else {\r\n this.statusBar.hide();\r\n }\r\n });\r\n }\r\n}\r\n","import { ToolPageModule } from './tool/tool.module';\r\nimport { ResetPasswordPageModule } from './resetPassword/resetPassword.module';\r\nimport { RegistrationPageModule } from './registration/registration.module';\r\nimport { ForgottenPasswordPageModule } from './forgotPassword/forgottenPassword.module';\r\nimport { CompleteRegistrationPageModule } from './completeRegistration/completeRegistration.module';\r\nimport { LoginPageModule } from './login/login.module';\r\nimport { AppRoutingModule } from './app-routing.module';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { NgModule } from '@angular/core';\r\nimport { BrowserModule, HAMMER_GESTURE_CONFIG } from '@angular/platform-browser';\r\nimport { LocationStrategy, HashLocationStrategy } from '@angular/common';\r\nimport { AndroidPermissions } from '@ionic-native/android-permissions/ngx';\r\nimport { File } from '@ionic-native/file/ngx';\r\nimport { FileTransfer, FileTransferObject } from '@ionic-native/file-transfer/ngx';\r\nimport { FileOpener } from '@ionic-native/file-opener/ngx';\r\nimport { Deeplinks } from '@ionic-native/deeplinks/ngx';\r\nimport { CacheModule } from 'ionic-cache';\r\nimport { KnobModule } from 'ng2-knob';\r\nimport { NouisliderModule } from 'ng2-nouislider';\r\nimport { App } from './app.component';\r\n\r\nimport { Utils } from '../service/utils';\r\nimport { Constants } from '../service/constants';\r\nimport { ImageConstants } from '../service/image-constants';\r\nimport { ApplicationConfig } from '../config';\r\nimport { MaterialProvider } from './tool/material/material.service';\r\nimport { EndmillProvider } from './tool/endmill/endmill.service';\r\n\r\nimport { BrowserAnimationsModule } from '@angular/platform-browser/animations';\r\nimport { ReactiveFormsModule } from '@angular/forms';\r\n\r\nimport { ErrorDialog } from '../service/dialog/error/error';\r\nimport { AlertDialog } from '../service/dialog/alert/alert';\r\nimport { ConfirmDialog } from '../service/dialog/confirm/confirm';\r\nimport { GCodeDialog } from '../service/dialog/gCode/gCode';\r\nimport { PdfInfoDialog } from '../service/dialog/pdfInfo/pdfInfo';\r\nimport { WorkOfflineDialog } from '../service/dialog/workOffline/workOffline';\r\n\r\nimport { ConversionFormulas } from '../service/formulas/conversionsFormulas';\r\nimport { Formulas } from '../service/formulas/formulas';\r\nimport { StandardFormulas } from '../service/formulas/standardFormulas';\r\n\r\nimport { CommonService } from '../service/common.service';\r\n\r\nimport { HttpClientModule } from '@angular/common/http';\r\nimport { Network } from '@ionic-native/network/ngx';\r\n\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatDatepickerModule } from '@angular/material/datepicker';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatIconModule } from '@angular/material/icon';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatPaginatorModule } from '@angular/material/paginator';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatRadioModule } from '@angular/material/radio';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatSnackBarModule } from '@angular/material/snack-bar';\r\nimport { MatSortModule } from '@angular/material/sort';\r\nimport { MatTableModule } from '@angular/material/table';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { MatTooltipModule } from '@angular/material/tooltip';\r\nimport { StatusBar } from '@ionic-native/status-bar/ngx';\r\nimport { SplashScreen } from '@ionic-native/splash-screen/ngx';\r\nimport { DynamicModule } from 'ng-dynamic-component';\r\n\r\n@NgModule({\r\n declarations: [App, ErrorDialog, AlertDialog, ConfirmDialog, GCodeDialog, PdfInfoDialog, WorkOfflineDialog],\r\n imports: [\r\n BrowserModule,\r\n HttpClientModule,\r\n ReactiveFormsModule,\r\n KnobModule,\r\n IonicModule.forRoot(),\r\n AppRoutingModule,\r\n CacheModule.forRoot(),\r\n MatButtonModule,\r\n MatCheckboxModule,\r\n MatAutocompleteModule,\r\n BrowserAnimationsModule,\r\n MatDatepickerModule,\r\n MatSliderModule,\r\n MatInputModule,\r\n MatRadioModule,\r\n MatSelectModule,\r\n MatGridListModule,\r\n MatCardModule,\r\n MatTabsModule,\r\n MatProgressBarModule,\r\n MatIconModule,\r\n MatDialogModule,\r\n MatTooltipModule,\r\n MatSnackBarModule,\r\n MatTableModule,\r\n MatSortModule,\r\n MatPaginatorModule,\r\n NouisliderModule,\r\n CompleteRegistrationPageModule,\r\n ForgottenPasswordPageModule,\r\n LoginPageModule,\r\n RegistrationPageModule,\r\n ResetPasswordPageModule,\r\n ToolPageModule,\r\n MatMenuModule,\r\n DynamicModule\r\n ],\r\n bootstrap: [App],\r\n entryComponents: [ErrorDialog, AlertDialog, ConfirmDialog, GCodeDialog, PdfInfoDialog, WorkOfflineDialog],\r\n providers: [\r\n AndroidPermissions,\r\n File,\r\n FileTransfer,\r\n FileTransferObject,\r\n FileOpener,\r\n Deeplinks,\r\n ApplicationConfig,\r\n StatusBar,\r\n SplashScreen,\r\n Utils,\r\n HttpClientModule,\r\n Network,\r\n Constants,\r\n ImageConstants,\r\n ErrorDialog,\r\n AlertDialog,\r\n ConfirmDialog,\r\n GCodeDialog,\r\n PdfInfoDialog,\r\n WorkOfflineDialog,\r\n MaterialProvider,\r\n EndmillProvider,\r\n CommonService,\r\n ConversionFormulas,\r\n Formulas,\r\n StandardFormulas,\r\n { provide: LocationStrategy, useClass: HashLocationStrategy }\r\n ]\r\n})\r\nexport class AppModule {}\r\n","import { IonicModule } from '@ionic/angular';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { CompleteRegistrationPage } from './completeRegistration';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, IonicModule, MatCardModule, MatProgressBarModule],\r\n declarations: [CompleteRegistrationPage]\r\n})\r\nexport class CompleteRegistrationPageModule {}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams, HttpErrorResponse } from '@angular/common/http';\nimport { throwError as observableThrowError, Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ServiceProvider } from '../../service/provider.interface';\n\n@Injectable()\nexport class CompleteRegistrationProvider extends ServiceProvider {\n private endPoint: string;\n constructor(private http: HttpClient) {\n super();\n this.endPoint = this.config.apiEndpoints['completeRegistration'];\n }\n\n public completeRegistration = (token: string): Observable => {\n const url: string = this.endPoint;\n\n const params: HttpParams = new HttpParams({\n fromObject: {\n token: token\n }\n });\n\n const headers: HttpHeaders = this.createXFormHeader();\n\n return this.http\n .put(url, params, { headers: headers })\n .pipe(\n catchError((response: HttpErrorResponse) =>\n observableThrowError(response.error.error_description || 'Server error')\n )\n );\n };\n}\n","import { ActivatedRoute } from '@angular/router';\r\nimport { Component } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { NavController, MenuController } from '@ionic/angular';\r\nimport { Utils } from '../../service/utils';\r\nimport { CompleteRegistrationProvider } from './completeRegistration.service';\r\n\r\n@Component({\r\n selector: 'page-complete-registration',\r\n templateUrl: 'completeRegistration.html',\r\n providers: [CompleteRegistrationProvider],\r\n styleUrls: ['completeRegistration.scss']\r\n})\r\nexport class CompleteRegistrationPage {\r\n token: string;\r\n isApp: boolean;\r\n isSubmitted: boolean;\r\n isLoading: boolean;\r\n constructor(\r\n public navCtrl: NavController,\r\n public actRoute: ActivatedRoute,\r\n public menu: MenuController,\r\n public utils: Utils,\r\n public CompleteRegistration: CompleteRegistrationProvider,\r\n public dialog: MatDialog\r\n ) {\r\n this.isLoading = true;\r\n\r\n this.CompleteRegistration.completeRegistration(this.actRoute.snapshot.params['token']).subscribe(\r\n response => {\r\n this.navCtrl.navigateForward('/login');\r\n },\r\n error => {\r\n this.navCtrl.navigateForward('/login');\r\n }\r\n );\r\n }\r\n\r\n ngOnInit = () => {\r\n console.log('ionViewDidLoad ShowPage');\r\n };\r\n}\r\n","import { MatButtonModule } from '@angular/material/button';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { ForgottenPasswordPage } from './forgottenPassword';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { IonicModule } from '@ionic/angular';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n IonicModule,\r\n MatCardModule,\r\n MatInputModule,\r\n MatProgressBarModule\r\n ],\r\n declarations: [ForgottenPasswordPage]\r\n})\r\nexport class ForgottenPasswordPageModule {}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\nimport { throwError as observableThrowError, Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ForgottenUser } from './forgottenPassword.interface';\n\nimport { ServiceProvider } from '../../service/provider.interface';\n\n@Injectable()\nexport class ForgottenPasswordProvider extends ServiceProvider {\n private endPoint: string;\n constructor(private http: HttpClient) {\n super();\n this.endPoint = this.config.apiEndpoints['forgotPassword'];\n }\n\n public forgotPassword = (user: ForgottenUser): Observable => {\n const url: string = this.endPoint;\n\n const body: string = JSON.stringify(user.userName);\n\n const headers: HttpHeaders = this.createHeader();\n\n return this.http\n .post(url, body, { headers: headers })\n .pipe(\n catchError((response: HttpErrorResponse) => observableThrowError(response.error.message || 'Server error'))\n );\n };\n}\n","import { Component, HostListener } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { NavController, MenuController } from '@ionic/angular';\r\nimport { ForgottenUser } from './forgottenPassword.interface';\r\nimport { Utils } from '../../service/utils';\r\nimport { ForgottenPasswordProvider } from './forgottenPassword.service';\r\nimport { ImageConstants } from '../../service/image-constants';\r\nconst EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\r\n\r\n@Component({\r\n selector: 'page-forgotten-password',\r\n templateUrl: 'forgottenPassword.html',\r\n providers: [ForgottenPasswordProvider],\r\n styleUrls: ['forgottenPassword.scss']\r\n})\r\nexport class ForgottenPasswordPage {\r\n forgotPassword: FormGroup;\r\n isApp: boolean;\r\n isSubmitted: boolean;\r\n isLoading: boolean;\r\n errorMessage: string;\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n this.onResize();\r\n }\r\n constructor(\r\n public navCtrl: NavController,\r\n public menu: MenuController,\r\n private formBuilder: FormBuilder,\r\n public utils: Utils,\r\n public ForgottenPassword: ForgottenPasswordProvider,\r\n public dialog: MatDialog,\r\n public imageConstants: ImageConstants\r\n ) {\r\n this.forgotPassword = this.formBuilder.group({\r\n userName: new FormControl('', [Validators.required, Validators.pattern(EMAIL_REGEX)])\r\n });\r\n\r\n this.errorMessage = '';\r\n this.menu.enable(false);\r\n this.isSubmitted = false;\r\n this.isLoading = false;\r\n this.onResize(); // determine if its the app using ionic\r\n\r\n this.forgotPassword.setValue({\r\n userName: ''\r\n });\r\n }\r\n\r\n onResize = () => {\r\n this.isApp = this.utils.isApp();\r\n };\r\n\r\n cancel = () => {\r\n this.navCtrl.navigateForward('/login');\r\n };\r\n\r\n onSubmit = ({ value, valid }: { value: ForgottenUser; valid: boolean }) => {\r\n this.errorMessage = '';\r\n this.isLoading = true;\r\n this.ForgottenPassword.forgotPassword(value).subscribe(\r\n response => {\r\n //response has access token\r\n this.isSubmitted = true;\r\n this.isLoading = false;\r\n },\r\n error => {\r\n this.isLoading = false;\r\n this.errorMessage = error;\r\n }\r\n );\r\n };\r\n\r\n ngOnInit = () => {\r\n console.log('ionViewDidLoad ShowPage');\r\n };\r\n}\r\n","import { NavController } from '@ionic/angular';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { Injectable } from '@angular/core';\r\nimport { ActivatedRouteSnapshot, CanActivate, RouterStateSnapshot } from '@angular/router';\r\nimport { Observable } from 'rxjs';\r\n\r\n@Injectable({\r\n providedIn: 'root'\r\n})\r\nexport class LoginGuard implements CanActivate {\r\n constructor(private navCtrl: NavController, private cache: CacheService) {}\r\n\r\n canActivate(\r\n route: ActivatedRouteSnapshot,\r\n state: RouterStateSnapshot\r\n ): Observable | Promise | boolean {\r\n return this.isLoggedIn().then(loggedIn => {\r\n if (!loggedIn) {\r\n const params = {\r\n brand: route.params['brand'],\r\n sku: route.params['sku']\r\n };\r\n\r\n this.navCtrl.navigateForward('/login', { queryParams: params });\r\n }\r\n return loggedIn;\r\n });\r\n }\r\n\r\n isLoggedIn(): Promise {\r\n // Temp fix for 2.0 work. Log out anyone that has a token cached that was issued before August 22, 2022\r\n return this.cache\r\n .getItem('loginInfo')\r\n .then(\r\n res =>\r\n res.access_token &&\r\n new Date(res['.expires']) >= new Date() &&\r\n new Date(res['.issued']) >= new Date(2022, 7, 22)\r\n )\r\n .catch((error: any) => false);\r\n }\r\n}\r\n","import { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { HttpClientModule } from '@angular/common/http';\r\n\r\nimport { IonicModule } from '@ionic/angular';\r\n\r\nimport { LoginPage } from './login';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n IonicModule,\r\n MatCardModule,\r\n MatDialogModule,\r\n MatInputModule,\r\n MatProgressBarModule\r\n ],\r\n declarations: [LoginPage],\r\n providers: [HttpClientModule]\r\n})\r\nexport class LoginPageModule {}\r\n","import { Injectable } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { throwError as observableThrowError, Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { Platform } from '@ionic/angular';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { NavController } from '@ionic/angular';\r\n\r\nimport _ from 'lodash';\r\nimport { User } from './login.interface';\r\n\r\nimport { ServiceProvider } from '../../service/provider.interface';\r\nimport { CommonService } from '../../service/common.service';\r\n\r\n@Injectable()\r\nexport class LoginProvider extends ServiceProvider {\r\n private endPoint: string;\r\n private materialEndPoint: string;\r\n private machineEndpoint: string;\r\n private pdfSupportInfoEndpoint: string;\r\n private endmillSearchStringsEndpoint: string;\r\n private latestToolVersionEndpoint: string;\r\n constructor(\r\n public cache: CacheService,\r\n private http: HttpClient,\r\n public navCtrl: NavController,\r\n private commonService: CommonService,\r\n private platform: Platform\r\n ) {\r\n super();\r\n this.endPoint = this.config.apiEndpoints['login'];\r\n this.materialEndPoint = this.config.apiEndpoints['materials'];\r\n this.machineEndpoint = this.config.apiEndpoints['machine'];\r\n this.pdfSupportInfoEndpoint = this.config.apiEndpoints['pdfSupportInfo'];\r\n this.endmillSearchStringsEndpoint = this.config.apiEndpoints['endmillSearchStrings'];\r\n this.latestToolVersionEndpoint = this.config.apiEndpoints['latestToolVersion'];\r\n }\r\n\r\n public login = (user: User): Observable => {\r\n const url: string = this.endPoint;\r\n\r\n const params: HttpParams = new HttpParams({\r\n fromObject: {\r\n userName: user.userName.trim(),\r\n password: user.password,\r\n grant_type: 'password'\r\n }\r\n });\r\n\r\n const login = this.http\r\n .post(url, params)\r\n .pipe(\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n\r\n return this.cache.loadFromObservable(url, login);\r\n };\r\n\r\n public getMaterials = (loginResponse: { access_token: string }): Observable => {\r\n const url: string = this.materialEndPoint;\r\n\r\n const headers: HttpHeaders = this.createAuthorizationHeader(loginResponse.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(items => {\r\n let materials = _.uniq(\r\n _.map(items, item => {\r\n return item.name + ' — ' + item.description;\r\n })\r\n );\r\n\r\n let subgroups = _.uniq(\r\n _.map(items, item => {\r\n return item.subGroup;\r\n })\r\n );\r\n\r\n let conditions = _.uniq(\r\n _.map(items, item => {\r\n return item.condition;\r\n })\r\n );\r\n\r\n let extendedItems = _.map(items, item => {\r\n return _.extend(item, {\r\n uiName: item.name + ' — ' + item.description\r\n });\r\n });\r\n\r\n let response = {\r\n materials: materials,\r\n subgroups: subgroups,\r\n conditions: conditions,\r\n all: extendedItems\r\n };\r\n\r\n return response;\r\n })\r\n );\r\n };\r\n\r\n public getMachine = (loginResponse: { access_token: string }): Observable => {\r\n const url: string = this.machineEndpoint;\r\n const headers: HttpHeaders = this.createAuthorizationHeader(loginResponse.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(response => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getPdfSupportInfo = (loginResponse: { access_token: string }): Observable => {\r\n const url: string = this.pdfSupportInfoEndpoint;\r\n const headers: HttpHeaders = this.createAuthorizationHeader(loginResponse.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(response => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getEndmillSearchStrings = (loginResponse: { access_token: string }): Observable => {\r\n const url: string = this.endmillSearchStringsEndpoint;\r\n const headers: HttpHeaders = this.createAuthorizationHeader(loginResponse.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(response => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getLatestToolVersion = (loginResponse: { access_token: string }): Observable => {\r\n const url: string = this.latestToolVersionEndpoint;\r\n const headers: HttpHeaders = this.createAuthorizationHeader(loginResponse.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map((response: number) => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n )\r\n }\r\n\r\n public logOut = async () => {\r\n // Log data for user if user logs out\r\n this.commonService.notifyOther({\r\n option: 'logdata',\r\n value: {\r\n logLocation: 'session end'\r\n }\r\n });\r\n\r\n let isEdge = navigator.userAgent.indexOf('Edge') > -1;\r\n if ('serviceWorker' in navigator && !this.platform.is('ios') && !isEdge) {\r\n // cannot be done cause as of iOS 11, there is no service worker yet\r\n navigator.serviceWorker.getRegistrations().then(\r\n registrations => {\r\n for (let registration of registrations) {\r\n registration.unregister();\r\n }\r\n },\r\n err => {\r\n console.error('Error with service worker:', err);\r\n }\r\n );\r\n }\r\n // add clean up, atleast what browser can do\r\n // the even removing an deleting all data, the browser still holds onto the memory till the browser is\r\n // either hard refresh or closed\r\n if (typeof caches !== 'undefined') {\r\n await caches.keys().then(function(keys) {\r\n keys.forEach(function(request, index, array) {\r\n caches.delete(request);\r\n });\r\n });\r\n }\r\n\r\n this.cache.removeItem('loginInfo');\r\n\r\n this.commonService.notifyOther({\r\n option: 'logout',\r\n value: {},\r\n emit: false\r\n });\r\n\r\n indexedDB.deleteDatabase('__ionicCache');\r\n localStorage.clear();\r\n sessionStorage.clear();\r\n window.location.reload();\r\n };\r\n}\r\n","import { Component, HostListener } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { ActivatedRoute } from '@angular/router';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { NavController, MenuController, Platform } from '@ionic/angular';\r\nimport { User } from './login.interface';\r\nimport { Utils } from '../../service/utils';\r\nimport { LoginProvider } from './login.service';\r\nimport { CacheService } from 'ionic-cache';\r\n\r\nimport { forkJoin } from 'rxjs';\r\nimport { first } from 'rxjs/operators';\r\n\r\nimport _ from 'lodash';\r\nimport * as $ from 'jquery';\r\n\r\nimport { ImageConstants } from '../../service/image-constants';\r\n\r\n@Component({\r\n selector: 'page-login',\r\n templateUrl: 'login.html',\r\n providers: [LoginProvider],\r\n styleUrls: ['login.scss']\r\n})\r\nexport class LoginPage {\r\n login: FormGroup;\r\n isApp: boolean;\r\n isSubmitted: boolean;\r\n isLoading: boolean;\r\n errorMessage: string;\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n this.onResize();\r\n }\r\n constructor(\r\n public navCtrl: NavController,\r\n public actRoute: ActivatedRoute,\r\n public menu: MenuController,\r\n private formBuilder: FormBuilder,\r\n public utils: Utils,\r\n public Login: LoginProvider,\r\n public dialog: MatDialog,\r\n private cache: CacheService,\r\n public imageConstants: ImageConstants,\r\n private platform: Platform\r\n ) {\r\n this.login = this.formBuilder.group({\r\n userName: new FormControl('', [Validators.required]),\r\n password: new FormControl('', [Validators.required])\r\n });\r\n\r\n this.errorMessage = '';\r\n this.menu.enable(false);\r\n this.isSubmitted = false;\r\n this.isLoading = false;\r\n this.onResize(); // determine if its the app using ionic\r\n }\r\n\r\n resetPass = () => {\r\n this.navCtrl.navigateForward('/reset-password');\r\n };\r\n\r\n goToForgotten = () => {\r\n this.navCtrl.navigateForward('/forgotten-password');\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Forgot Password');\r\n }\r\n };\r\n\r\n goToRegister = () => {\r\n this.navCtrl.navigateForward('/register');\r\n };\r\n\r\n onResize = () => {\r\n this.isApp = this.utils.isApp();\r\n };\r\n\r\n onSubmit = ({ value, valid }: { value: User; valid: boolean }) => {\r\n this.errorMessage = '';\r\n this.isLoading = true;\r\n localStorage.clear();\r\n this.cache.clearAll();\r\n this.Login.login(value).subscribe(\r\n response => {\r\n //response has access token\r\n let loginResponse = response;\r\n let isEdge = navigator.userAgent.indexOf('Edge') > -1;\r\n\r\n // login is good, lets check if there is a servic-worker, if not then lets create one\r\n if ('serviceWorker' in navigator && !this.platform.is('ios') && !isEdge) {\r\n // cannot be done cause as of iOS 11, there is no service worker yet\r\n navigator.serviceWorker.getRegistrations().then(\r\n registrations => {\r\n console.log(registrations.length);\r\n if (registrations.length <= 0) {\r\n navigator.serviceWorker\r\n .register('service-worker.js', { scope: '/' })\r\n .then(() => console.log('service worker installed'))\r\n .catch(err => console.error('Error', err));\r\n }\r\n },\r\n err => {\r\n console.error('Error with service worker:', err);\r\n }\r\n );\r\n }\r\n\r\n this.cache.setDefaultTTL(loginResponse.expires_in);\r\n this.cache.saveItem('loginInfo', loginResponse);\r\n\r\n forkJoin([\r\n this.Login.getMaterials(loginResponse),\r\n this.Login.getMachine(loginResponse),\r\n this.Login.getPdfSupportInfo(loginResponse),\r\n this.Login.getEndmillSearchStrings(loginResponse),\r\n this.Login.getLatestToolVersion(loginResponse)\r\n ]).subscribe(res => {\r\n if (this.utils.isApp()) {\r\n //lets get the dimensions and reuse those for mobile\r\n\r\n // lets do some math to predetermine the heights\r\n // need to chunk out 3 sections\r\n // 1. header menu = 10%\r\n // 2. the content = 60%\r\n // 3. the tab menu = 10%\r\n // 4. the group menu = 20%\r\n\r\n let windowsDimensions = {\r\n w: window.innerWidth,\r\n h: window.innerHeight,\r\n headerHeight: window.innerHeight * 0.1,\r\n contentHeight: window.innerHeight * 0.7,\r\n tabMenuHeight: window.innerHeight * 0.05,\r\n groupMenuHeight: window.innerHeight * 0.15\r\n };\r\n this.cache.saveItem('windowsDimensions', windowsDimensions);\r\n $('body').css({\r\n width: window.innerWidth + 'px',\r\n height: window.innerHeight + 'px'\r\n });\r\n this.utils.apptentiveEngage('Login');\r\n }\r\n\r\n this.cache.saveItem('materials', res[0]);\r\n this.cache.saveItem('machine', res[1]);\r\n this.cache.saveItem('pdfSupportInfo', res[2]);\r\n this.cache.saveItem('endmillSearchStrings', res[3]);\r\n this.cache.saveItem('toolVersion', res[4]);\r\n\r\n this.cache.saveItem('endmills', {});\r\n this.cache.saveItem('endmillsCached', false);\r\n this.cache.saveItem('operations', {});\r\n this.cache.saveItem('operationsCached', false);\r\n this.cache.saveItem('allParamsAndRecsCached', false);\r\n\r\n this.isSubmitted = true;\r\n this.isLoading = false;\r\n\r\n this.actRoute.queryParams.pipe(first()).subscribe(params => {\r\n const brand: string = params['brand'] || 'null';\r\n const sku: string = params['sku'] || 'null';\r\n\r\n this.navCtrl.navigateForward(`/tool/${brand}/${sku}`);\r\n });\r\n });\r\n },\r\n error => {\r\n this.isLoading = false;\r\n this.errorMessage = error;\r\n this.utils.openDialog(error, 'error');\r\n }\r\n );\r\n };\r\n\r\n ngOnInit = () => {\r\n console.log('ionViewDidLoad ShowPage');\r\n };\r\n}\r\n","import { NgModule } from '@angular/core';\r\n\r\nimport { RegistrationPage } from './registration';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatCheckboxModule } from '@angular/material/checkbox';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatProgressBarModule } from '@angular/material/progress-bar';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n IonicModule,\r\n MatCardModule,\r\n MatCheckboxModule,\r\n MatGridListModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatProgressBarModule,\r\n MatTabsModule\r\n ],\r\n declarations: [RegistrationPage]\r\n})\r\nexport class RegistrationPageModule {}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpErrorResponse } from '@angular/common/http';\nimport { throwError as observableThrowError, Observable } from 'rxjs';\nimport { catchError, map } from 'rxjs/operators';\n\nimport _ from 'lodash';\n\nimport { ServiceProvider } from '../../service/provider.interface';\n\n@Injectable()\nexport class RegistrationProvider extends ServiceProvider {\n private endPoint: string;\n private bannedUserNamesEndPoint: string;\n private countriesEndPoint: string;\n constructor(private http: HttpClient) {\n super();\n this.endPoint = this.config.apiEndpoints['registration'];\n this.bannedUserNamesEndPoint = this.config.apiEndpoints['bannedUserNames'];\n this.countriesEndPoint = this.config.apiEndpoints['countries'];\n }\n\n public getBannedUserNames = (): Observable => {\n const url = this.bannedUserNamesEndPoint;\n return this.http.get(url).pipe(\n map(response => {\n const bannedUserNames: string[] = [];\n _.each(response, bannedUserName => {\n bannedUserNames.push(bannedUserName['name']);\n });\n return bannedUserNames;\n })\n );\n };\n\n public getCountries = (): Observable => {\n let url = this.countriesEndPoint;\n return this.http\n .get(url)\n .pipe(\n catchError((response: HttpErrorResponse) => observableThrowError(response.error.message || 'Server error'))\n );\n };\n\n public postRegistration = (user: object): Observable => {\n let url = this.endPoint;\n\n return this.http\n .post(url, user)\n .pipe(\n catchError((response: HttpErrorResponse) => observableThrowError(response.error.message || 'Server error'))\n );\n };\n}\n","import { Component, ViewChild, TemplateRef, AfterViewInit, HostListener } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators, AbstractControl } from '@angular/forms';\r\nimport { NavController, MenuController } from '@ionic/angular';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { User } from './registration.interface';\r\nimport { Utils } from '../../service/utils';\r\nimport { Constants } from '../../service/constants';\r\nimport { RegistrationProvider } from './registration.service';\r\nimport { Message } from '../../service/dialog/message.interface';\r\nimport _ from 'lodash';\r\nimport { ImageConstants } from '../../service/image-constants';\r\n\r\n@Component({\r\n selector: 'page-registration',\r\n templateUrl: 'registration.html',\r\n providers: [RegistrationProvider],\r\n styleUrls: ['registration.scss']\r\n})\r\nexport class RegistrationPage implements AfterViewInit {\r\n private registration: FormGroup;\r\n public tabs: Array;\r\n private states: Array;\r\n private countries: Array;\r\n public isApp: boolean;\r\n public isSubmitted: boolean;\r\n public isLoading: boolean;\r\n private selectedIndex: number;\r\n public agreement: boolean;\r\n private bannedUserNames: string[];\r\n private isBannedUsername: boolean = false;\r\n private disableNext: boolean = true;\r\n private domesticPhoneRegex: RegExp;\r\n private internationalPhoneRegex: RegExp;\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n //debounce resize, wait for resize to finish before doing stuff\r\n this.onResize();\r\n }\r\n @ViewChild('tab1', { static: false }) tab1Content: TemplateRef;\r\n @ViewChild('tab2', { static: false }) tab2Content: TemplateRef;\r\n @ViewChild('tab3', { static: false }) tab3Content: TemplateRef;\r\n constructor(\r\n public navCtrl: NavController,\r\n public menu: MenuController,\r\n private formBuilder: FormBuilder,\r\n public utils: Utils,\r\n public constants: Constants,\r\n public Registration: RegistrationProvider,\r\n public imageConstants: ImageConstants\r\n ) {\r\n this.registration = this.formBuilder.group(\r\n {\r\n firstName: new FormControl('', [Validators.required]),\r\n lastName: new FormControl('', [Validators.required]),\r\n companyName: new FormControl('', [Validators.required]),\r\n jobTitle: new FormControl('', [Validators.required]),\r\n address: new FormControl('', [Validators.required]),\r\n city: new FormControl('', [Validators.required]),\r\n country: new FormControl('', [Validators.required]),\r\n state: new FormControl(''),\r\n postal: new FormControl('', [Validators.required]),\r\n email: new FormControl('', [Validators.required, Validators.pattern(this.constants.EMAIL_REGEX)]),\r\n phone: new FormControl({ value: '', disabled: true }, [Validators.required]),\r\n password: new FormControl('', [\r\n Validators.required,\r\n Validators.pattern(this.constants.PASSWORD_REGEX),\r\n Validators.minLength(8)\r\n ]),\r\n confirmPassword: new FormControl('', [\r\n Validators.required,\r\n Validators.pattern(this.constants.PASSWORD_REGEX),\r\n Validators.minLength(8)\r\n ]),\r\n termAgreement: new FormControl('', [Validators.required])\r\n },\r\n { validator: Validators.compose([this.matchPasswordCheck, this.phoneNumberCheck]) }\r\n );\r\n\r\n this.Registration.getBannedUserNames().subscribe(response => {\r\n this.bannedUserNames = response;\r\n });\r\n\r\n this.Registration.getCountries().subscribe(response => {\r\n this.countries = [];\r\n _.forEach(response, country => {\r\n this.countries.push(new Country(country.name, country.code, country.states));\r\n });\r\n });\r\n\r\n this.domesticPhoneRegex = this.constants.DOMESTIC_PHONE_REGEX;\r\n this.internationalPhoneRegex = this.constants.INTERNATIONAL_PHONE_REGEX;\r\n\r\n this.menu.enable(false);\r\n this.isSubmitted = false;\r\n this.isLoading = false;\r\n this.states = [];\r\n this.selectedIndex = 0;\r\n this.onResize(); // determine if its the app using ionic\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.tabs = [\r\n new tabsContent('Account Info', this.tab1Content),\r\n new tabsContent('Work Info', this.tab2Content),\r\n new tabsContent('Password', this.tab3Content)\r\n ];\r\n\r\n this.registration\r\n .get('email')\r\n .valueChanges.pipe(debounceTime(500), distinctUntilChanged())\r\n .subscribe((value: string) => {\r\n if (_.trim(value).length > 0) {\r\n this.isBannedUsername = false;\r\n for (let i = 0; i < this.bannedUserNames.length; i++) {\r\n // need to extract the banned name before the @\r\n let emailUserName = value.indexOf('@') <= -1 ? value : this.utils.extractedUsername(value);\r\n\r\n if (this.bannedUserNames[i].toLowerCase() === emailUserName.toLowerCase()) {\r\n // yep match\r\n this.isBannedUsername = true;\r\n this.disableNext = true; // This doesn't seem to be used anywhere. Should this be disabling next() or is it no longer required?\r\n break;\r\n }\r\n }\r\n\r\n if (this.isBannedUsername) {\r\n let message: Message = {\r\n title: 'Email is not valid!',\r\n message: 'Please use a valid email address, group email addresses are not allowed.'\r\n };\r\n this.utils.openDialog(message, 'error', () => {\r\n this.disableNext = false; // the isBanned get reset after submit, but it should matter\r\n });\r\n }\r\n }\r\n });\r\n\r\n this.registration\r\n .get('country')\r\n .valueChanges.pipe(distinctUntilChanged())\r\n .subscribe(() => {\r\n this.registration.get('phone').enable();\r\n });\r\n }\r\n\r\n mobileFormCheck = (fields: Array) => {\r\n for (let i = 0; i < fields.length; i++) {\r\n if (_.trim(fields[i]) === '') {\r\n return false;\r\n }\r\n }\r\n return true;\r\n };\r\n\r\n next = () => {\r\n let fields = [];\r\n switch (this.selectedIndex) {\r\n case 0:\r\n fields = [\r\n this.registration.get('firstName').value,\r\n this.registration.get('lastName').value,\r\n this.registration.get('email').value\r\n ];\r\n break;\r\n case 1:\r\n fields = [\r\n this.registration.get('companyName').value,\r\n this.registration.get('jobTitle').value,\r\n this.registration.get('address').value,\r\n this.registration.get('city').value,\r\n this.registration.get('country').value,\r\n this.registration.get('jobTitle').value,\r\n this.registration.get('postal').value,\r\n this.registration.get('phone').value\r\n ];\r\n if (!!this.registration.controls['state'].validator) {\r\n fields.push(this.registration.get('state').value);\r\n }\r\n break;\r\n case 2:\r\n fields = [this.registration.get('password').value, this.registration.get('confirmPassword').value];\r\n break;\r\n }\r\n\r\n if (this.mobileFormCheck(fields)) {\r\n this.selectedIndex += 1;\r\n } else {\r\n switch (this.selectedIndex) {\r\n case 0:\r\n this.registration.get('firstName').markAsTouched();\r\n this.registration.get('firstName').updateValueAndValidity();\r\n\r\n this.registration.get('lastName').markAsTouched();\r\n this.registration.get('lastName').updateValueAndValidity();\r\n\r\n this.registration.get('email').markAsTouched();\r\n this.registration.get('email').updateValueAndValidity();\r\n break;\r\n case 1:\r\n this.registration.get('companyName').markAsTouched();\r\n this.registration.get('companyName').updateValueAndValidity();\r\n\r\n this.registration.get('jobTitle').markAsTouched();\r\n this.registration.get('jobTitle').updateValueAndValidity();\r\n\r\n this.registration.get('address').markAsTouched();\r\n this.registration.get('address').updateValueAndValidity();\r\n\r\n this.registration.get('city').markAsTouched();\r\n this.registration.get('city').updateValueAndValidity();\r\n\r\n this.registration.get('country').markAsTouched();\r\n this.registration.get('country').updateValueAndValidity();\r\n\r\n this.registration.get('state').markAsTouched();\r\n this.registration.get('state').updateValueAndValidity();\r\n\r\n this.registration.get('postal').markAsTouched();\r\n this.registration.get('postal').updateValueAndValidity();\r\n\r\n this.registration.get('phone').markAsTouched();\r\n this.registration.get('phone').updateValueAndValidity();\r\n break;\r\n case 2:\r\n this.registration.get('password').markAsTouched();\r\n this.registration.get('password').updateValueAndValidity();\r\n\r\n this.registration.get('confirmPassword').markAsTouched();\r\n this.registration.get('confirmPassword').updateValueAndValidity();\r\n break;\r\n }\r\n }\r\n };\r\n\r\n setStates = (selectedCountry: string) => {\r\n this.states = [];\r\n let countrySelected = _.find(this.countries, { name: selectedCountry });\r\n _.forEach(countrySelected.getStates(), states => {\r\n this.states.push(new State(states.name, states.code));\r\n });\r\n this.checkStates();\r\n };\r\n\r\n checkStates = () => {\r\n if (!!this.states && this.states.length > 0) {\r\n this.registration.controls['state'].setValidators([Validators.required]);\r\n } else {\r\n this.registration.controls['state'].clearValidators();\r\n this.registration.patchValue({ state: '' });\r\n }\r\n };\r\n\r\n onResize = () => {\r\n this.isApp = this.utils.isApp();\r\n };\r\n\r\n matchPasswordCheck = (control: AbstractControl): { [key: string]: boolean } => {\r\n const newPassword = control.get('password');\r\n const confirmPassword = control.get('confirmPassword');\r\n\r\n // Don't kick in until user touches both fields\r\n if (newPassword.pristine || confirmPassword.pristine) {\r\n return null;\r\n }\r\n\r\n if (!newPassword || !confirmPassword) {\r\n return null;\r\n }\r\n\r\n return newPassword.value === confirmPassword.value ? null : { matchPasswordCheck: true };\r\n };\r\n\r\n phoneNumberCheck = (control: AbstractControl): { [key: string]: boolean } => {\r\n const country = control.get('country');\r\n const phoneNumber = control.get('phone');\r\n\r\n // Don't kick in until user touches both fields\r\n if (country.pristine || phoneNumber.pristine) {\r\n return null;\r\n }\r\n\r\n if (!country) {\r\n return null;\r\n }\r\n\r\n const domesticCountries: string[] = ['United States', 'Canada'];\r\n const phoneRegex: RegExp =\r\n domesticCountries.indexOf(country.value) > -1 ? this.domesticPhoneRegex : this.internationalPhoneRegex;\r\n\r\n const valid = phoneRegex.test(phoneNumber.value);\r\n let errors = phoneNumber.errors;\r\n\r\n if (!valid) {\r\n if (!errors) {\r\n errors = {};\r\n }\r\n errors['invalid'] = true;\r\n phoneNumber.setErrors(errors);\r\n } else {\r\n if (errors) {\r\n errors['invalid'] = null;\r\n if (Object.keys(errors).length === 0) {\r\n errors = null;\r\n }\r\n phoneNumber.setErrors(errors);\r\n phoneNumber.updateValueAndValidity();\r\n }\r\n }\r\n\r\n return valid ? null : { phoneNumberCheck: true };\r\n };\r\n\r\n onSubmit = ({ value, valid }: { value: User; valid: boolean }) => {\r\n this.isLoading = true;\r\n this.Registration.postRegistration(value).subscribe(\r\n response => {\r\n this.isSubmitted = true;\r\n this.isLoading = false;\r\n this.isBannedUsername = false;\r\n window.location.href = 'http://www.harveyperformance.com/map-thank-you/';\r\n },\r\n error => {\r\n this.isLoading = false;\r\n this.isBannedUsername = false;\r\n let message: Message = {\r\n title: 'Registration Error!',\r\n message: error\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n );\r\n };\r\n\r\n cancel = () => {\r\n this.navCtrl.navigateForward('/login');\r\n };\r\n\r\n showDisclaimer = () => {\r\n let messageStr =\r\n 'End User License Agreement: http://www.harveyperformance.com/machining-advisor-pro-software-end-user-license-agreement/
';\r\n messageStr +=\r\n 'Privacy Policy: http://www.harveyperformance.com/machining-advisor-pro-privacy-policy/';\r\n let message: Message = {\r\n title: 'Disclaimer',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(message, 'confirm');\r\n };\r\n}\r\n\r\nclass tabsContent {\r\n constructor(public label: string, public content: TemplateRef) {\r\n this.label = label;\r\n this.content = content;\r\n }\r\n}\r\n\r\nclass BasicObject {\r\n private name: string;\r\n constructor(name: string) {\r\n this.name = name;\r\n }\r\n\r\n getName = (): string => {\r\n return this.name;\r\n };\r\n}\r\n\r\nclass Country extends BasicObject {\r\n private countryCode: string;\r\n private states: object[];\r\n constructor(name: string, countryCode: string, states: object[]) {\r\n super(name);\r\n this.countryCode = countryCode;\r\n this.states = states;\r\n }\r\n\r\n getCountryCode = (): string => {\r\n return this.countryCode;\r\n };\r\n\r\n getStates = (): object[] => {\r\n return this.states;\r\n };\r\n}\r\n\r\nclass State extends BasicObject {\r\n private abbreviation: string;\r\n constructor(name: string, abbreviation: string) {\r\n super(name);\r\n this.abbreviation = abbreviation;\r\n }\r\n getAbbeviation = (): string => {\r\n return this.abbreviation;\r\n };\r\n}\r\n","import { MatCardModule } from '@angular/material/card';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { NgModule } from '@angular/core';\r\n\r\nimport { ResetPasswordPage } from './resetPassword';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { IonicModule } from '@ionic/angular';\r\n\r\n@NgModule({\r\n imports: [CommonModule, FormsModule, ReactiveFormsModule, IonicModule, MatCardModule, MatInputModule, MatTabsModule],\r\n declarations: [ResetPasswordPage]\r\n})\r\nexport class ResetPasswordPageModule {}\r\n","import { Injectable } from '@angular/core';\nimport { HttpClient, HttpHeaders, HttpParams, HttpErrorResponse } from '@angular/common/http';\nimport { throwError as observableThrowError, Observable } from 'rxjs';\nimport { catchError } from 'rxjs/operators';\n\nimport { ResetUser } from './resetPassword.interface';\n\nimport { ServiceProvider } from '../../service/provider.interface';\n\n@Injectable()\nexport class ResetPasswordProvider extends ServiceProvider {\n private endPoint: string;\n constructor(private http: HttpClient) {\n super();\n this.endPoint = this.config.apiEndpoints['resetPassword'];\n }\n\n public resetPassword = (user: ResetUser): Observable => {\n const url: string = this.endPoint;\n\n const params: HttpParams = new HttpParams({\n fromObject: {\n token: user.token,\n id: user.id,\n password: user.password,\n confirmPassword: user.confirmPassword\n }\n });\n\n const headers: HttpHeaders = this.createXFormHeader();\n\n return this.http\n .put(url, params, { headers: headers })\n .pipe(\n catchError((response: HttpErrorResponse) =>\n observableThrowError(response.error.error_description || 'Server error')\n )\n );\n };\n}\n","import { ActivatedRoute } from '@angular/router';\r\nimport { Component, HostListener } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { FormBuilder, FormControl, FormGroup, Validators, AbstractControl } from '@angular/forms';\r\nimport { NavController, MenuController } from '@ionic/angular';\r\nimport { ResetUser } from './resetPassword.interface';\r\nimport { Utils } from '../../service/utils';\r\nimport { ResetPasswordProvider } from './resetPassword.service';\r\n\r\nconst PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\\$%\\^&\\*])/;\r\n\r\n@Component({\r\n selector: 'page-reset-password',\r\n templateUrl: 'resetPassword.html',\r\n providers: [ResetPasswordProvider],\r\n styleUrls: ['resetPassword.scss']\r\n})\r\nexport class ResetPasswordPage {\r\n resetPassword: FormGroup;\r\n id: string;\r\n token: string;\r\n isApp: boolean;\r\n isSubmitted: boolean;\r\n isLoading: boolean;\r\n errorMessage: string;\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n this.onResize();\r\n }\r\n constructor(\r\n public navCtrl: NavController,\r\n public actRoute: ActivatedRoute,\r\n public menu: MenuController,\r\n private formBuilder: FormBuilder,\r\n public utils: Utils,\r\n public ResetPassword: ResetPasswordProvider,\r\n public dialog: MatDialog\r\n ) {\r\n this.resetPassword = this.formBuilder.group(\r\n {\r\n password: new FormControl('', [\r\n Validators.required,\r\n Validators.pattern(PASSWORD_REGEX),\r\n Validators.minLength(8)\r\n ]),\r\n confirmPassword: new FormControl('', [\r\n Validators.required,\r\n Validators.pattern(PASSWORD_REGEX),\r\n Validators.minLength(8)\r\n ])\r\n },\r\n { validator: this.matchPasswordCheck }\r\n );\r\n\r\n this.errorMessage = '';\r\n this.menu.enable(false);\r\n this.isSubmitted = false;\r\n this.isLoading = false;\r\n this.onResize(); // determine if its the app using ionic\r\n }\r\n\r\n matchPasswordCheck = (control: AbstractControl): { [key: string]: boolean } => {\r\n const newPassword = control.get('password');\r\n const confirmPassword = control.get('confirmPassword');\r\n\r\n // Don't kick in until user touches both fields\r\n if (newPassword.pristine || confirmPassword.pristine) {\r\n return null;\r\n }\r\n\r\n if (!newPassword || !confirmPassword) {\r\n return null;\r\n }\r\n\r\n return newPassword.value === confirmPassword.value ? null : { matchPasswordCheck: true };\r\n };\r\n\r\n onResize = () => {\r\n this.isApp = this.utils.isApp();\r\n };\r\n\r\n onSubmit = ({ value, valid }: { value: ResetUser; valid: boolean }) => {\r\n this.errorMessage = '';\r\n this.isLoading = true;\r\n\r\n value.id = this.actRoute.snapshot.params['id'];\r\n value.token = this.actRoute.snapshot.params['token'];\r\n\r\n this.ResetPassword.resetPassword(value).subscribe(\r\n response => {\r\n //response has access token\r\n this.isSubmitted = false;\r\n this.isLoading = false;\r\n\r\n this.utils.openDialog(\r\n {\r\n title: 'Success',\r\n message: 'Your password has been updated. Return to Login?'\r\n },\r\n 'confirm',\r\n () => {\r\n this.navCtrl.navigateForward('/login');\r\n }\r\n );\r\n },\r\n error => {\r\n this.isLoading = false;\r\n this.errorMessage = error;\r\n }\r\n );\r\n };\r\n\r\n ngOnInit = () => {\r\n console.log('ionViewDidLoad ShowPage');\r\n };\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { throwError as observableThrowError, Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { Cutter_, ToolDetails } from 'src/service/formulas/objects';\r\n\r\nimport { ServiceProvider } from '../../../service/provider.interface';\r\n\r\n@Injectable()\r\nexport class EndmillProvider extends ServiceProvider {\r\n private endmillEndpoint: string;\r\n private materialsDetailsForEndmillEndpoint: string;\r\n private toolDetailsForEndmillEndpoint: string;\r\n private endmillsEndPoint: string;\r\n private endmillsDetailsEndPoint: string;\r\n private materialDetailEndPoint: string;\r\n private token: any;\r\n\r\n constructor(public cache: CacheService, private http: HttpClient) {\r\n super();\r\n this.endmillEndpoint = this.config.apiEndpoints['singleEndmill'];\r\n this.materialsDetailsForEndmillEndpoint = this.config.apiEndpoints['materialsDetailsForEndmill'];\r\n this.toolDetailsForEndmillEndpoint = this.config.apiEndpoints['toolDetailsForEndmill'];\r\n this.endmillsEndPoint = this.config.apiEndpoints['endmills'];\r\n this.endmillsDetailsEndPoint = this.config.apiEndpoints['endmillsDetails'];\r\n this.materialDetailEndPoint = this.config.apiEndpoints['materialsDetails'];\r\n this.cache.getItem('loginInfo').then(res => (this.token = res));\r\n }\r\n\r\n public fetchEndmill = (selectedEndmillProductKey: number): Observable => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.endmillEndpoint;\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers,\r\n params: { productKey: selectedEndmillProductKey.toString() }\r\n })\r\n .pipe(\r\n map((response: Cutter_) => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public fetchMaterialIds = (selectedEndmillProductKey: number): Observable => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.materialsDetailsForEndmillEndpoint;\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers,\r\n params: { productKey: selectedEndmillProductKey.toString() }\r\n })\r\n .pipe(\r\n map((response: number[]) => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public fetchToolDetailsForEndmill = (selectedEndmillProductKey: number): Observable => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.toolDetailsForEndmillEndpoint;\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers,\r\n params: { productKey: selectedEndmillProductKey.toString() }\r\n })\r\n .pipe(\r\n map((response: ToolDetails) => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getEndmills = (): Observable => {\r\n const url: string = this.endmillsEndPoint;\r\n\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(response => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getEndmillsDetails = (): Observable => {\r\n const url: string = this.endmillsDetailsEndPoint;\r\n\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(response => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getMaterialsDetails = (): Observable => {\r\n const url: string = this.materialDetailEndPoint;\r\n\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map((response: number[]) => {\r\n return response;\r\n })\r\n );\r\n };\r\n}\r\n","import { ActivatedRoute } from '@angular/router';\r\nimport { Component, Output, EventEmitter, ElementRef, ViewChild, AfterViewInit, Input, OnChanges } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { MatAutocompleteTrigger } from '@angular/material/autocomplete';\r\nimport { MatOptionSelectionChange } from '@angular/material/core';\r\nimport { forkJoin, Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { CacheService } from 'ionic-cache';\r\n\r\nimport * as $ from 'jquery';\r\nimport { Cutter_ } from '../../../service/formulas/objects';\r\nimport { CommonService } from '../../../service/common.service';\r\nimport { Utils } from '../../../service/utils';\r\nimport _ from 'lodash';\r\nimport Fuse from 'fuse.js';\r\nimport { EndmillProvider } from './endmill.service';\r\n\r\ndeclare var cordova;\r\n\r\ninterface EndmillParams {\r\n brand: string;\r\n sku: string;\r\n}\r\n\r\ninterface EndmillSearch {\r\n productKey: number;\r\n searchParameter: string;\r\n itemId: string;\r\n description: string;\r\n brandShortName: string;\r\n brandKey: number;\r\n}\r\n\r\n@Component({\r\n selector: 'section-endmill',\r\n templateUrl: 'endmill.html',\r\n providers: [EndmillProvider],\r\n styleUrls: ['endmill.scss']\r\n})\r\nexport class Endmill implements AfterViewInit, OnChanges {\r\n private subscription: Subscription;\r\n @Output() edpChange: EventEmitter = new EventEmitter();\r\n @Output() startClicked: EventEmitter = new EventEmitter();\r\n @Input('ndcDynamicInputs') endmillParams: EndmillParams;\r\n @ViewChild('endmillArrow', { static: true }) endmillArrow: ElementRef;\r\n @ViewChild('selectedToolOption', { static: true }) selectedToolOption: ElementRef;\r\n @ViewChild(MatAutocompleteTrigger, { static: true }) autocomplete: MatAutocompleteTrigger;\r\n\r\n private readonly minimumSearchLength = 2;\r\n\r\n public result: object = undefined;\r\n isApp: boolean;\r\n endmillFormGroup: FormGroup;\r\n endmills: { [productKey: number]: Cutter_ } = {};\r\n searchStrings: EndmillSearch[] = [];\r\n filteredEndmills: EndmillSearch[] = [];\r\n arrowDirection: boolean;\r\n displayFilterMessage: boolean;\r\n showNoResultsMessage: boolean;\r\n windowsDimensions: object = undefined;\r\n deepLinkSku: string;\r\n public warningIcon: boolean = false;\r\n private fuseSearch: any;\r\n private fuseSearchOptions = {\r\n shouldSort: false,\r\n threshold: 0.05,\r\n location: 0,\r\n distance: 20,\r\n maxPatternLength: 32,\r\n tokenize: true,\r\n keys: ['itemId', 'description', 'searchParameter']\r\n };\r\n private readonly inchesPerCentimeter = 0.0393701;\r\n\r\n constructor(\r\n private formBuilder: FormBuilder,\r\n private commonService: CommonService,\r\n private cache: CacheService,\r\n private utils: Utils,\r\n private actRoute: ActivatedRoute,\r\n private endmillProvider: EndmillProvider\r\n ) {\r\n this.endmillFormGroup = this.formBuilder.group({\r\n toolSelectionFormGroup: this.formBuilder.group({\r\n selectedToolOption: new FormControl('')\r\n })\r\n });\r\n\r\n this.isApp = this.utils.isApp();\r\n this.arrowDirection = false;\r\n this.displayFilterMessage = false;\r\n this.showNoResultsMessage = false;\r\n this.deepLinkSku = '';\r\n\r\n Promise.all([this.cache.getItem('endmillSearchStrings'), this.cache.getItem('endmills')])\r\n .then(promise => {\r\n this.searchStrings = promise[0];\r\n this.endmills = promise[1];\r\n\r\n this.fuseSearch = new Fuse(this.searchStrings, this.fuseSearchOptions);\r\n\r\n const sku: string = this.actRoute.snapshot.params['sku'];\r\n const brand: string = this.actRoute.snapshot.params['brand'];\r\n if (sku !== 'null' && brand !== 'null') {\r\n // itemId and brand must both match exactly\r\n const tool: EndmillSearch = _.find(this.searchStrings, { itemId: sku, brandShortName: brand });\r\n if (tool) {\r\n this.selectEndmill(tool);\r\n }\r\n } else if (!!this.endmillParams.sku && !!this.endmillParams.brand) {\r\n this.deepLinkFill(this.endmillParams.sku, this.endmillParams.brand);\r\n }\r\n })\r\n .catch(err => console.log(err));\r\n\r\n this.cache.getItem('endmillsCached').then(isCached => {\r\n // check if we have cached all the endmill information, if not then fetch all the endmills\r\n if (!isCached) {\r\n this.fetchAllEndmills();\r\n }\r\n });\r\n\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n }\r\n }\r\n\r\n private fetchAllEndmills = () => {\r\n forkJoin([\r\n this.endmillProvider.getEndmills(),\r\n this.endmillProvider.getEndmillsDetails(),\r\n this.endmillProvider.getMaterialsDetails()\r\n ]).subscribe(\r\n ([endmills, endmillDetails, materialIds]) => {\r\n _.each(endmills, tool => {\r\n // this is data straight from database, no changing to endmill or cutter object yet\r\n _.extend(tool, {\r\n metricNumbers: {\r\n cutterDiameter: tool['metric'] === 1 ? tool['cutterDiameter'] : undefined,\r\n coreDiameter: tool['metric'] === 1 ? tool['coreDiameter'] : undefined,\r\n lengthOfCut: tool['metric'] === 1 ? tool['lengthOfCut'] : undefined,\r\n overallLength: tool['metric'] === 1 ? tool['overallLength'] : undefined,\r\n overallReach: tool['metric'] === 1 ? tool['overallReach'] : undefined,\r\n neckDiameter: tool['metric'] === 1 ? tool['neckDiameter'] : undefined,\r\n tip: tool['metric'] === 1 ? tool['tip'] : undefined,\r\n cornerRadius: tool['metric'] === 1 ? tool['cornerRadius'] : undefined\r\n }\r\n });\r\n if (tool['metric'] === 1) {\r\n tool['cutterDiameter'] = tool['cutterDiameter'] * this.inchesPerCentimeter;\r\n tool['coreDiameter'] = tool['coreDiameter'] * this.inchesPerCentimeter;\r\n tool['lengthOfCut'] = tool['lengthOfCut'] * this.inchesPerCentimeter;\r\n tool['overallLength'] = tool['overallLength'] * this.inchesPerCentimeter;\r\n tool['overallReach'] = tool['overallReach'] * this.inchesPerCentimeter;\r\n tool['neckDiameter'] = tool['neckDiameter'] * this.inchesPerCentimeter;\r\n tool['tip'] = tool['tip'] * this.inchesPerCentimeter;\r\n tool['cornerRadius'] = tool['cornerRadius'] * this.inchesPerCentimeter;\r\n }\r\n const toolDetail = endmillDetails[tool.id] ? endmillDetails[tool.id] : [];\r\n tool['searchParameter'] = toolDetail ? toolDetail.searchParameter : '';\r\n tool['toolImageUrl'] = toolDetail ? toolDetail.toolImageUrl : '';\r\n tool['toolDetails'] = toolDetail.toolDetails;\r\n tool['materialIds'] = materialIds[tool.id] ? materialIds[tool.id] : [];\r\n\r\n this.endmills[tool.id] = tool;\r\n });\r\n\r\n this.cache.saveItem('endmills', this.endmills);\r\n this.cache.saveItem('endmillsCached', true);\r\n },\r\n error => {\r\n console.log(error);\r\n this.cache.saveItem('endmillsCached', false);\r\n }\r\n );\r\n };\r\n\r\n ngOnChanges(changes) {\r\n this.endmillParams = {\r\n sku: changes.sku.currentValue,\r\n brand: changes.brand.currentValue\r\n };\r\n if (!!this.endmills && !!this.endmillParams.sku && !!this.endmillParams.brand) {\r\n this.deepLinkFill(this.endmillParams.sku, this.endmillParams.brand);\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.endmillArrow.nativeElement.className = 'down arrow';\r\n\r\n this.endmillFormGroup\r\n .get('toolSelectionFormGroup')\r\n .get('selectedToolOption')\r\n .valueChanges.pipe(debounceTime(800), distinctUntilChanged())\r\n .subscribe((result: any) => {\r\n if (typeof result === 'object') {\r\n this.filteredEndmills = this.fuseSearch.search(result.itemId);\r\n result = result.searchParameter ? result.searchParameter : result.itemId + ' (' + result.description + ')';\r\n } else {\r\n if (result.length < this.minimumSearchLength) {\r\n this.filteredEndmills = [];\r\n } else {\r\n this.filteredEndmills = this.fuseSearch.search(result.toString());\r\n this.filteredEndmills = this.filteredEndmills.splice(0, 99);\r\n this.showNoResultsMessage = !this.filteredEndmills.length;\r\n }\r\n }\r\n });\r\n\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option')) {\r\n if (res.option === 'deeplink') {\r\n this.deepLinkSku = res.value;\r\n }\r\n if (res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n if (res.option === 'reset' || res.option === 'resetTool') {\r\n this.endmillFormGroup.reset({}, { emitEvent: false });\r\n this.result = undefined; //reset\r\n this.warningIcon = false;\r\n this.arrowDirection = false;\r\n this.filteredEndmills = [];\r\n this.showNoResultsMessage = false;\r\n\r\n // resetting the place holder do library's own bug\r\n let selectedToolOptionLabel = $(this.selectedToolOption.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (\r\n !selectedToolOptionLabel.hasClass('mat-empty') &&\r\n !selectedToolOptionLabel.hasClass('mat-form-field-empty')\r\n ) {\r\n selectedToolOptionLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n }\r\n if (res.option === 'aggressiveWarning') {\r\n this.warningIcon = true;\r\n }\r\n }\r\n });\r\n }\r\n\r\n setArrowDirection = (arrow: string) => {\r\n if (arrow === 'up') {\r\n this.arrowDirection = true;\r\n this.endmillArrow.nativeElement.className = 'up arrow';\r\n this.displayFilterMessage = true;\r\n } else {\r\n // Select tool if there's only one option\r\n if (this.filteredEndmills && this.filteredEndmills.length === 1) {\r\n this.selectEndmill(this.filteredEndmills[0]);\r\n }\r\n\r\n this.arrowDirection = false;\r\n this.endmillArrow.nativeElement.className = 'down arrow';\r\n this.displayFilterMessage = false;\r\n }\r\n };\r\n\r\n handleToolSubmit = () => {\r\n // Select tool if there's only one option\r\n if (this.filteredEndmills && this.filteredEndmills.length === 1) {\r\n this.selectEndmill(this.filteredEndmills[0]);\r\n }\r\n };\r\n\r\n selectEndmill = (selectedEndmill: EndmillSearch) => {\r\n // will check for endmill here;\r\n this.endmillFormGroup\r\n .get('toolSelectionFormGroup')\r\n .get('selectedToolOption')\r\n .patchValue(\r\n selectedEndmill.searchParameter\r\n ? selectedEndmill.searchParameter\r\n : selectedEndmill.itemId + ' (' + selectedEndmill.description + ')',\r\n {\r\n emitEvent: false\r\n }\r\n );\r\n this.autocomplete.closePanel();\r\n this.arrowDirection = false;\r\n this.warningIcon = false;\r\n\r\n if (this.endmills[selectedEndmill.productKey]) {\r\n this.setEndmill(this.endmills[selectedEndmill.productKey]);\r\n } else {\r\n forkJoin([\r\n this.endmillProvider.fetchEndmill(selectedEndmill.productKey),\r\n this.endmillProvider.fetchMaterialIds(selectedEndmill.productKey),\r\n this.endmillProvider.fetchToolDetailsForEndmill(selectedEndmill.productKey)\r\n ]).subscribe(\r\n ([cutter, materialIds, toolDetails]) => {\r\n const newEndmill: Cutter_ = cutter;\r\n\r\n _.extend(newEndmill, {\r\n metricNumbers: {\r\n cutterDiameter: newEndmill['metric'] === 1 ? newEndmill['cutterDiameter'] : undefined,\r\n coreDiameter: newEndmill['metric'] === 1 ? newEndmill['coreDiameter'] : undefined,\r\n lengthOfCut: newEndmill['metric'] === 1 ? newEndmill['lengthOfCut'] : undefined,\r\n overallLength: newEndmill['metric'] === 1 ? newEndmill['overallLength'] : undefined,\r\n overallReach: newEndmill['metric'] === 1 ? newEndmill['overallReach'] : undefined,\r\n neckDiameter: newEndmill['metric'] === 1 ? newEndmill['neckDiameter'] : undefined,\r\n tip: newEndmill['metric'] === 1 ? newEndmill['tip'] : undefined,\r\n cornerRadius: newEndmill['metric'] === 1 ? newEndmill['cornerRadius'] : undefined\r\n }\r\n });\r\n\r\n if (newEndmill['metric'] === 1) {\r\n newEndmill['cutterDiameter'] = newEndmill['cutterDiameter'] * this.inchesPerCentimeter;\r\n newEndmill['coreDiameter'] = newEndmill['coreDiameter'] * this.inchesPerCentimeter;\r\n newEndmill['lengthOfCut'] = newEndmill['lengthOfCut'] * this.inchesPerCentimeter;\r\n newEndmill['overallLength'] = newEndmill['overallLength'] * this.inchesPerCentimeter;\r\n newEndmill['overallReach'] = newEndmill['overallReach'] * this.inchesPerCentimeter;\r\n newEndmill['neckDiameter'] = newEndmill['neckDiameter'] * this.inchesPerCentimeter;\r\n newEndmill['tip'] = newEndmill['tip'] * this.inchesPerCentimeter;\r\n newEndmill['cornerRadius'] = newEndmill['cornerRadius'] * this.inchesPerCentimeter;\r\n }\r\n\r\n newEndmill.materialIds = materialIds;\r\n newEndmill.searchParameter = toolDetails ? toolDetails.searchParameter : '';\r\n newEndmill.toolImageUrl = toolDetails ? toolDetails.toolImageUrl : '';\r\n newEndmill.toolDetails = toolDetails.toolDetails;\r\n this.endmills[cutter.id] = newEndmill;\r\n this.cache.saveItem('endmills', this.endmills);\r\n this.setEndmill(newEndmill);\r\n },\r\n error => console.log(error)\r\n );\r\n }\r\n };\r\n\r\n setEndmill = (value: Cutter_) => {\r\n //Added back in the clear element and set arrow when user selects a tool #\r\n //To get the user selection before blur clears out the drop down we have to use mousedown or touchstart\r\n //Android devices captures both events and causing a double click and setting the wrong tool # so keep this here for now\r\n // Reset workholdine security slider when different tool is selected\r\n this.resetWorkHoldingSecurity();\r\n if (value) {\r\n $('#selectedToolOption').blur();\r\n this.autocomplete.closePanel();\r\n this.endmillFormGroup\r\n .get('toolSelectionFormGroup')\r\n .get('selectedToolOption')\r\n .patchValue(value.searchParameter ? value.searchParameter : value.itemId + ' (' + value.description + ')', {\r\n emitEvent: false\r\n });\r\n this.arrowDirection = false;\r\n this.warningIcon = false;\r\n // this is fine, ultimately it only gets fired once\r\n this.result = value;\r\n\r\n this.edpChange.emit(value);\r\n this.filteredEndmills = [];\r\n\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Tool Number');\r\n }\r\n this.commonService.notifyOther({\r\n option: 'checkToGetParamsAndRecs'\r\n });\r\n\r\n setTimeout(() => {\r\n this.commonService.notifyOther({\r\n option: 'recommendationsGeneratedForLoggingData',\r\n value: {\r\n logLocation: 'tool change'\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n navigateToToolPage = url => {\r\n if (this.isApp) {\r\n cordova.InAppBrowser.open(url, '_system');\r\n } else {\r\n window.open(url);\r\n }\r\n };\r\n\r\n deepLinkFill(sku: string, brand: string) {\r\n const tool: EndmillSearch = _.find(this.searchStrings, { itemId: sku, brandShortName: brand });\r\n if (tool) {\r\n this.selectEndmill(tool);\r\n } else {\r\n alert('Cannot find the tool that was selected.');\r\n }\r\n this.startClicked.emit(1);\r\n $('.deepLinkSnackBar').slideUp('500');\r\n this.commonService.notifyOther({\r\n option: 'deepLinkSearchFinish'\r\n });\r\n }\r\n\r\n resetWorkHoldingSecurity = () => {\r\n this.commonService.notifyOther({\r\n option: 'resetWorkHoldingSecurity'\r\n });\r\n };\r\n}\r\n","export enum HardnessFactor {\n HBW = 'hbw',\n HBS = 'hbs',\n HRB = 'hrb',\n HRC = 'hrc',\n HRA = 'hra',\n userHra = 'userHra'\n}\nexport type Hardness = Partial>;\n","import { Component, ViewChild, ElementRef, AfterViewInit, Output, EventEmitter } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport * as $ from 'jquery';\r\nimport { Utils } from '../../../service/utils';\r\nimport { Constants } from '../../../service/constants';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { CommonService } from '../../../service/common.service';\r\nimport { Message } from '../../../service/dialog/message.interface';\r\nimport { MatOptionSelectionChange } from '@angular/material/core';\r\nimport { MachineOptions, MachineAdjustments, MachineBrandLevel } from 'src/service/formulas/objects';\r\n\r\n@Component({\r\n selector: 'section-machine',\r\n templateUrl: 'machine.html',\r\n styleUrls: ['machine.scss']\r\n})\r\nexport class Machine implements AfterViewInit {\r\n private isApp: boolean;\r\n public resetHoldingActive: boolean = false;\r\n private subscription: Subscription;\r\n public windowsDimensions: object = undefined;\r\n public machineFormGroup: FormGroup;\r\n public someRange: number = 0;\r\n public spindles: object[];\r\n public mapMode: number = undefined;\r\n public holders: object[];\r\n public popupVisible: object;\r\n public machineOptions: { [productKey: number]: MachineBrandLevel };\r\n public filteredSpindles: MachineOptions[];\r\n public brandKey: number = undefined;\r\n public holderAdjustment: MachineAdjustments[];\r\n public spindleAdjustment: MachineAdjustments[];\r\n public filteredHolders: MachineOptions[];\r\n public someKeyboardConfig: any = {\r\n connect: [true, false],\r\n start: 100,\r\n keyboard: true,\r\n step: 1,\r\n pageSteps: 10,\r\n range: {\r\n min: 75,\r\n max: 125\r\n }\r\n };\r\n\r\n //@ViewChild('nouislider') nouislider: ElementRef;\r\n @ViewChild('maxRPM', { static: true }) maxRPM: ElementRef;\r\n @ViewChild('maxIPM', { static: true }) maxIPM: ElementRef;\r\n @ViewChild('workHoldingSecurity', { static: true }) workHoldingSecurity: ElementRef;\r\n @Output() machineChange: EventEmitter = new EventEmitter();\r\n\r\n constructor(\r\n public utils: Utils,\r\n public constants: Constants,\r\n private formBuilder: FormBuilder,\r\n private cache: CacheService,\r\n private commonService: CommonService\r\n ) {\r\n this.isApp = this.utils.isApp();\r\n\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n }\r\n\r\n this.machineFormGroup = this.formBuilder.group({\r\n spindleSelect: new FormControl('CV40'),\r\n holderSelect: new FormControl(''),\r\n maxRPM: new FormControl(null, [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)]),\r\n maxIPM: new FormControl(null, [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)]),\r\n withHolding: new FormControl({ value: 100, disabled: false })\r\n });\r\n\r\n this.popupVisible = {\r\n spindleSelect: false,\r\n holderSelect: false\r\n };\r\n\r\n this.cache\r\n .getItem('machine')\r\n .then(data => {\r\n this.machineOptions = { ...data };\r\n })\r\n .catch(err => {\r\n console.log(err);\r\n });\r\n }\r\n\r\n getHolderAndSpindleOptions = (brandKey, mapMode) => {\r\n if (!!this.machineOptions[brandKey] && !!this.machineOptions[brandKey].mapModes[mapMode]) {\r\n this.filteredHolders = this.machineOptions[brandKey].mapModes[mapMode].holders;\r\n this.filteredSpindles = this.machineOptions[brandKey].mapModes[mapMode].spindles;\r\n\r\n const selectedHolder = this.filteredHolders.find(h => h.name === this.machineFormGroup.get('holderSelect').value);\r\n const selectedSpindle = this.filteredSpindles.find(\r\n s => s.name === this.machineFormGroup.get('spindleSelect').value\r\n );\r\n\r\n if (!!selectedHolder) {\r\n this.holderAdjustment = selectedHolder.adjustments;\r\n } else {\r\n this.holderAdjustment = null;\r\n this.machineFormGroup.get('holderSelect').patchValue('');\r\n }\r\n if (!!selectedSpindle) {\r\n this.spindleAdjustment = selectedSpindle.adjustments;\r\n } else {\r\n this.spindleAdjustment = null;\r\n this.machineFormGroup.get('spindleSelect').patchValue('');\r\n }\r\n } else {\r\n this.holderAdjustment = null;\r\n this.machineFormGroup.get('holderSelect').patchValue('');\r\n this.spindleAdjustment = null;\r\n this.machineFormGroup.get('spindleSelect').patchValue('');\r\n let message: Message = {\r\n title: 'Wrong combination',\r\n message: 'There are no Spindles or Holders options for this tool/toolpath combination'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n this.emitData('');\r\n };\r\n\r\n resetWithHolding = (emit: boolean = true) => {\r\n this.machineFormGroup.get('withHolding').patchValue(100, { emitEvent: emit });\r\n this.resetHoldingActive = false;\r\n this.machineFormGroup.get('withHolding').enable();\r\n };\r\n\r\n setMachine = (control: string) => {\r\n this.popupVisible[control] = false;\r\n this.emitData('setMachine');\r\n if (this.isApp) {\r\n if (control === 'holderSelect') {\r\n this.utils.apptentiveEngage('Holder');\r\n } else {\r\n this.utils.apptentiveEngage('Spindle');\r\n }\r\n }\r\n };\r\n\r\n setValue = (event: MatOptionSelectionChange, value?: MachineOptions) => {\r\n if (event.isUserInput) {\r\n if (value.type === 'Holder') {\r\n this.holderAdjustment = value.adjustments;\r\n }\r\n if (value.type === 'Spindle') {\r\n this.spindleAdjustment = value.adjustments;\r\n }\r\n setTimeout(() => {\r\n this.commonService.notifyOther({\r\n option: 'recommendationsGeneratedForLoggingData',\r\n value: {\r\n logLocation: 'machine change'\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n emitData = (fromWhere: string = '') => {\r\n this.machineChange.emit({\r\n spindle: this.machineFormGroup.get('spindleSelect').value,\r\n holder: this.machineFormGroup.get('holderSelect').value,\r\n fixtureBar: this.machineFormGroup.get('withHolding').value ? this.machineFormGroup.get('withHolding').value : 100,\r\n maxRPM: this.machineFormGroup.get('maxRPM').value,\r\n maxIPM: this.machineFormGroup.get('maxIPM').value,\r\n holderAdjustment: this.holderAdjustment,\r\n spindleAdjustment: this.spindleAdjustment,\r\n dirty: false\r\n });\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option') && res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'reset') {\r\n this.machineFormGroup.reset({}, { emitEvent: false });\r\n this.machineFormGroup.get('spindleSelect').patchValue('CV40', { emitEvent: false });\r\n this.resetWithHolding(false);\r\n\r\n let maxRPMLabel = $(this.maxRPM.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!maxRPMLabel.hasClass('mat-empty') && !maxRPMLabel.hasClass('mat-form-field-empty')) {\r\n maxRPMLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let maxIPMLabel = $(this.maxIPM.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!maxIPMLabel.hasClass('mat-empty') && !maxIPMLabel.hasClass('mat-form-field-empty')) {\r\n maxIPMLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n }\r\n if ((res.hasOwnProperty('option') && res.option === 'mapModeChanged') || res.option === 'clearToolPath') {\r\n if (res.value) {\r\n this.mapMode = res.value.mapMode;\r\n if (this.mapMode === 2) {\r\n this.machineFormGroup.get('withHolding').patchValue(100, { emitEvent: true });\r\n $(this.workHoldingSecurity.nativeElement)\r\n .parents('.workHoldingSecurityContainer')\r\n .find('.shadow')\r\n .addClass('disabled');\r\n this.machineFormGroup.get('withHolding').disable();\r\n } else {\r\n this.machineFormGroup.get('withHolding').enable();\r\n $(this.workHoldingSecurity.nativeElement)\r\n .parents('.workHoldingSecurityContainer')\r\n .find('.shadow')\r\n .removeClass('disabled');\r\n }\r\n }\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'machine') {\r\n this.brandKey = res.value.tool ? res.value.tool.brandKey : null;\r\n if (this.brandKey && this.mapMode) {\r\n this.getHolderAndSpindleOptions(this.brandKey, this.mapMode);\r\n }\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'resetWorkHoldingSecurity') {\r\n this.resetWithHolding(false);\r\n }\r\n });\r\n\r\n this.machineFormGroup\r\n .get('withHolding')\r\n .valueChanges.pipe(distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n if (value !== 100) {\r\n this.resetHoldingActive = true;\r\n } else {\r\n this.resetHoldingActive = false;\r\n }\r\n this.emitData('withHolding');\r\n });\r\n\r\n this.machineFormGroup\r\n .get('maxRPM')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: string) => {\r\n this.emitData('maxRPM');\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Max RPM');\r\n }\r\n });\r\n\r\n this.machineFormGroup\r\n .get('maxIPM')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: string) => {\r\n this.emitData('maxIPM');\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Max IPM');\r\n }\r\n });\r\n }\r\n\r\n onEnter = control => {\r\n if (this.machineFormGroup.get(control).value !== '') {\r\n this.popupVisible[control] = false;\r\n } else {\r\n this.popupVisible[control] = true;\r\n }\r\n };\r\n\r\n onLeave = control => {\r\n this.popupVisible[control] = false;\r\n };\r\n\r\n onKeyUp = control => {\r\n if (this.machineFormGroup.get(control).value !== '') {\r\n this.popupVisible[control] = false;\r\n } else {\r\n this.popupVisible[control] = true;\r\n }\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\n\nimport { ServiceProvider } from '../../../service/provider.interface';\n\n@Injectable()\nexport class MaterialProvider extends ServiceProvider {\n constructor() {\n super();\n }\n}\n","import { Component, Output, EventEmitter, ElementRef, ViewChild, AfterViewInit, OnChanges, Input } from '@angular/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Materials } from './materialOptions.interface';\r\nimport { Utils } from '../../../service/utils';\r\nimport { ConversionFormulas } from '../../../service/formulas/conversionsFormulas';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { CommonService } from '../../../service/common.service';\r\nimport { Formulas } from '../../../service/formulas/formulas';\r\nimport { Message } from '../../../service/dialog/message.interface';\r\nimport { ToolContainer, Material_, Cutter_ } from '../../../service/formulas/objects';\r\nimport { Constants } from '../../../service/constants';\r\nimport { HardnessFactor, Hardness } from '../hardness.model';\r\nimport _ from 'lodash';\r\nimport * as $ from 'jquery';\r\nimport Fuse from 'fuse.js';\r\n\r\n@Component({\r\n selector: 'section-material',\r\n templateUrl: 'material.html',\r\n providers: [ConversionFormulas],\r\n styleUrls: ['material.scss']\r\n})\r\nexport class Material implements AfterViewInit, OnChanges {\r\n private subscription: Subscription;\r\n public windowsDimensions: object = undefined;\r\n private settingsHolder: ToolContainer;\r\n material: FormGroup;\r\n isSubmitted: boolean;\r\n resetHardnessActive: boolean;\r\n errorMessage: string;\r\n filteredMaterials: any;\r\n filteredSubgroups: string[];\r\n filteredConditions: any;\r\n private currentSubgroup: string = '';\r\n materialView: boolean;\r\n popupVisible: object;\r\n chosenCondition: boolean = false;\r\n showConditionHint: boolean = false;\r\n currentHardness: object;\r\n materialData: object;\r\n isApp: boolean;\r\n private currentTool: Cutter_;\r\n public subGroup: Array;\r\n private materialList: Array;\r\n private materialSubgroupList: Array;\r\n private conditionList: Array;\r\n private previousMaterialList: Array;\r\n private fuseSearch: any;\r\n private fuseSearchOptions = {\r\n shouldSort: false,\r\n threshold: 0.2,\r\n ignoreLocation: true,\r\n maxPatternLength: 32,\r\n minMatchCharLength: 1,\r\n tokenize: true,\r\n keys: ['uiName']\r\n };\r\n @Output() hardnessChange: EventEmitter = new EventEmitter();\r\n @Output() materialChange: EventEmitter = new EventEmitter();\r\n @Input('ndcDynamicInputs') materials: Materials;\r\n\r\n @ViewChild('materialInput', { static: false }) materialInput: ElementRef;\r\n @ViewChild('materialOptions', { static: false }) materialOptions: ElementRef;\r\n @ViewChild('materialOptionsPop', { static: false }) materialOptionsPop: ElementRef;\r\n @ViewChild('subgroupInput', { static: false }) subgroupInput: ElementRef;\r\n @ViewChild('subgroupOptions', { static: false }) subgroupOptions: ElementRef;\r\n @ViewChild('subgroupOptionsPop', { static: false }) subgroupOptionsPop: ElementRef;\r\n @ViewChild('conditionInput', { static: false }) conditionInput: ElementRef;\r\n @ViewChild('conditionOptions', { static: false }) conditionOptions: ElementRef;\r\n @ViewChild('conditionOptionsPop', { static: false }) conditionOptionsPop: ElementRef;\r\n\r\n @ViewChild('hbw', { static: false }) hbw: ElementRef;\r\n @ViewChild('hbs', { static: false }) hbs: ElementRef;\r\n @ViewChild('hrb', { static: false }) hrb: ElementRef;\r\n @ViewChild('hrc', { static: false }) hrc: ElementRef;\r\n\r\n constructor(\r\n public utils: Utils,\r\n public dialog: MatDialog,\r\n private formBuilder: FormBuilder,\r\n private conversionFormulas: ConversionFormulas,\r\n private commonService: CommonService,\r\n private formulas: Formulas,\r\n private cache: CacheService,\r\n private constants: Constants\r\n ) {\r\n this.currentTool = new Cutter_();\r\n this.material = this.formBuilder.group({\r\n materialSelection: this.formBuilder.group({\r\n material: new FormControl(''),\r\n subgroup: new FormControl(''),\r\n condition: new FormControl({ value: '', disabled: true }),\r\n subgroupSearch: new FormControl(''),\r\n materialSearch: new FormControl(''),\r\n conditionSearch: new FormControl('')\r\n }),\r\n hardness: this.formBuilder.group({\r\n hbw: new FormControl('', [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)]),\r\n hrc: new FormControl('', [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)]),\r\n hbs: new FormControl('', [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)]),\r\n hrb: new FormControl('', [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)]),\r\n userHra: new FormControl('', [Validators.pattern(this.constants.NUMBER_ONLY_REGEX)])\r\n })\r\n });\r\n\r\n this.isApp = this.utils.isApp();\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n }\r\n this.materialView = true;\r\n this.chosenCondition = false;\r\n this.errorMessage = '';\r\n this.isSubmitted = false;\r\n this.resetHardnessActive = false;\r\n\r\n this.popupVisible = {\r\n material: false,\r\n subgroup: false,\r\n condition: false\r\n };\r\n }\r\n\r\n ngOnChanges(changes) {\r\n this.materials = {\r\n all: changes.all.currentValue,\r\n conditions: changes.conditions.currentValue,\r\n materials: changes.materials.currentValue,\r\n subgroups: changes.subgroups.currentValue\r\n };\r\n\r\n // Populate UI bindings of materials once data is available\r\n if (\r\n !this.currentTool.id &&\r\n (!this.subGroup ||\r\n !this.materialList ||\r\n (this.subGroup && !this.subGroup.length) ||\r\n (this.materialList && !this.materialList.length))\r\n ) {\r\n this.resetMaterialList(false);\r\n }\r\n }\r\n\r\n resetList = () => {\r\n this.filteredMaterials = _.orderBy(this.materials['materials']);\r\n this.filteredSubgroups = _.orderBy(this.materials['subgroups']);\r\n this.filteredConditions = _.orderBy(this.materials['conditions']);\r\n this.subGroup = this.filteredSubgroups;\r\n this.materialList = this.filteredMaterials;\r\n };\r\n\r\n resetMaterialList = (resetMaterial: boolean = true) => {\r\n this.materialSubgroupList = [];\r\n this.conditionList = [];\r\n this.previousMaterialList = undefined;\r\n this.settingsHolder = new ToolContainer();\r\n this.currentTool = new Cutter_();\r\n if (resetMaterial) {\r\n this.resetMaterial();\r\n }\r\n this.materialList = _.orderBy(_.uniqBy(this.materials['all'], 'uiName')); // default, incase user want to just click on subgroup\r\n this.filteredSubgroups = _.orderBy(this.materials['subgroups']);\r\n this.subGroup = this.filteredSubgroups;\r\n this.chosenCondition = false;\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .disable();\r\n };\r\n\r\n putInView = (evt: any, alignToTop: boolean) => {\r\n //alighToTop is passed in so the dropdown can be aligned to the top and the dropdown opens below the field\r\n //All input fields we want to align to bottom, alightTopTop false, because it was causing styling issues when aligning to top\r\n let input = evt.currentTarget;\r\n if (this.isApp) {\r\n setTimeout(() => {\r\n input.scrollIntoView(alignToTop);\r\n }, 350);\r\n }\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.resetList();\r\n this.materialList = _.orderBy(_.uniqBy(this.materials['all'], 'uiName')); // default, incase user want to just click on subgroup\r\n this.fuseSearch = new Fuse(this.materialList, this.fuseSearchOptions);\r\n\r\n this.materialOptionsPop.nativeElement.className = 'down arrow';\r\n this.subgroupOptionsPop.nativeElement.className = 'down arrow';\r\n this.conditionOptionsPop.nativeElement.className = 'down arrow';\r\n\r\n this.material\r\n .get('materialSelection')\r\n .get('subgroup')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: string) => {\r\n //need to update the filtered lists\r\n if (value !== '') {\r\n this.subGroup = _.filter(this.filteredSubgroups, material => {\r\n //autocomplete filtering\r\n if (material.toLowerCase().includes(value.toLowerCase())) {\r\n return material;\r\n }\r\n });\r\n } else {\r\n this.subGroup = this.filteredSubgroups;\r\n this.materialSubgroupList = _.orderBy(_.uniqBy(this.materials['all'], 'uiName'));\r\n this.materialList = _.clone(this.materialSubgroupList);\r\n }\r\n });\r\n\r\n this.material\r\n .get('materialSelection')\r\n .get('material')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: any) => {\r\n //need to update the filtered lists\r\n if (value !== '') {\r\n if (typeof value === 'object') {\r\n value = value.uiName;\r\n }\r\n if (!!!this.materialSubgroupList || this.materialSubgroupList.length <= 0) {\r\n this.materialSubgroupList = _.orderBy(_.uniqBy(this.materials['all'], 'uiName'));\r\n }\r\n this.fuseSearch = new Fuse(this.materialList, this.fuseSearchOptions);\r\n this.materialList = this.fuseSearch.search(value.toLowerCase());\r\n } else {\r\n this.materialList = this.materialSubgroupList;\r\n }\r\n });\r\n\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: string) => {\r\n const isCondition = _.find(this.conditionList, c => {\r\n return c.condition === value;\r\n });\r\n\r\n this.showConditionHint = this.conditionList.length > 0 && !isCondition;\r\n });\r\n\r\n //need to have ALL three OR atleast material and condition be chosen before emit\r\n this.material.get('hardness').valueChanges.subscribe(() => {\r\n if (this.material.get('hardness').value !== this.currentHardness) {\r\n this.resetHardnessActive = true;\r\n }\r\n });\r\n\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option') && res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'setMaterial') {\r\n this.materials = res.value;\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'material') {\r\n if (res.value === 'resetMaterial') {\r\n this.resetMaterial();\r\n } else {\r\n this.setsMaterialList(res.value);\r\n }\r\n }\r\n\r\n if (res.hasOwnProperty('option') && res.option === 'reset') {\r\n this.resetMaterialList();\r\n }\r\n\r\n if (res.hasOwnProperty('option') && res.option === 'resetMaterial') {\r\n this.resetMaterialList();\r\n this.setsMaterialList(res.value, true);\r\n }\r\n });\r\n\r\n this.material\r\n .get('hardness')\r\n .get('hbw')\r\n .valueChanges.pipe(debounceTime(3000), distinctUntilChanged())\r\n .subscribe((input: string) => {\r\n if (input && this.constants.NUMBER_ONLY_REGEX.test(input)) {\r\n const hbw: number = Number(input);\r\n if (hbw > 0) {\r\n if (hbw < 100) {\r\n let message: Message = {\r\n title: 'Cannot go below 100 HBW!',\r\n message: 'A value of ' + hbw + ' is too low for accurate HBW 10/3000 Brinell hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else if (hbw > 654) {\r\n let message: Message = {\r\n title: 'Cannot go above 654 HBW!',\r\n message: 'A value of ' + hbw + ' is too high for accurate HBW 10/3000 Brinell hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else {\r\n this.hardnessOverride(HardnessFactor.HBW, hbw);\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('HBW (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.material\r\n .get('hardness')\r\n .get('hbs')\r\n .valueChanges.pipe(debounceTime(3000), distinctUntilChanged())\r\n .subscribe((input: string) => {\r\n if (input && this.constants.NUMBER_ONLY_REGEX.test(input)) {\r\n const hbs: number = Number(input);\r\n if (hbs > 0) {\r\n if (hbs < 40) {\r\n let message: Message = {\r\n title: 'Cannot go below 40 HBS!',\r\n message: 'A value of ' + hbs + ' is too low for accurate HBS 10/500 Brinell hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else if (hbs > 160) {\r\n let message: Message = {\r\n title: 'Cannot go above 160 HBS!',\r\n message:\r\n 'A value of ' +\r\n hbs +\r\n ' is too high for accurate HBS 10/500 Brinell hardness testing in this material!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else {\r\n this.hardnessOverride(HardnessFactor.HBS, hbs);\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('HBS (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.material\r\n .get('hardness')\r\n .get('hrc')\r\n .valueChanges.pipe(debounceTime(3000), distinctUntilChanged())\r\n .subscribe((input: string) => {\r\n if (input && this.constants.NUMBER_ONLY_REGEX.test(input)) {\r\n const hrc: number = Number(input);\r\n if (hrc > 0) {\r\n if (hrc < 20) {\r\n let message: Message = {\r\n title: 'Cannot go below 20 HRC!',\r\n message: 'A value of ' + hrc + ' is too low for accurate Rockwell C hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else if (hrc > 70) {\r\n let message: Message = {\r\n title: 'Cannot go above 70 HRC!',\r\n message: 'A value of ' + hrc + ' is too high for accurate Rockwell C hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else {\r\n this.hardnessOverride(HardnessFactor.HRC, hrc);\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('HRC (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.material\r\n .get('hardness')\r\n .get('hrb')\r\n .valueChanges.pipe(debounceTime(3000), distinctUntilChanged())\r\n .subscribe((input: string) => {\r\n if (input && this.constants.NUMBER_ONLY_REGEX.test(input)) {\r\n const hrb: number = Number(input);\r\n if (hrb > 0) {\r\n if (hrb < 28) {\r\n let message: Message = {\r\n title: 'Cannot go below 28 HRB!',\r\n message: 'A value of ' + hrb + ' is too low for accurate Rockwell B hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else if (hrb > 100) {\r\n let message: Message = {\r\n title: 'Cannot go above 100 HRB!',\r\n message: 'A value of ' + hrb + ' is too high for accurate Rockwell B hardness testing!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.resetHardness();\r\n } else {\r\n this.hardnessOverride(HardnessFactor.HRB, hrb);\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('HRB (Numeric)');\r\n }\r\n }\r\n });\r\n }\r\n\r\n setsMaterialList = (settingsHolder: ToolContainer, resetMaterial: boolean = false) => {\r\n this.settingsHolder = settingsHolder;\r\n if (this.settingsHolder.tool !== this.currentTool) {\r\n if (this.settingsHolder.tool) {\r\n this.currentTool = this.settingsHolder.tool;\r\n // we need to filter the materials, this will alleviate some of the shading area errors\r\n let toolFilteredList = [];\r\n let toolSubGroup = [];\r\n let materialList = _.orderBy(this.materials['all'], 'uiName');\r\n let materialIds = this.settingsHolder.tool.materialIds;\r\n for (let i = 0; i < materialList.length; i++) {\r\n let material = materialList[i];\r\n if (materialIds.includes(material.id)) {\r\n toolFilteredList.push(material);\r\n //grabbing the subgroups\r\n if (toolSubGroup.indexOf(material.subGroup) < 0) {\r\n toolSubGroup.push(material.subGroup);\r\n }\r\n }\r\n }\r\n\r\n let differ = true;\r\n if (this.previousMaterialList) {\r\n differ = !_.isEmpty(this.utils.difference(toolFilteredList, this.previousMaterialList));\r\n }\r\n if (resetMaterial || differ) {\r\n let materialInput = this.material.get('materialSelection').get('material').value;\r\n let subGroupInput = this.material.get('materialSelection').get('subgroup').value;\r\n let conditionInput = this.material.get('materialSelection').get('condition').value;\r\n\r\n this.settingsHolder.tool = this.currentTool;\r\n this.previousMaterialList = toolFilteredList;\r\n this.resetMaterial();\r\n this.materialList = _.uniqBy(toolFilteredList, 'uiName');\r\n this.filteredSubgroups = _.orderBy(toolSubGroup);\r\n this.subGroup = this.filteredSubgroups;\r\n this.chosenCondition = false;\r\n\r\n // if my previous selection is available in the current list, then preselect for user\r\n if (subGroupInput !== '') {\r\n if (\r\n _.find(this.filteredSubgroups, filteredSubgroups => {\r\n return filteredSubgroups === subGroupInput;\r\n })\r\n ) {\r\n this.material\r\n .get('materialSelection')\r\n .get('subgroup')\r\n .patchValue(subGroupInput, { emitEvent: true });\r\n }\r\n }\r\n\r\n if (materialInput !== '') {\r\n if (\r\n _.find(this.materialList, materials => {\r\n return materials.uiName === materialInput;\r\n })\r\n ) {\r\n this.material\r\n .get('materialSelection')\r\n .get('material')\r\n .patchValue(materialInput, { emitEvent: true });\r\n }\r\n }\r\n\r\n if (conditionInput !== '') {\r\n if (\r\n _.find(this.conditionList, conditions => {\r\n return conditions.condition === conditionInput;\r\n })\r\n ) {\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .patchValue(conditionInput, { emitEvent: true });\r\n this.chosenCondition = true;\r\n }\r\n }\r\n\r\n if (subGroupInput !== '' && materialInput !== '' && conditionInput !== '') {\r\n this.loadHardness(this.materials['all']);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n setArrowDirectionUp = (id, visible?) => {\r\n this.popupVisible[id] = true;\r\n if (id === 'subgroup') {\r\n this.materialOptionsPop.nativeElement.className = 'up arrow';\r\n } else if (id === 'material') {\r\n this.subgroupOptionsPop.nativeElement.className = 'up arrow';\r\n } else if (id === 'condition') {\r\n this.conditionOptionsPop.nativeElement.className = 'up arrow';\r\n }\r\n };\r\n\r\n setArrowDirectionDown = (id, visible?) => {\r\n this.popupVisible[id] = false;\r\n if (id === 'subgroup') {\r\n this.materialOptionsPop.nativeElement.className = 'down arrow';\r\n } else if (id === 'material') {\r\n this.subgroupOptionsPop.nativeElement.className = 'down arrow';\r\n } else if (id === 'condition') {\r\n this.conditionOptionsPop.nativeElement.className = 'down arrow';\r\n }\r\n };\r\n\r\n setMaterial = (control: string, value: string) => {\r\n if (value) {\r\n //Added back in the clear element and set arrow when user selects something from materials\r\n //To get the user selection before blur clears out the drop down we have to use mousedown or touchstart\r\n //Android devices captures both events and causing a double click and setting the wrong material so keep this here for now\r\n if (control === 'subgroup') {\r\n $('#material').blur();\r\n this.material\r\n .get('materialSelection')\r\n .get('subgroup')\r\n .patchValue(value, { emitEvent: false }); // adds the \"material\" into the input\r\n\r\n let list = [];\r\n const materialIds = this.settingsHolder.tool ? this.settingsHolder.tool.materialIds : null;\r\n for (let i = 0; i < this.materials['all'].length; i++) {\r\n if (\r\n this.materials['all'][i]['subGroup'] === value &&\r\n (!materialIds || !!materialIds.find(id => id === this.materials['all'][i].id))\r\n ) {\r\n list.push(this.materials['all'][i]);\r\n }\r\n }\r\n this.materialSubgroupList = _.uniqBy(list, 'uiName'); //got the subgroup list\r\n this.materialList = this.materialSubgroupList;\r\n\r\n if (this.currentSubgroup != value) {\r\n //there is a change\r\n this.currentSubgroup = value;\r\n this.material\r\n .get('materialSelection')\r\n .get('material')\r\n .reset('', { emitEvent: false });\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .reset('', { emitEvent: false });\r\n this.material.get('hardness').reset('', { emitEvent: false });\r\n }\r\n\r\n if (this.material.get('materialSelection').get('material').value !== '') {\r\n if (this.conditionList.length === 1) {\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .patchValue(this.conditionList[0]['condition'], { emitEvent: true });\r\n this.chosenCondition = true;\r\n } else {\r\n this.chosenCondition = false;\r\n }\r\n\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .enable();\r\n }\r\n\r\n this.subGroup = this.filteredSubgroups;\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Sub Group');\r\n }\r\n }\r\n // this is fine, ultimately it only gets fired once\r\n else if (control === 'material') {\r\n $('#subgroup').blur();\r\n if (this.material.get('materialSelection').get('subgroup').value !== value['subGroup']) {\r\n //this means, the user when straigt for the Subgroup \"material\" field\r\n\r\n //set the \"material\" field\r\n this.material\r\n .get('materialSelection')\r\n .get('subgroup')\r\n .patchValue(value['subGroup'], { emitEvent: false });\r\n // generates the list of \"subgroup\"\r\n let list = [];\r\n const materialIdList = this.settingsHolder.tool ? this.settingsHolder.tool.materialIds : null;\r\n for (let i = 0; i < this.materials['all'].length; i++) {\r\n if (\r\n this.materials['all'][i]['subGroup'] === value['subGroup'] &&\r\n (!materialIdList || !!materialIdList.find(id => id === this.materials['all'][i].id))\r\n ) {\r\n list.push(this.materials['all'][i]);\r\n }\r\n }\r\n this.materialSubgroupList = _.uniqBy(list, 'uiName'); //got the subgroup list\r\n this.materialList = this.materialSubgroupList;\r\n }\r\n\r\n this.material\r\n .get('materialSelection')\r\n .get('material')\r\n .patchValue(value['uiName'], { emitEvent: false });\r\n this.materialList = this.materialSubgroupList;\r\n if (this.material.get('materialSelection').get('subgroup').value !== '') {\r\n let list = [];\r\n const materialIdList = this.settingsHolder.tool ? this.settingsHolder.tool.materialIds : null;\r\n for (let i = 0; i < this.materials['all'].length; i++) {\r\n if (\r\n this.materials['all'][i]['uiName'] === value['uiName'] &&\r\n (!materialIdList || !!materialIdList.find(id => id === this.materials['all'][i].id))\r\n ) {\r\n list.push(this.materials['all'][i]);\r\n }\r\n }\r\n\r\n this.conditionList = list;\r\n\r\n if (this.conditionList.length === 1) {\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .patchValue(this.conditionList[0]['condition'], { emitEvent: true });\r\n this.chosenCondition = true;\r\n } else {\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .reset('', { emitEvent: false });\r\n this.chosenCondition = false;\r\n }\r\n\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .enable();\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Material');\r\n }\r\n } else if (control === 'condition') {\r\n $('#condition').blur();\r\n this.chosenCondition = true;\r\n this.material\r\n .get('materialSelection')\r\n .get('condition')\r\n .patchValue(value, { emitEvent: true });\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Condition');\r\n }\r\n }\r\n\r\n this.loadHardness(this.materials['all']);\r\n setTimeout(() => {\r\n this.commonService.notifyOther({\r\n option: 'recommendationsGeneratedForLoggingData',\r\n value: {\r\n logLocation: 'material change'\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n hardnessOverride = (type: HardnessFactor, value: number) => {\r\n this.currentHardness = this.convertHardness(type, value, true);\r\n this.material.get('hardness').patchValue(this.currentHardness, { emitEvent: false }); // emit false so it won't be part of the fields to watch\r\n\r\n const hardnessExt = this.currentHardness;\r\n this.hardnessChange.emit(hardnessExt);\r\n };\r\n\r\n convertHardness = (type: HardnessFactor, value: number, isUserInput: boolean = false): Hardness => {\r\n const hardness: Hardness = {};\r\n\r\n switch (type) {\r\n case HardnessFactor.HBW:\r\n hardness.hbw = value;\r\n hardness.hrc = Math.round(this.conversionFormulas.convertHBWtoHRC(value));\r\n hardness.hrb = Math.round(this.conversionFormulas.convertHBWtoHRB(value));\r\n hardness.hbs = Math.round(this.conversionFormulas.convertHRBtoHBS(hardness.hrb));\r\n\r\n if (isUserInput) {\r\n hardness.userHra = this.conversionFormulas.convertHBWtoHRA(hardness.hbw);\r\n }\r\n break;\r\n case HardnessFactor.HBS:\r\n hardness.hbs = value;\r\n hardness.hbw = Math.round(\r\n this.conversionFormulas.convertHRBtoHBW(this.conversionFormulas.convertHBStoHRB(value))\r\n );\r\n hardness.hrb = Math.round(this.conversionFormulas.convertHBStoHRB(hardness.hbs));\r\n hardness.hrc = Math.round(this.conversionFormulas.convertHBWtoHRC(hardness.hbw));\r\n\r\n if (isUserInput) {\r\n hardness.userHra = this.conversionFormulas.convertHBStoHRA(hardness.hbs);\r\n }\r\n break;\r\n case HardnessFactor.HRB:\r\n hardness.hrb = value;\r\n hardness.hbw = Math.round(this.conversionFormulas.convertHRBtoHBW(value));\r\n hardness.hrc = Math.round(this.conversionFormulas.convertHBWtoHRC(hardness.hbw));\r\n hardness.hbs = Math.round(this.conversionFormulas.convertHRBtoHBS(hardness.hrb));\r\n\r\n if (isUserInput) {\r\n hardness.userHra = this.conversionFormulas.convertHRBtoHRA(hardness.hrb);\r\n }\r\n break;\r\n case HardnessFactor.HRC:\r\n hardness.hrc = value;\r\n hardness.hbw = Math.round(this.conversionFormulas.convertHRCtoHBW(value));\r\n hardness.hrb = Math.round(this.conversionFormulas.convertHBWtoHRB(hardness.hbw));\r\n hardness.hbs = Math.round(this.conversionFormulas.convertHRBtoHBS(hardness.hrb));\r\n\r\n if (isUserInput) {\r\n hardness.userHra = this.conversionFormulas.convertHRCtoHRA(hardness.hrc);\r\n }\r\n break;\r\n }\r\n\r\n return hardness;\r\n };\r\n\r\n onEnter = control => {\r\n if (this.material.get('materialSelection').get(control).value !== '') {\r\n this.popupVisible[control] = false;\r\n } else {\r\n this.popupVisible[control] = true;\r\n }\r\n };\r\n\r\n onLeave = control => {\r\n this.popupVisible[control] = false;\r\n };\r\n\r\n onKeyUp = control => {\r\n if (this.material.get('materialSelection').get(control).value !== '') {\r\n this.popupVisible[control] = false;\r\n } else {\r\n this.popupVisible[control] = true;\r\n }\r\n };\r\n\r\n resetMaterial = () => {\r\n this.chosenCondition = false;\r\n this.material.get('materialSelection').reset(\r\n {\r\n material: '',\r\n subgroup: '',\r\n condition: '',\r\n subgroupSearch: '',\r\n materialSearch: '',\r\n conditionSearch: ''\r\n },\r\n { emitEvent: false }\r\n );\r\n\r\n // there is a bug in material 2 library when using inputs, the place holders does not get reset\r\n // using a jquery hack here to get it reset\r\n let materialLabel = $(this.materialInput.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!materialLabel.hasClass('mat-empty') && !materialLabel.hasClass('mat-form-field-empty')) {\r\n materialLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let subGroupLabel = $(this.subgroupInput.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!subGroupLabel.hasClass('mat-empty') && !subGroupLabel.hasClass('mat-form-field-empty')) {\r\n subGroupLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let conditionLabel = $(this.conditionInput.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!conditionLabel.hasClass('mat-empty') && !conditionLabel.hasClass('mat-form-field-empty')) {\r\n conditionLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let hbwLabel = $(this.hbw.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!hbwLabel.hasClass('mat-empty') && !hbwLabel.hasClass('mat-form-field-empty')) {\r\n hbwLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let hbsLabel = $(this.hbs.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!hbsLabel.hasClass('mat-empty') && !hbsLabel.hasClass('mat-form-field-empty')) {\r\n hbsLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let hrbLabel = $(this.hrb.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!hrbLabel.hasClass('mat-empty') && !hrbLabel.hasClass('mat-form-field-empty')) {\r\n hrbLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n let hrcLabel = $(this.hrc.nativeElement)\r\n .parents('.mat-form-field-infix')\r\n .find('.mat-form-field-label-wrapper')\r\n .find('.mat-form-field-label');\r\n if (!hrcLabel.hasClass('mat-empty') && !hrcLabel.hasClass('mat-form-field-empty')) {\r\n hrcLabel.addClass('mat-empty').addClass('mat-form-field-empty');\r\n }\r\n\r\n this.material.get('hardness').reset(\r\n {\r\n hbw: '',\r\n hrc: '',\r\n hbs: '',\r\n hrb: '',\r\n userHra: ''\r\n },\r\n { emitEvent: true }\r\n );\r\n\r\n this.resetHardnessActive = false;\r\n };\r\n\r\n resetHardness = () => {\r\n if (this.resetHardnessActive) {\r\n this.material.get('hardness').reset(\r\n {\r\n hbw: '',\r\n hrc: '',\r\n hbs: '',\r\n hrb: '',\r\n userHra: ''\r\n },\r\n { emitEvent: true }\r\n );\r\n this.loadHardness(this.materials['all']);\r\n this.material.get('hardness').patchValue(this.currentHardness, { emitEvent: false });\r\n this.resetHardnessActive = false;\r\n }\r\n };\r\n\r\n loadHardness = (data: Material_[]) => {\r\n // if all three is chosen then show the hardness data\r\n // we want to trigger the look up silently, so thats why I am checking if blank value you here with out the UI showing an error when blank\r\n if (this.utils.inputChecker(this.material.get('materialSelection').get('material').value, ['required'])) {\r\n let nameDescription = this.material\r\n .get('materialSelection')\r\n .get('material')\r\n .value.split('—');\r\n let name = nameDescription[0];\r\n let description = nameDescription[1];\r\n let uiName = this.material.get('materialSelection').get('material').value;\r\n let subgroup = this.material.get('materialSelection').get('subgroup').value;\r\n let condition = this.material.get('materialSelection').get('condition').value;\r\n\r\n let moreFilter = {\r\n name: _.trim(name),\r\n description: _.trim(description)\r\n };\r\n\r\n if (subgroup) {\r\n _.extend(moreFilter, {\r\n subgroup: subgroup\r\n });\r\n }\r\n\r\n if (condition) {\r\n _.extend(moreFilter, {\r\n condition: condition\r\n });\r\n }\r\n\r\n let result: Material_ = undefined;\r\n\r\n for (let i = 0; i < data.length; i++) {\r\n if (data[i]['condition'] === condition && data[i]['subGroup'] === subgroup && data[i]['uiName'] === uiName) {\r\n result = data[i];\r\n break;\r\n }\r\n }\r\n this.currentHardness = {\r\n hbs: '',\r\n hbw: '',\r\n hrc: '',\r\n hrb: '',\r\n userHra: ''\r\n };\r\n\r\n if (result) {\r\n this.currentHardness = this.convertHardness(HardnessFactor[result['hardnessFactor']], result['hardness']);\r\n\r\n // can't use setValue here because setValue is for init\r\n this.material.get('hardness').patchValue(this.currentHardness, { emitEvent: false }); // emit false so it won't be part of the fields to watch\r\n\r\n let hardnessExt = this.currentHardness;\r\n\r\n _.extend(result, hardnessExt);\r\n\r\n result = this.formulas.configureMaterial(result);\r\n\r\n _.extend(hardnessExt, {\r\n hra: result['hra']\r\n });\r\n\r\n this.hardnessChange.emit(hardnessExt);\r\n }\r\n _.extend(result, {\r\n chosenCondition: this.chosenCondition\r\n });\r\n this.materialChange.emit(result);\r\n }\r\n };\r\n}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { throwError as observableThrowError, Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport { Operation_ } from 'src/service/formulas/objects';\r\n\r\nimport { ServiceProvider } from '../../../service/provider.interface';\r\n\r\n@Injectable()\r\nexport class OperationProvider extends ServiceProvider {\r\n private operationEndmillEndpoint: string;\r\n private operationsEndpoint: string;\r\n private token: any;\r\n\r\n constructor(public cache: CacheService, private http: HttpClient) {\r\n super();\r\n this.operationEndmillEndpoint = this.config.apiEndpoints['operationForEndmill'];\r\n this.operationsEndpoint = this.config.apiEndpoints['operations'];\r\n this.cache.getItem('loginInfo').then(res => (this.token = res));\r\n }\r\n\r\n public fetchEndmillOperations = (selectedEndmillProductKey: number): Observable => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.operationEndmillEndpoint;\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers,\r\n params: { productKey: selectedEndmillProductKey.toString() }\r\n })\r\n .pipe(\r\n map((response: Operation_[]) => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getOperations = (): Observable => {\r\n const url: string = this.operationsEndpoint;\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .pipe(\r\n map(response => {\r\n return response;\r\n }),\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n}\r\n","import { Component, Output, EventEmitter } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { MatOptionSelectionChange } from '@angular/material/core';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport _ from 'lodash';\r\nimport { Utils } from '../../../service/utils';\r\nimport { CurrentToolPath, Cutter_, Operation_, Strategy, ToolContainer } from '../../../service/formulas/objects';\r\nimport { Constants, Toolpath } from '../../../service/constants';\r\nimport { ToolPathSelectorDialog } from './toolPathSelector/toolPathSelector';\r\nimport { CommonService } from '../../../service/common.service';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { ImageConstants } from '../../../service/image-constants';\r\nimport { OperationProvider } from './operation.service';\r\n\r\n@Component({\r\n selector: 'section-operation',\r\n templateUrl: 'operation.html',\r\n providers: [OperationProvider],\r\n styleUrls: ['operation.scss']\r\n})\r\nexport class Operation {\r\n private subscription: Subscription;\r\n public operation: FormGroup;\r\n public operationTypes: object[];\r\n public toolPaths: object[];\r\n public toolPathSelections: object[];\r\n public popupVisible: object;\r\n public filteredToolPaths: any[] = [];\r\n public filteredStrategies: Strategy[] = [];\r\n public current: CurrentToolPath;\r\n public operationTypeOptions: { [productKey: number]: Operation_[] } = {};\r\n public currentOperationTypes: Operation_[] = [];\r\n private currentTool: Cutter_;\r\n private holder: ToolContainer;\r\n private enableToolPathSelector: boolean = true;\r\n private isApp: boolean;\r\n private selectedOperationType: string;\r\n public windowsDimensions: object = undefined;\r\n @Output() operationTypeChange: EventEmitter = new EventEmitter();\r\n @Output() toolPathChange: EventEmitter = new EventEmitter();\r\n @Output() strategyChange: EventEmitter = new EventEmitter();\r\n @Output() setSlotting: EventEmitter = new EventEmitter();\r\n @Output() setChamferDiameter: EventEmitter = new EventEmitter();\r\n constructor(\r\n public utils: Utils,\r\n public constants: Constants,\r\n private formBuilder: FormBuilder,\r\n public dialog: MatDialog,\r\n private commonService: CommonService,\r\n private cache: CacheService,\r\n private imageConstants: ImageConstants,\r\n private operationProvider: OperationProvider\r\n ) {\r\n this.operation = this.formBuilder.group({\r\n operationTypeSelect: new FormControl({ value: '', disabled: true }),\r\n toolPathSelect: new FormControl({ value: '', disabled: true }),\r\n strategySelect: new FormControl({ value: '', disabled: true })\r\n });\r\n this.currentTool = new Cutter_();\r\n this.operationTypes = this.constants.getOperationTypes();\r\n this.toolPaths = this.constants.getToolPaths();\r\n this.toolPathSelections = this.constants.getToolPathSelections();\r\n this.holder = new ToolContainer();\r\n\r\n this.popupVisible = {\r\n operationTypeSelect: false,\r\n toolPathSelect: false\r\n };\r\n\r\n this.current = new CurrentToolPath(\r\n 'Tool Path Info',\r\n 'To select a Tool Path, use the drop down menu above or, to view graphic representations of the paths, click on the button.',\r\n this.imageConstants.toolPathDefault,\r\n this.imageConstants.toolPathDefault,\r\n 1\r\n );\r\n\r\n this.isApp = this.utils.isApp();\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n }\r\n\r\n this.cache.getItem('operations').then(data => {\r\n this.operationTypeOptions = data;\r\n });\r\n\r\n this.cache.getItem('operationsCached').then(isCached => {\r\n // check if we have cached all the endmill information, if not then fetch all the endmills\r\n if (!isCached) {\r\n this.fetchAllOperations();\r\n }\r\n });\r\n\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option') && res.option === 'changeToolPath') {\r\n this.operation.get('toolPathSelect').patchValue(res.value, { emitEvent: true });\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'operation') {\r\n this.holder = res.value;\r\n\r\n if (this.holder.tool) {\r\n if (this.operationTypeOptions[this.holder.tool.id]) {\r\n this.getOpertionTypesForTool();\r\n } else {\r\n this.operationProvider.fetchEndmillOperations(this.holder.tool.id).subscribe(operations => {\r\n this.operationTypeOptions[this.holder.tool.id] = operations;\r\n this.cache.saveItem('operations', this.operationTypeOptions);\r\n this.getOpertionTypesForTool();\r\n });\r\n }\r\n } else {\r\n this.operation.get('operationTypeSelect').patchValue('');\r\n this.setCurrentToolPath();\r\n this.disableForm();\r\n }\r\n\r\n // paths should only be reset\r\n // 1. if tools is changed from chamfer to regular tool, to chamfer then back\r\n // 2. initial load of tools\r\n // 3. if parameters suggested to change\r\n // 4. master reset\r\n\r\n // so if Machine Holder changes, it should NOT change the path\r\n\r\n if (this.holder.tool) {\r\n /*\r\n 3d Surfacing IF end = Ball-nosed + \"the rest\"\r\n Chamfer IF end = % chamfer, ONLY\r\n others get \"the rest\", no 3d Surfacing\r\n */\r\n\r\n let toolEnd = this.holder.tool.end.toLowerCase();\r\n this.enableToolPathSelector = true;\r\n if (toolEnd.indexOf('chamfer') > -1) {\r\n // ONLY enable chamfer and disable all others\r\n _.each(this.toolPathSelections, path => {\r\n let pathName = path.getName().toLowerCase();\r\n if (pathName.indexOf('chamfering') > -1) {\r\n // enable chamfering\r\n path.setApplicable(true);\r\n } else {\r\n // disable everything else\r\n path.setApplicable(false);\r\n }\r\n this.enableToolPathSelector = false;\r\n });\r\n } else if (toolEnd.indexOf('ball-nosed') > -1) {\r\n // enable 3d surfacing and the rest\r\n _.each(this.toolPathSelections, path => {\r\n let pathName = path.getName().toLowerCase();\r\n if (pathName.indexOf('3d surfacing') > -1) {\r\n // enabling 3d surfacing\r\n path.setApplicable(true);\r\n } else if (pathName.indexOf('chamfering') > -1) {\r\n // disabling chamfering\r\n path.setApplicable(false);\r\n } else {\r\n // enabling the rest\r\n path.setApplicable(true);\r\n }\r\n });\r\n } else {\r\n // enable the rest but not 3d surfacing and no chamfering\r\n\r\n // let check if there is a path already\r\n _.each(this.toolPathSelections, path => {\r\n let pathName = path.getName().toLowerCase();\r\n if (pathName.indexOf('3d surfacing') > -1) {\r\n // disable 3d surfacing\r\n path.setApplicable(false);\r\n } else if (pathName.indexOf('chamfering') > -1) {\r\n // disable chamfering\r\n path.setApplicable(false);\r\n } else {\r\n // enable everythingelse\r\n path.setApplicable(true);\r\n }\r\n });\r\n }\r\n\r\n if (\r\n this.current.name === 'Tool Path Info' ||\r\n this.current.name === 'Chamfering' ||\r\n toolEnd.indexOf('chamfer') > -1 ||\r\n this.currentTool !== this.holder.tool\r\n ) {\r\n this.currentTool = this.holder.tool;\r\n let preselectedPath = this.operation.get('toolPathSelect').value;\r\n\r\n if (typeof preselectedPath === 'object') {\r\n if (preselectedPath) {\r\n preselectedPath = preselectedPath.value;\r\n }\r\n }\r\n if (toolEnd.indexOf('chamfer') > -1) {\r\n this.operation.get('toolPathSelect').patchValue('Chamfering', { emitEvent: true });\r\n } else {\r\n // First need to check if preselected path is still set to Chamfering\r\n // This happens when user switches from a Chamfering tool to a non-chamfering tool\r\n if (preselectedPath === 'Chamfering') {\r\n this.operation.get('operationTypeSelect').patchValue(this.selectedOperationType, { emitEvent: false });\r\n this.operation.get('toolPathSelect').reset({ value: '' }, { emitEvent: true });\r\n this.holder.currenttoolpath = undefined;\r\n this.setCurrentToolPath();\r\n setTimeout(() => {\r\n this.commonService.notifyOther({\r\n option: 'switchedFromChamferingTool',\r\n value: this.holder\r\n });\r\n });\r\n }\r\n }\r\n if (this.filteredToolPaths) {\r\n for (const toolPathOption of this.filteredToolPaths) {\r\n if (toolPathOption.operationName === '3D Surfacing') {\r\n this.operation.get('toolPathSelect').patchValue('3D Surfacing', { emitEvent: true });\r\n // Set 3D surfacing to selected tool path\r\n const operationToolPath = toolPathOption;\r\n this.current.name = operationToolPath.operationToolPathTitle;\r\n this.current.description = operationToolPath.operationToolPathDescription;\r\n this.current.labledImage = operationToolPath.operationImage\r\n ? operationToolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.unLabledImage = operationToolPath.operationImage\r\n ? operationToolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.operationImageAssetForParameterSection =\r\n operationToolPath.operationImageAssetForParameterSection;\r\n this.current.mapMode = operationToolPath.mapMode;\r\n this.current.toolPathId = operationToolPath.toolPathId;\r\n this.filteredStrategies = operationToolPath.strategies;\r\n this.commonService.notifyOther({\r\n option: 'mapModeChanged',\r\n value: operationToolPath\r\n });\r\n this.toolPathChange.emit(operationToolPath);\r\n break;\r\n }\r\n }\r\n }\r\n } else if (!!this.current && !!this.current.name) {\r\n if (res.updateToolPath) {\r\n this.setCurrentToolPath(this.current);\r\n }\r\n }\r\n }\r\n } else if ((res.hasOwnProperty('option') && res.option === 'reset') || res.option === 'resetTool') {\r\n this.operation.setValue(\r\n {\r\n operationTypeSelect: { value: '', disabled: true },\r\n toolPathSelect: { value: '', disabled: true },\r\n strategySelect: { value: '', disabled: true }\r\n },\r\n { emitEvent: false }\r\n );\r\n this.currentOperationTypes = [];\r\n this.filteredToolPaths = [];\r\n this.filteredStrategies = [];\r\n this.disableForm();\r\n this.setCurrentToolPath();\r\n }\r\n });\r\n }\r\n\r\n private fetchAllOperations = () => {\r\n this.operationProvider.getOperations().subscribe(\r\n operations => {\r\n this.cache.saveItem('operations', operations);\r\n this.operationTypeOptions = operations;\r\n this.cache.saveItem('operationsCached', true);\r\n },\r\n error => {\r\n console.log(error);\r\n this.cache.saveItem('operationsCached', false);\r\n }\r\n );\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n });\r\n }\r\n\r\n getOpertionTypesForTool = () => {\r\n const previousOperationType = this.operation.get('operationTypeSelect').value;\r\n this.currentOperationTypes = this.operationTypeOptions[this.holder.tool.id];\r\n\r\n if (this.currentOperationTypes.length > 0) {\r\n this.enableForm();\r\n if (this.currentOperationTypes.length === 1) {\r\n this.selectedOperationType = this.currentOperationTypes[0].operation;\r\n this.operation.get('operationTypeSelect').patchValue(this.selectedOperationType);\r\n this.filteredToolPaths = this.currentOperationTypes[0].toolPaths;\r\n this.operationTypeChange.emit(this.selectedOperationType);\r\n\r\n const selectedToolpathName = this.operation.get('toolPathSelect').value;\r\n const selectedStrategyName = this.operation.get('strategySelect').value;\r\n if (this.currentOperationTypes[0].toolPaths.length === 1) {\r\n const operationToolPath = this.currentOperationTypes[0].toolPaths[0];\r\n this.current.name = operationToolPath.operationToolPathTitle;\r\n this.current.description = operationToolPath.operationToolPathDescription;\r\n this.current.labledImage = operationToolPath.operationImage\r\n ? operationToolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.unLabledImage = operationToolPath.operationImage\r\n ? operationToolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.operationImageAssetForParameterSection =\r\n operationToolPath.operationImageAssetForParameterSection;\r\n this.current.mapMode = operationToolPath.mapMode;\r\n this.current.toolPathId = operationToolPath.toolPathId;\r\n this.filteredStrategies = operationToolPath.strategies;\r\n this.commonService.notifyOther({\r\n option: 'mapModeChanged',\r\n value: operationToolPath\r\n });\r\n this.toolPathChange.emit(operationToolPath);\r\n } else if (!!selectedToolpathName) {\r\n // Clear out tool path because it doesn't exist in the new tool path options\r\n const newToolPath = this.filteredToolPaths.find(ftp => ftp.operationName === selectedToolpathName);\r\n\r\n if (!newToolPath) {\r\n // This will handle changing map mode and clearing out the strategy\r\n this.setCurrentToolPath();\r\n } else if (!!selectedStrategyName) {\r\n const newStrategy =\r\n newToolPath.strategies && newToolPath.strategies.find(str => str.operationName === selectedStrategyName);\r\n if (!!newStrategy) {\r\n this.holder.mapMode = newStrategy.mapMode;\r\n this.current.operationImageAssetForParameterSection = newStrategy.operationImageAssetForParameterSection;\r\n this.current.mapMode = newStrategy.mapMode;\r\n this.current.operationKey = newStrategy.operationKey;\r\n this.current.toolPathId = newStrategy.strategyId;\r\n this.commonService.notifyOther({\r\n option: 'mapModeChanged',\r\n value: this.current\r\n });\r\n } else {\r\n // This will handle changing map mode and clearing out the strategy\r\n this.setCurrentToolPath();\r\n }\r\n } else {\r\n this.current.name = newToolPath.operationToolPathTitle;\r\n this.current.description = newToolPath.operationToolPathDescription;\r\n this.current.labledImage = newToolPath.operationImage\r\n ? newToolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.unLabledImage = newToolPath.operationImage\r\n ? newToolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.operationImageAssetForParameterSection = newToolPath.operationImageAssetForParameterSection;\r\n this.current.mapMode = newToolPath.mapMode;\r\n this.current.toolPathId = newToolPath.toolPathId;\r\n this.filteredStrategies = newToolPath.strategies;\r\n this.commonService.notifyOther({\r\n option: 'mapModeChanged',\r\n value: newToolPath\r\n });\r\n }\r\n }\r\n } else {\r\n const newOperation = this.currentOperationTypes.find(\r\n operation => operation.operation === previousOperationType\r\n );\r\n if (!newOperation) {\r\n // Clear out the selected tool if user is going to multiple operation types and the previous type isn't an option\r\n this.operation.get('operationTypeSelect').patchValue('');\r\n this.setCurrentToolPath();\r\n } else {\r\n this.filteredToolPaths = newOperation.toolPaths;\r\n }\r\n }\r\n } else {\r\n this.operation.get('operationTypeSelect').patchValue('');\r\n this.setCurrentToolPath();\r\n this.disableForm();\r\n }\r\n };\r\n\r\n onEnter = (control: string) => {\r\n if (this.operation.get(control).value !== '') {\r\n this.popupVisible[control] = false;\r\n } else {\r\n this.popupVisible[control] = true;\r\n }\r\n };\r\n\r\n onLeave = (control: string) => {\r\n this.popupVisible[control] = false;\r\n };\r\n\r\n onKeyUp = (control: string) => {\r\n if (this.operation.get(control).value !== '') {\r\n this.popupVisible[control] = false;\r\n } else {\r\n this.popupVisible[control] = true;\r\n }\r\n };\r\n\r\n select = (control: string) => {\r\n this.popupVisible[control] = false;\r\n };\r\n\r\n setType = (type: any, event: MatOptionSelectionChange) => {\r\n if (event.isUserInput) {\r\n this.selectedOperationType = type.operation;\r\n this.operation.get('operationTypeSelect').patchValue(this.selectedOperationType);\r\n this.filteredToolPaths = type.toolPaths;\r\n this.operationTypeChange.emit(this.selectedOperationType);\r\n this.enableForm();\r\n }\r\n };\r\n\r\n setCurrentToolPath = (value?: CurrentToolPath, control?: string, event?: MatOptionSelectionChange) => {\r\n if (!value) {\r\n // had to force and just copy the same line in the constructor.\r\n // for whatever reason the defaultToolPath was being replaced\r\n this.current = new CurrentToolPath(\r\n 'Tool Path Info',\r\n 'To select a Tool Path, use the drop down menu above or, to view graphic representations of the paths, click on the button.',\r\n this.imageConstants.toolPathDefault,\r\n this.imageConstants.toolPathDefault,\r\n 1\r\n );\r\n // if there is no value set mapMode to default\r\n this.holder.mapMode = 0;\r\n this.current.mapMode = 0;\r\n this.current.toolPathId = null;\r\n this.commonService.notifyOther({\r\n option: 'clearToolPath',\r\n value: this.current\r\n });\r\n this.filteredStrategies = [];\r\n this.operation.get('toolPathSelect').patchValue('', { emitEvent: true });\r\n this.operation.get('strategySelect').patchValue('', { emitEvent: false });\r\n } else if (\r\n ((!!event && event.isUserInput) || control === 'toolPathImageSelector') &&\r\n this.current.toolPathId !== value.toolPathId\r\n ) {\r\n let toolPath = value;\r\n\r\n if (toolPath) {\r\n this.current.name = toolPath.operationToolPathTitle;\r\n this.current.description = toolPath.operationToolPathDescription;\r\n this.current.labledImage = toolPath.operationImage\r\n ? toolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.unLabledImage = toolPath.operationImage\r\n ? toolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.operationImageAssetForParameterSection = toolPath.operationImageAssetForParameterSection;\r\n this.current.mapMode = toolPath.mapMode;\r\n this.current.toolPathId = value.toolPathId;\r\n this.filteredStrategies = toolPath.strategies;\r\n } else {\r\n // chose from drop down\r\n\r\n //toolPaths\r\n let toolPath: Toolpath = _.find(this.toolPathSelections, (toolPath: Toolpath) => {\r\n return value.operationToolPathTitle.toLowerCase() === toolPath.getName().toLowerCase();\r\n }).getToolPaths()[0];\r\n\r\n if (toolPath) {\r\n this.current.name = toolPath.operationToolPathTitle;\r\n this.current.description = toolPath.operationToolPathDescription;\r\n this.current.labledImage = toolPath.operationImage\r\n ? toolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.unLabledImage = toolPath.operationImage\r\n ? toolPath.operationImage\r\n : this.imageConstants.unavailableOperationThumbnail;\r\n this.current.operationImageAssetForParameterSection = toolPath.operationImageAssetForParameterSection;\r\n this.current.mapMode = toolPath.mapMode;\r\n this.filteredStrategies = toolPath.strategies;\r\n this.current.toolPathId = value.toolPathId;\r\n }\r\n }\r\n\r\n this.commonService.notifyOther({\r\n option: 'mapModeChanged',\r\n value: this.current\r\n });\r\n\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Tool Path (Drop Down)');\r\n }\r\n this.popupVisible[control] = false;\r\n this.toolPathChange.emit(value);\r\n\r\n // Check if there is a selected strategy and if it exists on selected tool path\r\n const selectedStrategyName = this.operation.get('strategySelect').value;\r\n if (toolPath.strategies && toolPath.strategies.length > 0 && !!selectedStrategyName) {\r\n this.toolPathChange.emit(value);\r\n const newStrategy = toolPath.strategies.find(str => str.operationName === selectedStrategyName);\r\n if (newStrategy) {\r\n this.holder.mapMode = newStrategy.mapMode;\r\n this.current.operationImageAssetForParameterSection = newStrategy.operationImageAssetForParameterSection;\r\n this.current.mapMode = newStrategy.mapMode;\r\n this.current.operationKey = newStrategy.operationKey;\r\n this.current.toolPathId = newStrategy.strategyId;\r\n this.strategyChange.emit(newStrategy);\r\n } else {\r\n this.operation.get('strategySelect').patchValue('', { emitEvent: false });\r\n this.strategyChange.emit('');\r\n }\r\n }\r\n\r\n this.commonService.notifyOther({\r\n option: 'checkToGetParamsAndRecs'\r\n });\r\n setTimeout(() => {\r\n this.commonService.notifyOther({\r\n option: 'recommendationsGeneratedForLoggingData',\r\n value: {\r\n logLocation: 'operation change'\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n setStrategy = (selectedStrategy: Strategy, event: MatOptionSelectionChange) => {\r\n if (event.isUserInput) {\r\n this.operation.get('strategySelect').patchValue(selectedStrategy.operationName);\r\n this.holder.mapMode = selectedStrategy.mapMode;\r\n this.current.operationImageAssetForParameterSection = selectedStrategy.operationImageAssetForParameterSection;\r\n this.current.mapMode = selectedStrategy.mapMode;\r\n this.current.operationKey = selectedStrategy.operationKey;\r\n this.current.toolPathId = selectedStrategy.strategyId;\r\n this.commonService.notifyOther({\r\n option: 'mapModeChanged',\r\n value: this.current\r\n });\r\n this.strategyChange.emit(selectedStrategy);\r\n this.commonService.notifyOther({\r\n option: 'checkToGetParamsAndRecs'\r\n });\r\n setTimeout(() => {\r\n this.commonService.notifyOther({\r\n option: 'recommendationsGeneratedForLoggingData',\r\n value: {\r\n logLocation: 'operation change'\r\n }\r\n });\r\n });\r\n }\r\n };\r\n\r\n openToolPathSelector = () => {\r\n if (this.enableToolPathSelector) {\r\n let dialogRef = this.dialog.open(ToolPathSelectorDialog, {\r\n panelClass: 'large-full-screen-dialog',\r\n data: {\r\n toolPaths: this.filteredToolPaths\r\n }\r\n });\r\n let instance = dialogRef.componentInstance;\r\n\r\n instance.dialogRef.afterClosed().subscribe(result => {\r\n if (result) {\r\n if (result['operationName']) {\r\n let selectedToolPath = _.find(this.filteredToolPaths, function(tp) {\r\n return tp.operationName === result['operationName'];\r\n });\r\n this.operation.get('toolPathSelect').patchValue(selectedToolPath.operationName, { emitEvent: true });\r\n this.setCurrentToolPath(selectedToolPath, 'toolPathImageSelector');\r\n }\r\n }\r\n });\r\n }\r\n };\r\n\r\n enableForm = () => {\r\n this.operation.enable();\r\n };\r\n\r\n disableForm = () => {\r\n this.operation.disable();\r\n };\r\n}\r\n","import { Component, Inject } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport _ from 'lodash';\r\nimport { ImageConstants } from '../../../../service/image-constants';\r\nimport { MAT_DIALOG_DATA } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'toolPathSelector',\r\n templateUrl: 'toolPathSelector.html',\r\n styleUrls: ['toolPathSelector.scss']\r\n})\r\nexport class ToolPathSelectorDialog {\r\n public toolPaths: object[];\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n public imageConstants: ImageConstants,\r\n @Inject(MAT_DIALOG_DATA) public data: any\r\n ) {\r\n this.toolPaths = this.data.toolPaths;\r\n }\r\n\r\n dialogSelectedToolPath = (value?: string) => {\r\n //pass no value and it will just be closing the dialog\r\n let retObj = {\r\n operationName: value\r\n };\r\n this.dialogRef.close(retObj);\r\n };\r\n}\r\n","import {\r\n Component,\r\n EventEmitter,\r\n Output,\r\n Input,\r\n HostListener,\r\n ElementRef,\r\n ViewChild,\r\n AfterViewInit,\r\n OnChanges,\r\n SimpleChanges,\r\n OnInit\r\n} from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { Subscription } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport _ from 'lodash';\r\nimport * as $ from 'jquery';\r\nimport math from 'mathjs';\r\nimport { Utils } from '../../../service/utils';\r\nimport { Constants, MillBit } from '../../../service/constants';\r\nimport { Message } from '../../../service/dialog/message.interface';\r\nimport { Cutter_, ToolContainer, Parameters_ } from '../../../service/formulas/objects';\r\nimport { Formulas } from '../../../service/formulas/formulas';\r\nimport { ConversionFormulas } from '../../../service/formulas/conversionsFormulas';\r\nimport { CommonService } from '../../../service/common.service';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { ImageConstants } from '../../../service/image-constants';\r\n\r\ndeclare var cordova;\r\n\r\nenum CutWidthType {\r\n RADIAL_CUT_DEPTH = 'radial cut depth',\r\n STEPOVER = 'stepover',\r\n ENGAGEMENT_ANGLE = 'engagement angle'\r\n}\r\n\r\n@Component({\r\n selector: 'section-parameters',\r\n templateUrl: 'parameters.html',\r\n styleUrls: ['parameters.scss']\r\n})\r\nexport class Parameters implements AfterViewInit, OnInit, OnChanges {\r\n private subscription: Subscription;\r\n private emit: boolean = true; // This seems to be unused. Okay to remove?\r\n private origin: string = undefined;\r\n private isApp: boolean;\r\n private windowsDimensions: object = undefined;\r\n private aggressiveFlag: boolean = false;\r\n private warningAlerts: boolean = false;\r\n public currentPath: string = '';\r\n public tool: Cutter_;\r\n public parameterTypes: number = 0;\r\n public rows: any[] = [];\r\n public columns: any[] = [];\r\n public Parameters: FormGroup;\r\n public popupVisible: object;\r\n public current: MillBit;\r\n public knob: any;\r\n public knobSize: number = 400;\r\n public adocSize: number = 0;\r\n public horizontalSliderHolderWidth: number = 0;\r\n public horizontalSliderHolderHeight: number = 0;\r\n public cutWidth: number = 0;\r\n public cutDepth: number = 0;\r\n public offset: number = 0;\r\n public adocMax: number = 32;\r\n public vSliderValue: number = 0;\r\n public stepOver: number = 0;\r\n public trueMax: number = 0;\r\n public maxRDOC: number = 0;\r\n public engagmentAngelKnobOptions: object;\r\n public toolImage: string = undefined;\r\n public toolImageHeight: number = undefined;\r\n public toolImageWidth: number = undefined;\r\n public knobDisabler: boolean = true;\r\n public mapMode: number = 1;\r\n public operationToolImage: string = '';\r\n private adoc: number = undefined;\r\n private adocLocked: boolean = false;\r\n private adocLockDisabled: boolean = true;\r\n private rdoc: number = undefined;\r\n private rdocLocked: boolean = false;\r\n private rdocLockDisabled: boolean = true;\r\n private defaultEngagementAngle: number = undefined;\r\n private finMessageWarning: boolean = false;\r\n\r\n private defaultSliderRDOC: number = undefined;\r\n private defaultSliderADOC: number = undefined;\r\n public defaultSliderADOCDisabled: boolean = true;\r\n public defaultSliderRDOCDisabled: boolean = true;\r\n private adocTicks: number = 32;\r\n private overlayDivideFactor: number = 2;\r\n private sliderMax: number = 300;\r\n private warningMessageOpen: boolean = false;\r\n public sliderDisabled: boolean = true;\r\n public sliderRdocDisabled: boolean = true;\r\n private holder: string = undefined;\r\n public chamferSliders: boolean = true;\r\n private invalidEndmillModal: boolean = false;\r\n private trochoidalSlotWidthChange: boolean = false;\r\n settingsHolder: ToolContainer;\r\n public showMapModeTwo: boolean = false;\r\n\r\n @Output() parameterChange: EventEmitter = new EventEmitter();\r\n @Output() resetMaterial: EventEmitter = new EventEmitter();\r\n @Output() resetTool: EventEmitter = new EventEmitter();\r\n @Output() filterOperationPaths: EventEmitter = new EventEmitter();\r\n @Output() parameterChangeWithSpecificChild: EventEmitter = new EventEmitter();\r\n @Input() parameters: object;\r\n @ViewChild('adjusterHolder', { static: false }) elementView: ElementRef;\r\n @ViewChild('horizontalSlider', { static: true }) horizontalSliderView: ElementRef;\r\n @ViewChild('verticalSlider', { static: true }) verticalSliderView: ElementRef;\r\n @ViewChild('graph', { static: true }) graph: ElementRef;\r\n @ViewChild('teaInnerBlock', { static: false }) teaInnerBlock: ElementRef;\r\n @ViewChild('leftside', { static: false }) leftside: ElementRef;\r\n @ViewChild('toolWrapper', { static: true }) toolWrapper: ElementRef;\r\n @ViewChild('tea', { static: false }) tea: ElementRef;\r\n @ViewChild('adocSlider', { static: true }) adocSlider: ElementRef;\r\n @ViewChild('rdocSlider', { static: true }) rdocSlider: ElementRef;\r\n @ViewChild('uiknob', { static: false }) uiknob: ElementRef;\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n this.onResize();\r\n }\r\n\r\n constructor(\r\n public utils: Utils,\r\n private formBuilder: FormBuilder,\r\n public constants: Constants,\r\n private commonService: CommonService,\r\n private formulas: Formulas,\r\n private conversionFormulas: ConversionFormulas,\r\n private cache: CacheService,\r\n private imageConstants: ImageConstants\r\n ) {\r\n this.isApp = this.utils.isApp();\r\n this.toolImage = imageConstants.defaultTool;\r\n this.engagmentAngelKnobOptions = {\r\n scale: {\r\n enabled: true,\r\n type: 'dots',\r\n color: 'rgba(255,0,0,.2)',\r\n width: 2,\r\n quantity: 50,\r\n spaceWidth: 10\r\n },\r\n skin: {\r\n type: 'tron',\r\n width: 5,\r\n color: '#9C9C9C',\r\n spaceWidth: 0\r\n },\r\n readOnly: false,\r\n size: this.knobSize,\r\n animate: {\r\n enabled: true,\r\n duration: 2000,\r\n ease: 'exp'\r\n },\r\n startAngle: 0,\r\n endAngle: 360,\r\n unit: '%',\r\n barColor: 'rgba(87, 186, 133,.76)',\r\n trackWidth: 200,\r\n barWidth: 200,\r\n textColor: '#494B52',\r\n prevBarColor: 'rgba(117, 250, 102, 0.5)',\r\n trackColor: '#FFFFFF',\r\n fontSize: 'auto',\r\n subText: {\r\n enabled: true,\r\n text: ' ',\r\n color: '#494B52',\r\n font: 'auto'\r\n },\r\n step: 1,\r\n displayPrevious: true,\r\n min: 0,\r\n max: 360,\r\n notifyOnDragEnd: true,\r\n showlabels: true,\r\n maxCap: 180,\r\n dynamicOptions: true\r\n };\r\n\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n }\r\n this.Parameters = this.formBuilder.group({\r\n engagementAngle: new FormControl(0, [\r\n Validators.pattern(this.constants.DECIMAL_ONLY_REGEX),\r\n Validators.max(180),\r\n Validators.min(0)\r\n ]),\r\n stepDown: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n stepOver: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n adocdecimal: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n rdocdecimal: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n stickOut: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n stickoutPercentage: new FormControl(0, [\r\n Validators.pattern(this.constants.DECIMAL_ONLY_REGEX),\r\n Validators.min(0)\r\n ]),\r\n pitch: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n rampAngle: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n holeDiameter: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n pathDiameter: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n holeDepth: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n effectiveDiameter: new FormControl(0),\r\n chamferHeight: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n chamferWidth: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n scallopHeight: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)]),\r\n scallopWidth: new FormControl(0, [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX), Validators.min(0)])\r\n });\r\n this.popupVisible = {};\r\n\r\n // defaults\r\n this.current = this.constants.getMillBit(0);\r\n }\r\n\r\n putInView = (evt: any, alignToTop: boolean) => {\r\n //All input fields we want to align to bottom, alightTopTop false, because it was causing styling issues when aligning to top\r\n let input = evt.currentTarget;\r\n if (this.isApp) {\r\n setTimeout(() => {\r\n input.scrollIntoView(alignToTop);\r\n }, 500);\r\n }\r\n };\r\n\r\n private matchSliderToStepDown = (stepDown: number) => {\r\n if (this.currentPath === 'Trochoidal Slotting') {\r\n this.vSliderValue = stepDown * 10 * this.overlayDivideFactor;\r\n } else {\r\n this.vSliderValue = stepDown * 10;\r\n }\r\n };\r\n\r\n private updateStickOut = (stickOut: number) => {\r\n this.Parameters.get('stickOut').patchValue(math.round(stickOut, 3), { emitEvent: false });\r\n };\r\n\r\n private updateStickoutPercentage = (stickoutPercentage: number) => {\r\n this.Parameters.get('stickoutPercentage').patchValue(math.round(stickoutPercentage, 3), { emitEvent: false });\r\n };\r\n\r\n private updatePitch = (pitch: number) => {\r\n this.Parameters.get('pitch').patchValue(math.round(pitch, 3), { emitEvent: false });\r\n };\r\n\r\n private updateRampAngle = (rampleAngle: number) => {\r\n this.Parameters.get('rampAngle').patchValue(math.round(rampleAngle, 3), { emitEvent: false });\r\n };\r\n\r\n private updateEngagementAngle = (angle: number) => {\r\n this.Parameters.get('engagementAngle').patchValue(math.round(angle, 1), { emitEvent: false });\r\n };\r\n\r\n private updateHoleDiameter = (holeDiameter: number) => {\r\n this.Parameters.get('holeDiameter').patchValue(math.round(holeDiameter, 3), { emitEvent: false });\r\n };\r\n\r\n private updatePathDiameter = (pathDiameter: number) => {\r\n this.Parameters.get('pathDiameter').patchValue(math.round(pathDiameter, 3), { emitEvent: false });\r\n };\r\n\r\n private updateHoleDepthField = (holeDepth: number) => {\r\n this.Parameters.get('holeDepth').patchValue(math.round(holeDepth, 3), { emitEvent: false });\r\n };\r\n\r\n private updateEffectiveDiameter = (effectiveDiameter: number) => {\r\n this.Parameters.get('effectiveDiameter').patchValue(math.round(effectiveDiameter, 3), { emitEvent: false });\r\n };\r\n\r\n private updateChamferHeight = (chamferHeight: number) => {\r\n this.Parameters.get('chamferHeight').patchValue(math.round(chamferHeight, 3), { emitEvent: false });\r\n };\r\n\r\n private updateChamferWidth = (chamferWidth: number) => {\r\n this.Parameters.get('chamferWidth').patchValue(math.round(chamferWidth, 3), { emitEvent: false });\r\n };\r\n\r\n private updateScallopHeight = (scallopHeight: number) => {\r\n this.Parameters.get('scallopHeight').patchValue(math.round(scallopHeight, 3), { emitEvent: false });\r\n };\r\n\r\n private updateScallopWidth = (scallopWidth: number) => {\r\n this.Parameters.get('scallopWidth').patchValue(math.round(scallopWidth, 4), { emitEvent: false });\r\n };\r\n\r\n private updateADOC = (adocdecimal: number, notifyField: boolean = true) => {\r\n if (!this.adocLocked) {\r\n let value = math.round(adocdecimal, 4);\r\n if (notifyField) {\r\n this.Parameters.get('adocdecimal').patchValue(value, { emitEvent: false });\r\n }\r\n\r\n // if adocslider and rdocslider is 0,0 position, then no tool is chosen yet\r\n if (!this.adocSlider['value'] && !this.rdocSlider['value'] && !this.settingsHolder.tool) {\r\n this.defaultSliderADOCDisabled = true;\r\n this.defaultSliderRDOCDisabled = true;\r\n } else {\r\n if (value !== this.adoc) {\r\n this.defaultSliderADOCDisabled = false;\r\n } else {\r\n this.defaultSliderADOCDisabled = true;\r\n }\r\n }\r\n }\r\n };\r\n\r\n private updateRDOC = (rdocdecimal: number, emitEvent: boolean = false, updateDefaults: boolean = false) => {\r\n if (!this.rdocLocked) {\r\n let value = math.round(rdocdecimal, 4);\r\n this.Parameters.get('rdocdecimal').patchValue(math.round(rdocdecimal, 4), { emitEvent: emitEvent });\r\n if (!this.adocSlider['value'] && !this.rdocSlider['value'] && !this.settingsHolder.tool) {\r\n this.defaultSliderADOCDisabled = true;\r\n this.defaultSliderRDOCDisabled = true;\r\n } else {\r\n if (updateDefaults) {\r\n this.rdoc = value;\r\n } else {\r\n if (value !== this.rdoc) {\r\n this.defaultSliderRDOCDisabled = false;\r\n } else {\r\n this.defaultSliderRDOCDisabled = true;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private updateStepOver = (stepOver: number, updateDefault: boolean = false) => {\r\n if (!this.rdocLocked) {\r\n let place = 3;\r\n if (this.settingsHolder.currenttoolpath && this.settingsHolder.currenttoolpath.operationName === '3D Surfacing') {\r\n place = 4;\r\n }\r\n\r\n if (updateDefault) {\r\n this.defaultSliderRDOC = stepOver;\r\n }\r\n this.Parameters.get('stepOver').patchValue(math.round(stepOver, place), { emitEvent: true });\r\n }\r\n };\r\n\r\n private updateStepDown = (stepDown: number, emit: boolean = true) => {\r\n this.Parameters.get('stepDown').patchValue(math.round(stepDown, 3), { emitEvent: emit });\r\n };\r\n\r\n private adocReset = () => {\r\n this.Parameters.get('adocdecimal').patchValue(this.adoc, { emitEvent: true });\r\n this.aggressiveFlag = false;\r\n this.warningAlerts = true;\r\n this.onVerticalSliderChange({ value: this.defaultSliderADOC }, false);\r\n this.adocSlider['value'] = this.defaultSliderADOC;\r\n this.vSliderValue = this.defaultSliderADOC;\r\n this.defaultSliderADOCDisabled = true;\r\n this.adocLocked = false;\r\n };\r\n\r\n private lockAdoc = () => {\r\n this.adocLocked = !this.adocLocked;\r\n this.sliderDisabled = this.adocLocked;\r\n };\r\n\r\n private rdocReset = () => {\r\n this.Parameters.get('rdocdecimal').patchValue(this.rdoc, { emitEvent: true });\r\n this.Parameters.get('stepOver').patchValue(this.stepOver, { emitEvent: true });\r\n this.rdocSlider['value'] = this.defaultSliderRDOC;\r\n this.aggressiveFlag = false;\r\n this.warningAlerts = true;\r\n this.onHorizontalSliderChange({ value: this.defaultSliderRDOC }, false, false);\r\n this.defaultSliderRDOCDisabled = true;\r\n this.updateEngagementAngle(this.defaultEngagementAngle);\r\n this.rdocLocked = false;\r\n };\r\n\r\n private lockRdoc = () => {\r\n this.rdocLocked = !this.rdocLocked;\r\n this.sliderRdocDisabled = this.rdocLocked;\r\n };\r\n\r\n getRows = (): any[] => {\r\n return this.rows;\r\n };\r\n\r\n getColumns = (): any[] => {\r\n return this.columns;\r\n };\r\n\r\n valueChange = ($event: { value: number; event: string }) => {\r\n if ($event.event) {\r\n // only change it if there is a eventType, else its autoset by some other field\r\n if ($event.value !== this.settingsHolder.parameters.engagementAngle) {\r\n // this to prevent wheel mouse event coming back multiple times\r\n this.updateEngagementAngle($event.value);\r\n this.engagementAngleChange(this.Parameters.get('engagementAngle').value);\r\n }\r\n }\r\n };\r\n\r\n onVerticalSliderChange = (\r\n event: any,\r\n notify: boolean = true,\r\n convert: boolean = true,\r\n updateCutWidth: boolean = true,\r\n setRdoc: boolean = true,\r\n showWarnings: boolean = true\r\n ) => {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('full slotting') > -1\r\n ) {\r\n this.convertVSliderToStepDownField(event.value, false, true, updateCutWidth, setRdoc, showWarnings);\r\n this.updateADOC((this.Parameters.get('stepDown').value * this.settingsHolder.tool.cutterDiameter) / 100);\r\n } else if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('helical plunge') < 0\r\n ) {\r\n this.convertVSliderToStepDownField(event.value, notify, convert, showWarnings);\r\n this.setRDOC();\r\n } else {\r\n if (this.warningAlerts) {\r\n if (event.value === 0) {\r\n let message: Message = {\r\n title: 'No Hole Specified',\r\n message: 'Your hole depth must be greater than zero for the hole to exist!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.setHoleDepth(false);\r\n } else {\r\n if (event.value === 0) {\r\n let message: Message = {\r\n title: 'No Hole Specified',\r\n message: 'Your hole depth must be greater than zero for the hole to exist!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n this.setHoleDepth(false);\r\n } else {\r\n let holeDepth = (this.settingsHolder.tool.lengthOfCut * event.value) / this.trueMax;\r\n this.Parameters.get('stepDown').patchValue(event.value, { emitEvent: true });\r\n this.updateHoleDepthField(holeDepth);\r\n this.emitData();\r\n }\r\n }\r\n }\r\n }\r\n if (this.isApp && notify) {\r\n this.utils.apptentiveEngage('Axial Depth (Slider)');\r\n }\r\n };\r\n\r\n onHorizontalSliderChange = (event: any, notify: boolean = true, updateRDOC: boolean = true) => {\r\n this.updateStepOver(event.value);\r\n\r\n let roundFactor = this.formulas.emRoundFactor(this.settingsHolder.tool.cutterDiameter);\r\n this.cutWidth = (this.settingsHolder.tool.cutterDiameter * event.value) / 100;\r\n\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('finishing') > -1\r\n ) {\r\n this.cutWidth = this.finMessage(CutWidthType.RADIAL_CUT_DEPTH, this.cutWidth);\r\n }\r\n\r\n if (updateRDOC) {\r\n this.updateRDOC(roundFactor * math.round(this.cutWidth / roundFactor, 2), notify);\r\n }\r\n\r\n if (this.cutWidth >= this.settingsHolder.tool.cutterDiameter) {\r\n if (!this.warningMessageOpen) {\r\n this.slotMessage('RDOC');\r\n }\r\n }\r\n\r\n if (updateRDOC) {\r\n this.updateCutWidth(event.value);\r\n } else {\r\n this.updateCutWidth(event.value, this.defaultEngagementAngle);\r\n }\r\n\r\n setTimeout(() => {\r\n this.maxRDOCmessage();\r\n });\r\n\r\n if (this.isApp && event) {\r\n this.utils.apptentiveEngage('Radial Depth (Slider)');\r\n }\r\n };\r\n\r\n private setTheSlideBars = () => {\r\n if (this.isApp) {\r\n this.knobSize = $(this.teaInnerBlock.nativeElement).height();\r\n } else {\r\n let sliderKnobWidth = this.horizontalSliderView.nativeElement;\r\n $(sliderKnobWidth)\r\n .find('.mat-slider-wrapper')\r\n .width(this.horizontalSliderHolderWidth);\r\n let verticalSliderTrackWidth = $(sliderKnobWidth)\r\n .find('.mat-slider-track-wrapper')\r\n .height();\r\n\r\n let verticalSliderKnobWidth = $(this.horizontalSliderView.nativeElement)\r\n .find('.mat-slider-thumb')\r\n .height();\r\n let verticalSliderKnobHeight = $(this.horizontalSliderView.nativeElement)\r\n .find('.mat-slider-thumb')\r\n .width();\r\n\r\n $(this.verticalSliderView.nativeElement)\r\n .find('.mat-slider-thumb')\r\n .css({\r\n width: verticalSliderKnobWidth,\r\n height: verticalSliderKnobHeight\r\n });\r\n\r\n if (verticalSliderKnobWidth === 0) {\r\n $(this.verticalSliderView.nativeElement)\r\n .find('.mat-slider-thumb')\r\n .css({\r\n width: $(this.horizontalSliderView.nativeElement).find('.mat-slider-thumb')[0].offsetHeight\r\n });\r\n }\r\n\r\n $(this.verticalSliderView.nativeElement)\r\n .find('.mat-slider-track-wrapper')\r\n .width(verticalSliderTrackWidth);\r\n\r\n this.adocSize =\r\n this.horizontalSliderView.nativeElement.children[0].children[0].children[2].children[1].offsetWidth -\r\n this.horizontalSliderView.nativeElement.children[0].children[0].children[2].children[1].offsetWidth * 0.19 -\r\n 13.8;\r\n\r\n this.knobSize = $(this.teaInnerBlock.nativeElement).height();\r\n\r\n if (this.utils.detectIE()) {\r\n //strict IE fixes, does not apply to other browsers\r\n\r\n setTimeout(() => {\r\n this.knobSize = $(this.teaInnerBlock.nativeElement).height();\r\n $('.behindKnob').height($('.behindKnobTrack').height());\r\n $('.knobSkinned').css({\r\n left: '-12%',\r\n top: '5%'\r\n });\r\n }, 1000);\r\n\r\n $(this.toolWrapper.nativeElement).css({\r\n height: $(this.leftside.nativeElement).height() - $(this.leftside.nativeElement).height() * 0.05 + 'px'\r\n });\r\n $(this.elementView.nativeElement).css({\r\n position: 'relative'\r\n });\r\n }\r\n }\r\n };\r\n\r\n onResize = () => {\r\n if (!this.isApp) {\r\n this.horizontalSliderHolderWidth = $(this.graph.nativeElement).width(); // 0 cause the page in mobile does not exist yet\r\n this.horizontalSliderHolderHeight = $(this.leftside.nativeElement).height();\r\n\r\n this.setTheSlideBars();\r\n } else {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n this.horizontalSliderHolderWidth = this.windowsDimensions['w']; // 0 cause the page in mobile does not exist yet\r\n this.horizontalSliderHolderHeight = this.windowsDimensions['h'];\r\n this.setTheSlideBars();\r\n });\r\n }\r\n };\r\n\r\n convertVSliderToStepDownField = (\r\n value: number,\r\n notify: boolean = true,\r\n updateStepDown: boolean = true,\r\n updateCutWidth: boolean = true,\r\n setRdoc: boolean = true,\r\n showWarnings: boolean = true\r\n ) => {\r\n if (updateStepDown) {\r\n this.updateStepDown((value / this.sliderMax) * 100 * this.overlayDivideFactor, false);\r\n }\r\n this.calculateStepDown(notify, updateCutWidth, setRdoc, showWarnings);\r\n };\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n this.rows.length =\r\n (changes['adocMax'].currentValue % 1 != 0\r\n ? math.ceil(changes['adocMax'].currentValue * 10)\r\n : math.ceil(changes['adocMax'].currentValue)) * 2;\r\n this.Parameters.get('adocdecimal').setValidators([\r\n Validators.pattern(this.constants.DECIMAL_ONLY_REGEX),\r\n Validators.max(changes['adocMax'].currentValue),\r\n Validators.min(0)\r\n ]); // set the max to the tool\r\n }\r\n\r\n engagementAngleChange = (value: number) => {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('full slotting') > -1\r\n ) {\r\n this.setSlotting(false);\r\n } else if (value >= 180) {\r\n if (!this.warningMessageOpen) {\r\n this.slotMessage('Engagement Angle');\r\n }\r\n } else if (value < 180 && value > 0) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('finishing') > -1\r\n ) {\r\n value = this.conversionFormulas.convertRdocToTea(\r\n this.finMessage(CutWidthType.ENGAGEMENT_ANGLE, value),\r\n this.settingsHolder.tool.cutterDiameter\r\n );\r\n }\r\n\r\n this.cutWidth = this.conversionFormulas.convertTeaToRdoc(value, this.settingsHolder.tool.cutterDiameter);\r\n\r\n // need to get wallrad from recommendations\r\n let recFormType = 'type1';\r\n let insideCornerRadiusWall = undefined;\r\n\r\n if (this.settingsHolder.recommendationForm) {\r\n if (this.settingsHolder.recommendationFields === 1) {\r\n insideCornerRadiusWall = this.settingsHolder.recommendationForm.get('type1').get('insideCornerRadiusOfWall')\r\n .value;\r\n } else if (this.settingsHolder.recommendationFields === 2) {\r\n insideCornerRadiusWall = this.settingsHolder.recommendationForm.get('type2').get('trochoidalSlotWidth').value;\r\n recFormType = 'type2';\r\n }\r\n\r\n if (insideCornerRadiusWall === '') {\r\n insideCornerRadiusWall = undefined;\r\n }\r\n\r\n if (insideCornerRadiusWall) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('trochoidal slotting') > -1\r\n ) {\r\n this.cutWidth = this.conversionFormulas.convertTeaToRdoc(\r\n value,\r\n this.settingsHolder.tool.cutterDiameter,\r\n insideCornerRadiusWall / 2\r\n );\r\n } else if (\r\n this.settingsHolder.recommendationForm\r\n .get(recFormType)\r\n .get('insideCornerType')\r\n .value.toLowerCase('ipm inside corner')\r\n .indexOf() > -1\r\n ) {\r\n this.cutWidth = this.conversionFormulas.convertTeaToRdoc(\r\n value,\r\n this.settingsHolder.tool.cutterDiameter,\r\n insideCornerRadiusWall\r\n );\r\n }\r\n }\r\n }\r\n\r\n this.updateRDOC(this.cutWidth);\r\n this.updateCutWidth(undefined, value); // this should recalculate the stepOver\r\n }\r\n };\r\n\r\n emitData = (specificChild: string = undefined) => {\r\n if (!this.trochoidalSlotWidthChange) {\r\n let data = {\r\n toolPath: this.settingsHolder.currenttoolpath,\r\n cutterDiameter: this.settingsHolder.tool ? this.settingsHolder.tool.cutterDiameter : 0,\r\n stickOut: this.Parameters.get('stickOut').value,\r\n stickoutPercentage: this.Parameters.get('stickoutPercentage').value,\r\n pitch: this.Parameters.get('pitch').value,\r\n rampAngle: this.Parameters.get('rampAngle').value,\r\n holeDiameter: this.Parameters.get('holeDiameter').value,\r\n pathDiameter: this.Parameters.get('pathDiameter').value,\r\n holeDepth: this.Parameters.get('holeDepth').value,\r\n effectiveDiameter: this.Parameters.get('effectiveDiameter').value,\r\n chamferHeight: this.Parameters.get('chamferHeight').value,\r\n chamferWidth: this.Parameters.get('chamferWidth').value,\r\n scallopHeight: this.Parameters.get('scallopHeight').value,\r\n scallopWidth: this.Parameters.get('scallopWidth').value,\r\n cutWidth: this.cutWidth,\r\n cutDepth: this.cutDepth,\r\n stepDown: this.Parameters.get('stepDown').value,\r\n stepOver: this.Parameters.get('stepOver').value,\r\n adocdecimal: this.Parameters.get('adocdecimal').value,\r\n rdocdecimal: this.Parameters.get('rdocdecimal').value,\r\n engagementAngle: this.Parameters.get('engagementAngle').value,\r\n vSliderValue: this.vSliderValue\r\n };\r\n\r\n if (!!!specificChild) {\r\n if (this.origin) {\r\n this.parameterChange.emit({ data: data, origin: this.origin });\r\n } else {\r\n this.parameterChange.emit({ data: data });\r\n }\r\n } else {\r\n this.parameterChangeWithSpecificChild.emit({\r\n specificChild: specificChild,\r\n data: data,\r\n origin: this.origin\r\n });\r\n }\r\n }\r\n };\r\n\r\n ngOnInit() {\r\n this.Parameters.get('stickOut')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (this.warningAlerts) {\r\n if (value >= this.settingsHolder.tool.overallLength) {\r\n let message: Message = {\r\n title: 'Stick-out too Far!',\r\n message: 'Stick-out must be less than endmill overall length!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n } else if (value > this.settingsHolder.tool.lengthOfCut) {\r\n this.updateStickoutPercentage((100 * value) / this.settingsHolder.tool.cutterDiameter);\r\n this.emitData('recommendations');\r\n } else if (value > 0) {\r\n let message: Message = {\r\n title: 'Stick-out too Close!',\r\n message: 'Stick-out must be greater than endmill length of cut!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Stick Out (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('stickoutPercentage')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (this.warningAlerts) {\r\n if (value / 100 >= this.settingsHolder.tool.overallLength / this.settingsHolder.tool.cutterDiameter) {\r\n let message: Message = {\r\n title: 'Stick-out too Far!',\r\n message: 'Stick-out must be less than endmill overall length!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n } else if (value / 100 > this.settingsHolder.tool.lengthOfCut / this.settingsHolder.tool.cutterDiameter) {\r\n this.updateStickOut((value * this.settingsHolder.tool.cutterDiameter) / 100);\r\n this.emitData('recommendations');\r\n } else if (value > 0) {\r\n let message: Message = {\r\n title: 'Stick-out too Close!',\r\n message: 'Stick-out must be greater than endmill length of cut!'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Stick Out (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('chamferHeight')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (this.Parameters.get('effectiveDiameter').value > 0) {\r\n let maxChamferWidth =\r\n Math.floor((500 * (this.Parameters.get('effectiveDiameter').value - this.settingsHolder.tool.tip)) / 2) /\r\n 500;\r\n let maxChamferHeight =\r\n Math.floor((500 * maxChamferWidth) / math.tan((math.PI * this.settingsHolder.tool.taper) / 180)) / 500;\r\n\r\n if (value >= maxChamferHeight) {\r\n let messageStr = 'Chamfer height must less than or equal to ' + maxChamferHeight + '\\x22!';\r\n\r\n let message: Message = {\r\n title: 'Chamfer Height too Large',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error', () => {\r\n this.setChamfer();\r\n });\r\n }\r\n }\r\n }\r\n\r\n let chamferWidth = value * math.tan((math.PI * this.settingsHolder.tool.taper) / 180);\r\n\r\n this.updateChamferWidth(chamferWidth);\r\n this.emitData('recommendations');\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Chamfer Height (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('chamferWidth')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (this.Parameters.get('effectiveDiameter').value > 0) {\r\n let maxChamferWidth =\r\n math.floor((500 * (this.Parameters.get('effectiveDiameter').value - this.settingsHolder.tool.tip)) / 2) /\r\n 500;\r\n\r\n if (value >= maxChamferWidth) {\r\n let messageStr = 'Chamfer width must less than or equal to ' + maxChamferWidth + '\\x22!';\r\n\r\n let message: Message = {\r\n title: 'Chamfer Width too Large',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error', () => {\r\n this.setChamfer();\r\n });\r\n }\r\n }\r\n }\r\n\r\n let chamferHeight = value / math.tan((math.PI * this.settingsHolder.tool.taper) / 180);\r\n this.updateChamferHeight(chamferHeight);\r\n this.emitData('recommendations');\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Chamfer Width (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('engagementAngle')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n this.engagementAngleChange(value);\r\n this.emitData('recommendations');\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Engagement Angle (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('adocdecimal')\r\n .valueChanges //the same box is used for scallop width\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (this.warningAlerts) {\r\n this.cutDepth = value;\r\n if (this.cutDepth > 0) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') > -1\r\n ) {\r\n // 3D Surfacing only\r\n if (this.cutDepth >= this.settingsHolder.tool.cutterDiameter / 2) {\r\n let message: Message = {\r\n title: 'ADOC too High!',\r\n message: 'Axial cut depth must less than the radius of the ball nose endmill!'\r\n };\r\n this.utils.openDialog(message, 'error', () => {\r\n this.setScallop(false); // already handled the stepover change\r\n this.cutDepth = math.round(this.Parameters.get('adocdecimal').value, 3);\r\n this.adocReset();\r\n });\r\n }\r\n\r\n if (this.Parameters.get('scallopHeight').value > 0) {\r\n let scallopHeight = this.Parameters.get('scallopHeight').value;\r\n let scallopWidth = 0;\r\n\r\n if (scallopHeight / 1000000 > value) {\r\n scallopHeight = 1000000 * value;\r\n scallopWidth =\r\n math.floor(\r\n 10000 *\r\n this.formulas.calculateScallopStepOver(this.settingsHolder.tool.cutterDiameter, scallopHeight)\r\n ) / 10000;\r\n this.updateScallopHeight(scallopHeight);\r\n this.updateScallopWidth(scallopWidth);\r\n }\r\n }\r\n } else if (value > 0) {\r\n if (this.Parameters.get('effectiveDiameter').value > 0) {\r\n let maxChamferWidth =\r\n math.floor(\r\n (500 * (this.Parameters.get('effectiveDiameter').value - this.settingsHolder.tool.tip)) / 2\r\n ) / 500;\r\n if (this.Parameters.get('scallopWidth').value >= maxChamferWidth) {\r\n let messageStr = 'Chamfer width must less than or equal to ' + maxChamferWidth + '!';\r\n\r\n this.setChamfer(false);\r\n let message: Message = {\r\n title: 'Chamfer Width too Large!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName === 'Chamfering'\r\n ) {\r\n let chamferHeight = value / math.tan((math.PI * this.settingsHolder.tool.taper) / 180);\r\n this.updateScallopHeight(chamferHeight);\r\n }\r\n }\r\n\r\n if (this.settingsHolder.tool.lengthOfCut < this.cutDepth) {\r\n let message: Message = {\r\n title: 'ADOC too High!',\r\n message: 'Axial cut depth must not exceed endmill length of cut!'\r\n };\r\n this.utils.openDialog(message, 'error', () => {\r\n this.adocReset();\r\n });\r\n\r\n this.cutDepth = this.settingsHolder.tool.lengthOfCut;\r\n }\r\n\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') <= -1\r\n ) {\r\n this.updateADOC(this.cutDepth, false);\r\n let stepDown = (100 * value) / this.settingsHolder.tool.cutterDiameter;\r\n\r\n this.matchSliderToStepDown(stepDown);\r\n this.updateCutDepth(false);\r\n }\r\n this.setRDOC(undefined, undefined, true);\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') > -1\r\n ) {\r\n this.updateCutDepth(false);\r\n this.emitData('recommendations');\r\n }\r\n } else {\r\n // user didn't enter a correct number so just make reset button available\r\n this.defaultSliderADOCDisabled = false;\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Axial Depth (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('rdocdecimal')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (value > 0) {\r\n this.cutWidth = this.Parameters.get('rdocdecimal').value;\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('full slotting') > -1\r\n ) {\r\n this.setSlotting(false);\r\n } else if (this.cutWidth >= this.settingsHolder.tool.cutterDiameter) {\r\n if (!this.warningMessageOpen) {\r\n this.slotMessage('RDOC');\r\n }\r\n } else if (this.cutWidth < this.settingsHolder.tool.cutterDiameter && this.cutWidth > 0) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('finishing') > -1\r\n ) {\r\n this.cutWidth = this.finMessage(CutWidthType.RADIAL_CUT_DEPTH, this.cutWidth);\r\n }\r\n }\r\n\r\n //set the sliders, need to calculate the stepOver\r\n this.updateCutWidth(); // this should recalculate the stepOver\r\n this.updateRDOC(this.cutWidth, false);\r\n setTimeout(() => {\r\n this.maxRDOCmessage();\r\n });\r\n } else {\r\n // user didn't enter a correct number so just make reset button available\r\n this.defaultSliderRDOCDisabled = false;\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Radial Depth (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('stepOver')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (\r\n (this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('full slotting') > -1) ||\r\n (this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('helical plunge') > -1)\r\n ) {\r\n this.setSlotting(false);\r\n } else if (value >= 100) {\r\n if (!this.warningMessageOpen) {\r\n this.slotMessage('Stepover');\r\n }\r\n } else if (value < 100 && value > 0) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('finishing') > -1\r\n ) {\r\n value = (100 * this.finMessage(CutWidthType.STEPOVER, value)) / this.settingsHolder.tool.cutterDiameter;\r\n }\r\n this.updateRDOC((value * this.settingsHolder.tool.cutterDiameter) / 100);\r\n this.updateCutWidth(value);\r\n }\r\n this.updateEngagementAngle(\r\n this.conversionFormulas.convertRdocToTea(\r\n this.Parameters.get('rdocdecimal').value,\r\n this.settingsHolder.tool.cutterDiameter\r\n )\r\n );\r\n setTimeout(() => {\r\n if (\r\n this.currentPath !== 'Full Slotting' &&\r\n this.currentPath !== 'Chamfering' &&\r\n this.currentPath !== '3D Surfacing' &&\r\n this.currentPath !== 'Helical Plunge'\r\n ) {\r\n this.maxRDOCmessage();\r\n }\r\n });\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') > -1\r\n ) {\r\n this.emitData('recommendations');\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Radial Depth (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('stepDown')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n this.calculateStepDown();\r\n this.matchSliderToStepDown(value);\r\n\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') > -1\r\n ) {\r\n this.emitData('recommendations');\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Axial Depth (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('holeDepth')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (this.warningAlerts) {\r\n if (value > 0) {\r\n if (value > this.settingsHolder.tool.lengthOfCut) {\r\n let messageStr = 'Your hole depth is too deep for the selected endmill!';\r\n messageStr = messageStr + ' The depth must be less than the endmill length of cut.';\r\n\r\n let message: Message = {\r\n title: 'Hole too Deep!',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n } else {\r\n this.vSliderValue = (this.trueMax * value) / this.settingsHolder.tool.lengthOfCut; // reverse of calculating the holedepth\r\n this.Parameters.get('stepDown').patchValue(this.vSliderValue, { emitEvent: false });\r\n this.emitData('recommendations');\r\n }\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Hole Depth (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('pathDiameter')\r\n .valueChanges //affects the pitch + hole\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (value > 0) {\r\n let cornerRadius = 0;\r\n if (this.settingsHolder.tool.cornerRadius > 0) {\r\n cornerRadius = this.settingsHolder.tool.cornerRadius;\r\n }\r\n\r\n if (value >= this.settingsHolder.tool.cutterDiameter - 2 * cornerRadius) {\r\n let messageStr = 'Your path diameter is too large for the selected endmill!';\r\n messageStr =\r\n messageStr +\r\n ' Keep your path diameter less than ' +\r\n (this.settingsHolder.tool.cutterDiameter - 2 * cornerRadius) +\r\n ' to avoid';\r\n messageStr = messageStr + ' leaving material in the center of the hole.';\r\n\r\n let message: Message = {\r\n title: 'Path Diameter too Large!',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n } else {\r\n this.updateHoleDiameter(value + this.settingsHolder.tool.cutterDiameter);\r\n let rampAngle = (math.PI * this.Parameters.get('rampAngle').value) / 180;\r\n this.updatePitch(this.formulas.calculateRamp2Pitch(rampAngle, value));\r\n this.emitData('recommendations');\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Path Diameter (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('holeDiameter')\r\n .valueChanges //affects the pitch + hole\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (value > 0) {\r\n let cornerRadius = 0;\r\n\r\n if (this.settingsHolder.tool.cornerRadius > 0) {\r\n cornerRadius = this.settingsHolder.tool.cornerRadius;\r\n }\r\n\r\n if (value >= 2 * (this.settingsHolder.tool.cutterDiameter - cornerRadius)) {\r\n let messageStr = 'Your hole diameter is too large for the selected endmill!
';\r\n messageStr =\r\n messageStr +\r\n 'Keep your hole diameter less than ' +\r\n 2 * (this.settingsHolder.tool.cutterDiameter - cornerRadius) +\r\n '\\x22 to avoid
';\r\n messageStr = messageStr + 'leaving material in the center of the hole.';\r\n let message: Message = {\r\n title: 'Hole too Large!',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n } else if (value <= this.settingsHolder.tool.cutterDiameter) {\r\n let messageStr = 'Your hole diameter is too small for the selected endmill!
';\r\n messageStr = messageStr + 'You must enter a hole diameter that is
';\r\n messageStr = messageStr + 'greater than ' + this.settingsHolder.tool.cutterDiameter + '\\x22.';\r\n\r\n let message: Message = {\r\n title: 'Hole too Small!',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n } else {\r\n this.updatePathDiameter(Number(value) - Number(this.settingsHolder.tool.cutterDiameter));\r\n let rampAngle = (math.PI * Number(this.Parameters.get('rampAngle').value)) / 180;\r\n\r\n let pathDiameter = this.Parameters.get('pathDiameter').value;\r\n this.updatePitch(this.formulas.calculateRamp2Pitch(rampAngle, pathDiameter));\r\n this.emitData('recommendations');\r\n // need to update slider to correct\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Hole Diameter (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('pitch')\r\n .valueChanges //affects the pitch + hole\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (value > 0) {\r\n let rampAngle =\r\n (180 * this.formulas.calculatePitch2Ramp(Number(value), this.Parameters.get('pathDiameter').value)) /\r\n math.PI;\r\n this.updateRampAngle(rampAngle);\r\n this.emSelection();\r\n this.emitData('recommendations');\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Pitch (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('rampAngle')\r\n .valueChanges //affects the pitch + hole\r\n .pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (value > 0) {\r\n let pitch = this.formulas.calculateRamp2Pitch(\r\n (math.PI * value) / 180,\r\n Number(this.Parameters.get('pathDiameter').value)\r\n );\r\n this.updatePitch(pitch);\r\n this.emSelection();\r\n this.emitData('recommendations');\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Ramp Angle (Numeric)');\r\n }\r\n }\r\n });\r\n\r\n this.Parameters.get('scallopHeight')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName\r\n .toLowerCase()\r\n .toLowerCase()\r\n .indexOf('3d surfacing') > -1\r\n ) {\r\n if (this.Parameters.get('adocdecimal').value <= 0) {\r\n this.setADOC();\r\n }\r\n let axDepth = this.Parameters.get('adocdecimal').value;\r\n\r\n if (value > 0) {\r\n let scallopWidth =\r\n math.floor(\r\n 10000 * this.formulas.calculateScallopStepOver(this.settingsHolder.tool.cutterDiameter, value)\r\n ) / 10000;\r\n\r\n if (value > 1000000 * axDepth) {\r\n let messageStr = 'Scallop height must not exceed axial depth of cut!';\r\n value = 1000000 * axDepth;\r\n scallopWidth =\r\n math.floor(\r\n 10000 * this.formulas.calculateScallopStepOver(this.settingsHolder.tool.cutterDiameter, value)\r\n ) / 10000;\r\n\r\n if (this.warningAlerts) {\r\n let message: Message = {\r\n title: 'Scallop too High!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n this.updateScallopHeight(value); // only change it if this is true\r\n }\r\n\r\n this.updateScallopWidth(scallopWidth);\r\n }\r\n } else if (value > 0) {\r\n if (this.Parameters.get('effectiveDiameter').value > 0) {\r\n let maxChamferWidth =\r\n math.floor(\r\n (500 * (this.Parameters.get('effectiveDiameter').value - this.settingsHolder.tool.tip)) / 2\r\n ) / 500;\r\n let maxChamferHeight =\r\n math.floor((500 * maxChamferWidth) / math.tan((math.PI * this.settingsHolder.tool.taper) / 180)) / 500;\r\n\r\n if (value >= maxChamferHeight) {\r\n let messageStr = 'Chamfer height must less than or equal to ' + maxChamferHeight + '!';\r\n\r\n this.setChamfer(false);\r\n if (this.warningAlerts) {\r\n let message: Message = {\r\n title: 'Chamfer Height too Large!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n }\r\n\r\n let chamferWidth = value * math.tan((math.PI * this.settingsHolder.tool.taper) / 180);\r\n this.updateADOC(chamferWidth);\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Scallop Height (Numeric)');\r\n }\r\n }\r\n this.emitData('recommendations');\r\n });\r\n\r\n this.Parameters.get('scallopWidth')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n let scallopWidth = value;\r\n //scallopHeightBox.Text = \"\";\r\n if (scallopWidth > 0) {\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName === '3D Surfacing'\r\n ) {\r\n if (this.Parameters.get('adocdecimal').value <= 0) {\r\n this.setADOC();\r\n }\r\n\r\n let axDepth = this.Parameters.get('adocdecimal').value;\r\n\r\n if (scallopWidth > 0) {\r\n let scallopHeight = math.ceil(\r\n this.formulas.calculateScallopHeight(this.settingsHolder.tool.cutterDiameter, scallopWidth)\r\n );\r\n\r\n if (scallopHeight > 1000000 * axDepth) {\r\n scallopHeight = 1000000 * axDepth;\r\n scallopWidth =\r\n math.floor(\r\n 10000 *\r\n this.formulas.calculateScallopStepOver(this.settingsHolder.tool.cutterDiameter, scallopHeight)\r\n ) / 10000;\r\n\r\n let messageStr = 'Scallop height must not exceed axial depth of cut!';\r\n\r\n if (this.warningAlerts) {\r\n let message: Message = {\r\n title: 'Scallop too High!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n this.updateScallopHeight(scallopHeight);\r\n }\r\n } else if (scallopWidth > 0) {\r\n if (this.Parameters.get('effectiveDiameter').value > 0) {\r\n let maxChamferWidth =\r\n math.floor(\r\n (500 * (Number(this.Parameters.get('effectiveDiameter').value) - this.settingsHolder.tool.tip)) / 2\r\n ) / 500;\r\n\r\n if (scallopWidth >= maxChamferWidth) {\r\n let messageStr = 'Chamfer width must less than or equal to ' + maxChamferWidth + '\\x22!';\r\n\r\n this.setChamfer();\r\n if (this.warningAlerts) {\r\n let message: Message = {\r\n title: 'Chamfer Width too Large!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n }\r\n\r\n let chamferHeight = scallopWidth / math.tan((math.PI * this.settingsHolder.tool.taper) / 180);\r\n this.updateADOC(chamferHeight);\r\n }\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Scallop Width (Numeric)');\r\n }\r\n this.emitData('recommendation');\r\n });\r\n\r\n this.Parameters.get('effectiveDiameter')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n value = Number(value);\r\n if (value) {\r\n if (value > 0) {\r\n if (value > this.settingsHolder.tool.cutterDiameter) {\r\n value = math.ceil(100 * (this.settingsHolder.tool.cutterDiameter + this.settingsHolder.tool.tip)) / 200;\r\n\r\n let messageStr = 'Effective cutting diameter must not exceed endmill diameter!';\r\n if (this.warningAlerts) {\r\n let message: Message = {\r\n title: 'Effective Diameter too Large!',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n this.updateEffectiveDiameter(value);\r\n } else if (value <= this.settingsHolder.tool.tip) {\r\n let messageStr = 'Effective cutting diameter must be greater than tip diameter!';\r\n value = math.ceil(100 * (this.settingsHolder.tool.cutterDiameter + this.settingsHolder.tool.tip)) / 200;\r\n if (this.warningAlerts) {\r\n let message: Message = {\r\n title: 'Effective Diameter too Small!',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n }\r\n this.updateEffectiveDiameter(value);\r\n }\r\n\r\n this.setChamfer();\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Effective Diameter (Numeric)');\r\n }\r\n }\r\n });\r\n }\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.sliderRdocDisabled = true;\r\n this.sliderDisabled = true;\r\n this.rows.length = 0;\r\n\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option') && res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n if (res.hasOwnProperty('option') && res.option === 'FeedInsideSlotChange') {\r\n this.settingsHolder.recommendationFields = 2;\r\n this.settingsHolder.recommendationForm = res.value;\r\n }\r\n if (\r\n res.hasOwnProperty('option') &&\r\n (res.option === 'parameters' ||\r\n res.option === 'resetMaterial' ||\r\n res.option === 'trochoidalSlotWidthChange' ||\r\n res.option === 'insideCornerChange' ||\r\n res.option === 'switchedFromChamferingTool')\r\n ) {\r\n if (res.option === 'trochoidalSlotWidthChange') {\r\n this.trochoidalSlotWidthChange = true;\r\n }\r\n\r\n let insideCornerChange = !!res.insideCornerValueChange || res.option === 'insideCornerChange';\r\n\r\n if (res.option === 'resetMaterial' || res.option === 'switchedFromChamferingTool') {\r\n this.resetParameters();\r\n }\r\n if (\r\n (!res.workHoldingChange && !res.maxRPMIPMChange) ||\r\n this.trochoidalSlotWidthChange ||\r\n insideCornerChange\r\n ) {\r\n // changing holder SHOULD not change the Parameters section, would change recommendation calculations but not Parameters\r\n\r\n this.settingsHolder = res.value;\r\n this.emit = res.emit;\r\n this.origin = res.origin;\r\n this.warningAlerts = res.warningAlerts;\r\n\r\n // got notified!\r\n if (this.settingsHolder.tool) {\r\n this.toolSwap();\r\n }\r\n\r\n //before anything happens, let check if the material allows this tool\r\n let materialIdsList = this.settingsHolder.tool ? this.settingsHolder.tool.materialIds : undefined;\r\n let theMaterial = this.settingsHolder.material ? this.settingsHolder.material : undefined;\r\n let theHolder = this.settingsHolder.machine ? this.settingsHolder.machine.holder : undefined;\r\n if (materialIdsList && theMaterial) {\r\n // Check if the selected material works with the selected tool.\r\n // If not it will open a warning modal asking user to change material or tool\r\n if (!!materialIdsList.find(id => id === theMaterial.id)) {\r\n let chosenCondition = false;\r\n if (this.settingsHolder.material) {\r\n if ('chosenCondition' in this.settingsHolder.material) {\r\n if (this.settingsHolder.material['chosenCondition']) {\r\n chosenCondition = true;\r\n }\r\n }\r\n }\r\n\r\n if (\r\n (this.settingsHolder.hardness &&\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName &&\r\n (!this.settingsHolder.hasStrategyOption ||\r\n (this.settingsHolder.currentStrategy && this.settingsHolder.currentStrategy.operationName)) &&\r\n chosenCondition &&\r\n theHolder) ||\r\n this.trochoidalSlotWidthChange\r\n ) {\r\n let holderChange = false;\r\n\r\n if (theHolder !== this.holder && this.holder) {\r\n // basically holder should NOT trigger recalc to parameters\r\n this.holder = theHolder;\r\n holderChange = true;\r\n }\r\n\r\n if (!this.holder) {\r\n // setting default\r\n this.holder = theHolder;\r\n }\r\n\r\n if (!holderChange || this.trochoidalSlotWidthChange || insideCornerChange) {\r\n this.parameterTypes = this.settingsHolder.parametersFields;\r\n setTimeout(() => {\r\n if (!this.settingsHolder.tool || !this.settingsHolder.currenttoolpath.operationName) {\r\n return;\r\n }\r\n\r\n //needed to allow time for the templates to switch before plopping the numbers in\r\n // want to make sure there is a holder before doing anything BUT Parameters don't really need a holder though, and changing holder SHOULD not affect Parameters\r\n\r\n const maxStepDown = this.settingsHolder.tool.cutterDiameter === 0 ? 0 : math.round(\r\n (100 * this.settingsHolder.tool.lengthOfCut) / this.settingsHolder.tool.cutterDiameter,\r\n 4\r\n );\r\n\r\n this.sliderRdocDisabled = false;\r\n this.adocLockDisabled = false;\r\n this.rdocLockDisabled = false;\r\n\r\n this.knobDisabler = false;\r\n if (\r\n this.settingsHolder.currenttoolpath.operationName !== 'Trochoidal Slotting' &&\r\n !insideCornerChange\r\n ) {\r\n this.sliderDisabled = false;\r\n this.rdocLocked = false;\r\n this.adocLocked = false;\r\n if (!!!this.settingsHolder.parameters) {\r\n this.emSelection(res.emit);\r\n } else {\r\n this.emSelection(res.emit, this.settingsHolder.parameters.stepOver);\r\n }\r\n }\r\n\r\n this.rows.length = math.round(maxStepDown, 0);\r\n\r\n this.overlayDivideFactor = maxStepDown / 100; // dividing by a 100 cause the overlay is 100%\r\n\r\n this.trueMax = (this.rows.length / this.overlayDivideFactor) * 10; //80\r\n\r\n // This value is unused. Is this still required?\r\n this.adocTicks = this.rows.length;\r\n if (this.settingsHolder.tool.lengthOfCut >= 0.5) {\r\n this.adocTicks = math.floor(8 * this.adocMax);\r\n }\r\n this.offset = 100 - this.trueMax < 0 ? (100 - this.trueMax) * -1 : 100 - this.trueMax; // 20 is the offset\r\n\r\n this.sliderMax =\r\n this.currentPath !== 'Helical Plunge' ? this.rows.length * 10 : this.rows.length * 100;\r\n\r\n //by this time the overlay SHOULD be well calculated\r\n this.vSliderValue =\r\n (Number(this.Parameters.get('stepDown').value) / this.overlayDivideFactor) *\r\n 0.01 *\r\n this.sliderMax;\r\n if (\r\n !!this.settingsHolder.currenttoolpath &&\r\n !!this.settingsHolder.currenttoolpath.operationName &&\r\n this.settingsHolder.currenttoolpath.operationName !== 'Trochoidal Slotting' &&\r\n this.settingsHolder.currenttoolpath.operationName !== 'Chamfering' &&\r\n this.settingsHolder.currenttoolpath.operationName !== '3D Surfacing'\r\n ) {\r\n this.onVerticalSliderChange({ value: this.vSliderValue }, false, false, false, false);\r\n }\r\n this.currentPath = this.settingsHolder.currenttoolpath.operationName;\r\n\r\n if (this.settingsHolder.currenttoolpath.operationName === 'Helical Plunge') {\r\n this.sliderRdocDisabled = true;\r\n this.rdocLockDisabled = true;\r\n const maxStepDown = math.round(\r\n (100 * this.settingsHolder.tool.lengthOfCut) / this.settingsHolder.tool.cutterDiameter,\r\n 4\r\n );\r\n this.rows.length = math.round(maxStepDown, 0);\r\n this.adocTicks = this.rows.length;\r\n if (this.settingsHolder.tool.lengthOfCut >= 0.5) {\r\n this.adocTicks = math.floor(8 * this.adocMax);\r\n }\r\n\r\n this.trueMax = this.rows.length * 10;\r\n this.offset = 100 - this.trueMax < 0 ? (100 - this.trueMax) * -1 : 100 - this.trueMax; // 20 is the offset\r\n\r\n this.emSelection(\r\n res.emit,\r\n undefined,\r\n false,\r\n Number(this.Parameters.get('engagementAngle').value)\r\n );\r\n\r\n this.vSliderValue =\r\n (Number(this.Parameters.get('holeDepth').value) / this.settingsHolder.tool.lengthOfCut) *\r\n this.trueMax;\r\n\r\n this.onVerticalSliderChange({ value: this.vSliderValue }, false, false);\r\n this.Parameters.get('stepDown').patchValue(this.vSliderValue, { emitEvent: true });\r\n } else if (this.currentPath === 'Trochoidal Slotting') {\r\n if (this.trochoidalSlotWidthChange) {\r\n this.setRDOC();\r\n let data = this.settingsHolder;\r\n data.parameters = {\r\n toolPath: this.settingsHolder.currenttoolpath,\r\n cutterDiameter: this.settingsHolder.tool.cutterDiameter,\r\n stickOut: this.Parameters.get('stickOut').value,\r\n stickoutPercentage: this.Parameters.get('stickoutPercentage').value,\r\n pitch: this.Parameters.get('pitch').value,\r\n rampAngle: this.Parameters.get('rampAngle').value,\r\n holeDiameter: this.Parameters.get('holeDiameter').value,\r\n pathDiameter: this.Parameters.get('pathDiameter').value,\r\n holeDepth: this.Parameters.get('holeDepth').value,\r\n effectiveDiameter: this.Parameters.get('effectiveDiameter').value,\r\n chamferHeight: this.Parameters.get('chamferHeight').value,\r\n chamferWidth: this.Parameters.get('chamferWidth').value,\r\n scallopHeight: this.Parameters.get('scallopHeight').value,\r\n scallopWidth: this.Parameters.get('scallopWidth').value,\r\n cutWidth: this.cutWidth,\r\n cutDepth: this.cutDepth,\r\n stepDown: this.Parameters.get('stepDown').value,\r\n stepOver: this.Parameters.get('stepOver').value,\r\n adocdecimal: this.Parameters.get('adocdecimal').value,\r\n rdocdecimal: this.Parameters.get('rdocdecimal').value,\r\n engagementAngle: this.Parameters.get('engagementAngle').value,\r\n vSliderValue: this.vSliderValue\r\n };\r\n this.commonService.notifyOther({\r\n option: 'trochoidalSlotWidthChangeBackToRecommendations',\r\n value: data,\r\n emit: false\r\n });\r\n this.trochoidalSlotWidthChange = false;\r\n } else {\r\n this.cutDepth = this.formulas.calculateCutDepth(\r\n this.settingsHolder.tool,\r\n this.settingsHolder.hardness.hra,\r\n this.currentPath\r\n );\r\n\r\n let roundFactor = this.formulas.emRoundFactor(this.settingsHolder.tool.cutterDiameter);\r\n\r\n let wallRadius = (this.settingsHolder.tool.cutterDiameter * 1.5) / 2;\r\n let maxEngageAng = this.formulas.calculateMaxEngageAngle(\r\n this.settingsHolder.tool,\r\n this.cutDepth,\r\n this.settingsHolder.material,\r\n this.settingsHolder.hardness.hra\r\n );\r\n this.maxRDOC =\r\n roundFactor *\r\n math.floor(\r\n this.formulas.calculateMaxFilletRdoc(\r\n this.settingsHolder.tool.cutterDiameter,\r\n wallRadius,\r\n maxEngageAng\r\n ) / roundFactor\r\n );\r\n\r\n this.updateRDOC(this.maxRDOC);\r\n this.updateEngagementAngle(\r\n this.conversionFormulas.convertRdocToTea(\r\n this.maxRDOC,\r\n this.settingsHolder.tool.cutterDiameter,\r\n wallRadius\r\n )\r\n );\r\n\r\n let stepOver =\r\n roundFactor *\r\n math.floor((100 * (this.maxRDOC / this.settingsHolder.tool.cutterDiameter)) / roundFactor);\r\n this.updateStepOver(stepOver);\r\n\r\n this.emSelection(\r\n res.emit,\r\n stepOver,\r\n false,\r\n Number(this.Parameters.get('engagementAngle').value)\r\n );\r\n\r\n this.sliderMax = this.rows.length * 10 * this.overlayDivideFactor;\r\n this.vSliderValue =\r\n (Number(this.Parameters.get('stepDown').value) / this.overlayDivideFactor) *\r\n 0.01 *\r\n this.sliderMax;\r\n\r\n this.maxRDOCmessage();\r\n this.sliderDisabled = false;\r\n this.sliderRdocDisabled = false;\r\n this.adocLocked = false;\r\n this.rdocLocked = false;\r\n }\r\n } else if (this.settingsHolder.currenttoolpath.operationName === 'Full Slotting') {\r\n this.emSelection(\r\n res.emit,\r\n this.Parameters.get('stepDown').value,\r\n false,\r\n Number(this.Parameters.get('engagementAngle').value)\r\n );\r\n this.sliderRdocDisabled = true;\r\n this.rdocLockDisabled = true;\r\n this.rdocLocked = true;\r\n }\r\n if (this.warningAlerts && !this.trochoidalSlotWidthChange && !insideCornerChange) {\r\n if (\r\n this.settingsHolder.currenttoolpath.operationName !== 'Chamfer' &&\r\n this.settingsHolder.currenttoolpath.operationName !== '3D Surfacing'\r\n ) {\r\n let cutDepth = this.formulas.calculateCutDepth(\r\n this.settingsHolder.tool,\r\n this.settingsHolder.hardness.hra,\r\n this.settingsHolder.currenttoolpath.operationName\r\n ); //default adoc\r\n this.adoc = math.round(cutDepth, 3);\r\n } else {\r\n let cutDepth = this.formulas.calculateCutDepth(\r\n this.settingsHolder.tool,\r\n this.settingsHolder.hardness.hra,\r\n this.settingsHolder.currenttoolpath.operationName\r\n );\r\n let scallopHeight = 1000000 * cutDepth;\r\n let scallopWidth =\r\n math.floor(\r\n 10000 *\r\n this.formulas.calculateScallopStepOver(\r\n this.settingsHolder.tool.cutterDiameter,\r\n scallopHeight\r\n )\r\n ) / 10000;\r\n this.adoc = math.round(scallopWidth, 3);\r\n }\r\n\r\n this.defaultEngagementAngle = Number(this.Parameters.get('engagementAngle').value);\r\n this.rdoc = Number(this.Parameters.get('rdocdecimal').value);\r\n setTimeout(() => {\r\n // needed time for the slider to set first\r\n this.defaultSliderADOCDisabled = true;\r\n this.defaultSliderRDOCDisabled = true;\r\n\r\n this.defaultSliderADOC = this.adocSlider['value'];\r\n this.defaultSliderRDOC = this.rdocSlider['value'];\r\n\r\n // let notify JUST recommendation, there too much going on in tools that tools is not accurately reporting to Recommendations\r\n // atleast for initial\r\n\r\n let data = this.settingsHolder;\r\n data.parameters = {\r\n toolPath: this.settingsHolder.currenttoolpath,\r\n cutterDiameter: this.settingsHolder.tool.cutterDiameter,\r\n stickOut: this.Parameters.get('stickOut').value,\r\n stickoutPercentage: this.Parameters.get('stickoutPercentage').value,\r\n pitch: this.Parameters.get('pitch').value,\r\n rampAngle: this.Parameters.get('rampAngle').value,\r\n holeDiameter: this.Parameters.get('holeDiameter').value,\r\n pathDiameter: this.Parameters.get('pathDiameter').value,\r\n holeDepth: this.Parameters.get('holeDepth').value,\r\n effectiveDiameter: this.Parameters.get('effectiveDiameter').value,\r\n chamferHeight: this.Parameters.get('chamferHeight').value,\r\n chamferWidth: this.Parameters.get('chamferWidth').value,\r\n scallopHeight: this.Parameters.get('scallopHeight').value,\r\n scallopWidth: this.Parameters.get('scallopWidth').value,\r\n cutWidth: this.cutWidth,\r\n cutDepth: this.cutDepth,\r\n stepDown: this.Parameters.get('stepDown').value,\r\n stepOver: this.Parameters.get('stepOver').value,\r\n adocdecimal: this.Parameters.get('adocdecimal').value,\r\n rdocdecimal: this.Parameters.get('rdocdecimal').value,\r\n engagementAngle: this.Parameters.get('engagementAngle').value,\r\n vSliderValue: this.vSliderValue\r\n };\r\n\r\n this.commonService.notifyOther({\r\n option: 'parameterReportingToRecoomendation',\r\n value: data,\r\n origin: this.origin\r\n }); // resetting all, all will listen for a \"RESET\"\r\n });\r\n // just want to warn the user\r\n if (\r\n this.settingsHolder.currenttoolpath.operationName === 'High Efficiency Milling' ||\r\n this.settingsHolder.currenttoolpath.operationName === 'Trochoidal Slotting'\r\n ) {\r\n if (!this.invalidEndmillModal) {\r\n this.invalidEndmillModal = true;\r\n let message: Message = {\r\n title: 'Caution!',\r\n message:\r\n '
Use this tool path selection only if you are employing tool path strategies with a high performance CAM system that intelligently manages tool load in corners.
'\r\n };\r\n this.utils.openDialog(\r\n message,\r\n 'alert',\r\n () => {\r\n this.invalidEndmillModal = false;\r\n },\r\n () => {\r\n this.invalidEndmillModal = false;\r\n }\r\n );\r\n }\r\n }\r\n }\r\n });\r\n }\r\n }\r\n // end check for toolpath\r\n this.setShowMapModeVersion();\r\n } else {\r\n // if filtering all happened, this should not happen, but this message serves a fail safe, even in the old app\r\n if (!this.invalidEndmillModal) {\r\n this.invalidEndmillModal = true;\r\n let message: Message = {\r\n title: 'Invalid',\r\n message:\r\n 'The endmill you selected ' +\r\n this.settingsHolder.tool.itemId +\r\n ' (' +\r\n this.settingsHolder.tool.description +\r\n ') is not suited for the selected material.
Would you like to change the material?'\r\n };\r\n this.utils.openDialog(\r\n message,\r\n 'confirm',\r\n () => {\r\n // ok\r\n this.invalidEndmillModal = false;\r\n this.resetMaterial.emit();\r\n },\r\n () => {\r\n // cancel, reset the tool, cause it ain't gonna work and it will crash parameters section\r\n this.invalidEndmillModal = false;\r\n this.resetTool.emit();\r\n }\r\n );\r\n }\r\n }\r\n }\r\n }\r\n } else if ((res.hasOwnProperty('option') && res.option === 'reset') || res.option === 'resetTool') {\r\n this.resetParameters();\r\n } else if (res.hasOwnProperty('option') && res.option === 'clearToolPath') {\r\n this.mapMode = 1;\r\n this.resetParameters();\r\n } else if (res.hasOwnProperty('option') && res.option === 'mapModeChanged') {\r\n this.mapMode = res.value.mapMode;\r\n if (this.mapMode === 2) {\r\n this.operationToolImage = !!res.value.operationImageAssetForParameterSection\r\n ? res.value.operationImageAssetForParameterSection\r\n : this.imageConstants.unavailableOperationImage;\r\n }\r\n }\r\n });\r\n\r\n this.columns.length = 10;\r\n\r\n this.onResize();\r\n });\r\n }\r\n\r\n private setShowMapModeVersion = () => {\r\n if (\r\n this.mapMode === 2 &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName &&\r\n (!this.settingsHolder.hasStrategyOption ||\r\n (this.settingsHolder.currentStrategy && this.settingsHolder.currentStrategy.operationName)) &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.machine.holderAdjustment &&\r\n this.settingsHolder.machine.spindleAdjustment\r\n ) {\r\n this.showMapModeTwo = true;\r\n } else {\r\n this.showMapModeTwo = false;\r\n }\r\n };\r\n\r\n private resetParameters = () => {\r\n this.settingsHolder.mapMode = 1;\r\n this.Parameters.reset(\r\n {\r\n engagementAngle: 0,\r\n stepDown: 0,\r\n stepOver: 0,\r\n adocdecimal: 0,\r\n rdocdecimal: 0,\r\n stickOut: 0,\r\n stickoutPercentage: 0,\r\n pitch: 0,\r\n rampAngle: 0,\r\n holeDiameter: 0,\r\n pathDiameter: 0,\r\n holeDepth: 0,\r\n effectiveDiameter: 0,\r\n chamferHeight: 0,\r\n chamferWidth: 0,\r\n scallopHeight: 0\r\n },\r\n { emitEvent: true }\r\n );\r\n this.parameters = new Parameters_();\r\n this.settingsHolder = new ToolContainer();\r\n this.vSliderValue = 0;\r\n this.warningAlerts = true;\r\n this.aggressiveFlag = false;\r\n this.toolImage = this.imageConstants.defaultTool;\r\n this.mapMode = 1;\r\n this.operationToolImage = '';\r\n\r\n setTimeout(() => {\r\n // let parameters reset everything before disabling all of the sliders/knobs\r\n this.knobDisabler = true;\r\n this.sliderDisabled = true;\r\n this.sliderRdocDisabled = true;\r\n this.defaultSliderADOCDisabled = true;\r\n this.defaultSliderRDOCDisabled = true;\r\n this.origin = undefined;\r\n this.currentPath = '';\r\n this.tool = new Cutter_();\r\n this.parameterTypes = 0;\r\n this.rows = [];\r\n this.columns.length = 10;\r\n this.current = this.constants.getMillBit(0);\r\n this.adocSize = 0;\r\n this.horizontalSliderHolderWidth = 0;\r\n this.horizontalSliderHolderHeight = 0;\r\n this.cutWidth = 0;\r\n this.cutDepth = 0;\r\n this.offset = 0;\r\n this.adocMax = 32;\r\n this.stepOver = 0;\r\n this.trueMax = 0;\r\n this.maxRDOC = 100;\r\n this.adoc = undefined;\r\n this.rdoc = undefined;\r\n this.defaultEngagementAngle = undefined;\r\n\r\n this.defaultSliderRDOC = undefined;\r\n this.defaultSliderADOC = undefined;\r\n this.adocTicks = 32;\r\n this.overlayDivideFactor = 2;\r\n this.sliderMax = 300;\r\n this.warningMessageOpen = false;\r\n\r\n this.holder = undefined;\r\n this.trochoidalSlotWidthChange = false;\r\n this.adocLocked = false;\r\n this.rdocLocked = false;\r\n this.adocLockDisabled = true;\r\n this.rdocLockDisabled = true;\r\n\r\n this.setShowMapModeVersion();\r\n\r\n this.emitData('recommendations');\r\n });\r\n };\r\n\r\n // formula specific functions\r\n private setScallop = (notify: boolean = true) => {\r\n let roundFactor = math.round(math.log10(80 * this.settingsHolder.tool.cutterDiameter), 0) / 400;\r\n let stepOver =\r\n roundFactor *\r\n math.floor(this.formulas.calculateScallopStepOver(this.settingsHolder.tool.cutterDiameter, 125) / roundFactor);\r\n let scallopHeight = math.ceil(\r\n this.formulas.calculateScallopHeight(this.settingsHolder.tool.cutterDiameter, stepOver)\r\n );\r\n\r\n if (this.settingsHolder.currenttoolpath && this.settingsHolder.currenttoolpath.operationName === '3D Surfacing') {\r\n this.updateScallopWidth(stepOver);\r\n } else {\r\n this.updateStepOver(stepOver);\r\n }\r\n this.updateScallopHeight(scallopHeight);\r\n };\r\n\r\n private setSlotting = (notify: boolean = true) => {\r\n if (this.settingsHolder.tool.cutterDiameter > 0) {\r\n this.updateRDOC(this.settingsHolder.tool.cutterDiameter);\r\n }\r\n this.updateStepOver(100);\r\n this.updateEngagementAngle(180);\r\n\r\n this.setADOC(undefined, notify);\r\n };\r\n\r\n private setADOC = (setAdoc: boolean = true, notify: boolean = true) => {\r\n if (setAdoc) {\r\n const { hardness } = this.settingsHolder;\r\n const hra = hardness.userHra ? hardness.userHra : hardness.hra;\r\n this.cutDepth = 0;\r\n this.cutDepth = this.formulas.calculateCutDepth(\r\n this.settingsHolder.tool,\r\n hra,\r\n this.settingsHolder.currenttoolpath ? this.settingsHolder.currenttoolpath.operationName : ''\r\n );\r\n this.updateADOC(this.cutDepth);\r\n this.updateCutDepth();\r\n }\r\n };\r\n\r\n private setHoleDiameter = (notify: boolean = true) => {\r\n let roundFactor = math.round(math.log10(150 * this.settingsHolder.tool.cutterDiameter), 0) / 200;\r\n let corRad = this.settingsHolder.tool.cornerRadius > 0 ? this.settingsHolder.tool.cornerRadius : 0;\r\n this.updateHoleDiameter(\r\n roundFactor * math.floor((1.6 * (this.settingsHolder.tool.cutterDiameter - corRad)) / roundFactor)\r\n );\r\n this.updatePathDiameter(this.Parameters.get('holeDiameter').value - this.settingsHolder.tool.cutterDiameter);\r\n\r\n let rampAng = (math.PI * this.Parameters.get('rampAngle').value) / 180;\r\n\r\n this.updatePitch(this.formulas.calculateRamp2Pitch(rampAng, this.Parameters.get('pathDiameter').value));\r\n };\r\n\r\n private setHoleDepth = (notify: boolean = true) => {\r\n let roundFactor = math.round(math.log10(80 * this.settingsHolder.tool.cutterDiameter), 0) / 8;\r\n\r\n let holeDepth = roundFactor * math.floor((this.settingsHolder.tool.lengthOfCut - 0.005) / roundFactor);\r\n\r\n if (this.settingsHolder.tool.rNeck) {\r\n holeDepth = this.settingsHolder.tool.lengthOfCut;\r\n }\r\n\r\n this.updateHoleDepthField(holeDepth);\r\n\r\n this.updateHoleDepth(notify);\r\n };\r\n\r\n private setHolePitch = (notify: boolean = true) => {\r\n //defaults?\r\n let rampAng =\r\n math.sqrt(\r\n this.formulas.calculateMaterialSurfaceFeetPerMinute(\r\n this.settingsHolder.material,\r\n this.settingsHolder.hardness.hra\r\n ) / this.formulas.calculateMaterialStretch(this.settingsHolder.material)\r\n ) / 380;\r\n\r\n let pitch = 0;\r\n if (isNaN(rampAng) && this.Parameters.get('pitch').value > 0) {\r\n pitch = this.Parameters.get('pitch').value;\r\n rampAng = this.formulas.calculatePitch2Ramp(\r\n this.Parameters.get('pitch').value,\r\n this.Parameters.get('pathDiameter').value\r\n );\r\n this.updateRampAngle((180 * rampAng) / math.PI);\r\n this.Parameters.get('rampAngle').patchValue((180 * rampAng) / math.PI, { emitEvent: false });\r\n } else if (!this.Parameters.get('rampAngle').value) {\r\n this.updateRampAngle((180 * rampAng) / math.PI);\r\n pitch = this.formulas.calculateRamp2Pitch(rampAng, this.Parameters.get('pathDiameter').value);\r\n }\r\n\r\n if (!this.Parameters.get('pathDiameter').value) {\r\n pitch = pitch < 0.01 ? math.floor(1000 * pitch) / 1000 : math.floor(200 * pitch) / 200;\r\n rampAng = this.formulas.calculatePitch2Ramp(pitch, this.Parameters.get('pathDiameter').value);\r\n\r\n this.updatePitch(pitch);\r\n this.updateRampAngle((180 * rampAng) / math.PI);\r\n }\r\n };\r\n\r\n private setChamfer = (notify: boolean = true) => {\r\n this.updateChamferWidth(this.formulas.calculateFinishWallStock(this.Parameters.get('effectiveDiameter').value));\r\n this.updateChamferHeight(\r\n this.Parameters.get('chamferWidth').value / math.tan((math.PI * this.settingsHolder.tool.taper) / 180)\r\n );\r\n if (notify) {\r\n this.emitData();\r\n }\r\n };\r\n\r\n private setChamferDiameter = (notify: boolean = true) => {\r\n this.updateEffectiveDiameter(\r\n math.ceil(100 * (this.settingsHolder.tool.cutterDiameter + this.settingsHolder.tool.tip)) / 200\r\n );\r\n this.setChamfer(notify);\r\n };\r\n\r\n private setProtrude = () => {\r\n let roundFactor =\r\n math.pow(2, math.round(math.log(4.5 * math.pow(this.settingsHolder.tool.cutterDiameter, 2.0 / 3.0), 2))) / 16;\r\n let stickOut =\r\n roundFactor *\r\n math.ceil((this.settingsHolder.tool.fluteWash + this.settingsHolder.tool.lengthOfCut) / roundFactor);\r\n\r\n if (this.settingsHolder.tool.rNeck) {\r\n stickOut = this.settingsHolder.tool.overallReach;\r\n } else if (this.settingsHolder.tool.end.indexOf('Chamfer') > -1) {\r\n stickOut = this.settingsHolder.tool.overallLength / 2;\r\n\r\n if (3 * this.settingsHolder.tool.cutterDiameter < stickOut) {\r\n stickOut = 3 * this.settingsHolder.tool.cutterDiameter;\r\n }\r\n }\r\n\r\n this.updateStickOut(stickOut);\r\n this.updateStickoutPercentage((100 * stickOut) / this.settingsHolder.tool.cutterDiameter);\r\n };\r\n\r\n private setProfile = (updateCutWidth: boolean = true, notify: boolean = true, setRdoc: boolean = true) => {\r\n this.setADOC(true, notify);\r\n\r\n if (this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') > -1) {\r\n this.setScallop(notify);\r\n } else {\r\n if (setRdoc) {\r\n this.setRDOC(notify, updateCutWidth);\r\n }\r\n }\r\n };\r\n\r\n private setRDOC = (notify: boolean = false, updateCutWidth: boolean = true, updateDefaults: boolean = false) => {\r\n let roundFactor = this.formulas.emRoundFactor(this.settingsHolder.tool.cutterDiameter);\r\n _.extend(this.settingsHolder.material, this.settingsHolder.hardness);\r\n\r\n this.cutWidth =\r\n roundFactor *\r\n math.round(\r\n this.formulas.setCutWidth(\r\n this.settingsHolder.tool,\r\n this.Parameters.get('adocdecimal').value,\r\n this.settingsHolder.material,\r\n this.settingsHolder.currenttoolpath ? this.settingsHolder.currenttoolpath.operationName : '',\r\n this.settingsHolder.hardness.hra\r\n ) / roundFactor\r\n );\r\n\r\n const form = this.settingsHolder.recommendationForm;\r\n const toolPath = this.settingsHolder.currenttoolpath.operationName.toLowerCase();\r\n\r\n if (form) {\r\n // if the recommendations is changed\r\n\r\n let insideCornerRadiusWall;\r\n if (this.settingsHolder.recommendationFields === 1) {\r\n insideCornerRadiusWall = form.get('type1').get('insideCornerRadiusOfWall').value;\r\n } else if (this.settingsHolder.recommendationFields === 2) {\r\n insideCornerRadiusWall = form.get('type2').get('trochoidalSlotWidth').value;\r\n }\r\n\r\n if (insideCornerRadiusWall) {\r\n if (\r\n ((toolPath.includes('high efficiency milling') || toolPath.includes('finishing')) &&\r\n form.get('type1').get('insideCornerType').value) ||\r\n toolPath.includes('trochoidal slotting')\r\n ) {\r\n let wallRadius = toolPath.includes('trochoidal slotting')\r\n ? insideCornerRadiusWall / 2\r\n : insideCornerRadiusWall;\r\n\r\n let maxEngageAng = this.formulas.calculateMaxEngageAngle(\r\n this.settingsHolder.tool,\r\n this.Parameters.get('adocdecimal').value,\r\n this.settingsHolder.material,\r\n this.settingsHolder.hardness.hra\r\n );\r\n this.maxRDOC =\r\n roundFactor *\r\n math.floor(\r\n this.formulas.calculateMaxFilletRdoc(this.settingsHolder.tool.cutterDiameter, wallRadius, maxEngageAng) /\r\n roundFactor\r\n );\r\n let minFillet =\r\n math.ceil(\r\n 200 *\r\n this.formulas.calculateMinFilletRad(\r\n this.settingsHolder.tool.cutterDiameter,\r\n this.cutWidth,\r\n maxEngageAng\r\n )\r\n ) / 200;\r\n\r\n if (this.settingsHolder.machine) {\r\n if (_.trim(this.settingsHolder.machine.holder).length > 0) {\r\n if (this.cutWidth > this.maxRDOC) {\r\n if (this.maxRDOC > 0) {\r\n this.cutWidth = this.maxRDOC; // overrides locked RDOC\r\n } else {\r\n this.handleInvalidFillet(toolPath, minFillet);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (toolPath.includes('full slotting') || toolPath.includes('helical plunge')) {\r\n this.cutWidth = this.settingsHolder.tool.cutterDiameter; // overrides locked RDOC\r\n }\r\n\r\n this.updateRDOC(this.cutWidth, notify, updateDefaults);\r\n\r\n if (updateCutWidth) {\r\n this.updateCutWidth(undefined, undefined, true, updateDefaults);\r\n }\r\n };\r\n\r\n private handleInvalidFillet = (toolPath: string, minFillet: number) => {\r\n const form = this.settingsHolder.recommendationForm;\r\n if (toolPath.includes('trochoidal slotting')) {\r\n const input = form.get('type2').get('trochoidalSlotWidth');\r\n this.utils.openDialog(\r\n {\r\n title: 'Slot Width too Small!',\r\n message: `A slot width of ${input.value} is too small for this tool to clear chips!`\r\n },\r\n 'error'\r\n );\r\n input.patchValue(math.round(2 * minFillet, 2), { emitEvent: false });\r\n } else {\r\n const input = form.get('type1').get('insideCornerRadiusOfWall');\r\n this.utils.openDialog(\r\n {\r\n title: 'Part Fillet too Small!',\r\n message: `A radius of ${input.value} is too small for this tool to clear chips!`\r\n },\r\n 'error'\r\n );\r\n this.commonService.notifyOther({ option: 'resetInsideCornerRadiusOfWall', value: true });\r\n }\r\n };\r\n\r\n private updateCutWidth = (\r\n stepOver?: number,\r\n engagementAngle?: number,\r\n notify: boolean = true,\r\n updateDefaults = false\r\n ) => {\r\n if (this.Parameters.get('rdocdecimal').value > 0) {\r\n if (!stepOver && this.currentPath !== '3D Surfacing') {\r\n this.updateStepOver(100 * (this.cutWidth / this.settingsHolder.tool.cutterDiameter), updateDefaults);\r\n }\r\n if (!this.rdocLocked) {\r\n this.updateTeaBasedOnRdoc(!!stepOver, !!engagementAngle);\r\n }\r\n if (notify) {\r\n this.emitData();\r\n }\r\n }\r\n };\r\n\r\n private updateTeaBasedOnRdoc = (stepOver: boolean, engagementAngle: boolean) => {\r\n if (!stepOver) {\r\n if (!engagementAngle || this.origin === 'recommendations') {\r\n //ONLY RECALC if updateCutWidth was triggered by other field other than engagement Angle\r\n let engageAng: number;\r\n if (\r\n this.settingsHolder.recommendationFields === 2 ||\r\n this.settingsHolder.currenttoolpath.operationName === 'Trochoidal Slotting'\r\n ) {\r\n let partRad = 0;\r\n\r\n if (this.settingsHolder.recommendationFields && this.settingsHolder.recommendationForm) {\r\n partRad = this.settingsHolder.recommendationForm.get('type2').get('trochoidalSlotWidth').value / 2;\r\n }\r\n\r\n engageAng = this.conversionFormulas.convertRdocToTea(\r\n this.cutWidth,\r\n this.settingsHolder.tool.cutterDiameter,\r\n partRad\r\n );\r\n } else {\r\n engageAng = this.conversionFormulas.convertRdocToTea(this.cutWidth, this.settingsHolder.tool.cutterDiameter);\r\n }\r\n\r\n if (engageAng !== this.defaultEngagementAngle) {\r\n this.updateEngagementAngle(engageAng);\r\n }\r\n }\r\n } else if (!engagementAngle) {\r\n let engageAng: number;\r\n if (\r\n this.settingsHolder.recommendationForm &&\r\n this.settingsHolder.recommendationForm.get('type1').get('insideCornerType').value !== 'RDOC Inside Corner' &&\r\n this.settingsHolder.parameters\r\n ) {\r\n let partRad = 0;\r\n\r\n if (this.settingsHolder.recommendationFields === 1) {\r\n partRad = this.settingsHolder.recommendationForm.get('type1').get('insideCornerRadiusOfWall').value;\r\n } else if (this.settingsHolder.recommendationFields === 2) {\r\n partRad = this.settingsHolder.recommendationForm.get('type2').get('trochoidalSlotWidth').value / 2;\r\n }\r\n\r\n engageAng = this.conversionFormulas.convertRdocToTea(\r\n this.settingsHolder.parameters.rdocdecimal,\r\n this.settingsHolder.tool.cutterDiameter,\r\n partRad\r\n );\r\n } else {\r\n engageAng = this.conversionFormulas.convertRdocToTea(this.cutWidth, this.settingsHolder.tool.cutterDiameter);\r\n }\r\n if (engageAng !== this.defaultEngagementAngle) {\r\n this.updateEngagementAngle(engageAng);\r\n }\r\n }\r\n };\r\n\r\n private updateCutDepth = (emit: boolean = true) => {\r\n this.updateStepDown((100 * this.cutDepth) / this.settingsHolder.tool.cutterDiameter, emit);\r\n };\r\n\r\n private emSelection = (\r\n notify: boolean = true,\r\n stepOver?: number,\r\n setRdoc: boolean = true,\r\n engagementAngle?: number\r\n ) => {\r\n let toolPath = this.settingsHolder.currenttoolpath.operationName;\r\n // need to have a tool first\r\n if (this.settingsHolder.tool) {\r\n if (this.settingsHolder.tool.lengthOfCut === 0) {\r\n this.adocMax = 32;\r\n } else {\r\n this.adocMax = 32 * this.settingsHolder.tool.lengthOfCut;\r\n }\r\n\r\n if (this.settingsHolder.tool.end.indexOf('Chamfer') > -1) {\r\n this.filterOperationPaths.emit({ end: 'Chamfering' });\r\n } else {\r\n if (\r\n this.settingsHolder.tool.end.indexOf('Ball-Nosed') > -1 &&\r\n this.settingsHolder.tool.description.indexOf('BN') > -1\r\n ) {\r\n this.setScallop(false); // set the stickout\r\n this.filterOperationPaths.emit({ end: '3D Surfacing' });\r\n } else {\r\n this.filterOperationPaths.emit({ end: 'reset' });\r\n }\r\n }\r\n\r\n if (this.settingsHolder.tool.materials && this.settingsHolder.material) {\r\n if (\r\n this.settingsHolder.tool.end.indexOf('Ball-Nosed') === -1 &&\r\n this.settingsHolder.tool.end.indexOf('Chamfer') === -1\r\n ) {\r\n this.setHoleDepth(false);\r\n if (this.Parameters.get('holeDepth').value > this.settingsHolder.tool.lengthOfCut) {\r\n this.updateHoleDepthField(this.settingsHolder.tool.lengthOfCut);\r\n }\r\n\r\n this.setHoleDiameter(false);\r\n this.setHolePitch(false);\r\n }\r\n }\r\n\r\n if (toolPath === 'Full Slotting') {\r\n this.setSlotting(false);\r\n engagementAngle = 180;\r\n this.updateCutWidth(stepOver, engagementAngle, false); //updates the ADOC and RDOC\r\n } else if (toolPath === 'Chamfering') {\r\n this.setChamferDiameter(false);\r\n this.updateCutWidth(stepOver, undefined, false); //updates the ADOC and RDOC\r\n } else if (toolPath) {\r\n this.setProfile(false, false, setRdoc); //this will call RDOC\r\n this.updateCutWidth(stepOver, engagementAngle, false); //updates the ADOC and RDOC\r\n }\r\n\r\n this.updateCutDepth(); // updates and set the stepdown\r\n this.setProtrude(); // set the stickout\r\n this.updateHoleDepth(false);\r\n\r\n if (notify) {\r\n this.emitData();\r\n }\r\n }\r\n };\r\n\r\n calculateStepDown = (\r\n updateADOC: boolean = true,\r\n updateCutWidth: boolean = true,\r\n setRdoc: boolean = true,\r\n showWarnings: boolean = false\r\n ) => {\r\n let stepDown = this.Parameters.get('stepDown').value;\r\n if (stepDown > 0) {\r\n if (this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('3d surfacing') > -1) {\r\n if (stepDown >= 50) {\r\n let message: Message = {\r\n title: 'Stepdown too High!',\r\n message: 'Axial cut depth must less than the radius of the ball nose endmill!'\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n this.setADOC();\r\n }\r\n\r\n if (this.Parameters.get('scallopHeight').value > 0) {\r\n let scallopHeight = this.Parameters.get('scallopHeight').value;\r\n let scallopWidth = 0;\r\n\r\n if (scallopHeight / 10000 > stepDown * this.settingsHolder.tool.cutterDiameter) {\r\n scallopHeight = 10000 * stepDown * this.settingsHolder.tool.cutterDiameter;\r\n scallopWidth =\r\n math.floor(\r\n 10000 * this.formulas.calculateScallopStepOver(this.settingsHolder.tool.cutterDiameter, scallopHeight)\r\n ) / 10000;\r\n this.updateScallopHeight(scallopHeight);\r\n this.updateScallopWidth(scallopWidth);\r\n }\r\n }\r\n }\r\n\r\n if (\r\n math.round(this.settingsHolder.tool.lengthOfCut / this.settingsHolder.tool.cutterDiameter, 4) <\r\n math.round(stepDown / 100, 4)\r\n ) {\r\n this.adocSlider['disabled'] = true;\r\n if (this.warningAlerts) {\r\n if (showWarnings) {\r\n // showWarnings is always false, so this warning is never shown. This is possibly related to a bug in the backlog (MILL-584)\r\n let message: Message = {\r\n title: 'Stepdown too High!',\r\n message: 'Axial cut depth must not exceed endmill length of cut!'\r\n };\r\n this.utils.openDialog(message, 'error', () => {\r\n stepDown = (100 * this.settingsHolder.tool.lengthOfCut) / this.settingsHolder.tool.cutterDiameter;\r\n this.updateStepDown(stepDown);\r\n this.adocReset();\r\n this.matchSliderToStepDown(stepDown);\r\n this.adocSlider['disabled'] = false;\r\n });\r\n } else {\r\n this.adocSlider['disabled'] = false;\r\n stepDown = (100 * this.settingsHolder.tool.lengthOfCut) / this.settingsHolder.tool.cutterDiameter;\r\n this.updateStepDown(stepDown);\r\n this.matchSliderToStepDown(stepDown);\r\n }\r\n }\r\n }\r\n\r\n if (updateADOC) {\r\n this.updateADOC((stepDown * this.settingsHolder.tool.cutterDiameter) / 100);\r\n }\r\n if (setRdoc) {\r\n this.setRDOC(undefined, updateCutWidth);\r\n }\r\n }\r\n };\r\n\r\n finMessage = (cutWidthType: CutWidthType, cutWidthValue: number): number => {\r\n let fixedCutWidth: number;\r\n switch (cutWidthType) {\r\n case CutWidthType.RADIAL_CUT_DEPTH:\r\n fixedCutWidth = cutWidthValue;\r\n break;\r\n\r\n case CutWidthType.STEPOVER:\r\n fixedCutWidth = (this.settingsHolder.tool.cutterDiameter * cutWidthValue) / 100;\r\n break;\r\n\r\n case CutWidthType.ENGAGEMENT_ANGLE:\r\n fixedCutWidth = this.conversionFormulas.convertTeaToRdoc(\r\n cutWidthValue,\r\n this.settingsHolder.tool.cutterDiameter\r\n );\r\n break;\r\n }\r\n\r\n if (1.5 * this.formulas.calculateFinishWallStock(this.settingsHolder.tool.cutterDiameter) < fixedCutWidth) {\r\n fixedCutWidth = this.formulas.calculateFinishWallStock(this.settingsHolder.tool.cutterDiameter);\r\n\r\n let message: Message = {\r\n title: `Your ${cutWidthType} is too high for finishing!`,\r\n message: 'Would you like to change your tool path to HEM?'\r\n };\r\n\r\n if (this.warningAlerts && !this.finMessageWarning) {\r\n this.finMessageWarning = true;\r\n this.utils.openDialog(\r\n message,\r\n 'confirm',\r\n () => {\r\n this.finMessageWarning = false;\r\n\r\n this.commonService.notifyOther({\r\n option: 'changeToolPath',\r\n value: 'High Efficiency Milling'\r\n });\r\n //need to report back to container to let operation know\r\n this.cutWidth = this.Parameters.get('rdocdecimal').value;\r\n // need to set slider to correct position\r\n this.matchSliderToStepDown(this.Parameters.get('stepDown').value);\r\n this.setProfile(true, false);\r\n },\r\n () => {\r\n this.adocReset();\r\n this.cutWidth = this.Parameters.get('rdocdecimal').value;\r\n this.rdocReset();\r\n this.finMessageWarning = false;\r\n }\r\n );\r\n }\r\n }\r\n return this.cutWidth;\r\n };\r\n\r\n slotMessage = (cutWidthType: string) => {\r\n if (this.mapMode !== 1) {\r\n // We don't want this to run if user isn't in map mode 1\r\n return;\r\n }\r\n \r\n let messageStr = '';\r\n switch (cutWidthType.toLowerCase()) {\r\n case 'rdoc':\r\n messageStr = 'Radial cut depth must be less than endmill diameter!';\r\n break;\r\n\r\n case 'stepover':\r\n messageStr = 'Stepover must be less than 100%!';\r\n break;\r\n\r\n case 'engagement angle':\r\n messageStr = 'Engagement angle must be less than 180°!';\r\n break;\r\n }\r\n\r\n messageStr = messageStr + ' Would you like to change the tool path to slotting?';\r\n\r\n let message: Message = {\r\n title: cutWidthType + ' must be less than endmill diameter!',\r\n message: messageStr\r\n };\r\n\r\n if (this.settingsHolder.currenttoolpath.operationName.toLowerCase().indexOf('slotting') < 0) {\r\n if (this.warningAlerts) {\r\n this.warningMessageOpen = true;\r\n this.utils.openDialog(\r\n message,\r\n 'confirm',\r\n chose => {\r\n this.warningMessageOpen = false;\r\n //need to report back to container to let operation know\r\n this.commonService.notifyOther({\r\n option: 'changeToolPath',\r\n value: 'Full Slotting'\r\n });\r\n this.setProfile(true, false);\r\n this.cutWidth = this.Parameters.get('rdocdecimal').value;\r\n this.aggressiveFlag = false; // change to slotting to its no longer aggressive\r\n },\r\n chose => {\r\n this.warningMessageOpen = false;\r\n //need to report back to container to let operation know\r\n this.setProfile(true, false);\r\n this.cutWidth = this.Parameters.get('rdocdecimal').value;\r\n this.warningAlerts = true;\r\n this.aggressiveFlag = false;\r\n setTimeout(() => {\r\n this.defaultSliderADOCDisabled = true;\r\n this.defaultSliderRDOCDisabled = true;\r\n });\r\n this.adocReset();\r\n this.setRDOC();\r\n }\r\n );\r\n }\r\n }\r\n };\r\n\r\n updateHoleDepth = (notify: boolean = true) => {\r\n let holeDepth = this.Parameters.get('holeDepth').value;\r\n if (holeDepth > 0) {\r\n //might have to update the adoc slider\r\n if (this.settingsHolder.currenttoolpath.operationName === 'Helical Plunge') {\r\n this.adocMax = (this.adocMax * holeDepth) / this.settingsHolder.tool.lengthOfCut;\r\n }\r\n }\r\n if (notify) {\r\n this.emitData();\r\n }\r\n };\r\n\r\n maxRDOCmessage = () => {\r\n if (this.mapMode !== 1) {\r\n // We don't want this to run if user isn't in map mode 1\r\n return;\r\n }\r\n\r\n // cautionRDOC.Visible = false; we might have to add a caution icon somewhere\r\n let toolEngAng = this.Parameters.get('engagementAngle').value;\r\n let minEngAng = 17.5 - (90 * this.settingsHolder.tool.rake) / math.PI;\r\n if (toolEngAng < minEngAng) {\r\n let messageStr = 'Your radial depth of cut is too low and';\r\n messageStr = messageStr + ' may cause the tool to rub instead of cut.';\r\n let message: Message = {\r\n title: 'RDOC too Low',\r\n message: messageStr\r\n };\r\n if (this.warningAlerts) {\r\n this.utils.openDialog(message, 'error');\r\n }\r\n this.setProfile(true, false);\r\n } else {\r\n let roundFactor = this.formulas.emRoundFactor(this.settingsHolder.tool.cutterDiameter);\r\n let radDepth = this.Parameters.get('rdocdecimal').value;\r\n let axDepth = math.round(this.Parameters.get('adocdecimal').value, 3);\r\n let maxEngageAng = this.formulas.calculateMaxEngageAngle(\r\n this.settingsHolder.tool,\r\n axDepth,\r\n this.settingsHolder.material,\r\n this.settingsHolder.hardness.hra\r\n );\r\n let maxRdoc =\r\n roundFactor *\r\n math.round(\r\n this.conversionFormulas.convertTeaToRdoc(maxEngageAng, this.settingsHolder.tool.cutterDiameter) / roundFactor,\r\n 2\r\n );\r\n this.maxRDOC = maxRdoc;\r\n\r\n let messageStr = 'The current parameters may cause catastrophic tool failure. ';\r\n messageStr = messageStr + 'Be mindful of chip evacuation when using a radial depth of cut ';\r\n messageStr = messageStr + 'that exceeds ' + maxRdoc + '\\x22 for this tool and setup.';\r\n let filletRadius = 0;\r\n if (this.settingsHolder.recommendationFields === 2 || this.settingsHolder.recommendationFields === 1) {\r\n if (this.settingsHolder.recommendationForm) {\r\n if (this.settingsHolder.recommendationFields === 2) {\r\n filletRadius = this.settingsHolder.recommendationForm.get('type2').get('trochoidalSlotWidth').value / 2;\r\n } else {\r\n filletRadius = this.settingsHolder.recommendationForm.get('type1').get('insideCornerRadiusOfWall').value;\r\n }\r\n }\r\n if (!isNaN(filletRadius)) {\r\n messageStr = 'The current parameters may cause catastrophic tool failure.
';\r\n \r\n if (this.maxRDOC > 0) {\r\n messageStr = `${messageStr}Be mindful of chip evacuation when using a radial depth of cut that exceeds: ${this.maxRDOC} for this tool and setup
`;\r\n }\r\n\r\n //TODO: Adding back in the reworked logic from PO for the minimum wall width/min slot width\r\n\r\n if (\r\n radDepth > this.maxRDOC ||\r\n (this.currentPath === 'Trochoidal Slotting' && this.Parameters.get('engagementAngle').value >= 180)\r\n ) {\r\n if (this.warningAlerts && !this.aggressiveFlag) {\r\n this.aggressiveFlag = true;\r\n this.sliderDisabled = true;\r\n this.sliderRdocDisabled = true;\r\n let message: Message = {\r\n title: 'Warning!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(\r\n message,\r\n 'error',\r\n () => {\r\n this.sliderDisabled = false;\r\n this.sliderRdocDisabled = false;\r\n },\r\n () => {\r\n this.sliderDisabled = false;\r\n this.sliderRdocDisabled = false;\r\n }\r\n );\r\n }\r\n } else {\r\n this.aggressiveFlag = false;\r\n this.sliderDisabled = this.adocLocked;\r\n this.sliderRdocDisabled = this.rdocLocked;\r\n }\r\n }\r\n } else {\r\n if (radDepth > this.maxRDOC) {\r\n if (\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.material\r\n ) {\r\n if (this.settingsHolder.material['chosenCondition']) {\r\n if (this.warningAlerts && !this.aggressiveFlag) {\r\n this.aggressiveFlag = true;\r\n this.sliderDisabled = true;\r\n this.sliderRdocDisabled = true;\r\n let message: Message = {\r\n title: 'Catastrophic tool failure!',\r\n message: messageStr\r\n };\r\n this.utils.openDialog(\r\n message,\r\n 'error',\r\n () => {\r\n this.sliderDisabled = false;\r\n this.sliderRdocDisabled = false;\r\n },\r\n () => {\r\n this.sliderDisabled = false;\r\n this.sliderRdocDisabled = false;\r\n }\r\n );\r\n }\r\n }\r\n }\r\n } else {\r\n this.aggressiveFlag = false;\r\n this.sliderDisabled = this.adocLocked;\r\n this.sliderRdocDisabled = this.rdocLocked;\r\n }\r\n }\r\n }\r\n };\r\n\r\n toolSwap = () => {\r\n this.mapMode = this.settingsHolder.mapMode;\r\n let toolEnd = this.settingsHolder.tool.end;\r\n let millBit = undefined;\r\n this.toolImage = '';\r\n this.toolImageHeight = 0;\r\n\r\n if (this.settingsHolder.tool.toolImageUrl.length > 0) {\r\n this.toolImage = this.settingsHolder.tool.toolImageUrl;\r\n } else {\r\n if (toolEnd.indexOf('Ball-Nosed') > -1) {\r\n millBit = this.constants.getMillBitByName('Ball-Nosed');\r\n } else if (toolEnd.indexOf('Square') > -1) {\r\n millBit = this.constants.getMillBitByName('Square');\r\n } else if (toolEnd.indexOf('Chamfer') > -1) {\r\n millBit = this.constants.getMillBitByName('Chamfer');\r\n } else if (toolEnd.indexOf('Bull-Nosed') > -1) {\r\n millBit = this.constants.getMillBitByName('Bull-Nosed');\r\n } else {\r\n millBit = this.imageConstants.unavailableToolImage;\r\n }\r\n\r\n if (millBit) {\r\n this.toolImage = millBit.getImage();\r\n this.toolImageHeight = this.isApp ? millBit.getMobilePercentageHeight() : millBit.getPercentHeight();\r\n this.toolImageWidth = this.isApp ? millBit.getMobilePercentageWidth() : millBit.getPercentWidth();\r\n }\r\n }\r\n };\r\n\r\n navigateToPage = url => {\r\n if (this.isApp) {\r\n cordova.InAppBrowser.open(url, '_system');\r\n } else {\r\n window.open(url);\r\n }\r\n };\r\n}\r\n","import { Component, EventEmitter, Output, HostListener, AfterViewInit } from '@angular/core';\r\nimport { Platform } from '@ionic/angular';\r\nimport { AndroidPermissions } from '@ionic-native/android-permissions/ngx';\r\nimport { File } from '@ionic-native/file/ngx';\r\nimport { FileOpener } from '@ionic-native/file-opener/ngx';\r\nimport { FormBuilder, FormControl, FormGroup, Validators, AbstractControl } from '@angular/forms';\r\nimport { Subscription, forkJoin } from 'rxjs';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport _ from 'lodash';\r\nimport math from 'mathjs';\r\nimport { Utils } from '../../../service/utils';\r\nimport { Constants, BasicObject } from '../../../service/constants';\r\nimport { CommonService } from '../../../service/common.service';\r\nimport {\r\n ToolContainer,\r\n Material_,\r\n Recommendation_,\r\n Parameters_,\r\n Machine_,\r\n RecommendationLabel,\r\n ParameterLabel,\r\n PdfSupportInfo\r\n} from '../../../service/formulas/objects';\r\nimport { Formulas } from '../../../service/formulas/formulas';\r\nimport { ConversionFormulas } from '../../../service/formulas/conversionsFormulas';\r\nimport { Message } from '../../../service/dialog/message.interface';\r\nimport { ImageConstants } from '../../../service/image-constants';\r\nimport jsPDF from 'jspdf';\r\nimport { CacheService } from 'ionic-cache';\r\n\r\n@Component({\r\n selector: 'section-recommendations',\r\n templateUrl: 'recommendations.html',\r\n styleUrls: ['recommendations.scss']\r\n})\r\nexport class Recommendations implements AfterViewInit {\r\n private isApp: boolean;\r\n public windowsDimensions: object = undefined;\r\n\r\n private sliderFormatter = {\r\n to: (value: number) => {\r\n const percent = value - 100;\r\n const prefix = percent > 0 ? '+' : '';\r\n return `${prefix}${percent}%`;\r\n },\r\n from: (value: string) => {\r\n const percent = Number(value.replace('+%', ''));\r\n return percent + 100;\r\n }\r\n };\r\n\r\n public sliderConfig: any = {\r\n connect: [true, false],\r\n start: 100,\r\n step: 1,\r\n range: {\r\n min: 80,\r\n max: 120\r\n }\r\n };\r\n\r\n public sliderConfigDesktop: any = {\r\n ...this.sliderConfig,\r\n orientation: 'vertical',\r\n direction: 'rtl',\r\n keyboard: true,\r\n pageSteps: 10,\r\n pips: {\r\n mode: 'values',\r\n values: [80, 85, 90, 95, 100, 105, 110, 115, 120],\r\n density: 2.5, // 100 / range\r\n stepped: true,\r\n format: this.sliderFormatter\r\n }\r\n };\r\n\r\n public currentMapMode: number = 1;\r\n public recommendationAdjustmentOptions: BasicObject[];\r\n public recommendationAdjustment: number = 0; // default to 0, the code will hardcode what the types are.\r\n private subscription: Subscription;\r\n public currenttoolpath: string = '';\r\n public Recommendations: FormGroup;\r\n public settingsHolder: ToolContainer;\r\n private spindleSpeed: number = undefined;\r\n private feedRate: number = undefined;\r\n\r\n public standardSpeedValue: number = 0;\r\n public speedAggression: number = 1;\r\n public resetSpeedActive: boolean = false;\r\n\r\n public standardFeedValue: number = 0;\r\n public feedAggression: number = 1;\r\n public resetFeedActive: boolean = false;\r\n\r\n private fixture: number = 0;\r\n private fixtureChange: boolean = false;\r\n private machine: Machine_ = new Machine_();\r\n public recommendation: Recommendation_ = new Recommendation_();\r\n private updateRecommendations: updateRecommendations = new updateRecommendations();\r\n private parameters: Parameters_;\r\n private warningAlerts: boolean = false;\r\n private warningMessageOpen: boolean = false;\r\n\r\n public mapMode: number;\r\n public machineTabFilledIn: boolean = false;\r\n public holderFactor: number;\r\n public holderFeedFactor: number;\r\n public spindleFactor: number;\r\n //variables for generating pdf\r\n public distName: string = '';\r\n public distCompany: string = '';\r\n public endUser: string = '';\r\n public endUserCompany: string = '';\r\n public renderRecommendations: boolean = false;\r\n public headerImage: HTMLImageElement = new Image();\r\n public helicalImg: HTMLImageElement = new Image();\r\n public muSymbol: HTMLImageElement = new Image();\r\n public xTitleLeft: number = 15;\r\n public xInfoLeft: number = 50;\r\n public xTitleRight: number = 115;\r\n public xInfoRight: number = 145;\r\n public maxLineWidth: number = 65;\r\n public insideCornerType: string = '';\r\n public sfmRation: number = 1;\r\n public fptRation: number = 1;\r\n public pdfSupportInfo: { [brandKey: number]: PdfSupportInfo[] };\r\n\r\n @Output() recommendationChange: EventEmitter = new EventEmitter();\r\n @Output() recommendationChangeWithChild: EventEmitter = new EventEmitter();\r\n @Output() aggressiveWarning: EventEmitter = new EventEmitter();\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n this.onResize();\r\n }\r\n\r\n constructor(\r\n private androidPermissions: AndroidPermissions,\r\n private file: File,\r\n private fileOpener: FileOpener,\r\n private platform: Platform,\r\n public utils: Utils,\r\n private formBuilder: FormBuilder,\r\n public constants: Constants,\r\n private commonService: CommonService,\r\n private formulas: Formulas,\r\n private conversionsFormulas: ConversionFormulas,\r\n private cache: CacheService,\r\n public imageConstants: ImageConstants\r\n ) {\r\n this.isApp = this.utils.isApp();\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n }\r\n\r\n this.cache.getItem('pdfSupportInfo').then(info => (this.pdfSupportInfo = info));\r\n\r\n this.recommendationAdjustmentOptions = this.constants.getRecommendationAdjustmentOption();\r\n\r\n this.Recommendations = this.formBuilder.group({\r\n type1: this.formBuilder.group({\r\n insideCornerRadiusOfWall: new FormControl('', [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX)]),\r\n insideCornerType: new FormControl('', [Validators.required])\r\n }),\r\n type2: this.formBuilder.group({\r\n trochoidalSlotWidth: new FormControl('', [Validators.pattern(this.constants.DECIMAL_ONLY_REGEX)])\r\n }),\r\n speedInput: this.sliderConfig.start,\r\n speedSlider: this.sliderConfig.start,\r\n feedInput: this.sliderConfig.start,\r\n feedSlider: this.sliderConfig.start\r\n });\r\n\r\n this.headerImage.src = imageConstants.machiningAdvisorColor;\r\n this.helicalImg.src = imageConstants.helicalLogo;\r\n this.muSymbol.src = imageConstants.muSymbol;\r\n }\r\n\r\n /**\r\n * @param speedAggression The user-selected multiplier applied to speed\r\n */\r\n private updateSpeedAggression = (speedAggression: number) => {\r\n this.speedAggression = speedAggression;\r\n this.recommendation.speedAggression = speedAggression;\r\n\r\n // Enable or disable the reset button\r\n this.resetSpeedActive = speedAggression !== 1;\r\n\r\n // Recalculate based on updated aggression value\r\n this.recommendation.rpm = this.standardSpeedValue * this.speedAggression;\r\n\r\n this.updateRecommendations.rpm = false;\r\n this.updateRecommendations.ipm = true;\r\n this.updateRecommendations.ipmAdjusted = false;\r\n this.updateRecommendations.rpmAdjusted = true;\r\n\r\n if (this.parameters && !!this.settingsHolder.tool) {\r\n if (this.parameters.cutterDiameter) {\r\n const surfaceSpeed = parseFloat(\r\n this.conversionsFormulas.convertRpmToSfm(this.recommendation.rpm, this.getDiameterForSurfaceSpeed()).toString()\r\n );\r\n\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName === 'Helical Plunge'\r\n ) {\r\n this.plungingParameters(undefined, this.recommendation.rpm, this.recommendation.ipm, surfaceSpeed);\r\n } else {\r\n this.millingParameters(\r\n undefined,\r\n this.recommendation.rpm,\r\n this.recommendation.ipm,\r\n surfaceSpeed,\r\n undefined,\r\n this.recommendation.trochoidalSlotWidth\r\n );\r\n }\r\n } else {\r\n this.plungingParameters(undefined, this.recommendation.rpm, this.recommendation.ipm, undefined);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * @param feedAggression The user-selected multiplier applied to feed\r\n */\r\n private updateFeedAggression = (feedAggression: number) => {\r\n this.feedAggression = feedAggression;\r\n this.recommendation.feedAggression = feedAggression;\r\n\r\n // Enable or disable the reset button\r\n this.resetFeedActive = feedAggression !== 1;\r\n\r\n // Recalculate based on updated aggression value\r\n this.recommendation.ipm = this.standardFeedValue * this.feedAggression;\r\n\r\n this.updateRecommendations.rpm = false;\r\n this.updateRecommendations.ipm = false;\r\n this.updateRecommendations.ipmAdjusted = true;\r\n this.updateRecommendations.rpmAdjusted = false;\r\n\r\n if (this.parameters && !!this.settingsHolder.tool) {\r\n const surfaceSpeed = parseFloat(\r\n this.conversionsFormulas.convertRpmToSfm(this.recommendation.rpm, this.getDiameterForSurfaceSpeed()).toString()\r\n );\r\n\r\n if (\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName === 'Helical Plunge'\r\n ) {\r\n this.plungingParameters(undefined, this.recommendation.rpm, this.recommendation.ipm, undefined);\r\n } else {\r\n this.millingParameters(\r\n undefined,\r\n this.recommendation.rpm,\r\n this.recommendation.ipm,\r\n surfaceSpeed,\r\n undefined,\r\n this.recommendation.trochoidalSlotWidth\r\n );\r\n }\r\n }\r\n };\r\n\r\n pdfClick = $event => {\r\n let messageStr = 'Fill in Distributor Information and Click OK';\r\n forkJoin(this.cache.getItem('loginInfo')).subscribe(res => {\r\n let message: Message = {\r\n title: 'Please Enter Distributor Information',\r\n message: messageStr,\r\n user: res[0].firstName + ' ' + res[0].lastName,\r\n company: res[0].company\r\n };\r\n setTimeout(() => {\r\n this.utils.openDialog(message, 'pdfinfo');\r\n }, 500);\r\n });\r\n };\r\n\r\n makeid = () => {\r\n var text = '';\r\n var possible = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\r\n\r\n for (var i = 0; i < 5; i++) text += possible.charAt(Math.floor(Math.random() * possible.length));\r\n\r\n return text;\r\n };\r\n\r\n savePDF = (doc: any, name: string) => {\r\n // does the saving of the PDF\r\n let pdfOutput = doc.output();\r\n let buffer = new ArrayBuffer(pdfOutput.length);\r\n let array = new Uint8Array(buffer);\r\n for (let i = 0; i < pdfOutput.length; i++) {\r\n array[i] = pdfOutput.charCodeAt(i);\r\n }\r\n\r\n let directory = '';\r\n\r\n if (!this.platform.is('ios') && !this.platform.is('android')) {\r\n //assume its web\r\n doc.save(name + '.pdf');\r\n } else {\r\n if (this.platform.is('ios')) {\r\n directory = this.file.documentsDirectory; // ios directory\r\n } else if (this.platform.is('android')) {\r\n directory = this.file.externalRootDirectory + '/Download/'; // android directory\r\n }\r\n //Name of pdf\r\n let fileName = name + '-' + this.makeid() + '.pdf';\r\n\r\n this.file\r\n .writeFile(directory, fileName, buffer)\r\n .then(success => {\r\n console.log('File created Succesfully' + JSON.stringify(success));\r\n this.fileOpener\r\n .open(directory + fileName, 'application/pdf')\r\n .then(() => console.log('File is opened'))\r\n .catch(e => console.log('Error openening file', e));\r\n })\r\n .catch(error => console.log('Cannot Create File ' + JSON.stringify(error)));\r\n }\r\n\r\n // Log data for user if user tries to save the PDF\r\n this.commonService.notifyOther({\r\n option: 'logdata',\r\n value: {\r\n logLocation: 'pdf'\r\n }\r\n });\r\n };\r\n\r\n generatePdf = () => {\r\n let doc = new jsPDF();\r\n\r\n doc.setFont('helvetica');\r\n\r\n // Generate Header, logos, set line dividers and set disclaimer\r\n this.generateHeaderAndLogos(doc);\r\n this.generatePdfDividers(doc);\r\n this.generateDisclaimer(doc);\r\n\r\n // Set doc font size, style and color and generate all section titles for the pdf\r\n doc.setFontSize(10);\r\n doc.setFont('helvetica', 'bold');\r\n doc.setTextColor(37, 65, 112);\r\n this.generatePdfSectionTitles(doc);\r\n\r\n // Set doc font size, style and color for all of the information in the pdf\r\n // Utils append text function will handle if the color needs to be adjusted\r\n doc.setTextColor(0);\r\n doc.setFontSize(8);\r\n doc.setFont('helvetica', 'normal');\r\n\r\n const userToolPath: string = this.settingsHolder.currenttoolpath\r\n ? this.settingsHolder.currenttoolpath.operationName.toLowerCase()\r\n : '';\r\n\r\n this.generateUserInfo(doc);\r\n this.generateTool(doc);\r\n this.generateMaterial(doc);\r\n this.generateOperation(doc);\r\n this.generateMachine(doc);\r\n this.generateParameters(doc, userToolPath);\r\n this.generateRecommendations(doc, userToolPath);\r\n\r\n let name = this.settingsHolder.tool.itemId + '-' + this.settingsHolder.tool.description;\r\n if (this.isApp && this.platform.is('android')) {\r\n this.androidPermissions.checkPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE).then(\r\n result => {\r\n console.log('Has permission?', result.hasPermission);\r\n if (!result.hasPermission) {\r\n this.androidPermissions\r\n .requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE)\r\n .then(() => {\r\n // has no permission so, will ask for permission first\r\n this.savePDF(doc, name);\r\n });\r\n } else {\r\n this.savePDF(doc, name);\r\n }\r\n },\r\n err => this.androidPermissions.requestPermission(this.androidPermissions.PERMISSION.WRITE_EXTERNAL_STORAGE)\r\n );\r\n } else {\r\n // web\r\n this.savePDF(doc, name);\r\n }\r\n\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Save PDF');\r\n }\r\n };\r\n\r\n generateHeaderAndLogos = (doc: jsPDF) => {\r\n const brandKeySupportInfo = this.pdfSupportInfo.hasOwnProperty(this.settingsHolder.tool.brandKey)\r\n ? this.pdfSupportInfo[this.settingsHolder.tool.brandKey]\r\n : [];\r\n // Logo and Company Info\r\n doc.addImage(this.headerImage, 'png', 15, 22, 69, 17);\r\n doc.addImage(this.helicalImg, 'png', 131, 284, 23, 3);\r\n doc.setFontSize(13);\r\n doc.setFont('helvetica', 'bold');\r\n doc.setTextColor(37, 65, 112);\r\n doc.text('www.machiningadvisorpro.com', 15, 43);\r\n doc.text('Application Summary Report', 100, 25);\r\n doc.setTextColor(0);\r\n doc.setFontSize(8);\r\n doc.setFont('helvetica', 'normal');\r\n doc.text('Date:', 100, 30);\r\n let date = new Date().toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' });\r\n doc.text(date, 135, 30);\r\n let infyYPostion = 37;\r\n brandKeySupportInfo.forEach(info => {\r\n doc.text(info.supportName + ':', 100, infyYPostion);\r\n doc.text(info.supportPhoneNumber + ' | ' + info.supportEmail, 135, infyYPostion);\r\n infyYPostion += 5;\r\n });\r\n };\r\n\r\n generatePdfSectionTitles = (doc: jsPDF) => {\r\n doc.text('END USER', this.xTitleLeft, 68);\r\n doc.text('DISTRIBUTOR', this.xTitleRight, 68);\r\n doc.text('TOOL', this.xTitleLeft, 97);\r\n doc.text('MATERIAL', this.xTitleRight, 97);\r\n doc.text('OPERATION', this.xTitleRight, 136);\r\n doc.text('MACHINE', this.xTitleRight, 164);\r\n doc.text('PARAMETERS', this.xTitleLeft, 213);\r\n doc.text('RECOMMENDATIONS', this.xTitleRight, 213);\r\n };\r\n\r\n generatePdfDividers = (doc: jsPDF) => {\r\n // Set line dividers for pdf\r\n doc.setLineWidth(1);\r\n doc.setDrawColor(37, 65, 112);\r\n doc.line(15, 89, 195, 89);\r\n doc.line(15, 206, 195, 206);\r\n };\r\n\r\n generateUserInfo = (doc: jsPDF) => {\r\n let userTitlesTitles = ['End User Name:', 'End User Company:'];\r\n\r\n let userTitlesInfo = [this.endUser, this.endUserCompany];\r\n\r\n let distributorTitles = ['Distributor Name:', 'Distributor Company:'];\r\n\r\n let distributorInfo = [this.distName, this.distCompany];\r\n\r\n this.utils.listPdfText(doc, userTitlesTitles, this.xTitleLeft, 75, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, distributorTitles, this.xTitleRight, 75, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, userTitlesInfo, this.xInfoLeft, 75, this.maxLineWidth, 'info');\r\n this.utils.listPdfText(doc, distributorInfo, this.xInfoRight, 75, this.maxLineWidth, 'info');\r\n };\r\n\r\n generateTool = (doc: jsPDF) => {\r\n const toolTitles = [];\r\n const toolInfo = [];\r\n let toolUrl = '';\r\n let toolNumber = '';\r\n this.settingsHolder.tool.toolDetails.forEach(td => {\r\n toolTitles.push(td.itemName);\r\n toolInfo.push(td.itemValue);\r\n\r\n // Only item with a url is the tool #. Getting it here to build out the tool url\r\n if (td.itemName.includes('Tool #')) {\r\n toolUrl = td.itemUrl;\r\n toolNumber = td.itemName;\r\n }\r\n });\r\n\r\n this.utils.listPdfText(doc, toolTitles, this.xTitleLeft, 104, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, toolInfo, this.xInfoLeft, 104, this.maxLineWidth, 'info');\r\n\r\n /* getStringUnitWidth returns string width as 1pt font size. To get the width for the font size we are using\r\n we need to multiple that result by 8. We are using default units for the pdf, mm, so we need to convert the length\r\n to that by divinding by 72/25.6 to get mm*/\r\n doc.setTextColor(0);\r\n doc.setLineWidth(0.25);\r\n doc.setDrawColor(0, 0, 0);\r\n const lineArray: [] = doc.splitTextToSize(toolNumber, this.maxLineWidth);\r\n let lineUnderlineYCord = 111.5;\r\n lineArray.forEach(line => {\r\n const lineDimension = (doc.getStringUnitWidth(line) * 8) / (72 / 25.6);\r\n doc.line(this.xInfoLeft, lineUnderlineYCord, this.xInfoLeft + lineDimension, lineUnderlineYCord);\r\n doc.link(this.xInfoLeft, lineUnderlineYCord - 4, lineDimension, 5, { url: toolUrl });\r\n lineUnderlineYCord += 3;\r\n });\r\n };\r\n\r\n generateMaterial = (doc: jsPDF) => {\r\n let materialTitles = ['Material:', 'Subgroup:', 'Condition:', 'Hardness:'];\r\n\r\n let materialInfo = [\r\n this.settingsHolder.material.subGroup,\r\n this.settingsHolder.material.name + ' (UNS ' + this.settingsHolder.material.uns + ')',\r\n this.settingsHolder.material.condition,\r\n Math.round(this.settingsHolder.material.hrc) +\r\n ' HRC (' +\r\n this.settingsHolder.material.hardness +\r\n ' ' +\r\n this.settingsHolder.material.hardnessFactor +\r\n ')'\r\n ];\r\n\r\n this.utils.listPdfText(doc, materialTitles, this.xTitleRight, 104, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, materialInfo, this.xInfoRight, 104, this.maxLineWidth, 'info');\r\n };\r\n\r\n generateOperation = (doc: jsPDF) => {\r\n let operationTitles = ['Type:', 'Tool Path:'];\r\n let operationInfo = [\r\n this.settingsHolder.selectedOperation || '',\r\n this.settingsHolder.currenttoolpath ? this.settingsHolder.currenttoolpath.operationName : ''\r\n ];\r\n\r\n if (this.settingsHolder.hasStrategyOption && this.settingsHolder.currentStrategy) {\r\n operationTitles.push('Strategy:');\r\n operationInfo.push(this.settingsHolder.currentStrategy.operationName || '');\r\n }\r\n\r\n this.utils.listPdfText(doc, operationTitles, this.xTitleRight, 143, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, operationInfo, this.xInfoRight, 143, this.maxLineWidth, 'info');\r\n };\r\n\r\n generateMachine = (doc: jsPDF) => {\r\n let machineTitles = ['Spindle:', 'Holder:', 'Max RPM:', 'Max IPM:', 'Workholding Rigidity:'];\r\n\r\n let maxRpm = this.settingsHolder.machine.maxRPM ? this.settingsHolder.machine.maxRPM : 'N/A';\r\n let maxIpm = this.settingsHolder.machine.maxIPM ? this.settingsHolder.machine.maxIPM : 'N/A';\r\n\r\n let machineInfo = [\r\n this.settingsHolder.machine.spindle,\r\n this.settingsHolder.machine.holder,\r\n maxRpm,\r\n maxIpm,\r\n this.settingsHolder.machine.fixtureBar + '%'\r\n ];\r\n\r\n this.utils.listPdfText(doc, machineTitles, this.xTitleRight, 171, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, machineInfo, this.xInfoRight, 171, this.maxLineWidth, 'info');\r\n };\r\n\r\n generateParameters = (doc: jsPDF, userToolPath: string) => {\r\n let parameterTitles = [];\r\n let parameterInfo = [];\r\n let parameterHyperlink = [];\r\n if (this.mapMode === 1) {\r\n switch (userToolPath) {\r\n case 'chamfering':\r\n parameterTitles = ['Stick Out:', 'Effective Diameter:', 'Chamfer Height:', 'Chamfer Width:'];\r\n parameterInfo = [\r\n this.settingsHolder.parameters.stickOut,\r\n this.settingsHolder.parameters.effectiveDiameter,\r\n this.settingsHolder.parameters.chamferHeight,\r\n this.settingsHolder.parameters.chamferWidth\r\n ];\r\n break;\r\n case '3d surfacing':\r\n let muOffset =\r\n 0.5 +\r\n this.xInfoLeft +\r\n (doc.getStringUnitWidth(this.settingsHolder.parameters.scallopHeight.toString()) * doc.getFontSize()) /\r\n doc.internal.scaleFactor;\r\n doc.addImage(this.muSymbol, 'png', muOffset, 231.2, 3.5, 3.5);\r\n parameterTitles = ['Stick Out:', 'Axial Depth:', 'Scallop Height (Ra):', 'Tool Stepover:'];\r\n parameterInfo = [\r\n this.settingsHolder.parameters.stickOut,\r\n this.settingsHolder.parameters.adocdecimal +\r\n ' (' +\r\n this.settingsHolder.parameters.stepDown +\r\n '% step down)',\r\n this.settingsHolder.parameters.scallopHeight + ' in',\r\n this.settingsHolder.parameters.scallopWidth\r\n ];\r\n break;\r\n case 'helical plunge':\r\n parameterTitles = ['Stick Out:', 'Ramp Angle:', 'Path Diameter:', 'Hole Depth:'];\r\n parameterInfo = [\r\n this.settingsHolder.parameters.stickOut,\r\n this.settingsHolder.parameters.rampAngle,\r\n this.settingsHolder.parameters.pathDiameter,\r\n this.settingsHolder.parameters.holeDepth\r\n ];\r\n break;\r\n default:\r\n parameterTitles = ['Stick Out:', 'Axial Depth:', 'Radial Depth:', 'Engagement Angle:'];\r\n parameterInfo = [\r\n this.settingsHolder.parameters.stickOut,\r\n this.settingsHolder.parameters.adocdecimal +\r\n ' (' +\r\n this.settingsHolder.parameters.stepDown +\r\n '% step down)',\r\n this.settingsHolder.parameters.rdocdecimal +\r\n ' (' +\r\n this.settingsHolder.parameters.stepOver +\r\n '% step over)',\r\n this.settingsHolder.parameters.engagementAngle + '°'\r\n ];\r\n break;\r\n }\r\n } else if (this.mapMode === 2) {\r\n const mapModeTwoParams: ParameterLabel[] = this.settingsHolder.mapModeTwoValues\r\n ? this.settingsHolder.mapModeTwoValues.parameterLabels\r\n : [];\r\n mapModeTwoParams.forEach(par => {\r\n parameterTitles.push(par.parameterLabel + ':');\r\n parameterInfo.push(par.parameterValue);\r\n parameterHyperlink.push(par.parameterHyperlink);\r\n });\r\n }\r\n\r\n this.utils.listPdfText(doc, parameterTitles, this.xTitleLeft, 220, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, parameterInfo, this.xInfoLeft, 220, this.maxLineWidth, 'info', parameterHyperlink);\r\n };\r\n\r\n generateRecommendations = (doc: jsPDF, userToolPath: string) => {\r\n let chipThickness = this.recommendation.chipThickness ? this.recommendation.chipThickness.toFixed(4) : '0';\r\n let recommendationsTitles = [];\r\n let recommendationsInfo = [];\r\n if (this.mapMode === 1) {\r\n switch (userToolPath) {\r\n case 'chamfering':\r\n recommendationsTitles = ['Surface Speed:', 'Speed:', 'Feed / Tooth:', 'Feed / Minute:'];\r\n recommendationsInfo = [\r\n math.round(this.recommendation.sfm, 0),\r\n math.round(this.recommendation.rpm, 0),\r\n math.round(this.recommendation.ipt, 4),\r\n math.round(this.recommendation.ipm, 0)\r\n ];\r\n break;\r\n case 'trochoidal slotting':\r\n recommendationsTitles = [\r\n 'Trochoidal Slot Width:',\r\n 'Surface Speed:',\r\n 'Speed:',\r\n 'Feed / Minute:',\r\n 'Chip Thickness:',\r\n 'MRR:'\r\n ];\r\n recommendationsInfo = [\r\n math.round(this.recommendation.trochoidalSlotWidth, 4),\r\n math.round(this.recommendation.sfm, 0),\r\n math.round(this.recommendation.rpm, 0),\r\n math.round(this.recommendation.ipmFeedInsideSlot, 0),\r\n chipThickness,\r\n math.round(this.recommendation.mrr, 3)\r\n ];\r\n break;\r\n case 'helical plunge':\r\n recommendationsTitles = ['Surface Speed:', 'Speed:', 'Feed / Tooth:', 'Feed / Minute:', 'MRR:'];\r\n recommendationsInfo = [\r\n math.round(this.recommendation.sfm, 0),\r\n math.round(this.recommendation.rpm, 0),\r\n math.round(this.recommendation.ipt, 4),\r\n math.round(this.recommendation.ipm, 0),\r\n math.round(this.recommendation.mrr, 3)\r\n ];\r\n break;\r\n case '3d surfacing':\r\n recommendationsTitles = ['Surface Speed:', 'Speed:', 'Feed / Tooth:', 'Feed / Minute:', 'Chip Thickness:'];\r\n recommendationsInfo = [\r\n math.round(this.recommendation.sfm, 0),\r\n math.round(this.recommendation.rpm, 0),\r\n math.round(this.recommendation.ipt, 4),\r\n math.round(this.recommendation.ipm, 0),\r\n chipThickness\r\n ];\r\n break;\r\n default:\r\n recommendationsTitles = [\r\n 'Surface Speed:',\r\n 'Speed:',\r\n 'Feed / Tooth:',\r\n 'Feed / Minute:',\r\n 'Chip Thickness:',\r\n 'MRR:'\r\n ];\r\n recommendationsInfo = [\r\n math.round(this.recommendation.sfm, 0),\r\n math.round(this.recommendation.rpm, 0),\r\n math.round(this.recommendation.ipt, 4),\r\n math.round(this.recommendation.ipm, 0),\r\n chipThickness,\r\n math.round(this.recommendation.mrr, 3)\r\n ];\r\n break;\r\n }\r\n } else if (this.mapMode === 2) {\r\n const mapModeTwoRecs: RecommendationLabel[] = this.settingsHolder.mapModeTwoValues\r\n ? this.settingsHolder.mapModeTwoValues.recommendationLabels\r\n : [];\r\n mapModeTwoRecs.forEach(rec => {\r\n recommendationsTitles.push(rec.recommendationLabel + ':');\r\n recommendationsInfo.push(\r\n math.round(this.calculateRecommendationValue(rec), Number(rec.recommendationPrecision))\r\n );\r\n });\r\n }\r\n\r\n this.utils.listPdfText(doc, recommendationsTitles, this.xTitleRight, 220, this.maxLineWidth, 'titles');\r\n this.utils.listPdfText(doc, recommendationsInfo, this.xInfoRight, 220, this.maxLineWidth, 'info');\r\n };\r\n\r\n generateDisclaimer = doc => {\r\n doc.setFontSize(7);\r\n doc.setTextColor(100);\r\n let disclaimer = 'NOTE: This application and the results it formulates are theoretical in nature. ';\r\n disclaimer += 'Harvey Performance Company, LLC assumes no responsibility. ';\r\n disclaimer += '© Copyright 2018 Harvey Performance Company, LLC.';\r\n doc.text(doc.splitTextToSize(disclaimer, 115), 15, 285);\r\n };\r\n\r\n onResize = () => {};\r\n\r\n emitData = (specificChild: string = undefined, origin: string = undefined, emit: boolean = true) => {\r\n let data = {\r\n recommendation: this.recommendation,\r\n recommendationForm: this.Recommendations\r\n };\r\n\r\n if (!!!specificChild) {\r\n this.recommendationChange.emit(data);\r\n } else {\r\n this.recommendationChangeWithChild.emit({\r\n specificChild: specificChild,\r\n origin: origin,\r\n data: data,\r\n emit: emit\r\n });\r\n }\r\n };\r\n\r\n resetSpeedSlider = () => {\r\n this.Recommendations.get('speedSlider').patchValue(this.sliderConfig.start, { emitEvent: true });\r\n };\r\n\r\n resetFeedSlider = () => {\r\n this.Recommendations.get('feedSlider').patchValue(this.sliderConfig.start, { emitEvent: true });\r\n };\r\n\r\n viewGCode = () => {\r\n this.utils.openDialog(\r\n {\r\n title: 'G-Code',\r\n message: '',\r\n data: {\r\n ipm: this.recommendation.ipm,\r\n pitch: this.settingsHolder.parameters.pitch,\r\n holeDepth: this.settingsHolder.parameters.holeDepth,\r\n pathRadius: this.settingsHolder.parameters.pathDiameter\r\n }\r\n },\r\n 'gcode'\r\n );\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('View G-Code');\r\n }\r\n };\r\n\r\n ngAfterViewInit() {\r\n setTimeout(() => {\r\n this.onResize();\r\n\r\n this.Recommendations.get('speedSlider').valueChanges.subscribe((speed: number) => {\r\n this.updateSpeedAggression(speed / 100);\r\n this.Recommendations.get('speedInput').patchValue(speed, { emitEvent: false });\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Speed (Slider)');\r\n }\r\n\r\n if (\r\n this.mapMode === 2 &&\r\n this.machine.holderAdjustment &&\r\n this.machine.spindleAdjustment &&\r\n this.settingsHolder.mapModeTwoValues &&\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels\r\n ) {\r\n const selectedHolderAdjustment = this.machine.holderAdjustment.find(ha => ha.adjust === 'SFM');\r\n const selectedSpindleAdjustment = this.machine.spindleAdjustment.find(sa => sa.adjust === 'FPT');\r\n\r\n this.sfmRation = this.formulas.calculateSfmRatio(\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n this.machine.maxRPM,\r\n this.speedAggression,\r\n this.feedAggression\r\n );\r\n this.fptRation = this.formulas.calculateFptRatio(\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n this.machine.maxIPM,\r\n this.speedAggression,\r\n this.feedAggression,\r\n this.sfmRation\r\n );\r\n }\r\n this.updateRecommendationsForDataLogging();\r\n });\r\n\r\n this.Recommendations.get('feedSlider').valueChanges.subscribe((feed: number) => {\r\n this.updateFeedAggression(feed / 100);\r\n this.Recommendations.get('feedInput').patchValue(feed, { emitEvent: false });\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Feed (Slider)');\r\n }\r\n\r\n if (\r\n this.mapMode === 2 &&\r\n this.machine.holderAdjustment &&\r\n this.machine.spindleAdjustment &&\r\n this.settingsHolder.mapModeTwoValues &&\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels\r\n ) {\r\n const selectedHolderAdjustment = this.machine.holderAdjustment.find(ha => ha.adjust === 'SFM');\r\n const selectedSpindleAdjustment = this.machine.spindleAdjustment.find(sa => sa.adjust === 'FPT');\r\n\r\n this.sfmRation = this.formulas.calculateSfmRatio(\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n this.machine.maxRPM,\r\n this.speedAggression,\r\n this.feedAggression\r\n );\r\n this.fptRation = this.formulas.calculateFptRatio(\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n this.machine.maxIPM,\r\n this.speedAggression,\r\n this.feedAggression,\r\n this.sfmRation\r\n );\r\n }\r\n this.updateRecommendationsForDataLogging();\r\n });\r\n\r\n this.Recommendations.get('type2')\r\n .get('trochoidalSlotWidth')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe((value: number) => {\r\n if (_.trim(value.toString()) !== '') {\r\n this.Recommendations.get('type2')\r\n .get('trochoidalSlotWidth')\r\n .patchValue(math.round(value, 4), { emitEvent: false });\r\n this.recommendation.trochoidalSlotWidth = math.round(value, 4);\r\n // need to emit to Parameters have it recalc, BUT don't update recommendation when it comes back\r\n // lets emitData directly to parameters, no need to tell any other widget\r\n this.commonService.notifyOther({\r\n option: 'trochoidalSlotWidthChange',\r\n value: this.settingsHolder\r\n }); // resetting all, all will listen for a \"RESET\"\r\n }\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Trochoidal Slot Width');\r\n }\r\n this.updateRecommendationsForDataLogging();\r\n });\r\n\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option') && res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n\r\n if (res.hasOwnProperty('option') && res.option === 'dialog') {\r\n if (res.value) {\r\n this.distName = res.value.distName;\r\n this.distCompany = res.value.distCompany;\r\n this.endUser = res.value.endUserName;\r\n this.endUserCompany = res.value.endUserCompany;\r\n this.generatePdf();\r\n }\r\n }\r\n\r\n if ((res.hasOwnProperty('option') && res.option == 'mapModeChanged') || res.option === 'clearToolPath') {\r\n if (this.settingsHolder) {\r\n this.mapMode = this.settingsHolder.mapMode;\r\n }\r\n }\r\n\r\n if (res.hasOwnProperty('option') && res.option === 'resetInsideCornerRadiusOfWall') {\r\n this.resetInsideCornerRadiusOfWall();\r\n }\r\n\r\n if (res.hasOwnProperty('option') && res.option === 'recommendations') {\r\n if (res.value.machine.hasOwnProperty('holderAdjustment') && !!res.value.machine.holderAdjustment) {\r\n const selectedHolderFactor = res.value.machine.holderAdjustment.find(ha => ha.adjust === 'Speed');\r\n const selectedHolderFeedFactor = res.value.machine.holderAdjustment.find(ha => ha.adjust === 'Feed');\r\n this.holderFactor = selectedHolderFactor ? selectedHolderFactor.factor : 0;\r\n this.holderFeedFactor = selectedHolderFeedFactor ? selectedHolderFeedFactor.factor : 0;\r\n }\r\n if (res.value.machine.hasOwnProperty('spindleAdjustment') && !!res.value.machine.spindleAdjustment) {\r\n const selectedSpindleFactor = res.value.machine.spindleAdjustment.find(sa => sa.adjust === 'Feed');\r\n this.spindleFactor = selectedSpindleFactor ? selectedSpindleFactor.factor : 0;\r\n }\r\n this.machineTabFilledIn = !!res.value.machine && !!res.value.machine.spindle && !!res.value.machine.holder;\r\n }\r\n\r\n if ((res.hasOwnProperty('option') && res.option === 'mapModeChanged') || res.option === 'clearToolPath') {\r\n this.currentMapMode = res.value.mapMode;\r\n }\r\n\r\n if (\r\n res.hasOwnProperty('option') &&\r\n (res.option === 'recommendations' ||\r\n res.option === 'parameterReportingToRecoomendation' ||\r\n res.option === 'trochoidalSlotWidthChangeBackToRecommendations')\r\n ) {\r\n if (res.value) {\r\n setTimeout(() => {\r\n if (res.origin !== 'recommendations') {\r\n const trochoidalSlotWidthChange = res.option === 'trochoidalSlotWidthChangeBackToRecommendations';\r\n\r\n //had to wrap it in a setTimeout, recommendations was being millingparameters was being called before parameters finished calc\r\n this.warningAlerts = res.warningAlerts;\r\n this.settingsHolder = res.value;\r\n // need to let parameters ONLY which recommendation field\r\n // only emit IF previous Recommendation field is different from current\r\n if (this.settingsHolder && this.warningAlerts) {\r\n if (this.settingsHolder.machine) {\r\n if (this.fixture !== this.settingsHolder.machine.fixtureBar) {\r\n this.fixture = this.settingsHolder.machine.fixtureBar;\r\n this.fixtureChange = true;\r\n }\r\n\r\n if (this.machine !== this.settingsHolder.machine) {\r\n this.machine = this.settingsHolder.machine;\r\n }\r\n }\r\n }\r\n\r\n // we need to look for it with the string\r\n if (this.settingsHolder.currenttoolpath || this.fixtureChange) {\r\n this.currenttoolpath = this.settingsHolder.currenttoolpath\r\n ? this.settingsHolder.currenttoolpath.operationName\r\n : '';\r\n this.recommendationAdjustment = this.settingsHolder.recommendationFields;\r\n //set the html so we need to give it some time\r\n if (this.currenttoolpath === 'Helical Plunge') {\r\n this.updateRecommendations.rpm = true;\r\n this.updateRecommendations.ipm = true;\r\n this.recommendation = {};\r\n this.plungingParameters(res.emit);\r\n this.standardSpeedValue = this.recommendation.rpm;\r\n this.standardFeedValue = this.recommendation.ipm;\r\n } else {\r\n this.updateRecommendations.rpm = true;\r\n this.updateRecommendations.ipm = true;\r\n this.recommendation = {};\r\n\r\n let trochoidalSlotWidth: number = undefined;\r\n if (this.currenttoolpath === 'Trochoidal Slotting') {\r\n if (trochoidalSlotWidthChange) {\r\n trochoidalSlotWidth = math.round(\r\n this.settingsHolder.recommendationForm.get('type2').get('trochoidalSlotWidth').value,\r\n 4\r\n );\r\n } else if (!res.workHoldingChange) {\r\n trochoidalSlotWidth = math.round(this.settingsHolder.tool.cutterDiameter * 1.5, 4);\r\n this.Recommendations.get('type2')\r\n .get('trochoidalSlotWidth')\r\n .patchValue(trochoidalSlotWidth, { emitEvent: false });\r\n }\r\n }\r\n\r\n this.millingParameters(res.emit, undefined, undefined, undefined, undefined, trochoidalSlotWidth);\r\n this.standardSpeedValue = this.recommendation.rpm;\r\n this.standardFeedValue = this.recommendation.ipm;\r\n }\r\n\r\n if (this.recommendationAdjustment === 2 && !trochoidalSlotWidthChange) {\r\n //need to notify parameters\r\n this.commonService.notifyOther({\r\n option: 'FeedInsideSlotChange',\r\n value: this.Recommendations\r\n });\r\n }\r\n\r\n //reset the fixture after\r\n this.fixtureChange = false;\r\n }\r\n\r\n if (\r\n this.machine.holderAdjustment &&\r\n this.machine.spindleAdjustment &&\r\n this.settingsHolder.displayParamsAndRecs &&\r\n this.settingsHolder.mapMode === 2 &&\r\n this.settingsHolder.mapModeTwoValues &&\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels\r\n ) {\r\n const selectedHolderAdjustment = this.machine.holderAdjustment.find(ha => ha.adjust === 'SFM');\r\n const selectedSpindleAdjustment = this.machine.spindleAdjustment.find(sa => sa.adjust === 'FPT');\r\n\r\n this.sfmRation = this.formulas.calculateSfmRatio(\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n this.machine.maxRPM,\r\n this.speedAggression,\r\n this.feedAggression\r\n );\r\n this.fptRation = this.formulas.calculateFptRatio(\r\n this.settingsHolder.mapModeTwoValues.recommendationLabels,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n this.machine.maxIPM,\r\n this.speedAggression,\r\n this.feedAggression,\r\n this.sfmRation\r\n );\r\n }\r\n }\r\n\r\n if (\r\n this.settingsHolder.material &&\r\n this.settingsHolder.material.chosenCondition &&\r\n this.settingsHolder.machine.holder &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName &&\r\n (!this.settingsHolder.hasStrategyOption ||\r\n (this.settingsHolder.currentStrategy && this.settingsHolder.currentStrategy.operationName)) &&\r\n this.settingsHolder.tool &&\r\n (this.mapMode === 1 || (this.mapMode === 2 && this.settingsHolder.mapModeTwoValues))\r\n ) {\r\n this.renderRecommendations = true;\r\n } else {\r\n this.renderRecommendations = false;\r\n }\r\n this.updateRecommendationsForDataLogging();\r\n });\r\n }\r\n } else if (\r\n res.hasOwnProperty('option') &&\r\n (res.option === 'reset' ||\r\n res.option === 'resetTool' ||\r\n res.option === 'switchedFromChamferingTool' ||\r\n res.option === 'resetMaterial')\r\n ) {\r\n this.currentMapMode = 1;\r\n this.machineTabFilledIn = false;\r\n this.settingsHolder = new ToolContainer();\r\n this.fixtureChange = false;\r\n this.machine = new Machine_();\r\n this.fixture = 0;\r\n this.Recommendations.reset({}, { emitEvent: false });\r\n this.renderRecommendations = false;\r\n this.warningMessageOpen = false;\r\n this.recommendation = {};\r\n this.resetSpeedSlider();\r\n this.resetFeedSlider();\r\n this.mapMode = this.settingsHolder.mapMode;\r\n if (this.isApp) {\r\n // emit to summary page\r\n this.commonService.notifyOther({\r\n option: 'summaryAlert',\r\n value: {\r\n settingsHolder: undefined,\r\n recommendation: undefined\r\n }\r\n });\r\n }\r\n }\r\n });\r\n });\r\n }\r\n\r\n updateRecommendationsForDataLogging = () => {\r\n this.commonService.notifyOther({\r\n option: 'updateRecommendationsDataLog',\r\n value: this.recommendation\r\n });\r\n };\r\n\r\n speedSliderClick = (event: MouseEvent) => {\r\n const target: Element = event.target as Element;\r\n if (target.classList.contains('noUi-value')) {\r\n const value = parseInt(target.attributes.getNamedItem('data-value').value);\r\n\r\n this.updateSpeedAggression(value / 100);\r\n this.Recommendations.get('speedSlider').patchValue(value, { emitEvent: false });\r\n this.Recommendations.get('speedInput').patchValue(value, { emitEvent: false });\r\n }\r\n };\r\n\r\n feedSliderClick = (event: MouseEvent) => {\r\n const target: Element = event.target as Element;\r\n if (target.classList.contains('noUi-value')) {\r\n const value = parseInt(target.attributes.getNamedItem('data-value').value);\r\n\r\n this.updateFeedAggression(value / 100);\r\n this.Recommendations.get('feedSlider').patchValue(value, { emitEvent: false });\r\n this.Recommendations.get('feedInput').patchValue(value, { emitEvent: false });\r\n }\r\n };\r\n\r\n restrictInputValue = (input: AbstractControl, value: number, min: number, max: number) => {\r\n if (value > max || value < min) {\r\n value = Math.min(Math.max(value, min), max);\r\n input.patchValue(value, { emitEvent: false });\r\n }\r\n };\r\n\r\n updateSpeedAggressionInput = (speed: number) => {\r\n const input: AbstractControl = this.Recommendations.get('speedInput');\r\n this.restrictInputValue(input, speed, this.sliderConfig.range.min, this.sliderConfig.range.max);\r\n\r\n this.updateSpeedAggression(speed / 100);\r\n this.Recommendations.get('speedSlider').patchValue(speed, { emitEvent: false });\r\n };\r\n\r\n updateFeedAggressionInput = (feed: number) => {\r\n const input: AbstractControl = this.Recommendations.get('feedInput');\r\n this.restrictInputValue(input, feed, this.sliderConfig.range.min, this.sliderConfig.range.max);\r\n\r\n this.updateFeedAggression(feed / 100);\r\n this.Recommendations.get('feedSlider').patchValue(feed, { emitEvent: false });\r\n };\r\n\r\n updateInsideCornerRadiusInput = (input: string) => {\r\n const insideCornerRadius = Number(input);\r\n if (!insideCornerRadius) {\r\n // this acts as a reset, mimicing original app, no calculations should be made, instead, reset the fields\r\n this.resetInsideCornerRadiusOfWall();\r\n } else {\r\n this.recommendation.insideCornerValue = insideCornerRadius;\r\n }\r\n this.emitData('parameters', 'recommendations', false);\r\n this.millingParameters(false);\r\n this.commonService.notifyOther({\r\n option: 'insideCornerChange',\r\n value: this.settingsHolder\r\n });\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('Inside Corner Radius');\r\n }\r\n };\r\n\r\n resetInsideCornerRadiusOfWall = () => {\r\n this.Recommendations.get('type1')\r\n .get('insideCornerRadiusOfWall')\r\n .reset({ value: '' });\r\n this.recommendation.insideCornerValue = undefined;\r\n };\r\n\r\n setRecommendation = (selectedCornerType: string) => {\r\n this.insideCornerType = selectedCornerType;\r\n this.millingParameters(false);\r\n this.commonService.notifyOther({\r\n option: 'insideCornerChange',\r\n value: this.settingsHolder\r\n });\r\n };\r\n\r\n millingParameters = (\r\n emit: boolean = true,\r\n rpm?: number,\r\n ipm?: number,\r\n surfaceSpeed?: number,\r\n feedFactor?: number,\r\n trochoidalSlotWidth?: number\r\n ) => {\r\n if (\r\n this.settingsHolder.parameters &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.currenttoolpath.operationName &&\r\n (!this.settingsHolder.hasStrategyOption ||\r\n (this.settingsHolder.currentStrategy && this.settingsHolder.currentStrategy.operationName))\r\n ) {\r\n this.parameters = _.clone(this.settingsHolder.parameters);\r\n this.parameters.toolPath = this.settingsHolder.hasStrategyOption\r\n ? this.settingsHolder.currentStrategy\r\n : this.settingsHolder.currenttoolpath;\r\n if (this.settingsHolder.currenttoolpath.operationName === 'Chamfering') {\r\n this.parameters.cutDepth = this.settingsHolder.parameters.chamferHeight;\r\n this.parameters.cutWidth = this.settingsHolder.parameters.chamferWidth;\r\n this.parameters.cutterDiameter = this.settingsHolder.parameters.effectiveDiameter;\r\n } else if (this.settingsHolder.currenttoolpath.operationName === '3D Surfacing') {\r\n let cutDepth = parseFloat(this.settingsHolder.parameters.adocdecimal + '');\r\n cutDepth = cutDepth ? cutDepth : 0;\r\n\r\n this.parameters.cutDepth = cutDepth;\r\n this.parameters.cutterDiameter = this.formulas.calculateEffectiveDiameter(\r\n this.settingsHolder.tool.cutterDiameter,\r\n this.parameters.cutDepth\r\n );\r\n\r\n let scallopWidth = parseFloat(this.settingsHolder.parameters.scallopWidth + '');\r\n\r\n scallopWidth = scallopWidth ? scallopWidth : 0;\r\n\r\n this.parameters.scallopWidth = scallopWidth; // not sure why scallopwidth is being passed over as a string\r\n this.parameters.cutWidth = (this.parameters.scallopWidth + this.parameters.cutterDiameter) / 2;\r\n } else {\r\n this.parameters.cutDepth = this.settingsHolder.parameters.adocdecimal;\r\n this.parameters.cutWidth = this.settingsHolder.parameters.rdocdecimal;\r\n }\r\n\r\n let hra = this.settingsHolder.hardness.userHra ? this.settingsHolder.hardness.userHra : 0;\r\n\r\n let millValues = this.formulas.calculateStandardMachining(\r\n this.settingsHolder.material,\r\n this.settingsHolder.tool,\r\n this.parameters,\r\n hra\r\n );\r\n\r\n surfaceSpeed =\r\n millValues.surfaceSpeed *\r\n this.setupFactor('Speed', this.settingsHolder.material, this.settingsHolder.machine.fixtureBar);\r\n\r\n this.spindleSpeed = this.setSpeed(this.parameters.cutterDiameter, surfaceSpeed);\r\n let chipLoad =\r\n (millValues.chipLoad *\r\n this.setupFactor('Feed', this.settingsHolder.material, this.settingsHolder.machine.fixtureBar) *\r\n this.parameters.cutterDiameter) /\r\n this.settingsHolder.tool.cutterDiameter;\r\n\r\n let feedFactor = millValues.feedFactor;\r\n if (this.updateRecommendations.ipm || !!!this.recommendation.ipm || this.fixtureChange || rpm || ipm) {\r\n this.feedRate = this.setFeed(\r\n this.settingsHolder.tool.fluteCount,\r\n chipLoad,\r\n this.setSpeed(this.parameters.cutterDiameter, surfaceSpeed, 'feed'),\r\n feedFactor\r\n );\r\n } else {\r\n this.feedRate = this.recommendation.ipm;\r\n }\r\n\r\n if (_.trim(this.settingsHolder.machine.maxIPM).length > 0 && this.settingsHolder.machine.maxIPM < this.feedRate) {\r\n this.feedRate = this.settingsHolder.machine.maxIPM;\r\n }\r\n\r\n let feedRate = this.feedRate;\r\n let feedPerTooth = this.conversionsFormulas.convertIpmToIpt(\r\n this.spindleSpeed,\r\n this.feedRate,\r\n this.settingsHolder.tool.fluteCount\r\n );\r\n\r\n let chipThickness;\r\n let mrr = 0;\r\n\r\n if (\r\n this.settingsHolder.currenttoolpath.operationName !== '3D Surfacing' &&\r\n this.settingsHolder.currenttoolpath.operationName !== 'Chamfering'\r\n ) {\r\n mrr = this.parameters.cutDepth * this.parameters.cutWidth * this.feedRate;\r\n }\r\n\r\n if (!!!this.recommendation.chipThickness || this.updateRecommendations.ipmAdjusted || this.fixtureChange) {\r\n if (this.settingsHolder.currenttoolpath.operationName === '3D Surfacing') {\r\n chipThickness = (feedPerTooth * this.parameters.cutterDiameter) / this.settingsHolder.tool.cutterDiameter;\r\n } else if (\r\n this.settingsHolder.currenttoolpath.operationName !== '3D Surfacing' &&\r\n this.settingsHolder.currenttoolpath.operationName !== 'Chamfering'\r\n ) {\r\n chipThickness = feedPerTooth / feedFactor;\r\n }\r\n } else {\r\n chipThickness = this.recommendation.chipThickness;\r\n }\r\n\r\n if (this.updateRecommendations.ipm) {\r\n this.updateRecommendations.ipm = false;\r\n }\r\n\r\n if (this.recommendationAdjustment === 2 || this.recommendationAdjustment === 1) {\r\n this.filletFeed(feedRate);\r\n }\r\n\r\n this.updateRecommendations.rpmAdjusted = false;\r\n this.updateRecommendations.ipmAdjusted = false;\r\n\r\n //feed adjustments, IPT, IPM, mrr and chipthickness gets affected\r\n\r\n this.recommendation = {\r\n ...this.recommendation,\r\n rpm: this.spindleSpeed,\r\n ipm: this.feedRate,\r\n sfm: parseFloat(\r\n this.conversionsFormulas\r\n .convertRpmToSfm(this.spindleSpeed, this.getDiameterForSurfaceSpeed())\r\n .toString()\r\n ),\r\n ipt: feedPerTooth,\r\n mrr: mrr,\r\n chipThickness: chipThickness,\r\n trochoidalSlotWidth: trochoidalSlotWidth,\r\n speedAggression: this.speedAggression,\r\n feedAggression: this.feedAggression\r\n };\r\n\r\n if (!this.warningMessageOpen) {\r\n this.maxCutDiaMessage(millValues.baseMRR);\r\n }\r\n\r\n if (this.isApp) {\r\n // emit to summary page\r\n this.commonService.notifyOther({\r\n option: 'summaryAlert',\r\n value: {\r\n settingsHolder: this.settingsHolder,\r\n recommendation: this.recommendation\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n public calculateRecommendationValue = (recommendation: RecommendationLabel): number => {\r\n const selectedHolderAdjustment = this.machine.holderAdjustment\r\n ? this.machine.holderAdjustment.find(ha => ha.adjust === 'SFM')\r\n : null;\r\n const selectedSpindleAdjustment = this.machine.spindleAdjustment\r\n ? this.machine.spindleAdjustment.find(sa => sa.adjust === 'FPT')\r\n : null;\r\n\r\n const recValue =\r\n Number(recommendation.recommendationValue) *\r\n (recommendation.recommendationAdjustment.includes('SFM')\r\n ? (selectedHolderAdjustment ? selectedHolderAdjustment.factor : 0) * this.speedAggression * this.sfmRation\r\n : 1) *\r\n (recommendation.recommendationAdjustment.includes('FPT')\r\n ? (selectedSpindleAdjustment ? selectedSpindleAdjustment.factor : 0) * this.feedAggression * this.fptRation\r\n : 1);\r\n\r\n return math.round(recValue, Number(recommendation.recommendationPrecision));\r\n };\r\n\r\n plungingParameters = (emit: boolean = true, rpm?: number, ipm?: number, surfaceSpeed?: number) => {\r\n if (\r\n this.settingsHolder.parameters ||\r\n (this.settingsHolder.machine &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath)\r\n ) {\r\n this.parameters = _.clone(this.settingsHolder.parameters);\r\n\r\n if (\r\n this.parameters &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath\r\n ) {\r\n let holeDiameter = this.parameters.holeDiameter;\r\n let pitch = this.parameters.pitch;\r\n let holeDepth = this.parameters.holeDepth;\r\n\r\n if (\r\n this.settingsHolder.material &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.tool\r\n ) {\r\n let millValues = this.formulas.calculatePlungingMachining(\r\n this.settingsHolder.material,\r\n this.settingsHolder.tool,\r\n this.parameters,\r\n this.settingsHolder.hardness.hra\r\n );\r\n\r\n surfaceSpeed =\r\n millValues.surfaceSpeed *\r\n this.setupFactor('Speed', this.settingsHolder.material, this.settingsHolder.machine.fixtureBar);\r\n\r\n let chipLoad =\r\n millValues.chipLoad *\r\n this.setupFactor('Feed', this.settingsHolder.material, this.settingsHolder.machine.fixtureBar);\r\n\r\n this.spindleSpeed = this.setSpeed(this.parameters.cutterDiameter, surfaceSpeed);\r\n\r\n if (\r\n _.trim(this.settingsHolder.machine.maxRPM).length > 0 &&\r\n this.settingsHolder.machine.maxRPM < this.spindleSpeed\r\n ) {\r\n this.spindleSpeed = this.settingsHolder.machine.maxRPM;\r\n surfaceSpeed = this.conversionsFormulas.convertRpmToSfm(\r\n this.spindleSpeed,\r\n this.getDiameterForSurfaceSpeed()\r\n );\r\n }\r\n\r\n if (this.updateRecommendations.ipm || this.fixtureChange) {\r\n this.feedRate = this.setFeed(this.settingsHolder.tool.fluteCount, chipLoad, this.spindleSpeed);\r\n } else {\r\n this.feedRate = this.recommendation.ipm;\r\n }\r\n\r\n if (\r\n _.trim(this.settingsHolder.machine.maxIPM).length > 0 &&\r\n this.settingsHolder.machine.maxIPM < this.feedRate\r\n ) {\r\n this.feedRate = this.settingsHolder.machine.maxIPM;\r\n }\r\n\r\n let pathDiameter = this.settingsHolder.parameters.pathDiameter;\r\n\r\n let helixLength = math.sqrt(math.pow(math.PI * pathDiameter, 2) + math.pow(pitch, 2));\r\n let pathLength = (helixLength * holeDepth) / pitch + math.PI * pathDiameter;\r\n let cutTime = pathLength / this.feedRate;\r\n let cutMinutes = math.floor(cutTime);\r\n let cutSeconds = math.ceil(60 * (cutTime - cutMinutes));\r\n let cutVolume = math.PI * math.pow(holeDiameter / 2, 2) * holeDepth;\r\n let mrr = cutVolume / cutTime;\r\n\r\n let timeMinStr = cutMinutes;\r\n let timeSecStr = cutSeconds;\r\n\r\n if (cutSeconds < 10) {\r\n timeSecStr = '0' + timeSecStr;\r\n }\r\n\r\n this.recommendation = {\r\n rpm: parseInt(this.spindleSpeed.toFixed(0)),\r\n ipm: this.feedRate,\r\n sfm: parseInt(\r\n this.conversionsFormulas\r\n .convertRpmToSfm(this.spindleSpeed, this.getDiameterForSurfaceSpeed())\r\n .toString()\r\n ),\r\n ipt: this.conversionsFormulas.convertIpmToIpt(\r\n this.spindleSpeed,\r\n this.feedRate,\r\n this.settingsHolder.tool.fluteCount\r\n ),\r\n mrr: mrr,\r\n holeTime: timeMinStr + ':' + timeSecStr,\r\n chipThickness: chipLoad\r\n };\r\n this.renderRecommendations = true;\r\n if (this.isApp) {\r\n // emit to summary page\r\n this.commonService.notifyOther({\r\n option: 'summaryAlert',\r\n value: {\r\n settingsHolder: this.settingsHolder,\r\n recommendation: this.recommendation\r\n }\r\n });\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n private setupFactor = (millValue: string, workpiece: Material_, fixtureValue: number) => {\r\n let machineFactor = 1;\r\n let fixtureFactor = math.pow(fixtureValue / 100, math.pow(100 / (fixtureValue + (fixtureValue - 35) / 6), 2));\r\n\r\n if (millValue === 'Speed') {\r\n machineFactor = this.holderFactor * math.pow(1 / fixtureFactor, 1.0 / 8.0);\r\n } else {\r\n machineFactor = math.pow(\r\n this.holderFeedFactor * fixtureFactor * this.spindleFactor,\r\n 1.0 / this.formulas.calculateMaterialStretch(workpiece)\r\n );\r\n }\r\n\r\n return machineFactor;\r\n };\r\n\r\n private setSpeed = (cutDia: number, surfaceSpeed: number, speedType: string = 'speed') => {\r\n let speed = this.speedAggression * this.conversionsFormulas.convertSfmToRpm(surfaceSpeed, cutDia);\r\n let maxRPM =\r\n this.settingsHolder.machine.maxRPM > 0 && !isNaN(this.settingsHolder.machine.maxRPM)\r\n ? this.settingsHolder.machine.maxRPM\r\n : 0;\r\n\r\n if (maxRPM > 0 && speed > maxRPM) {\r\n speed = maxRPM;\r\n } else if (speedType === 'speed') {\r\n let rpmPrecision = speed < 500 ? 1 : 5;\r\n speed = rpmPrecision * math.round(speed / rpmPrecision, 0);\r\n }\r\n\r\n return speed;\r\n };\r\n\r\n private setFeed = (fluteNo: number, chipLoad: number, speed: number, feedFactor: number = 1) => {\r\n let feed = this.feedAggression * this.conversionsFormulas.convertIptToIpm(speed, chipLoad * feedFactor, fluteNo);\r\n let ipmPrecision = math.pow(10, Math.trunc(math.log10(feed))) / 100;\r\n\r\n let maxIPM = this.settingsHolder.machine.maxIPM > 0 ? this.settingsHolder.machine.maxIPM : 0;\r\n\r\n if (maxIPM > 0 && feed > maxIPM) {\r\n feed = maxIPM;\r\n } else {\r\n feed = ipmPrecision * math.round(feed / ipmPrecision);\r\n }\r\n\r\n return feed;\r\n };\r\n\r\n private filletFeed = (feedRate: number) => {\r\n let partRad = 0; // this is always the wallrad, depending on what, it is divided by 2.\r\n\r\n if (this.recommendationAdjustment === 1) {\r\n const retParaRecValue = this.Recommendations.get('type1').get('insideCornerRadiusOfWall').value;\r\n if (_.trim(retParaRecValue) === '') {\r\n partRad = math.round(this.settingsHolder.tool.cutterDiameter * 1.5, 4);\r\n } else {\r\n partRad = parseFloat(retParaRecValue);\r\n }\r\n } else if (this.recommendationAdjustment === 2) {\r\n const retParaRecValue = this.Recommendations.get('type2').get('trochoidalSlotWidth').value;\r\n if (_.trim(retParaRecValue) === '') {\r\n partRad = math.round((this.settingsHolder.tool.cutterDiameter * 1.5) / 2, 4);\r\n } else {\r\n partRad = parseFloat(retParaRecValue) / 2;\r\n }\r\n }\r\n\r\n let radDepth = 0;\r\n\r\n if (this.insideCornerType === 'RDOC Inside Corner') {\r\n const roundFactor = this.formulas.emRoundFactor(this.settingsHolder.tool.cutterDiameter) / 5;\r\n const engageAng = this.settingsHolder.parameters.engagementAngle;\r\n radDepth =\r\n roundFactor *\r\n math.floor(\r\n this.conversionsFormulas.convertTeaToRdoc(engageAng, this.settingsHolder.tool.cutterDiameter, partRad) /\r\n roundFactor\r\n );\r\n } else {\r\n radDepth = this.settingsHolder.parameters.rdocdecimal;\r\n }\r\n\r\n const pathRad = partRad - this.settingsHolder.tool.cutterDiameter / 2;\r\n const linearFeed = feedRate ? feedRate : this.recommendation.ipm;\r\n let cornerFeed = 0;\r\n\r\n if (this.settingsHolder.currenttoolpath && this.settingsHolder.currenttoolpath.operationName === 'Finishing') {\r\n cornerFeed = (linearFeed * pathRad) / partRad;\r\n } else {\r\n cornerFeed =\r\n (2 * linearFeed * this.settingsHolder.parameters.rdocdecimal * pathRad) /\r\n (2 * partRad * radDepth - math.pow(radDepth, 2));\r\n }\r\n\r\n // cornerFeed < 10 => round to 2 decimals\r\n // 10 <= cornerFeed < 100 => round to 1 decimal\r\n // 100 <= cornerFeed => round to 0 decimals\r\n const ipmPrecision = cornerFeed < 10 ? 2 : cornerFeed < 100 ? 1 : 0;\r\n cornerFeed = math.floor(cornerFeed * math.pow(10, ipmPrecision)) / math.pow(10, ipmPrecision);\r\n\r\n // if its a wheel event, it causes the number to blink, not sure if there is a way to fix\r\n if (this.recommendationAdjustment === 1) {\r\n if (this.insideCornerType === 'RDOC Inside Corner') {\r\n this.recommendation.insideCornerValue = radDepth;\r\n } else if (this.insideCornerType === 'IPM Inside Corner') {\r\n this.recommendation.insideCornerValue = cornerFeed;\r\n }\r\n } else if (this.recommendationAdjustment === 2) {\r\n this.recommendation.ipmFeedInsideSlot = cornerFeed;\r\n }\r\n };\r\n\r\n maxCutDiaMessage = (mrr: number) => {\r\n let spindleTaper = this.settingsHolder.machine.spindle;\r\n\r\n spindleTaper = spindleTaper.replace('CV', '');\r\n spindleTaper = spindleTaper.replace('BT', '');\r\n spindleTaper = spindleTaper.replace('HSK', '');\r\n spindleTaper = spindleTaper.replace('NMTB', '');\r\n\r\n let spindleType = this.settingsHolder.machine.spindle.replace(spindleTaper, '');\r\n let spindleDia = 0;\r\n\r\n if (spindleType === 'HSK') {\r\n switch (spindleTaper) {\r\n case '25':\r\n spindleDia = 19.0;\r\n break;\r\n case '32':\r\n spindleDia = 24.0;\r\n break;\r\n case '40':\r\n spindleDia = 30.0;\r\n break;\r\n case '50':\r\n spindleDia = 38.0;\r\n break;\r\n case '63':\r\n spindleDia = 48.0;\r\n break;\r\n case '80':\r\n spindleDia = 60.0;\r\n break;\r\n case '100':\r\n spindleDia = 75.0;\r\n break;\r\n case '125':\r\n spindleDia = 95.0;\r\n break;\r\n case '160':\r\n spindleDia = 120.0;\r\n break;\r\n }\r\n spindleDia = spindleDia / 25.4;\r\n } else {\r\n switch (spindleTaper) {\r\n case '30':\r\n spindleDia = 1.25;\r\n break;\r\n case '35':\r\n spindleDia = 1.5;\r\n break;\r\n case '40':\r\n spindleDia = 1.75;\r\n break;\r\n case '45':\r\n spindleDia = 2.25;\r\n break;\r\n case '50':\r\n spindleDia = 2.75;\r\n break;\r\n case '60':\r\n spindleDia = 4.25;\r\n break;\r\n }\r\n }\r\n\r\n if (this.recommendation.mrr > 0) {\r\n if ((spindleDia * mrr) / (this.settingsHolder.tool.cutterDiameter * this.recommendation.mrr) < 2.5) {\r\n let messageStr = 'The selected tool and cutting parameters may';\r\n messageStr = messageStr + ' be too aggressive for the selected spindle.';\r\n messageStr = messageStr + ' Be mindful of excessive cutting forces when';\r\n messageStr =\r\n messageStr + ' using this tool with a ' + this.settingsHolder.machine.spindle + ' machining center.';\r\n messageStr = messageStr + ' Consider using a smaller tool, larger spindle,';\r\n messageStr = messageStr + ' or reduce the speed/feed.';\r\n\r\n let message: Message = {\r\n title: 'Too Aggressive!',\r\n message: messageStr\r\n };\r\n // let check if this material if in part of the tool first, cause a message saying the material and tool does not match might already exist\r\n let toolMaterials = this.settingsHolder.tool ? this.settingsHolder.tool.materialIds : undefined;\r\n let theMaterial = this.settingsHolder.material ? this.settingsHolder.material : undefined;\r\n\r\n if (toolMaterials && theMaterial) {\r\n if (!!toolMaterials.find(id => id === theMaterial.id)) {\r\n if (this.warningAlerts) {\r\n this.aggressiveWarning.emit();\r\n this.warningMessageOpen = true;\r\n this.utils.openDialog(\r\n message,\r\n 'error',\r\n chose => {\r\n this.warningMessageOpen = false;\r\n },\r\n chose => {\r\n this.warningMessageOpen = false;\r\n }\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n };\r\n\r\n filterRecommendations = (recs: RecommendationLabel[]): RecommendationLabel[] => {\r\n let filteredRecs: RecommendationLabel[] = [];\r\n filteredRecs = recs.filter(\r\n r => r.recommendationLabel !== 'Spindle Speed' && r.recommendationLabel !== 'Feed Per Minute'\r\n );\r\n return filteredRecs;\r\n };\r\n\r\n getMapModeTwoSliderLable = (recs: RecommendationLabel[], label: string): string => {\r\n let sliderValue: RecommendationLabel;\r\n if (label === 'speedSlider') {\r\n sliderValue = recs.find(r => r.recommendationLabel && r.recommendationLabel.toLowerCase() === 'spindle speed');\r\n } else {\r\n sliderValue = recs.find(r => r.recommendationLabel && r.recommendationLabel.toLowerCase() === 'feed per minute');\r\n }\r\n return sliderValue.recommendationLabel;\r\n };\r\n\r\n getMapModeTwoSliderValue = (recs: RecommendationLabel[], label: string): number => {\r\n let sliderValue: RecommendationLabel;\r\n if (label === 'speedSlider') {\r\n sliderValue = recs.find(r => r.recommendationLabel && r.recommendationLabel.toLowerCase() === 'spindle speed');\r\n } else {\r\n sliderValue = recs.find(r => r.recommendationLabel && r.recommendationLabel.toLowerCase() === 'feed per minute');\r\n }\r\n return this.calculateRecommendationValue(sliderValue);\r\n };\r\n\r\n private getDiameterForSurfaceSpeed = (): number => {\r\n return this.settingsHolder.currenttoolpath?.operationName?.toLowerCase() === 'chamfering' ? this.parameters.effectiveDiameter : this.settingsHolder.tool.cutterDiameter;\r\n }\r\n}\r\n\r\nclass updateRecommendations {\r\n public rpm: boolean;\r\n public ipm: boolean;\r\n public sfm: boolean;\r\n public ipt: boolean;\r\n public mrr: boolean;\r\n public holeTime: boolean;\r\n public chipThickness: boolean;\r\n public rpmAdjusted: boolean;\r\n public ipmAdjusted: boolean;\r\n constructor(\r\n rpm: boolean = true,\r\n ipm: boolean = true,\r\n sfm: boolean = true,\r\n ipt: boolean = true,\r\n mrr: boolean = true,\r\n holeTime: boolean = true,\r\n chipThickness: boolean = true,\r\n rpmAdjusted: boolean = true,\r\n ipmAdjusted: boolean = true\r\n ) {\r\n this.rpm = rpm;\r\n this.ipm = ipm;\r\n this.sfm = sfm;\r\n this.ipt = ipt;\r\n this.mrr = mrr;\r\n this.holeTime = holeTime;\r\n this.chipThickness = chipThickness;\r\n this.rpmAdjusted = rpmAdjusted;\r\n this.ipmAdjusted = ipmAdjusted;\r\n }\r\n}\r\n","import { Component, Output, EventEmitter } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { CommonService } from '../../../service/common.service';\r\nimport { ToolContainer } from '../../../service/formulas/objects';\r\n\r\n@Component({\r\n selector: 'section-start',\r\n templateUrl: 'start.html',\r\n styleUrls: ['start.scss']\r\n})\r\nexport class Start {\r\n private subscription: Subscription;\r\n public startFields: StartFields;\r\n public dirty: boolean = false;\r\n @Output() startClicked: EventEmitter = new EventEmitter();\r\n @Output() resetAll: EventEmitter = new EventEmitter();\r\n public settingsHolder: ToolContainer;\r\n constructor(private commonService: CommonService) {\r\n this.startFields = new StartFields();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n if (\r\n res.hasOwnProperty('option') &&\r\n (res.option === 'start' ||\r\n res.option === 'reset' ||\r\n res.option === 'resetMaterial' ||\r\n res.option === 'resetTool')\r\n ) {\r\n this.settingsHolder = res.value;\r\n if (this.settingsHolder.machine) {\r\n if (this.settingsHolder.machine.spindle && this.settingsHolder.machine.holder) {\r\n this.settingsHolder.machine.dirty = true;\r\n }\r\n }\r\n\r\n this.startFields = {\r\n tool: this.settingsHolder.tool\r\n ? '#' +\r\n this.settingsHolder.tool.itemId +\r\n ' ' +\r\n this.settingsHolder.tool.fluteCount +\r\n ', ' +\r\n this.settingsHolder.tool.end\r\n : '',\r\n material: this.settingsHolder.material\r\n ? this.settingsHolder.material.name + ' — ' + this.settingsHolder.material.description\r\n : '',\r\n operation: this.settingsHolder.currenttoolpath ? this.settingsHolder.currenttoolpath.operationName : '',\r\n machine:\r\n this.settingsHolder.machine && this.settingsHolder.machine.dirty\r\n ? this.settingsHolder.machine.spindle + ', ' + this.settingsHolder.machine.holder\r\n : ''\r\n };\r\n }\r\n });\r\n }\r\n\r\n startSetup = (selectedIndex: number) => {\r\n this.startClicked.emit(selectedIndex);\r\n };\r\n}\r\n\r\nclass StartFields {\r\n public tool: string;\r\n public material: string;\r\n public operation: string;\r\n public machine: string;\r\n constructor(tool: string = '', material: string = '', operation: string = '', machine: string = '') {\r\n this.tool = tool;\r\n this.material = material;\r\n this.operation = operation;\r\n this.machine = machine;\r\n }\r\n}\r\n","import { Component, Output, EventEmitter } from '@angular/core';\r\nimport { Subscription } from 'rxjs';\r\n\r\nimport { CommonService } from '../../../service/common.service';\r\nimport {\r\n Machine_,\r\n ParameterLabel,\r\n RecommendationLabel,\r\n ToolContainer,\r\n Recommendation_\r\n} from '../../../service/formulas/objects';\r\nimport { Formulas } from '../../../service/formulas/formulas';\r\nimport { Utils } from '../../../service/utils';\r\nimport math from 'mathjs';\r\n\r\n@Component({\r\n selector: 'section-summary',\r\n templateUrl: 'summary.html',\r\n styleUrls: ['summary.scss']\r\n})\r\nexport class Summary {\r\n private subscription: Subscription;\r\n public summaryFields: SummaryField[];\r\n @Output() goTab: EventEmitter = new EventEmitter();\r\n @Output() resetAll: EventEmitter = new EventEmitter();\r\n public settingsHolder: ToolContainer;\r\n constructor(private commonService: CommonService, private utils: Utils, private formulas: Formulas) {\r\n this.summaryFields = this.setDefaultFields();\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.hasOwnProperty('option')) {\r\n if (res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n } else if (res.option === 'summaryAlert') {\r\n let settingsHolder: ToolContainer = res.value['settingsHolder'];\r\n let recommendation: Recommendation_ = res.value['recommendation'];\r\n if (settingsHolder && settingsHolder.parameters && recommendation && settingsHolder.machine) {\r\n if (\r\n settingsHolder.mapMode === 2 &&\r\n settingsHolder.machine.holderAdjustment &&\r\n settingsHolder.machine.spindleAdjustment &&\r\n settingsHolder.mapModeTwoValues\r\n ) {\r\n this.summaryFields = this.setMapeModeTwoFields(\r\n settingsHolder.mapModeTwoValues.recommendationLabels,\r\n settingsHolder.mapModeTwoValues.parameterLabels,\r\n settingsHolder.machine,\r\n recommendation.speedAggression,\r\n recommendation.feedAggression\r\n );\r\n } else {\r\n const toolPath = settingsHolder.currenttoolpath.operationName.toLowerCase();\r\n\r\n if (toolPath === '3d surfacing') {\r\n this.summaryFields = this.set3DSurfacingFields(\r\n recommendation['rpm'],\r\n recommendation['ipm'],\r\n recommendation['ipt'],\r\n settingsHolder.parameters.adocdecimal,\r\n settingsHolder.parameters.rdocdecimal\r\n );\r\n } else if (toolPath === 'chamfering') {\r\n this.summaryFields = this.setChamferingFields(\r\n recommendation['rpm'],\r\n recommendation['ipm'],\r\n recommendation['ipt'],\r\n settingsHolder.parameters.chamferHeight,\r\n settingsHolder.parameters.chamferWidth\r\n );\r\n } else if (toolPath === 'trochoidal slotting') {\r\n this.summaryFields = this.setTrochoidalSlotting(\r\n recommendation['rpm'],\r\n recommendation['ipmFeedInsideSlot'],\r\n recommendation['trochoidalSlotWidth'],\r\n settingsHolder.parameters.adocdecimal,\r\n settingsHolder.parameters.rdocdecimal,\r\n recommendation['mrr']\r\n );\r\n } else {\r\n this.summaryFields = this.setDefaultFields(\r\n recommendation['rpm'],\r\n recommendation['ipm'],\r\n recommendation['ipt'],\r\n settingsHolder.parameters.adocdecimal,\r\n settingsHolder.parameters.rdocdecimal,\r\n recommendation['mrr']\r\n );\r\n }\r\n }\r\n } else {\r\n this.summaryFields = this.setDefaultFields();\r\n }\r\n }\r\n }\r\n });\r\n }\r\n\r\n setDefaultFields = (\r\n rpm: number = 0,\r\n ipm: number = 0,\r\n ipt: number = 0,\r\n adoc: number = 0,\r\n rdoc: number = 0,\r\n mrr: number = 0\r\n ): SummaryField[] => {\r\n return [\r\n {\r\n name: 'SPEED',\r\n value: rpm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER MINUTE',\r\n value: ipm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER TOOTH',\r\n value: ipt,\r\n numberFormat: '.4-4',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'ADOC',\r\n value: adoc,\r\n numberFormat: null,\r\n tabIndex: 5\r\n },\r\n {\r\n name: 'RDOC',\r\n value: rdoc,\r\n numberFormat: null,\r\n tabIndex: 5\r\n },\r\n {\r\n name: 'MRR',\r\n value: mrr,\r\n numberFormat: '.0-2',\r\n tabIndex: 6\r\n }\r\n ];\r\n };\r\n\r\n set3DSurfacingFields = (\r\n rpm: number = 0,\r\n ipm: number = 0,\r\n ipt: number = 0,\r\n adoc: number = 0,\r\n rdoc: number = 0\r\n ): SummaryField[] => {\r\n return [\r\n {\r\n name: 'SPEED',\r\n value: rpm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER MINUTE',\r\n value: ipm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER TOOTH',\r\n value: ipt,\r\n numberFormat: '.4-4',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'ADOC',\r\n value: adoc,\r\n numberFormat: null,\r\n tabIndex: 5\r\n },\r\n {\r\n name: 'RDOC',\r\n value: rdoc,\r\n numberFormat: null,\r\n tabIndex: 5\r\n }\r\n ];\r\n };\r\n\r\n setChamferingFields = (\r\n rpm: number = 0,\r\n ipm: number = 0,\r\n ipt: number = 0,\r\n chamferHeight: number = 0,\r\n chamferWidth: number = 0\r\n ): SummaryField[] => {\r\n return [\r\n {\r\n name: 'SPEED',\r\n value: rpm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER MINUTE',\r\n value: ipm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER TOOTH',\r\n value: ipt,\r\n numberFormat: '.4-4',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'CHAMFER HEIGHT',\r\n value: chamferHeight,\r\n numberFormat: null,\r\n tabIndex: 5\r\n },\r\n {\r\n name: 'CHAMFER WIDTH',\r\n value: chamferWidth,\r\n numberFormat: null,\r\n tabIndex: 5\r\n }\r\n ];\r\n };\r\n\r\n setTrochoidalSlotting = (\r\n rpm: number = 0,\r\n ipmFeedInsideSlot: number = 0,\r\n trochoidalSlotWidth: number = 0,\r\n adoc: number = 0,\r\n rdoc: number = 0,\r\n mrr: number = 0\r\n ): SummaryField[] => {\r\n return [\r\n {\r\n name: 'SPEED',\r\n value: rpm,\r\n numberFormat: '.0-0',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'FEED PER MINUTE',\r\n value: ipmFeedInsideSlot,\r\n numberFormat: '.0-2',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'TROCHOIDAL SLOT WIDTH',\r\n value: trochoidalSlotWidth,\r\n numberFormat: '.4-4',\r\n tabIndex: 6\r\n },\r\n {\r\n name: 'ADOC',\r\n value: adoc,\r\n numberFormat: null,\r\n tabIndex: 5\r\n },\r\n {\r\n name: 'RDOC',\r\n value: rdoc,\r\n numberFormat: null,\r\n tabIndex: 5\r\n },\r\n {\r\n name: 'MRR',\r\n value: mrr,\r\n numberFormat: '.0-2',\r\n tabIndex: 6\r\n }\r\n ];\r\n };\r\n\r\n setMapeModeTwoFields = (\r\n recommendations: RecommendationLabel[],\r\n parameters: ParameterLabel[],\r\n machine: Machine_,\r\n speedAggression: number,\r\n feedAggression: number\r\n ): SummaryField[] => {\r\n const summeryFields: SummaryField[] = [];\r\n const selectedHolderAdjustment = machine.holderAdjustment.find(ha => ha.adjust === 'SFM');\r\n const selectedSpindleAdjustment = machine.spindleAdjustment.find(sa => sa.adjust === 'FPT');\r\n\r\n const sfmRation = this.formulas.calculateSfmRatio(\r\n recommendations,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n machine.maxRPM,\r\n speedAggression,\r\n feedAggression\r\n );\r\n const fptRation = this.formulas.calculateFptRatio(\r\n recommendations,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n machine.maxIPM,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation\r\n );\r\n\r\n for (let i = 1; i < 5 && i < recommendations.length; i++) {\r\n const currentRec = recommendations[i];\r\n summeryFields.push({\r\n name: currentRec.recommendationLabel,\r\n value: this.calculateRecommendationValue(\r\n currentRec,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n ),\r\n numberFormat: '.0-4',\r\n tabIndex: 6\r\n });\r\n }\r\n for (let i = 0; i < 2 && i < parameters.length; i++) {\r\n const currentParam = parameters[i];\r\n summeryFields.push({\r\n name: currentParam.parameterLabel,\r\n value: Number(currentParam.parameterValue),\r\n numberFormat: '.0-4',\r\n tabIndex: 5\r\n });\r\n }\r\n return summeryFields;\r\n };\r\n\r\n private calculateRecommendationValue = (\r\n recommendation: RecommendationLabel,\r\n holderFactor: number,\r\n spindleFactor: number,\r\n speedAggression: number,\r\n feedAggression: number,\r\n sfmRation: number,\r\n fptRation: number\r\n ): number => {\r\n const recValue =\r\n Number(recommendation.recommendationValue) *\r\n (recommendation.recommendationAdjustment.includes('SFM') ? holderFactor * speedAggression * sfmRation : 1) *\r\n (recommendation.recommendationAdjustment.includes('FPT') ? spindleFactor * feedAggression * fptRation : 1);\r\n\r\n return math.round(recValue, Number(recommendation.recommendationPrecision));\r\n };\r\n\r\n goToTab = (selectedIndex: number) => {\r\n this.goTab.emit(selectedIndex);\r\n };\r\n\r\n resetSetup = () => {\r\n this.resetAll.emit();\r\n this.utils.apptentiveEngage('Reset Application Button');\r\n };\r\n}\r\n\r\ninterface SummaryField {\r\n name: string;\r\n value: number;\r\n numberFormat: string;\r\n tabIndex: number;\r\n}\r\n","import { KnobModule } from 'ng2-knob';\r\nimport { NouisliderModule } from 'ng2-nouislider';\r\nimport { MatAutocompleteModule } from '@angular/material/autocomplete';\r\nimport { MatCardModule } from '@angular/material/card';\r\nimport { MatDialogModule } from '@angular/material/dialog';\r\nimport { MatGridListModule } from '@angular/material/grid-list';\r\nimport { MatInputModule } from '@angular/material/input';\r\nimport { MatMenuModule } from '@angular/material/menu';\r\nimport { MatSelectModule } from '@angular/material/select';\r\nimport { MatSliderModule } from '@angular/material/slider';\r\nimport { MatTabsModule } from '@angular/material/tabs';\r\nimport { ToolPage } from './tool';\r\nimport { NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\nimport { FormsModule, ReactiveFormsModule } from '@angular/forms';\r\nimport { IonicModule } from '@ionic/angular';\r\nimport { DynamicModule } from 'ng-dynamic-component';\r\nimport { Material } from './material/material';\r\nimport { Endmill } from './endmill/endmill';\r\nimport { Machine } from './machine/machine';\r\nimport { Operation } from './operation/operation';\r\nimport { Parameters } from './parameters/parameters';\r\nimport { Recommendations } from './recommendations/recommendations';\r\nimport { Summary } from './summary/summary';\r\nimport { Start } from './start/start';\r\nimport { Knob } from 'src/service/ng-knob2';\r\nimport { ToolPathSelectorDialog } from './operation/toolPathSelector/toolPathSelector';\r\n\r\nconst toolSections = [Start, Endmill, Material, Operation, Machine, Parameters, Recommendations, Summary];\r\n\r\n@NgModule({\r\n imports: [\r\n CommonModule,\r\n FormsModule,\r\n ReactiveFormsModule,\r\n IonicModule,\r\n MatAutocompleteModule,\r\n MatCardModule,\r\n MatDialogModule,\r\n MatGridListModule,\r\n MatInputModule,\r\n MatSelectModule,\r\n MatSliderModule,\r\n MatTabsModule,\r\n KnobModule,\r\n NouisliderModule,\r\n MatMenuModule,\r\n DynamicModule\r\n ],\r\n declarations: [ToolPage, ...toolSections, ToolPathSelectorDialog, Knob],\r\n entryComponents: [ToolPathSelectorDialog]\r\n})\r\nexport class ToolPageModule {}\r\n","import { HttpClient, HttpErrorResponse, HttpHeaders, HttpParams } from '@angular/common/http';\r\nimport { Injectable } from '@angular/core';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { throwError as observableThrowError, Observable } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport {\r\n Recommendation_,\r\n ToolContainer,\r\n Parameters_,\r\n UserDataLoggingInfo,\r\n ParameterLabel,\r\n RecommendationLabel,\r\n Machine_\r\n} from 'src/service/formulas/objects';\r\nimport { ServiceProvider } from 'src/service/provider.interface';\r\nimport math from 'mathjs';\r\nimport { Formulas } from '../../service/formulas/formulas';\r\n\r\n@Injectable()\r\nexport class ToolProvider extends ServiceProvider {\r\n private logDataEndpoint: string;\r\n private allProductHierarchyGroupsEndpoint: string;\r\n private paramsAndRecsGroupingEndpoint: string;\r\n private getProductkeyCountEndpoint: string;\r\n private token: any;\r\n private userDataLoggingInfo: UserDataLoggingInfo;\r\n constructor(public cache: CacheService, private http: HttpClient, private formulas: Formulas) {\r\n super();\r\n this.logDataEndpoint = this.config.apiEndpoints['logUserData'];\r\n this.allProductHierarchyGroupsEndpoint = this.config.apiEndpoints['allProductHierarchyGroups'];\r\n this.paramsAndRecsGroupingEndpoint = this.config.apiEndpoints['paramsAndRecsProductkeyGrouping'];\r\n this.getProductkeyCountEndpoint = this.config.apiEndpoints['endmillMapModeTwoCount'];\r\n this.cache.getItem('loginInfo').then(res => (this.token = res));\r\n }\r\n\r\n public logUserData = (\r\n logReason: string,\r\n settingsHolder: ToolContainer,\r\n recommendations: Recommendation_\r\n ): Observable => {\r\n this.userDataLoggingInfo = this.emptyUserData();\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n this.userDataLoggingInfo.logType = logReason;\r\n this.userDataLoggingInfo.userId = this.token.id;\r\n\r\n let userToolPath = '';\r\n if (settingsHolder.hasStrategyOption && !!settingsHolder.currentStrategy) {\r\n userToolPath = settingsHolder.currentStrategy.operationName;\r\n this.userDataLoggingInfo.operationId = settingsHolder.currentStrategy.strategyId;\r\n } else if (!settingsHolder.hasStrategyOption && !!settingsHolder.currenttoolpath) {\r\n userToolPath = settingsHolder.currenttoolpath.operationName;\r\n this.userDataLoggingInfo.operationId = settingsHolder.currenttoolpath.toolPathId;\r\n }\r\n\r\n if (settingsHolder.mapMode === 1 && !!settingsHolder.parameters && !!recommendations) {\r\n this.generateMapModeOneParams(settingsHolder.parameters, userToolPath);\r\n this.generateMapModeOneRecs(recommendations, userToolPath);\r\n } else if (settingsHolder.mapMode === 2 && settingsHolder.mapModeTwoValues) {\r\n this.generateMapModeTwoParams(settingsHolder.mapModeTwoValues.parameterLabels);\r\n this.generateMapModeTwoRecs(\r\n settingsHolder.mapModeTwoValues.recommendationLabels,\r\n settingsHolder.machine,\r\n recommendations.speedAggression,\r\n recommendations.feedAggression\r\n );\r\n }\r\n\r\n // Fill in the rest of the data that will be logged\r\n // Adding in checks for data filled for cases like user logging out and not having all the information selected\r\n\r\n if (!!settingsHolder.hardness) {\r\n this.userDataLoggingInfo.HBS = settingsHolder.hardness.hbs;\r\n this.userDataLoggingInfo.HBW = settingsHolder.hardness.hbw;\r\n this.userDataLoggingInfo.HRB = settingsHolder.hardness.hrb;\r\n this.userDataLoggingInfo.HRC = settingsHolder.hardness.hrc;\r\n }\r\n\r\n if (!!recommendations) {\r\n this.userDataLoggingInfo.feedSliderValue = recommendations.feedAggression;\r\n this.userDataLoggingInfo.speedSliderValue = recommendations.speedAggression;\r\n }\r\n\r\n if (!!settingsHolder.material) {\r\n this.userDataLoggingInfo.materialId = settingsHolder.material.id;\r\n }\r\n\r\n if (!!settingsHolder.tool) {\r\n this.userDataLoggingInfo.productKey = settingsHolder.tool.id;\r\n }\r\n\r\n this.userDataLoggingInfo.MaxIPM = settingsHolder.machine.maxIPM;\r\n this.userDataLoggingInfo.holder = settingsHolder.machine.holder;\r\n this.userDataLoggingInfo.maxRPM = settingsHolder.machine.maxRPM;\r\n this.userDataLoggingInfo.spindle = settingsHolder.machine.spindle;\r\n this.userDataLoggingInfo.workHoldingSliderPosition = settingsHolder.machine.fixtureBar\r\n ? settingsHolder.machine.fixtureBar / 100\r\n : null;\r\n\r\n return this.http\r\n .post(this.logDataEndpoint, this.userDataLoggingInfo, { headers: headers })\r\n .pipe(\r\n catchError((response: HttpErrorResponse) =>\r\n observableThrowError(response.error.error_description || 'Server error')\r\n )\r\n );\r\n };\r\n\r\n public getProductkeyCount = async (): Promise => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.getProductkeyCountEndpoint;\r\n\r\n try {\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .toPromise();\r\n } catch (err) {\r\n observableThrowError(err.error.error_description || 'Server error');\r\n }\r\n };\r\n\r\n public getAllProductHierarchyGroups = async (): Promise => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.allProductHierarchyGroupsEndpoint;\r\n\r\n try {\r\n return this.http\r\n .get(url, {\r\n headers: headers\r\n })\r\n .toPromise();\r\n } catch (err) {\r\n observableThrowError(err.error.error_description || 'Server error');\r\n }\r\n };\r\n\r\n public getSetOfParamsAndRecs = async (offset: number): Promise => {\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const url: string = this.paramsAndRecsGroupingEndpoint;\r\n\r\n try {\r\n const response = await this.http\r\n .get(url, {\r\n headers: headers,\r\n params: { offset: offset.toString() }\r\n })\r\n .toPromise();\r\n return response;\r\n } catch (err) {\r\n return null;\r\n }\r\n };\r\n\r\n getParametersAndRecommendationsForEndmill = (productKey: number): Promise => {\r\n const url: string = this.config.apiEndpoints['paramsAndRecs'];\r\n const headers: HttpHeaders = this.createAuthorizationHeader(this.token.access_token);\r\n\r\n const httpParams = {\r\n productKey: productKey.toString()\r\n };\r\n\r\n try {\r\n return this.http\r\n .get(url + '/get-endmill', {\r\n params: httpParams,\r\n headers: headers\r\n })\r\n .toPromise();\r\n } catch (err) {\r\n observableThrowError(err.error.error_description || 'Server error');\r\n }\r\n };\r\n\r\n private generateMapModeOneParams = (parameters: Parameters_, userToolPath: string) => {\r\n switch (userToolPath) {\r\n case 'chamfering':\r\n this.userDataLoggingInfo.parameterOneLabel = 'Stick Out';\r\n this.userDataLoggingInfo.parameterTwoLabel = 'Effective Diameter';\r\n this.userDataLoggingInfo.parameterThreeLabel = 'Chamfer Height';\r\n this.userDataLoggingInfo.parameterFourLabel = 'Chamfer Width';\r\n\r\n this.userDataLoggingInfo.parameterOneValue = Number(parameters.stickOut).toFixed(4);\r\n this.userDataLoggingInfo.parameterTwoValue = Number(parameters.effectiveDiameter).toFixed(4);\r\n this.userDataLoggingInfo.parameterThreeValue = Number(parameters.chamferHeight).toFixed(4);\r\n this.userDataLoggingInfo.parameterFourValue = Number(parameters.chamferWidth).toFixed(4);\r\n break;\r\n case '3d surfacing':\r\n //double check pdf for muSymbol\r\n this.userDataLoggingInfo.parameterOneLabel = 'Stick Out';\r\n this.userDataLoggingInfo.parameterTwoLabel = 'Axial Depth';\r\n this.userDataLoggingInfo.parameterThreeLabel = 'Scallop Height (Ra)';\r\n this.userDataLoggingInfo.parameterFourLabel = 'Tool Stepover';\r\n\r\n this.userDataLoggingInfo.parameterOneValue = Number(parameters.stickOut).toFixed(4);\r\n this.userDataLoggingInfo.parameterTwoValue = Number(parameters.adocdecimal).toFixed(4); //parameters.adocdecimal + ' (' + parameters.stepDown + '% step down)',\r\n this.userDataLoggingInfo.parameterThreeValue = Number(parameters.scallopHeight).toFixed(4);\r\n this.userDataLoggingInfo.parameterFourValue = Number(parameters.scallopWidth).toFixed(4);\r\n break;\r\n case 'helical plunge':\r\n this.userDataLoggingInfo.parameterOneLabel = 'Stick Out';\r\n this.userDataLoggingInfo.parameterTwoLabel = 'Ramp Angle';\r\n this.userDataLoggingInfo.parameterThreeLabel = 'Path Diameter';\r\n this.userDataLoggingInfo.parameterFourLabel = 'Hole Depth';\r\n\r\n this.userDataLoggingInfo.parameterOneValue = Number(parameters.stickOut).toFixed(4);\r\n this.userDataLoggingInfo.parameterTwoValue = Number(parameters.rampAngle).toFixed(4);\r\n this.userDataLoggingInfo.parameterThreeValue = Number(parameters.pathDiameter).toFixed(4);\r\n this.userDataLoggingInfo.parameterFourValue = Number(parameters.holeDepth).toFixed(4);\r\n break;\r\n default:\r\n this.userDataLoggingInfo.parameterOneLabel = 'Stick Out';\r\n this.userDataLoggingInfo.parameterTwoLabel = 'Axial Depth';\r\n this.userDataLoggingInfo.parameterThreeLabel = 'Radial Depth';\r\n this.userDataLoggingInfo.parameterFourLabel = 'Engagement Angle';\r\n\r\n this.userDataLoggingInfo.parameterOneValue = Number(parameters.stickOut).toFixed(4);\r\n this.userDataLoggingInfo.parameterTwoValue = Number(parameters.adocdecimal).toFixed(4); //parameters.adocdecimal + ' (' + parameters.stepDown + '% step down)'\r\n this.userDataLoggingInfo.parameterThreeValue = Number(parameters.rdocdecimal).toFixed(4); //parameters.rdocdecimal + ' (' + parameters.stepOver + '% step over)'\r\n this.userDataLoggingInfo.parameterFourValue = Number(parameters.engagementAngle).toFixed(4);\r\n break;\r\n }\r\n };\r\n\r\n private generateMapModeOneRecs = (recommendations: Recommendation_, userToolPath: string) => {\r\n let chipThickness: string = recommendations.chipThickness ? recommendations.chipThickness.toFixed(4) : '0';\r\n switch (userToolPath) {\r\n case 'chamfering':\r\n this.userDataLoggingInfo.recommendationOneLabel = 'Surface Speed';\r\n this.userDataLoggingInfo.recommendationTwoLabel = 'Speed';\r\n this.userDataLoggingInfo.recommendationThreeLabel = 'Feed Per Tooth';\r\n this.userDataLoggingInfo.recommendationFourLabel = 'Feed Per Minute';\r\n\r\n this.userDataLoggingInfo.recommendationOneValue = math.round(recommendations.sfm, 0);\r\n this.userDataLoggingInfo.recommendationTwoValue = math.round(recommendations.rpm, 0);\r\n this.userDataLoggingInfo.recommendationThreeValue = math.round(recommendations.ipt, 4);\r\n this.userDataLoggingInfo.recommendationFourValue = math.round(recommendations.ipm, 0);\r\n break;\r\n case 'trochoidal slotting':\r\n this.userDataLoggingInfo.recommendationOneLabel = 'Trochoidal Slot Width';\r\n this.userDataLoggingInfo.recommendationTwoLabel = 'Surface Speed';\r\n this.userDataLoggingInfo.recommendationThreeLabel = 'Speed';\r\n this.userDataLoggingInfo.recommendationFourLabel = 'Feed Per Minute';\r\n this.userDataLoggingInfo.recommendationFiveLabel = 'Chip Thickness';\r\n this.userDataLoggingInfo.recommendationSixLabel = 'MRR';\r\n\r\n this.userDataLoggingInfo.recommendationOneValue = math.round(recommendations.trochoidalSlotWidth, 4);\r\n this.userDataLoggingInfo.recommendationTwoValue = math.round(recommendations.sfm, 0);\r\n this.userDataLoggingInfo.recommendationThreeValue = math.round(recommendations.rpm, 0);\r\n this.userDataLoggingInfo.recommendationFourValue = math.round(recommendations.ipmFeedInsideSlot, 0);\r\n this.userDataLoggingInfo.recommendationFiveValue = chipThickness;\r\n this.userDataLoggingInfo.recommendationSixValue = math.round(recommendations.mrr, 3);\r\n break;\r\n case 'helical plunge':\r\n this.userDataLoggingInfo.recommendationOneLabel = 'Surface Speed';\r\n this.userDataLoggingInfo.recommendationTwoLabel = 'Speed';\r\n this.userDataLoggingInfo.recommendationThreeLabel = 'Feed Per Tooth';\r\n this.userDataLoggingInfo.recommendationFourLabel = 'Feed Per Minute';\r\n this.userDataLoggingInfo.recommendationFiveLabel = 'MRR';\r\n\r\n this.userDataLoggingInfo.recommendationOneValue = math.round(recommendations.sfm, 0);\r\n this.userDataLoggingInfo.recommendationTwoValue = math.round(recommendations.rpm, 0);\r\n this.userDataLoggingInfo.recommendationThreeValue = math.round(recommendations.ipt, 4);\r\n this.userDataLoggingInfo.recommendationFourValue = math.round(recommendations.ipm, 0);\r\n this.userDataLoggingInfo.recommendationFiveValue = math.round(recommendations.mrr, 3);\r\n break;\r\n case '3d surfacing':\r\n this.userDataLoggingInfo.recommendationOneLabel = 'Surface Speed';\r\n this.userDataLoggingInfo.recommendationTwoLabel = 'Speed';\r\n this.userDataLoggingInfo.recommendationThreeLabel = 'Feed Per Tooth';\r\n this.userDataLoggingInfo.recommendationFourLabel = 'Feed Per Minute';\r\n this.userDataLoggingInfo.recommendationFiveLabel = 'Chip Thickness';\r\n\r\n this.userDataLoggingInfo.recommendationOneValue = math.round(recommendations.sfm, 0);\r\n this.userDataLoggingInfo.recommendationTwoValue = math.round(recommendations.rpm, 0);\r\n this.userDataLoggingInfo.recommendationThreeValue = math.round(recommendations.ipt, 4);\r\n this.userDataLoggingInfo.recommendationFourValue = math.round(recommendations.ipm, 0);\r\n this.userDataLoggingInfo.recommendationFiveValue = chipThickness;\r\n break;\r\n default:\r\n this.userDataLoggingInfo.recommendationOneLabel = 'Surface Speed';\r\n this.userDataLoggingInfo.recommendationTwoLabel = 'Speed';\r\n this.userDataLoggingInfo.recommendationThreeLabel = 'Feed Per Tooth';\r\n this.userDataLoggingInfo.recommendationFourLabel = 'Feed Per Minute';\r\n this.userDataLoggingInfo.recommendationFiveLabel = 'Chip Thickness';\r\n this.userDataLoggingInfo.recommendationSixLabel = 'MRR';\r\n\r\n this.userDataLoggingInfo.recommendationOneValue = math.round(recommendations.sfm, 0);\r\n this.userDataLoggingInfo.recommendationTwoValue = math.round(recommendations.rpm, 0);\r\n this.userDataLoggingInfo.recommendationThreeValue = math.round(recommendations.ipt, 4);\r\n this.userDataLoggingInfo.recommendationFourValue = math.round(recommendations.ipm, 0);\r\n this.userDataLoggingInfo.recommendationFiveValue = chipThickness;\r\n this.userDataLoggingInfo.recommendationSixValue = math.round(recommendations.mrr, 3);\r\n break;\r\n }\r\n };\r\n\r\n private generateMapModeTwoParams = (parameters: ParameterLabel[]) => {\r\n this.userDataLoggingInfo.parameterOneLabel = parameters[0] ? parameters[0].parameterLabel : '';\r\n this.userDataLoggingInfo.parameterTwoLabel = parameters[1] ? parameters[1].parameterLabel : '';\r\n this.userDataLoggingInfo.parameterThreeLabel = parameters[2] ? parameters[2].parameterLabel : '';\r\n this.userDataLoggingInfo.parameterFourLabel = parameters[3] ? parameters[3].parameterLabel : '';\r\n this.userDataLoggingInfo.parameterFiveLabel = parameters[4] ? parameters[4].parameterLabel : '';\r\n this.userDataLoggingInfo.parameterSixLabel = parameters[5] ? parameters[5].parameterLabel : '';\r\n\r\n this.userDataLoggingInfo.parameterOneValue = parameters[0] ? parameters[0].parameterValue : '';\r\n this.userDataLoggingInfo.parameterTwoValue = parameters[1] ? parameters[1].parameterValue : '';\r\n this.userDataLoggingInfo.parameterThreeValue = parameters[2] ? parameters[2].parameterValue : '';\r\n this.userDataLoggingInfo.parameterFourValue = parameters[3] ? parameters[3].parameterValue : '';\r\n this.userDataLoggingInfo.parameterFiveValue = parameters[4] ? parameters[4].parameterValue : '';\r\n this.userDataLoggingInfo.parameterSixValue = parameters[5] ? parameters[5].parameterValue : '';\r\n };\r\n\r\n private generateMapModeTwoRecs = (\r\n recommendations: RecommendationLabel[],\r\n machine: Machine_,\r\n speedAggression: number,\r\n feedAggression: number\r\n ) => {\r\n if (!!machine.holderAdjustment) {\r\n const selectedHolderAdjustment = machine.holderAdjustment.find(ha => ha.adjust === 'SFM');\r\n const selectedSpindleAdjustment = machine.spindleAdjustment.find(sa => sa.adjust === 'FPT');\r\n\r\n const sfmRation = this.formulas.calculateSfmRatio(\r\n recommendations,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n machine.maxRPM,\r\n speedAggression,\r\n feedAggression\r\n );\r\n const fptRation = this.formulas.calculateFptRatio(\r\n recommendations,\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n machine.maxIPM,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation\r\n );\r\n\r\n this.userDataLoggingInfo.recommendationOneLabel = recommendations[0]\r\n ? recommendations[0].recommendationLabel\r\n : '';\r\n this.userDataLoggingInfo.recommendationTwoLabel = recommendations[1]\r\n ? recommendations[1].recommendationLabel\r\n : '';\r\n this.userDataLoggingInfo.recommendationThreeLabel = recommendations[2]\r\n ? recommendations[2].recommendationLabel\r\n : '';\r\n this.userDataLoggingInfo.recommendationFourLabel = recommendations[3]\r\n ? recommendations[3].recommendationLabel\r\n : '';\r\n this.userDataLoggingInfo.recommendationFiveLabel = recommendations[4]\r\n ? recommendations[4].recommendationLabel\r\n : '';\r\n this.userDataLoggingInfo.recommendationSixLabel = recommendations[5]\r\n ? recommendations[5].recommendationLabel\r\n : '';\r\n\r\n this.userDataLoggingInfo.recommendationOneValue = recommendations[0]\r\n ? this.calculateRecommendationValue(\r\n recommendations[0],\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n )\r\n : '';\r\n this.userDataLoggingInfo.recommendationTwoValue = recommendations[1]\r\n ? this.calculateRecommendationValue(\r\n recommendations[1],\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n )\r\n : '';\r\n this.userDataLoggingInfo.recommendationThreeValue = recommendations[2]\r\n ? this.calculateRecommendationValue(\r\n recommendations[2],\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n )\r\n : '';\r\n this.userDataLoggingInfo.recommendationFourValue = recommendations[3]\r\n ? this.calculateRecommendationValue(\r\n recommendations[3],\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n )\r\n : '';\r\n this.userDataLoggingInfo.recommendationFiveValue = recommendations[4]\r\n ? this.calculateRecommendationValue(\r\n recommendations[4],\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n )\r\n : '';\r\n this.userDataLoggingInfo.recommendationSixValue = recommendations[5]\r\n ? this.calculateRecommendationValue(\r\n recommendations[5],\r\n selectedHolderAdjustment.factor,\r\n selectedSpindleAdjustment.factor,\r\n speedAggression,\r\n feedAggression,\r\n sfmRation,\r\n fptRation\r\n )\r\n : '';\r\n }\r\n };\r\n\r\n private calculateRecommendationValue = (\r\n recommendation: RecommendationLabel,\r\n holderFactor: number,\r\n spindleFactor: number,\r\n speedAggression: number,\r\n feedAggression: number,\r\n sfmRation: number,\r\n fptRation: number\r\n ): string => {\r\n const recValue =\r\n Number(recommendation.recommendationValue) *\r\n (recommendation.recommendationAdjustment.includes('SFM') ? holderFactor * speedAggression * sfmRation : 1) *\r\n (recommendation.recommendationAdjustment.includes('FPT') ? spindleFactor * feedAggression * fptRation : 1);\r\n return math.round(recValue, Number(recommendation.recommendationPrecision));\r\n };\r\n\r\n private emptyUserData = (): UserDataLoggingInfo => {\r\n return {\r\n userId: '',\r\n logType: '',\r\n productKey: null,\r\n materialId: null,\r\n HBW: null,\r\n HBS: null,\r\n HRB: null,\r\n HRC: null,\r\n operationId: null,\r\n holder: '',\r\n spindle: '',\r\n maxRPM: null,\r\n MaxIPM: null,\r\n workHoldingSliderPosition: null,\r\n parameterOneLabel: '',\r\n parameterOneValue: '',\r\n parameterTwoLabel: '',\r\n parameterTwoValue: '',\r\n parameterThreeLabel: '',\r\n parameterThreeValue: '',\r\n parameterFourLabel: '',\r\n parameterFourValue: '',\r\n parameterFiveLabel: '',\r\n parameterFiveValue: '',\r\n parameterSixLabel: '',\r\n parameterSixValue: '',\r\n recommendationOneLabel: '',\r\n recommendationOneValue: '',\r\n recommendationTwoLabel: '',\r\n recommendationTwoValue: '',\r\n recommendationThreeLabel: '',\r\n recommendationThreeValue: '',\r\n recommendationFourLabel: '',\r\n recommendationFourValue: '',\r\n recommendationFiveLabel: '',\r\n recommendationFiveValue: '',\r\n recommendationSixLabel: '',\r\n recommendationSixValue: '',\r\n speedSliderValue: null,\r\n feedSliderValue: null\r\n };\r\n };\r\n}\r\n","import { Component, ViewChild, ElementRef, AfterViewInit, HostListener } from '@angular/core';\r\nimport { HttpClient, HttpErrorResponse, HttpHeaders } from '@angular/common/http';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport { MatMenuTrigger } from '@angular/material/menu';\r\nimport { FormGroup } from '@angular/forms';\r\nimport { NavController, MenuController } from '@ionic/angular';\r\nimport { Materials } from './material/materialOptions.interface';\r\nimport { Message } from '../../service/dialog/message.interface';\r\nimport { Utils } from '../../service/utils';\r\nimport { throwError as observableThrowError, Observable, Subscription } from 'rxjs';\r\nimport { catchError, map } from 'rxjs/operators';\r\nimport * as $ from 'jquery';\r\nimport _ from 'lodash';\r\nimport { Start } from './start/start'; // mobile only page\r\nimport { Summary } from './summary/summary'; // mobile only page\r\nimport { Material } from './material/material';\r\nimport { Endmill } from './endmill/endmill';\r\nimport { Machine } from './machine/machine';\r\nimport { Operation } from './operation/operation';\r\nimport { Parameters } from './parameters/parameters';\r\nimport { Recommendations } from './recommendations/recommendations';\r\nimport { LoginProvider } from '../login/login.service';\r\nimport { CacheService } from 'ionic-cache';\r\nimport {\r\n Cutter_,\r\n Hem_,\r\n Material_,\r\n ToolContainer,\r\n CurrentToolPath,\r\n Parameters_,\r\n Machine_,\r\n Recommendation_,\r\n ParametersAndRecommendations\r\n} from '../../service/formulas/objects';\r\nimport { Formulas } from '../../service/formulas/formulas';\r\nimport { CommonService } from '../../service/common.service';\r\nimport { ImageConstants } from '../../service/image-constants';\r\nimport { Deeplinks } from '@ionic-native/deeplinks/ngx';\r\nimport { Hardness } from './hardness.model';\r\nimport { ServiceProvider } from '../../service/provider.interface';\r\nimport { ToolProvider } from './tool.service';\r\nimport { compress, decompress } from 'compress-json';\r\n\r\ndeclare var navigator;\r\n\r\ninterface EndmillParams {\r\n brand: string;\r\n sku: string;\r\n}\r\n\r\n@Component({\r\n selector: 'page-tool',\r\n templateUrl: 'tool.html',\r\n providers: [LoginProvider, ToolProvider],\r\n styleUrls: ['tool.scss']\r\n})\r\nexport class ToolPage extends ServiceProvider implements AfterViewInit {\r\n private subscription: Subscription;\r\n public sumarraySelected: boolean = false;\r\n public iputSpecs: boolean = true;\r\n private windowsDimensions: object = undefined;\r\n private workHolding: number = 100;\r\n private maxRPM: number = null;\r\n private maxIPM: number = null;\r\n private insideCornerValue: number = null;\r\n public loggedIn: boolean = false;\r\n endmillParams: EndmillParams;\r\n public savedParamsAndRecs: { [toolId: number]: ParametersAndRecommendations[] };\r\n public allParamsAndRecsCached: boolean = false;\r\n private toolpop: {\r\n machine: boolean;\r\n material: boolean;\r\n operations: boolean;\r\n tool: boolean;\r\n };\r\n mobileMenuOpened: boolean = false;\r\n tool: FormGroup;\r\n tabs: Array;\r\n isApp: boolean;\r\n isOnline: boolean;\r\n isLoading: boolean;\r\n materials: Materials;\r\n errorMessage: string;\r\n selectedIndex: number;\r\n edp: object;\r\n hem: Hem_;\r\n children: Array;\r\n settingsHolder: ToolContainer = new ToolContainer();\r\n oldSettingsHolder: ToolContainer = new ToolContainer();\r\n pathDiameter: number;\r\n searchingForTool: boolean = false;\r\n private loginResponse: any;\r\n private trackData: boolean = false;\r\n private toolVersion: number;\r\n\r\n operations: object = {\r\n toolPath: {}\r\n };\r\n\r\n parameters: object = {\r\n rdoc: 0,\r\n adoc: 0,\r\n stickout: 0,\r\n stickoutPercentage: 0,\r\n adocMax: 1.5 //default\r\n };\r\n\r\n recommendations: Recommendation_;\r\n material: object = {};\r\n adocMax: number = 1.5; //default\r\n private newHolder: ToolContainer;\r\n\r\n @ViewChild('gridholderTable', { static: false }) gridholderTable: ElementRef;\r\n @ViewChild('tabHolder', { static: false }) tabHolder: ElementRef;\r\n @ViewChild(MatMenuTrigger, { static: false }) accountMenu: MatMenuTrigger;\r\n\r\n @HostListener('window:resize', ['$event'])\r\n onWindowResize() {\r\n this.onResize();\r\n }\r\n\r\n constructor(\r\n public navCtrl: NavController,\r\n public menu: MenuController,\r\n public utils: Utils,\r\n public dialog: MatDialog,\r\n private commonService: CommonService,\r\n private formulas: Formulas,\r\n public cache: CacheService,\r\n private loginProvider: LoginProvider,\r\n private toolProvider: ToolProvider,\r\n public imageConstants: ImageConstants,\r\n private deeplinks: Deeplinks,\r\n private http: HttpClient\r\n ) {\r\n super();\r\n this.savedParamsAndRecs = {};\r\n\r\n this.materials = {\r\n all: [],\r\n conditions: [],\r\n materials: [],\r\n subgroups: []\r\n };\r\n\r\n this.endmillParams = {\r\n sku: '',\r\n brand: ''\r\n };\r\n\r\n this.cache\r\n .getItem('allParamsAndRecsCached')\r\n .then(data => {\r\n this.allParamsAndRecsCached = data;\r\n })\r\n .catch(err => console.log(err));\r\n\r\n this.cache\r\n .getItem('loginInfo')\r\n .then(data => {\r\n this.loginResponse = data;\r\n // Set default cache TTL so when we update the params and recs cache it expires when the token does\r\n this.cache.setDefaultTTL(this.loginResponse.expires_in);\r\n\r\n // The AuthenticationProperties can only return a dictionary of \r\n // trackData is a bool in the DB but will be returned as the string value because of this\r\n this.trackData = this.loginResponse.trackData === 'true';\r\n\r\n this.checkToolVersion();\r\n })\r\n .catch(err => console.log(err));\r\n\r\n this.cache\r\n .getItem('materials')\r\n .then(data => {\r\n let matTab = _.find(this.tabs, { label: 'Material' });\r\n this.materials = data;\r\n matTab.input = this.materials;\r\n })\r\n .catch(err => console.log(err));\r\n\r\n this.cache\r\n .getItem('toolVersion')\r\n .then(data => {\r\n this.toolVersion = data;\r\n })\r\n .catch(err => this.loginProvider.logOut());\r\n\r\n this.toolpop = {\r\n machine: false,\r\n material: false,\r\n operations: false,\r\n tool: false\r\n };\r\n this.newHolder = new ToolContainer();\r\n this.children = !this.utils.isApp()\r\n ? ['tool', 'parameters', 'material', 'operation', 'machine', 'recommendations']\r\n : ['start', 'tool', 'parameters', 'material', 'operation', 'machine', 'recommendations', 'summary']; // all the kids, default\r\n this.selectedIndex = 0;\r\n this.menu.enable(false);\r\n this.onResize();\r\n this.isOnline = navigator.onLine || navigator.connection.type != 'none' ? true : false;\r\n\r\n if (this.isApp) {\r\n this.cache.getItem('windowsDimensions').then(windowsDimensions => {\r\n this.windowsDimensions = windowsDimensions;\r\n });\r\n\r\n $('.scroll-content').css({\r\n width: '100%'\r\n });\r\n }\r\n\r\n this.settingsHolder.machine = {\r\n spindle: 'CV40',\r\n holder: '',\r\n maxRPM: null,\r\n maxIPM: null,\r\n fixtureBar: 100,\r\n holderAdjustment: [],\r\n spindleAdjustment: []\r\n };\r\n\r\n this.tabs = [\r\n new tabsContent('Start Project', Start, {\r\n startClicked: $event => this.startClicked($event)\r\n }),\r\n new tabsContent(\r\n 'Tool',\r\n Endmill,\r\n {\r\n edpChange: $event => {\r\n if (typeof $event === 'string') {\r\n // if it returns as a string, then we know its an error, else its an object\r\n\r\n if (_.trim($event).length > 1) {\r\n let message: Message = {\r\n title: 'Invalid',\r\n message: $event + ' is not a valid EDP number.'\r\n };\r\n this.utils.openDialog(message, 'error');\r\n }\r\n // notify parameters\r\n } else {\r\n // so if edp is changed, call updateHolder\r\n this.edp = this.formulas.defineEndmillFeatures($event); //casting object to a Cutter object\r\n this.updateHolder(this.edp, 'cutter', 'tool');\r\n }\r\n\r\n // if there is a material chosen already, we want to check if its compatible with the tool\r\n },\r\n startClicked: $event => this.startClicked($event)\r\n },\r\n this.endmillParams\r\n ),\r\n new tabsContent(\r\n 'Material',\r\n Material,\r\n {\r\n hardnessChange: $event => this.updateHolder($event, 'hardness', 'material'),\r\n materialChange: $event => this.updateHolder($event, 'material', 'material')\r\n },\r\n this.materials\r\n ),\r\n new tabsContent('Operations', Operation, {\r\n operationTypeChange: $event => this.updateHolder($event, 'currentOpertaionType', 'operation'),\r\n toolPathChange: $event => this.updateHolder($event, 'currenttoolpath', 'operation'),\r\n strategyChange: $event => this.updateHolder($event, 'currentStrategy', 'operation')\r\n }),\r\n new tabsContent('Machine', Machine, {\r\n machineChange: $event => {\r\n this.updateHolder($event, 'machine', 'machine');\r\n }\r\n }),\r\n new tabsContent(\r\n 'Parameters',\r\n Parameters,\r\n {\r\n parameterChange: $event => this.updateHolder($event, 'parameters', 'parameters'),\r\n parameterChangeWithSpecificChild: $event => {\r\n this.updateHolder($event, 'parameterChangeWithSpecificChild', 'parameters');\r\n },\r\n resetMaterial: $event => {\r\n this.resetMateral(); //yeah, update all\r\n },\r\n resetTool: $event => {\r\n this.resetTool(); //reset the tool, reset the endmill\r\n },\r\n invalidEndmillMessage: $event => {\r\n //\r\n }\r\n },\r\n this.parameters\r\n ), // setting up the emitter, what to do when data is returned back from child component, arDocChange is a Emitter, we are asking to have it listen to arDocChange\r\n new tabsContent('Recommendations', Recommendations, {\r\n recommendationChange: $event => {\r\n this.updateHolder($event, 'recommendations', 'recommendations');\r\n },\r\n recommendationChangeWithChild: $event => {\r\n this.updateHolder($event, 'recommendationChangeWithChild', 'recommendations');\r\n },\r\n aggressiveWarning: $event => {\r\n this.updateHolder($event, 'aggressiveWarning', 'recommendations');\r\n }\r\n }),\r\n new tabsContent('Summary', Summary, {\r\n goTab: $event => this.startClicked($event),\r\n resetAll: () => {\r\n this.resetAll();\r\n }\r\n })\r\n ];\r\n\r\n if (!this.utils.isApp()) {\r\n this.tabs.splice(0, 1); // remove start page, cause desktop does not have start page\r\n this.tabs.splice(this.tabs.length - 1, 1); // remove summary page, cause desktop does not have summary page\r\n } else {\r\n this.setTabholder();\r\n }\r\n }\r\n // autocomplete panel detection, there is no correct way to detect that currently with material2\r\n\r\n private onResize = () => {\r\n this.isApp = this.utils.isApp();\r\n };\r\n\r\n public toolReset = () => {\r\n let message: Message = {\r\n title: 'Reset',\r\n message: 'Are you sure you want to reset your selections?'\r\n };\r\n this.utils.openDialog(message, 'confirm', () => {\r\n // ok\r\n this.resetAll();\r\n });\r\n };\r\n\r\n public helpTip = () => {\r\n if (this.isApp) {\r\n this.utils.apptentiveEngage('help & tips');\r\n }\r\n };\r\n\r\n public logOut = () => {\r\n let message: Message = {\r\n title: 'Logout',\r\n message: 'Are you sure you want to logout?'\r\n };\r\n this.utils.openDialog(message, 'confirm', () => {\r\n // ok\r\n this.loginProvider.logOut();\r\n });\r\n };\r\n\r\n public logUserData = (location: string) => {\r\n if (\r\n this.trackData &&\r\n (location === 'session end' ||\r\n (this.settingsHolder.material &&\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.tool.materialIds.indexOf(this.settingsHolder.material.id) > -1))\r\n ) {\r\n this.toolProvider.logUserData(location, this.settingsHolder, this.recommendations).subscribe(response => {\r\n console.log(response);\r\n });\r\n }\r\n };\r\n\r\n public promptWorkOffline = () => {\r\n let message: Message = {\r\n title: 'Work Offline',\r\n message:\r\n 'Are you sure that you want to start the process to allow for offline access? It will take 15-20 minutes to complete and you will need to have internet connection (wifi preferred).
' +\r\n 'If you are not on wifi then this may result in high mobile data usage to complete. Data rates may apply.'\r\n };\r\n this.utils.openDialog(message, 'confirm', () => {\r\n this.cacheParamsAndRecsForOfflineMode();\r\n });\r\n };\r\n\r\n public cacheParamsAndRecsForOfflineMode = async () => {\r\n let message: Message = {\r\n title: 'Work Offline',\r\n message: 'Current Progress',\r\n data: this.toolProvider\r\n };\r\n\r\n this.utils.openDialog(message, 'workOffline', results => {\r\n this.allParamsAndRecsCached = results.gotAllData;\r\n this.cache.saveItem('allParamsAndRecsCached', results.gotAllData);\r\n });\r\n };\r\n\r\n resetMateral = () => {\r\n this.settingsHolder.material = undefined;\r\n this.settingsHolder.displayParamsAndRecs = false;\r\n this.settingsHolder.mapModeTwoValues = undefined;\r\n this.commonService.notifyOther({\r\n option: 'resetMaterial',\r\n value: this.settingsHolder,\r\n resetMaterialMessage: true\r\n }); // resetting all, all will listen for a \"RESET\"\r\n this.selectedIndex = 2;\r\n };\r\n\r\n resetTool = () => {\r\n this.settingsHolder.tool = undefined;\r\n this.commonService.notifyOther({\r\n option: 'resetTool',\r\n value: this.settingsHolder\r\n }); // resetting Tool\r\n };\r\n\r\n private checkToolVersion = () => {\r\n if(this.isOnline) { \r\n this.loginProvider\r\n .getLatestToolVersion(this.loginResponse)\r\n .toPromise().then(version => \r\n {\r\n if(version !== this.toolVersion) {\r\n this.loginProvider.logOut();\r\n }\r\n }\r\n ).catch(err => console.log(err));\r\n }\r\n }\r\n\r\n ngAfterViewInit() {\r\n this.cache.getItem('loginInfo').then(data => {\r\n this.loggedIn = true;\r\n if (this.isApp) {\r\n this.activateDeepLink();\r\n }\r\n });\r\n\r\n this.subscription = this.commonService.notifyObservable$.subscribe(res => {\r\n if (res.option === 'logout') {\r\n this.subscription.unsubscribe();\r\n }\r\n if (res.option === 'deepLinkSearchFinish') {\r\n this.searchingForTool = false;\r\n }\r\n if (res.option === 'logdata') {\r\n this.logUserData(res.value.logLocation);\r\n }\r\n if (res.option === 'updateRecommendationsDataLog') {\r\n this.recommendations = res.value;\r\n }\r\n if (res.option === 'recommendationsGeneratedForLoggingData') {\r\n setTimeout(() => {\r\n if (\r\n this.settingsHolder.tool &&\r\n this.recommendations &&\r\n this.settingsHolder.currenttoolpath && this.settingsHolder.currenttoolpath.operationName &&\r\n (!this.settingsHolder.hasStrategyOption || !!this.settingsHolder.currentStrategy) &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.machine.holder &&\r\n this.settingsHolder.machine.spindle\r\n ) {\r\n this.logUserData('recommendations generated');\r\n }\r\n });\r\n }\r\n if (res.option === 'mapModeChanged') {\r\n this.settingsHolder.mapMode = res.value.mapMode;\r\n }\r\n if (res.option === 'clearToolPath') {\r\n this.settingsHolder.mapMode = 0;\r\n this.settingsHolder.currentStrategy = null;\r\n this.settingsHolder.currenttoolpath = res.value;\r\n }\r\n if (res.option === 'checkToGetParamsAndRecs') {\r\n if (\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath &&\r\n (this.settingsHolder.hasStrategyOption ? !!this.settingsHolder.currentStrategy : true) &&\r\n this.settingsHolder.hardness &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.mapMode === 2 &&\r\n this.settingsHolder.tool.materialIds.includes(this.settingsHolder.material.id)\r\n ) {\r\n this.cache\r\n .getItem(`paramsAndRecs-${this.settingsHolder.tool.id}`)\r\n .then(paramsAndRecs => {\r\n const toolParamsAndRecs = decompress(paramsAndRecs);\r\n this.findSelectedParamsAndRecs(toolParamsAndRecs);\r\n })\r\n .catch(() => {\r\n // We haven't fetched this map mode value yet so need to get it\r\n this.getAndCahceParametersAndRecommendations();\r\n });\r\n }\r\n }\r\n });\r\n\r\n setTimeout(() => {\r\n if (this.isApp) {\r\n $('.scroll-content').css({\r\n width: '100%'\r\n });\r\n }\r\n this.onResize();\r\n });\r\n }\r\n\r\n private findSelectedParamsAndRecs = toolParamsAndRecs => {\r\n const selectedMaterialKey = this.settingsHolder.material.materialKey;\r\n const hra = this.settingsHolder.hardness.userHra\r\n ? this.settingsHolder.hardness.userHra\r\n : this.settingsHolder.hardness.hra;\r\n const operationKey = this.settingsHolder.hasStrategyOption\r\n ? this.settingsHolder.currentStrategy.operationKey\r\n : this.settingsHolder.currenttoolpath.operationKey;\r\n const selectedParamsAndRecs = toolParamsAndRecs.find(\r\n pt =>\r\n pt.materialKey === selectedMaterialKey &&\r\n pt.operationKey === operationKey &&\r\n pt.operationHardnessMin < hra &&\r\n hra < pt.operationHardnessMax &&\r\n pt.parameterHardnessMin < hra &&\r\n hra < pt.parameterHardnessMax &&\r\n pt.sfmHardnessMin < hra &&\r\n hra < pt.sfmHardnessMax\r\n );\r\n if (!!selectedParamsAndRecs) {\r\n this.settingsHolder.displayParamsAndRecs = true;\r\n this.settingsHolder.mapModeTwoValues = selectedParamsAndRecs;\r\n const updateList = !this.utils.isApp()\r\n ? ['parameters', 'recommendations']\r\n : ['parameters', 'recommendations', 'summary'];\r\n this.notifyChild(updateList, false);\r\n } else {\r\n this.displayMissingParamsAndRecsMessage();\r\n }\r\n };\r\n\r\n public indexChanged = $event => {\r\n if (this.tabHolder) {\r\n if ($event === 0) {\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header')\r\n .removeClass('showTabs');\r\n } else {\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header')\r\n .addClass('showTabs');\r\n }\r\n\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header')\r\n .height(this.windowsDimensions['tabMenuHeight']);\r\n this.selectedIndex = $event; // update the index\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .hide();\r\n if (this.selectedIndex === 5 || this.selectedIndex === 6) {\r\n this.sumarraySelected = false;\r\n this.iputSpecs = false;\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-labels')\r\n .css({\r\n width: '70%',\r\n margin: '0 auto'\r\n });\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(5)\r\n .show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(6)\r\n .show();\r\n } else if (this.selectedIndex > 0 && this.selectedIndex < 5) {\r\n this.sumarraySelected = false;\r\n this.iputSpecs = true;\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-labels')\r\n .css({\r\n width: '90%',\r\n margin: '0 auto'\r\n });\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(1)\r\n .show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(2)\r\n .show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(3)\r\n .show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(4)\r\n .show();\r\n } else if (this.selectedIndex === 7) {\r\n this.sumarraySelected = true;\r\n this.iputSpecs = false;\r\n }\r\n\r\n if (this.selectedIndex === 1) {\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header-pagination-before')\r\n .hide();\r\n } else if (this.selectedIndex > 1 && this.selectedIndex < 6) {\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header-pagination-before')\r\n .show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header-pagination-after')\r\n .show();\r\n } else if (this.selectedIndex === 6) {\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-header-pagination-after')\r\n .hide();\r\n }\r\n }\r\n };\r\n\r\n public onSwipeLeft = () => {\r\n if (this.selectedIndex >= 1 && this.selectedIndex <= 5) {\r\n this.selectedIndex += 1;\r\n }\r\n };\r\n\r\n public onSwipeRight = () => {\r\n if (this.selectedIndex >= 2 && this.selectedIndex <= 6) {\r\n this.selectedIndex -= 1;\r\n }\r\n };\r\n\r\n /*--------- mobile class setup ----------*/\r\n\r\n public changeGroupButtons = ($event: MouseEvent, groupIndex: number) => {\r\n if (this.tabHolder) {\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .hide();\r\n $('.groupButton').removeClass('selected');\r\n\r\n if (groupIndex === 5) {\r\n this.sumarraySelected = false;\r\n this.iputSpecs = false;\r\n this.selectedIndex = 5;\r\n $('.groupButton').removeClass('selected');\r\n $('#outPut').addClass('selected');\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(5)\r\n .show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-label')\r\n .eq(6)\r\n .show();\r\n }\r\n\r\n if (groupIndex === 0) {\r\n this.sumarraySelected = false;\r\n this.iputSpecs = true;\r\n this.selectedIndex = 0;\r\n $('.groupButton').removeClass('selected');\r\n $('#inputSpec').addClass('selected');\r\n }\r\n\r\n if (groupIndex === 7) {\r\n this.sumarraySelected = true;\r\n this.iputSpecs = false;\r\n this.selectedIndex = 7;\r\n $('.groupButton').removeClass('selected');\r\n $('#summary').addClass('selected');\r\n }\r\n }\r\n };\r\n\r\n private startClicked = (event: any) => {\r\n this.selectedIndex = event;\r\n };\r\n\r\n public setInnerCardClass = (): string => {\r\n if (this.isApp) {\r\n if (this.selectedIndex == 0) {\r\n return 'innerCard startTab';\r\n }\r\n return 'innerCard toolTab';\r\n }\r\n return 'innerCard';\r\n };\r\n\r\n public setTabholder = (): string => {\r\n if (this.isApp) {\r\n if (this.tabHolder) {\r\n if (this.selectedIndex == 0) {\r\n $('ion-header').hide();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-body-wrapper')\r\n .css('background-color', 'rgba(255,255,255,0)');\r\n setTimeout(() => {\r\n $(this.tabHolder.nativeElement)\r\n .find('mat-tab-header')\r\n .hide();\r\n });\r\n\r\n return 'tabholder startTabholder';\r\n } else {\r\n $(this.tabHolder.nativeElement)\r\n .find('mat-tab-header')\r\n .show();\r\n }\r\n $('ion-header').show();\r\n $(this.tabHolder.nativeElement)\r\n .find('.mat-tab-body-wrapper')\r\n .css('background-color', 'rgba(255,255,255,1)');\r\n return 'tabholder toolTabholder';\r\n }\r\n }\r\n return 'tabholder';\r\n };\r\n\r\n public setOuterCardClass = (): string => {\r\n if (this.isApp) {\r\n if (this.selectedIndex == 0) {\r\n return 'outtercard appcard';\r\n }\r\n return 'outtercard appcard';\r\n }\r\n return 'outtercard';\r\n };\r\n\r\n public apptentiveMessageCenter = () => {\r\n if (this.isApp) {\r\n this.utils.openApptentiveMessageCenter();\r\n }\r\n };\r\n\r\n activateDeepLink() {\r\n this.deeplinks\r\n .routeWithNavController(this.navCtrl, {\r\n '/tool/:brand/:sku': {}\r\n })\r\n .subscribe(\r\n match => {\r\n // match.$route - the route we matched, which is the matched entry from the arguments to route()\r\n // match.$args - the args passed in the link\r\n // match.$link - the full link data\r\n\r\n // .$args is always undefined and a bug for the deeplink library\r\n // For now use split to get the :sku to pass in since we only need the sku on MAP\r\n const args = match.$link.fragment.split('/');\r\n this.endmillParams = {\r\n sku: args[3],\r\n brand: args[2]\r\n };\r\n let matTab = _.find(this.tabs, { label: 'Tool' });\r\n matTab.input = this.endmillParams;\r\n this.searchingForTool = true;\r\n },\r\n nomatch => {\r\n // nomatch.$link - the full link data\r\n // Will fire on desktop because cordova isn't on desktop. Deeplinks plugin handles the error with a console log so let the plugin handle it for now.\r\n }\r\n );\r\n }\r\n /*---------------------------------------*/\r\n\r\n private resetAll = () => {\r\n if (\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath &&\r\n (this.settingsHolder.hasStrategyOption ? !!this.settingsHolder.currentStrategy : true) &&\r\n this.settingsHolder.hardness &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.machine.holderAdjustment &&\r\n this.settingsHolder.machine.spindleAdjustment\r\n ) {\r\n // Since the function is in tool.ts we can just call the function\r\n this.logUserData('reset');\r\n }\r\n\r\n this.selectedIndex = 0;\r\n $('.groupButton').removeClass('selected');\r\n $('#inputSpec').addClass('selected');\r\n this.settingsHolder = new ToolContainer();\r\n this.settingsHolder.machine = {\r\n spindle: 'CV40',\r\n holder: '',\r\n maxRPM: null,\r\n maxIPM: null,\r\n fixtureBar: 100,\r\n holderAdjustment: [],\r\n spindleAdjustment: []\r\n };\r\n this.settingsHolder.mapMode = 1;\r\n\r\n this.commonService.notifyOther({\r\n option: 'reset',\r\n value: this.settingsHolder\r\n }); // resetting all, all will listen for a \"RESET\"\r\n this.sumarraySelected = false;\r\n this.iputSpecs = true;\r\n this.maxIPM = null;\r\n this.maxRPM = null;\r\n };\r\n\r\n private notifyChild = (\r\n doNotNotify: Array,\r\n emit: boolean = true,\r\n origin: string = undefined,\r\n updateToolPath: boolean = false\r\n ) => {\r\n let workHoldingChange = false;\r\n let maxRPMIPMChange = false;\r\n let insideCornerValueChange = false;\r\n\r\n // notify ONLY if the this.settingsHolder and the NEWholder is different, else no need to update, might cut down some notifications\r\n let settingsHolderTemp = _.clone(this.settingsHolder);\r\n delete settingsHolderTemp.machine.dirty;\r\n delete settingsHolderTemp.parameters;\r\n\r\n let oldSettingsHolderTemp = _.clone(this.oldSettingsHolder);\r\n if (oldSettingsHolderTemp.machine) {\r\n delete oldSettingsHolderTemp.machine.dirty;\r\n delete oldSettingsHolderTemp.parameters;\r\n }\r\n\r\n let differ = !_.isEmpty(this.utils.difference(settingsHolderTemp, oldSettingsHolderTemp));\r\n\r\n if (differ) {\r\n if (origin === 'machine') {\r\n if (this.workHolding !== this.settingsHolder.machine.fixtureBar) {\r\n this.workHolding = this.settingsHolder.machine.fixtureBar;\r\n workHoldingChange = true;\r\n }\r\n\r\n if (this.maxRPM !== this.settingsHolder.machine.maxRPM) {\r\n this.maxRPM = this.settingsHolder.machine.maxRPM;\r\n maxRPMIPMChange = true;\r\n }\r\n\r\n if (this.maxIPM !== this.settingsHolder.machine.maxIPM) {\r\n this.maxIPM = this.settingsHolder.machine.maxIPM;\r\n maxRPMIPMChange = true;\r\n }\r\n }\r\n if (origin === 'recommendations') {\r\n if (\r\n this.settingsHolder.recommendationForm &&\r\n this.insideCornerValue !==\r\n this.settingsHolder.recommendationForm.get('type1').get('insideCornerRadiusOfWall').value\r\n ) {\r\n this.insideCornerValue = this.settingsHolder.recommendationForm\r\n .get('type1')\r\n .get('insideCornerRadiusOfWall').value;\r\n insideCornerValueChange = true;\r\n }\r\n }\r\n }\r\n\r\n if (!workHoldingChange && !maxRPMIPMChange && origin === 'machine') {\r\n origin = undefined;\r\n }\r\n\r\n for (let i = 0; i < doNotNotify.length; i++) {\r\n //if its truly different, lets update oldSettingsHolder\r\n this.commonService.notifyOther({\r\n option: doNotNotify[i],\r\n value: this.settingsHolder,\r\n emit: emit,\r\n origin: origin,\r\n updateToolPath: updateToolPath,\r\n warningAlerts: differ,\r\n workHoldingChange: workHoldingChange,\r\n maxRPMIPMChange: maxRPMIPMChange,\r\n insideCornerValueChange: insideCornerValueChange\r\n }); // had to use a common sevice to trigger a change event in child, the onChange doesn't get triggered all the time and is not reliable\r\n }\r\n if (differ) {\r\n this.oldSettingsHolder = _.clone(this.settingsHolder); // ONLY update if there IS an actual change\r\n }\r\n };\r\n\r\n private updateHolder = (data: any, type: string, origin: string) => {\r\n // the data is the portion that is being updated\r\n // type is WHAT is being updated\r\n // we will cast the data according to the type that is sent in\r\n // update ONLY the appropiate portion of the holder if it needs to update\r\n // once Holder is updated, THEN let the children know to update EXCEPT for where it is coming from\r\n\r\n // check if edp data is changed\r\n let changedFlag = false;\r\n let updatingToolPath = false;\r\n let updateList = _.filter(this.children, child => {\r\n return child !== origin;\r\n }); //don't notify self\r\n let innerOrigin = undefined;\r\n switch (type) {\r\n case 'cutter':\r\n this.newHolder.tool = data;\r\n if (!_.isEqual(this.newHolder.tool, this.settingsHolder.tool)) {\r\n //update\r\n this.settingsHolder.tool = this.newHolder.tool;\r\n changedFlag = true;\r\n this.toolpop = {\r\n tool: true,\r\n machine: this.settingsHolder.machine ? true : false,\r\n operations: this.settingsHolder.currenttoolpath ? true : false,\r\n material: this.settingsHolder.material ? true : false\r\n };\r\n if (this.settingsHolder.tool.materialIds && this.settingsHolder.material) {\r\n if (!this.settingsHolder.tool.materialIds.find(id => id === this.settingsHolder.material.id)) {\r\n //not in list)\r\n // its not in list, so the Invalid will pop up\r\n changedFlag = false; // so it won't update globally\r\n // the options will do the resets\r\n updateList = ['operation', 'machine', 'parameters', 'recommendations'];\r\n this.notifyChild(updateList, false);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case 'currentOpertaionType':\r\n this.settingsHolder.selectedOperation = data;\r\n break;\r\n\r\n case 'currenttoolpath':\r\n this.newHolder.currenttoolpath = data;\r\n if (!_.isEqual(this.newHolder.currenttoolpath, this.settingsHolder.currenttoolpath)) {\r\n //update\r\n this.toolpop = {\r\n tool: this.settingsHolder.tool ? true : false,\r\n machine: this.settingsHolder.machine ? true : false,\r\n operations: true,\r\n material: this.settingsHolder.material ? true : false\r\n };\r\n if (this.newHolder.currenttoolpath !== undefined) {\r\n this.settingsHolder.currenttoolpath = this.newHolder.currenttoolpath;\r\n }\r\n if (this.settingsHolder.currenttoolpath.hasOwnProperty('operationToolPathTitle')) {\r\n switch (this.settingsHolder.currenttoolpath.operationToolPathTitle.toLowerCase()) {\r\n case 'helical plunge':\r\n this.settingsHolder.parametersFields = 1;\r\n this.settingsHolder.recommendationFields = 4;\r\n break;\r\n case 'chamfering':\r\n this.settingsHolder.parametersFields = 2;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n case '3d surfacing':\r\n this.settingsHolder.parametersFields = 3;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n case 'trochoidal slotting':\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 2;\r\n break;\r\n case 'full slotting':\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n case 'traditional roughing':\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n default:\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 1;\r\n break;\r\n }\r\n } else {\r\n switch (this.settingsHolder.currenttoolpath.operationName.toLowerCase()) {\r\n case 'helical plunge':\r\n this.settingsHolder.parametersFields = 1;\r\n this.settingsHolder.recommendationFields = 4;\r\n break;\r\n case 'chamfering':\r\n this.settingsHolder.parametersFields = 2;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n case '3d surfacing':\r\n this.settingsHolder.parametersFields = 3;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n case 'trochoidal slotting':\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 2;\r\n break;\r\n case 'full slotting':\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n case 'traditional roughing':\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 0;\r\n break;\r\n default:\r\n this.settingsHolder.parametersFields = 0;\r\n this.settingsHolder.recommendationFields = 1;\r\n break;\r\n }\r\n }\r\n\r\n this.settingsHolder.mapMode = data.mapMode;\r\n this.settingsHolder.hasStrategyOption = !!data.strategies && data.strategies.length > 0;\r\n changedFlag = true;\r\n if (this.settingsHolder.tool && this.settingsHolder.tool.materialIds && this.settingsHolder.material) {\r\n if (\r\n !this.settingsHolder.tool.materialIds.find(id => id === this.settingsHolder.material.id) ||\r\n this.settingsHolder.hasStrategyOption\r\n ) {\r\n // materials aren't in the list so user will se popup and the options will be able to reset\r\n // or the tool path has strategy options that will handle notifying when selected\r\n // so it won't update globally in either case\r\n changedFlag = false;\r\n updateList = ['machine', 'parameters', 'recommendations'];\r\n this.notifyChild(updateList, false);\r\n }\r\n }\r\n }\r\n break;\r\n\r\n case 'currentStrategy':\r\n // If there is no data being passed in then we are just clearing out the strategy\r\n // Tool path will has already set map mode so no need to change it\r\n if (data) {\r\n this.settingsHolder.currentStrategy = data;\r\n this.settingsHolder.mapMode = data.mapMode;\r\n } else {\r\n this.settingsHolder.currentStrategy = null;\r\n }\r\n changedFlag = true;\r\n if (this.settingsHolder.tool && this.settingsHolder.tool.materialIds && this.settingsHolder.material) {\r\n if (!this.settingsHolder.tool.materialIds.find(id => id === this.settingsHolder.material.id)) {\r\n // materials aren't in the list so user will se popup and the options will be able to reset\r\n // so it won't update globally\r\n changedFlag = false;\r\n updateList = ['machine', 'parameters', 'recommendations'];\r\n this.notifyChild(updateList, false);\r\n }\r\n }\r\n break;\r\n\r\n case 'hardness':\r\n this.newHolder.hardness = data;\r\n if (!_.isEqual(this.newHolder.hardness, this.settingsHolder.hardness)) {\r\n //update\r\n this.settingsHolder.hardness = _.clone(this.newHolder.hardness);\r\n changedFlag = true;\r\n }\r\n break;\r\n\r\n case 'material':\r\n this.newHolder.material = data;\r\n if (!_.isEqual(this.newHolder.material, this.settingsHolder.material)) {\r\n this.toolpop = {\r\n tool: this.settingsHolder.tool ? true : false,\r\n machine: this.settingsHolder.machine ? true : false,\r\n operations: this.settingsHolder.currenttoolpath ? true : false,\r\n material: true\r\n };\r\n //update\r\n this.settingsHolder.material = _.clone(this.newHolder.material);\r\n changedFlag = true;\r\n\r\n // Only check after the materials are set\r\n this.commonService.notifyOther({\r\n option: 'checkToGetParamsAndRecs'\r\n });\r\n }\r\n break;\r\n\r\n case 'parameters':\r\n this.newHolder.parameters = data.data;\r\n\r\n let originalOrigin = data.origin;\r\n if (!_.isEqual(this.newHolder.parameters, this.settingsHolder.parameters)) {\r\n //if there is a Originalorigin, then don't update that Originalorigin\r\n //obviously don't update itself, but update the rest\r\n\r\n if (originalOrigin) {\r\n updateList = ['tool', 'material', 'operation'];\r\n this.notifyChild(updateList, false);\r\n changedFlag = false;\r\n } else {\r\n //update\r\n this.settingsHolder.parameters = _.clone(this.newHolder.parameters);\r\n updateList = ['tool', 'material', 'operation', 'recommendations'];\r\n this.notifyChild(updateList, false);\r\n changedFlag = false;\r\n }\r\n }\r\n break;\r\n\r\n case 'machine':\r\n this.newHolder.machine = data;\r\n if (!_.isEqual(this.newHolder.machine, this.settingsHolder.machine)) {\r\n this.toolpop = {\r\n tool: this.settingsHolder.tool ? true : false,\r\n machine: true,\r\n operations: this.settingsHolder.currenttoolpath ? true : false,\r\n material: this.settingsHolder.material ? true : false\r\n };\r\n\r\n // update\r\n // check if its the defaults, if not then update dirty\r\n let defaultMachine = new Machine_();\r\n\r\n if (!_.isEqual(this.settingsHolder.machine, defaultMachine) && !this.settingsHolder.machine.dirty) {\r\n this.newHolder.machine.dirty = true;\r\n }\r\n this.settingsHolder.machine = _.clone(this.newHolder.machine);\r\n innerOrigin = 'machine';\r\n changedFlag = true;\r\n updateList = ['start', 'tool', 'parameters', 'recommendations', 'summary'];\r\n }\r\n break;\r\n\r\n case 'recommendations':\r\n this.newHolder.recommendation = data.data.recommendation;\r\n this.newHolder.recommendationForm = data.data.recommendationForm;\r\n\r\n // need to update Parameters BUT tell Parameters NOT to update recommendation\r\n // recommendation doesn't need to tell everyone else, we can but it will be unnecessary notification, just parameters should be good enough\r\n if (\r\n !_.isEqual(this.newHolder.recommendation, this.settingsHolder.recommendation) ||\r\n !_.isEqual(this.newHolder.recommendationForm, this.settingsHolder.recommendationForm)\r\n ) {\r\n this.settingsHolder.recommendation = _.clone(this.newHolder.recommendation);\r\n this.settingsHolder.recommendationForm = _.clone(this.newHolder.recommendationForm);\r\n this.notifyChild(['parameters'], false);\r\n changedFlag = false;\r\n }\r\n break;\r\n\r\n case 'parameterChangeWithSpecificChild':\r\n this.newHolder.parameters = data.data;\r\n if (!_.isEqual(this.newHolder.parameters, this.settingsHolder.parameters)) {\r\n this.settingsHolder.parameters = _.clone(this.newHolder.parameters);\r\n updateList = [data.specificChild];\r\n this.notifyChild(updateList, false);\r\n changedFlag = false;\r\n }\r\n break;\r\n\r\n case 'recommendationChangeWithChild':\r\n this.newHolder.recommendation = data.data.recommendation;\r\n this.newHolder.recommendationForm = data.data.recommendationForm;\r\n\r\n let origin = data.origin ? data.origin : undefined;\r\n //need to update Parameters BUT tell Parameters NOT to update recommendation\r\n if (\r\n !_.isEqual(this.newHolder.recommendation, this.settingsHolder.recommendation) ||\r\n !_.isEqual(this.newHolder.recommendationForm, this.settingsHolder.recommendationForm)\r\n ) {\r\n this.settingsHolder.recommendation = _.clone(this.newHolder.recommendation);\r\n this.settingsHolder.recommendationForm = _.clone(this.newHolder.recommendationForm);\r\n let doNotupdateList = ['parameters'];\r\n this.notifyChild(doNotupdateList, false, origin);\r\n changedFlag = false;\r\n }\r\n break;\r\n\r\n case 'aggressiveWarning':\r\n //JUST notifying tool to highlight, NOT data change at all\r\n this.commonService.notifyOther({\r\n option: 'aggressiveWarning',\r\n value: this.settingsHolder\r\n }); // resetting Tool\r\n changedFlag = false;\r\n break;\r\n }\r\n\r\n if (this.isApp) {\r\n if (this.toolpop.machine && this.toolpop.material && this.toolpop.operations && this.toolpop.tool) {\r\n let holder = this.settingsHolder.machine.holder ? this.settingsHolder.machine.holder : undefined;\r\n if (holder) {\r\n $('.infoSnackBar').slideDown('1000', () => {\r\n setTimeout(() => {\r\n $('.infoSnackBar').slideUp();\r\n this.toolpop = {\r\n machine: false,\r\n material: false,\r\n tool: false,\r\n operations: false\r\n };\r\n }, 5000);\r\n });\r\n }\r\n }\r\n\r\n if (\r\n this.settingsHolder.tool &&\r\n this.settingsHolder.currenttoolpath &&\r\n this.settingsHolder.hardness &&\r\n this.settingsHolder.material &&\r\n this.settingsHolder.machine &&\r\n this.settingsHolder.machine.dirty\r\n ) {\r\n this.settingsHolder.dirty = true;\r\n } else {\r\n this.settingsHolder.dirty = false;\r\n }\r\n }\r\n\r\n if (changedFlag) {\r\n this.notifyChild(updateList, undefined, innerOrigin, updatingToolPath);\r\n }\r\n\r\n innerOrigin = undefined;\r\n };\r\n\r\n getAndCahceParametersAndRecommendations = async () => {\r\n const productKey = this.settingsHolder.tool.id;\r\n const parsAndRecs: ParametersAndRecommendations[] = await this.toolProvider.getParametersAndRecommendationsForEndmill(\r\n productKey\r\n );\r\n\r\n if (parsAndRecs) {\r\n this.findSelectedParamsAndRecs(parsAndRecs);\r\n this.cache.saveItem(`paramsAndRecs-${productKey}`, compress(parsAndRecs), 'paramsAndRecs');\r\n } else if (this.settingsHolder.mapMode === 2) {\r\n this.displayMissingParamsAndRecsMessage();\r\n }\r\n };\r\n\r\n private displayMissingParamsAndRecsMessage = () => {\r\n this.settingsHolder.displayParamsAndRecs = false;\r\n let message: Message = {\r\n title: 'An Unexpected Error',\r\n message:\r\n 'An unexpected error has occurred. Please contact the support team at webapps@harveyperformance.com or call (855)-828-2106'\r\n };\r\n this.utils.openDialog(message, 'confirm', () => {});\r\n };\r\n\r\n goToStartOver = () => {\r\n let self = this;\r\n $('.infoSnackBar').slideUp('fast', () => {\r\n self.resetAll();\r\n self.selectedIndex = 0;\r\n });\r\n };\r\n\r\n goToSummary = () => {\r\n let self = this;\r\n $('.infoSnackBar').slideUp('fast', () => {\r\n self.selectedIndex = 5;\r\n });\r\n };\r\n\r\n toggleMenu = () => {\r\n if (!this.mobileMenuOpened) {\r\n $('.sideMenuContainer').animate({ left: '0%' }, '1000', () => {\r\n this.mobileMenuOpened = true;\r\n $('.sideMenuSibling').click(event => {\r\n event.preventDefault();\r\n event.stopPropagation();\r\n this.closeMenu();\r\n });\r\n });\r\n } else {\r\n this.closeMenu();\r\n }\r\n };\r\n\r\n closeMenu = () => {\r\n if (this.mobileMenuOpened) {\r\n $('.sideMenuContainer').animate({ left: '-100%' });\r\n this.mobileMenuOpened = false;\r\n }\r\n };\r\n}\r\n\r\nclass tabsContent {\r\n constructor(public label: string, public content?: any, public output?: object, public input?: object) {\r\n this.label = label;\r\n this.content = content;\r\n this.output = output;\r\n this.input = input;\r\n }\r\n}\r\n","import config from '../ionic.config.json';\r\n\r\nexport class ApplicationConfig {\r\n private endPointLocation = (config).endPointLocation;\r\n private base = (config).base;\r\n public readonly apiEndpoints: { [key: string]: string };\r\n\r\n constructor() {\r\n let endpoints = {};\r\n endpoints['registration'] = this.base + this.endPointLocation + '/accounts/register';\r\n endpoints['forgotPassword'] = this.base + this.endPointLocation + '/accounts/forgot-password';\r\n endpoints['resetPassword'] = this.base + this.endPointLocation + '/accounts/reset-password';\r\n endpoints['completeRegistration'] = this.base + this.endPointLocation + '/accounts/complete-registration';\r\n endpoints['login'] = this.base + this.endPointLocation + '/token';\r\n endpoints['materials'] = this.base + this.endPointLocation + '/materials';\r\n endpoints['materialsDetails'] = this.base + this.endPointLocation + '/materials/material-details';\r\n endpoints['endmills'] = this.base + this.endPointLocation + '/endmills';\r\n endpoints['endmillsDetails'] = this.base + this.endPointLocation + '/endmills/tool-details';\r\n endpoints['operations'] = this.base + this.endPointLocation + '/operations';\r\n endpoints['machine'] = this.base + this.endPointLocation + '/machine';\r\n endpoints['bannedUserNames'] = this.base + this.endPointLocation + '/banned-usernames';\r\n endpoints['countries'] = this.base + this.endPointLocation + '/countries';\r\n endpoints['paramsAndRecs'] = this.base + this.endPointLocation + '/parameters-and-recommendations';\r\n endpoints['pdfSupportInfo'] = this.base + this.endPointLocation + '/pdf-support-info';\r\n endpoints['logUserData'] = this.base + this.endPointLocation + '/log-user-data';\r\n endpoints['endmillSearchStrings'] = this.base + this.endPointLocation + '/endmills/search-strings';\r\n endpoints['singleEndmill'] = this.base + this.endPointLocation + '/endmills/get-single-endmill';\r\n endpoints['materialsDetailsForEndmill'] = this.base + this.endPointLocation + '/materials/endmill-material-details';\r\n endpoints['toolDetailsForEndmill'] = this.base + this.endPointLocation + '/endmills/endmill-tool-details';\r\n endpoints['operationForEndmill'] = this.base + this.endPointLocation + '/operations/endmill-operations';\r\n endpoints['endmillMapModeTwoCount'] =\r\n this.base + this.endPointLocation + '/endmills/get-map-mode-two-endmill-count';\r\n endpoints['paramsAndRecsProductkeyGrouping'] =\r\n this.base + this.endPointLocation + '/parameters-and-recommendations/product-key-group';\r\n endpoints['latestToolVersion'] = `${this.base}${this.endPointLocation}/tool-version/latest`;\r\n this.apiEndpoints = endpoints;\r\n }\r\n}\r\n","import { platformBrowserDynamic } from '@angular/platform-browser-dynamic';\nimport { enableProdMode, ViewEncapsulation } from '@angular/core';\nimport { AppModule } from './app/app.module';\nenableProdMode();\nplatformBrowserDynamic().bootstrapModule(AppModule, [{ defaultEncapsulation: ViewEncapsulation.None }]);\n","import { Injectable } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { CacheService } from 'ionic-cache';\n\n@Injectable()\nexport class CommonService {\n private notify = new Subject();\n public endmills;\n public materials;\n /**\n * Observable string streams\n */\n notifyObservable$ = this.notify.asObservable();\n constructor(cache: CacheService) {}\n\n public notifyOther(data: any) {\n if (data) {\n this.notify.next(data);\n }\n }\n}\n","import { Injectable } from '@angular/core';\r\nimport _ from 'lodash';\r\nimport { ImageConstants } from './image-constants';\r\n\r\n@Injectable()\r\nexport class Constants {\r\n private readonly Spindles: BasicObject[];\r\n private readonly Holders: BasicObject[];\r\n private readonly OperationTypes: BasicObject[];\r\n private readonly ToolPathTypes: object[] = [{}, {}, {}, {}];\r\n private readonly ToolPaths: object[];\r\n private readonly ToolPathSelections: ToolPathSelections[];\r\n private readonly MillBits: MillBit[];\r\n private readonly recommendationAdjustmentOption: BasicObject[];\r\n readonly EMAIL_REGEX: RegExp;\r\n readonly DOMESTIC_PHONE_REGEX: RegExp; // US and Canada\r\n readonly INTERNATIONAL_PHONE_REGEX: RegExp;\r\n readonly PASSWORD_REGEX: RegExp;\r\n readonly NUMBER_ONLY_REGEX: RegExp;\r\n readonly DECIMAL_ONLY_REGEX: RegExp;\r\n\r\n constructor(public imageConstants: ImageConstants) {\r\n this.Spindles = [\r\n new BasicObject('CV30', 'CV30'),\r\n new BasicObject('CV40', 'CV40'),\r\n new BasicObject('CV45', 'CV45'),\r\n new BasicObject('CV50', 'CV50'),\r\n new BasicObject('CV60', 'CV60'),\r\n new BasicObject('BT30', 'BT30'),\r\n new BasicObject('BT35', 'BT35'),\r\n new BasicObject('BT40', 'BT40'),\r\n new BasicObject('BT50', 'BT50'),\r\n new BasicObject('HSK25', 'HSK25'),\r\n new BasicObject('HSK32', 'HSK32'),\r\n new BasicObject('HSK40', 'HSK40'),\r\n new BasicObject('HSK50', 'HSK50'),\r\n new BasicObject('HSK63', 'HSK63'),\r\n new BasicObject('HSK80', 'HSK80'),\r\n new BasicObject('HSK100', 'HSK100'),\r\n new BasicObject('HSK125', 'HSK125'),\r\n new BasicObject('NMTB30', 'NMTB30'),\r\n new BasicObject('NMTB40', 'NMTB40'),\r\n new BasicObject('NMTB50', 'NMTB50')\r\n ];\r\n\r\n this.Holders = [\r\n new BasicObject('Weldon', 'Weldon'),\r\n new BasicObject('DA Collet', 'DA Collet'),\r\n new BasicObject('ER Collet', 'ER Collet'),\r\n new BasicObject('TG Collet', 'TG Collet'),\r\n new BasicObject('Shrink-Fit', 'Shrink-Fit'),\r\n new BasicObject('Press-Fit', 'Press-Fit'),\r\n new BasicObject('Hydraulic', 'Hydraulic'),\r\n new BasicObject('Milling Chuck', 'Milling Chuck')\r\n ];\r\n\r\n this.OperationTypes = [new BasicObject('General Milling', 'General Milling')];\r\n\r\n this.ToolPaths = [\r\n /*0*/ new Toolpath(\r\n 'Zig-Zag Tool Path',\r\n 'Zig-Zag Tool Path',\r\n this.imageConstants.zigZagLabeled,\r\n this.imageConstants.zigZagUnlabeled,\r\n 'Equidistant parallel lines that fit with the cut area.*',\r\n this.ToolPathTypes[0],\r\n true\r\n ), //cross relational reference\r\n /*1*/ new Toolpath(\r\n 'Trochoidal Tool Path',\r\n 'Trochoidal Tool Path',\r\n this.imageConstants.trochoidalLabeled,\r\n this.imageConstants.trochoidalUnlabeled,\r\n 'Rounded offsets with arcs that pick out slots and corners.',\r\n this.ToolPathTypes[1],\r\n true\r\n ),\r\n /*2*/ new Toolpath(\r\n 'Full Slotting',\r\n 'Full Slotting',\r\n this.imageConstants.fullSlottingLabeled,\r\n this.imageConstants.fullSlottingUnlabeled,\r\n 'The endmill diameter is equivalent to the slot width and the path follows the centerline of the slot.',\r\n this.ToolPathTypes[2],\r\n true\r\n ),\r\n /*3*/ new Toolpath(\r\n 'Finishing',\r\n 'Finishing',\r\n this.imageConstants.finishingLabeled,\r\n this.imageConstants.finishingUnlabeled,\r\n 'Follows the part profile after most of the material has been removed during a roughing operation.',\r\n this.ToolPathTypes[3],\r\n true\r\n ),\r\n /*4*/ new Toolpath(\r\n 'Offset Tool Path',\r\n 'Offset Tool Path',\r\n this.imageConstants.offsetToolLabeled,\r\n this.imageConstants.offsetToolUnlabeled,\r\n 'Equidistant offsets following the shape of the past profile.',\r\n this.ToolPathTypes[0],\r\n true\r\n ),\r\n /*5*/ new Toolpath(\r\n 'Looping Tool Path',\r\n 'Looping Tool Path',\r\n this.imageConstants.LoopingToolPathLabeled,\r\n this.imageConstants.LoopingToolPathUnlabeled,\r\n 'Loops expanding outward to part profile with smaller arcs picking out corners.',\r\n this.ToolPathTypes[1],\r\n true\r\n ),\r\n /*6*/ new Toolpath(\r\n 'Chamfering',\r\n 'Chamfering',\r\n this.imageConstants.toolPathDefault,\r\n this.imageConstants.toolPathDefault,\r\n 'Chamfering',\r\n this.ToolPathTypes[4],\r\n false\r\n ),\r\n /*7*/ new Toolpath(\r\n 'Trochoidal Slotting',\r\n 'Trochoidal Slotting',\r\n this.imageConstants.trochoidalSlottingLabeled,\r\n this.imageConstants.trochoidalSlottingUnlabeled,\r\n 'The endmill diameter is less than the slot width so it can follow a series of arcs. **',\r\n this.ToolPathTypes[2],\r\n true\r\n ),\r\n /*8*/ new Toolpath(\r\n '3D Surfacing',\r\n '3D Surfacing',\r\n this.imageConstants.toolPathDefault,\r\n this.imageConstants.toolPathDefault,\r\n '3D Surfacing',\r\n this.ToolPathTypes[4],\r\n false\r\n )\r\n ];\r\n\r\n this.ToolPathTypes = [\r\n /*0*/ new ToolPathType('Traditional Roughing', 'Traditional Roughing', [this.ToolPaths[0], this.ToolPaths[4]]), //cross relational reference\r\n /*1*/ new ToolPathType('High Efficiency Roughing', 'High Efficiency Roughing', [\r\n this.ToolPaths[1],\r\n this.ToolPaths[5]\r\n ]),\r\n /*2*/ new ToolPathType('Slotting', 'Slotting', [this.ToolPaths[2], this.ToolPaths[7]]),\r\n /*3*/ new ToolPathType('Finishing', 'Finishing', [this.ToolPaths[3]])\r\n ];\r\n\r\n this.ToolPathSelections = [\r\n /*0*/ new ToolPathSelections(\r\n 'High Efficiency Milling',\r\n 'High Efficiency Milling',\r\n [this.ToolPaths[1], this.ToolPaths[5]],\r\n true\r\n ),\r\n /*1*/ new ToolPathSelections('Finishing', 'Finishing', [this.ToolPaths[3]], true),\r\n /*2*/ new ToolPathSelections('Full Slotting', 'Full Slotting', [this.ToolPaths[2]], true),\r\n /*3*/ new ToolPathSelections(\r\n 'Traditional Roughing',\r\n 'Traditional Roughing',\r\n [this.ToolPaths[0], this.ToolPaths[4]],\r\n true\r\n ),\r\n /*4*/ new ToolPathSelections('Trochoidal Slotting', 'Trochoidal Slotting', [this.ToolPaths[7]], true),\r\n /*5*/ new ToolPathSelections('Helical Plunge', 'Helical Plunge', [], true),\r\n /*6*/ new ToolPathSelections('Chamfering', 'Chamfering', [this.ToolPaths[6]], false),\r\n /*7*/ new ToolPathSelections('3D Surfacing', '3D Surfacing', [this.ToolPaths[8]], false)\r\n ];\r\n\r\n this.MillBits = [\r\n new MillBit('Square', 'Square', 35, 80, this.imageConstants.mapSquareEndMillPadded, 42, 80),\r\n new MillBit('Chamfer', 'Chamfer', 34, 23, this.imageConstants.mapChamferMillPadded, 43, 23),\r\n new MillBit('Ball-Nosed', 'Ball-Nosed', 36, 79, this.imageConstants.mapBallEndMillPadded, 42, 80),\r\n new MillBit('Bull-Nosed', 'Bull-Nosed', 36, 79, this.imageConstants.mapBullNosedPadded, 42, 80)\r\n ];\r\n\r\n this.recommendationAdjustmentOption = [\r\n new BasicObject('IPM Inside Corner', 'IPM Inside Corner'),\r\n new BasicObject('RDOC Inside Corner', 'RDOC Inside Corner')\r\n ];\r\n\r\n this.EMAIL_REGEX = /^[a-zA-Z0-9.!#$%&’*+/=?^_`{|}~-]+@[a-zA-Z0-9-]+(?:\\.[a-zA-Z0-9-]+)*$/;\r\n this.DOMESTIC_PHONE_REGEX = /^[(]{0,1}[0-9]{3}[)]{0,1}[-\\s\\.]{0,1}[0-9]{3}[-\\s\\.]{0,1}[0-9]{4}$/;\r\n this.INTERNATIONAL_PHONE_REGEX = /^\\+?([-\\s\\.\\(\\)]*\\d[-\\s\\.\\(\\)]*){7,20}$/;\r\n this.PASSWORD_REGEX = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[!@#\\$%\\^&\\*])/;\r\n\r\n this.NUMBER_ONLY_REGEX = /^[0-9]*$/;\r\n this.DECIMAL_ONLY_REGEX = /^[+-]?(\\d*\\.)?\\d+$/;\r\n }\r\n\r\n getSpindles = (): BasicObject[] => {\r\n return this.Spindles;\r\n };\r\n\r\n getHolders = (): BasicObject[] => {\r\n return this.Holders;\r\n };\r\n\r\n getOperationTypes = (): BasicObject[] => {\r\n return this.OperationTypes;\r\n };\r\n\r\n getToolPathTypes = (): object[] => {\r\n return this.ToolPathTypes;\r\n };\r\n\r\n getToolPaths = (): object[] => {\r\n return this.ToolPaths;\r\n };\r\n\r\n getToolPathSelections = (): ToolPathSelections[] => {\r\n return this.ToolPathSelections;\r\n };\r\n\r\n getMillBits = (): MillBit[] => {\r\n return this.MillBits;\r\n };\r\n\r\n getMillBitByName = (name: string): MillBit => {\r\n return _.find(this.MillBits, millBit => {\r\n return millBit.name.toLowerCase() === name.toLowerCase();\r\n });\r\n };\r\n\r\n getMillBit = (index: number): MillBit => {\r\n return this.MillBits[index];\r\n };\r\n\r\n getRecommendationAdjustmentOption = (): BasicObject[] => {\r\n return this.recommendationAdjustmentOption;\r\n };\r\n}\r\n\r\nexport class BasicObject {\r\n private name: string;\r\n private value: string;\r\n constructor(name: string, value?: string) {\r\n this.name = name;\r\n this.value = value || undefined;\r\n }\r\n\r\n getName = (): string => {\r\n return this.name;\r\n };\r\n\r\n getValue = (): string => {\r\n return this.value;\r\n };\r\n}\r\n\r\nexport class ToolPathSelections extends BasicObject {\r\n private readonly toolPaths: object[];\r\n public applicable: boolean; // this will be changing, so let it be public for easy operations,\r\n constructor(name: string, value: string, toolPaths: object[], applicable: boolean) {\r\n super(name, value);\r\n this.toolPaths = toolPaths;\r\n this.applicable = applicable;\r\n }\r\n\r\n setApplicable = (applicable: boolean) => {\r\n this.applicable = applicable;\r\n };\r\n\r\n getApplicable = (): boolean => {\r\n return this.applicable;\r\n };\r\n\r\n getToolPaths = (): object[] => {\r\n return this.toolPaths;\r\n };\r\n}\r\n\r\nclass ToolPathType extends BasicObject {\r\n private readonly toolPaths: object[];\r\n constructor(name: string, value: string, toolPaths: object[]) {\r\n super(name, value);\r\n this.toolPaths = toolPaths;\r\n }\r\n\r\n getToolPaths = (): object[] => {\r\n return this.toolPaths;\r\n };\r\n}\r\n\r\nexport class Toolpath extends BasicObject {\r\n public mapMode: number;\r\n public operationKey: number;\r\n public operationToolPathTitle?: string;\r\n public operationToolPathDescription?: string;\r\n public operationImage?: string;\r\n public operationImageAssetForParameterSection?: string;\r\n private unLabledImage: string;\r\n private labledImage: string;\r\n private description: string;\r\n private type: object;\r\n public applicable: boolean; // this will be changing, so let it be public for easy operations\r\n public strategies: Strategy[];\r\n constructor(\r\n name: string,\r\n value: string,\r\n labledImage: string,\r\n unLabledImage: string,\r\n description: string,\r\n type: object,\r\n applicable: boolean\r\n ) {\r\n super(name, value);\r\n this.unLabledImage = unLabledImage;\r\n this.labledImage = labledImage;\r\n this.description = description;\r\n this.type = type;\r\n this.applicable = applicable;\r\n }\r\n\r\n getUnLabledImage = (): string => {\r\n return this.unLabledImage;\r\n };\r\n\r\n getLabledImage = (): string => {\r\n return this.labledImage;\r\n };\r\n\r\n getDescription = (): string => {\r\n return this.description;\r\n };\r\n\r\n getType = (): object => {\r\n return this.type;\r\n };\r\n\r\n setApplicable = (applicable: boolean) => {\r\n this.applicable = applicable;\r\n };\r\n\r\n getApplicable = (): boolean => {\r\n return this.applicable;\r\n };\r\n}\r\n\r\nexport class Strategy extends BasicObject {\r\n operationName: string;\r\n strategyId: number;\r\n mapMode: number;\r\n operationKey: number;\r\n operationImageAssetForParameterSection: string;\r\n constructor(\r\n name: string,\r\n value: string,\r\n operationName: string,\r\n strategyId: number,\r\n mapMode: number,\r\n operationKey: number,\r\n operationImageAssetForParameterSection: string\r\n ) {\r\n super(name, value);\r\n this.operationName = operationName;\r\n this.strategyId = strategyId;\r\n this.mapMode = mapMode;\r\n this.operationKey = operationKey;\r\n this.operationImageAssetForParameterSection = operationImageAssetForParameterSection;\r\n }\r\n}\r\n\r\nexport class MillBit extends BasicObject {\r\n private percentageWidth: number; // there will be numbers directly from developer tool. its the width MAX of image of the bit\r\n private percentageHeight: number; // there will be numbers directly from developer tool, its the width MAX of image of the bit\r\n private image: string;\r\n private mobilePercentageWidth: number;\r\n private mobilePercentageHeight: number;\r\n constructor(\r\n name: string,\r\n value: string,\r\n percentageWidth: number,\r\n percentageHeight: number,\r\n image: string,\r\n mobilePercentageWidth: number,\r\n mobilePercentageHeight: number\r\n ) {\r\n super(name, value);\r\n this.percentageWidth = percentageWidth;\r\n this.percentageHeight = percentageHeight;\r\n this.image = image;\r\n this.mobilePercentageWidth = mobilePercentageWidth;\r\n this.mobilePercentageHeight = mobilePercentageHeight;\r\n }\r\n\r\n getPercentWidth = (): number => {\r\n return this.percentageWidth;\r\n };\r\n\r\n getPercentHeight = (): number => {\r\n return this.percentageHeight;\r\n };\r\n\r\n getImage = (): string => {\r\n return this.image;\r\n };\r\n\r\n getMobilePercentageWidth = (): number => {\r\n return this.mobilePercentageWidth;\r\n };\r\n\r\n getMobilePercentageHeight = (): number => {\r\n return this.mobilePercentageHeight;\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'alertDialog',\r\n templateUrl: 'alert.html'\r\n})\r\nexport class AlertDialog {\r\n public message: string;\r\n constructor(public dialogRef: MatDialogRef) {}\r\n\r\n okayButtonClick = $event => {\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n };\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'confirmDialog',\r\n templateUrl: 'confirm.html'\r\n})\r\nexport class ConfirmDialog {\r\n public message: string;\r\n constructor(public dialogRef: MatDialogRef) {}\r\n}\r\n","import { Component } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\n\r\n@Component({\r\n selector: 'errorDialog',\r\n templateUrl: 'error.html'\r\n})\r\nexport class ErrorDialog {\r\n public message: string;\r\n constructor(public dialogRef: MatDialogRef) {}\r\n\r\n okayButtonClick = $event => {\r\n setTimeout(() => {\r\n this.dialogRef.close();\r\n }, 500);\r\n };\r\n}\r\n","import { Component, AfterViewInit, Inject } from '@angular/core';\r\nimport { FormBuilder, FormControl, FormGroup, Validators } from '@angular/forms';\r\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\r\nimport math from 'mathjs';\r\nimport _ from 'lodash';\r\nimport { debounceTime, distinctUntilChanged } from 'rxjs/operators';\r\nimport { Constants } from '../../constants';\r\n\r\n@Component({\r\n selector: 'gCodeDialog',\r\n templateUrl: 'gCode.html',\r\n styleUrls: ['gCode.scss']\r\n})\r\nexport class GCodeDialog implements AfterViewInit {\r\n private pitch: number = 0;\r\n private holeDepth: number = 0;\r\n private pathRadius: number = 0;\r\n private ipm: number = 0;\r\n public isDisabled: boolean = true;\r\n public coordinates: FormGroup;\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n @Inject(MAT_DIALOG_DATA) public data: any,\r\n private formBuilder: FormBuilder,\r\n private constants: Constants\r\n ) {\r\n this.ipm = this.data['ipm'];\r\n this.pitch = this.data['pitch'];\r\n this.holeDepth = this.data['holeDepth'];\r\n this.pathRadius = this.data['pathRadius'] / 2;\r\n\r\n this.coordinates = this.formBuilder.group({\r\n x: new FormControl(0, [\r\n Validators.pattern(this.constants.DECIMAL_ONLY_REGEX),\r\n Validators.max(180),\r\n Validators.min(0)\r\n ]),\r\n y: new FormControl(0, [\r\n Validators.pattern(this.constants.DECIMAL_ONLY_REGEX),\r\n Validators.max(180),\r\n Validators.min(0)\r\n ]),\r\n z: new FormControl(0, [\r\n Validators.pattern(this.constants.DECIMAL_ONLY_REGEX),\r\n Validators.max(180),\r\n Validators.min(0)\r\n ]),\r\n codeBox: new FormControl({ value: '', disabled: true })\r\n });\r\n\r\n this.generateCode();\r\n }\r\n\r\n convertToGcode = (coordinate: number): string => {\r\n let decCoord = math.round(coordinate, 4);\r\n let intCoord = math.floor(coordinate);\r\n let gCodeCoord = _.toString(decCoord);\r\n\r\n if (decCoord === intCoord && decCoord != 0) {\r\n gCodeCoord = _.toString(decCoord) + '.';\r\n } else if (decCoord < 0) {\r\n if (decCoord > -1) {\r\n gCodeCoord = _.toString(decCoord).replace('-0.', '-.');\r\n }\r\n } else if (decCoord > 0) {\r\n if (decCoord < 1) {\r\n gCodeCoord = _.toString(decCoord).replace('0.', '.');\r\n }\r\n }\r\n\r\n return gCodeCoord;\r\n };\r\n\r\n resetGCode = () => {\r\n this.isDisabled = true;\r\n this.coordinates.get('x').patchValue(0, { emitEvent: false });\r\n this.coordinates.get('y').patchValue(0, { emitEvent: false });\r\n this.coordinates.get('z').patchValue(0, { emitEvent: true }); // only emit once to recalc\r\n };\r\n\r\n generateCode = () => {\r\n let helixTurns = this.holeDepth / this.pitch;\r\n let turnsInt = math.floor(helixTurns);\r\n let turnsRemain = helixTurns - turnsInt;\r\n let startAng = 2 * math.PI * (1 - turnsRemain);\r\n\r\n let xStart = this.pathRadius * math.cos(startAng);\r\n let yStart = this.pathRadius * math.sin(startAng);\r\n\r\n let iVector = 0 - xStart;\r\n let jVector = 0 - yStart;\r\n\r\n let xCenter = isNaN(parseFloat(this.coordinates.get('x').value)) ? 0 : parseFloat(this.coordinates.get('x').value);\r\n let yCenter = isNaN(parseFloat(this.coordinates.get('y').value)) ? 0 : parseFloat(this.coordinates.get('y').value);\r\n let zCenter = isNaN(parseFloat(this.coordinates.get('z').value)) ? 0 : parseFloat(this.coordinates.get('z').value);\r\n\r\n if (xCenter !== 0 || yCenter !== 0 || zCenter !== 0) {\r\n this.isDisabled = false;\r\n } else if (xCenter === 0 && yCenter === 0 && zCenter === 0) {\r\n this.isDisabled = true;\r\n }\r\n\r\n let gCode =\r\n 'X' +\r\n this.convertToGcode(xStart + xCenter) +\r\n ' Y' +\r\n this.convertToGcode(yStart + yCenter) +\r\n ' Z' +\r\n this.convertToGcode(zCenter) +\r\n '\\r\\nG17 ';\r\n\r\n let zValue = zCenter - this.pitch;\r\n\r\n for (let i: number = 0; i < turnsInt; i++) {\r\n gCode =\r\n gCode +\r\n 'G03 X' +\r\n this.convertToGcode(xStart + xCenter) +\r\n ' Y' +\r\n this.convertToGcode(yStart + yCenter) +\r\n ' Z' +\r\n this.convertToGcode(zValue);\r\n gCode = gCode + ' I' + this.convertToGcode(iVector) + ' J' + this.convertToGcode(jVector);\r\n\r\n if (i == 0) {\r\n gCode = gCode + ' F' + this.ipm + '\\r\\n';\r\n } else {\r\n gCode = gCode + '\\r\\n';\r\n }\r\n\r\n zValue = zValue - this.pitch;\r\n }\r\n\r\n if (turnsRemain > 0) {\r\n gCode =\r\n gCode +\r\n 'G03 X' +\r\n this.convertToGcode(this.pathRadius + xCenter) +\r\n ' Y' +\r\n this.convertToGcode(yCenter) +\r\n ' Z' +\r\n this.convertToGcode(zCenter - this.holeDepth);\r\n gCode = gCode + ' I' + this.convertToGcode(iVector) + ' J' + this.convertToGcode(jVector) + '\\r\\n';\r\n }\r\n\r\n gCode =\r\n gCode +\r\n 'G03 X' +\r\n this.convertToGcode(this.pathRadius + xCenter) +\r\n ' Y' +\r\n this.convertToGcode(yCenter) +\r\n ' Z' +\r\n this.convertToGcode(zCenter - this.holeDepth);\r\n gCode = gCode + ' I' + this.convertToGcode(0 - this.pathRadius) + ' J0';\r\n\r\n this.coordinates.get('codeBox').patchValue(gCode, { emitEvent: false });\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.coordinates\r\n .get('x')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe(() => {\r\n this.generateCode();\r\n });\r\n\r\n this.coordinates\r\n .get('y')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe(() => {\r\n this.generateCode();\r\n });\r\n\r\n this.coordinates\r\n .get('z')\r\n .valueChanges.pipe(debounceTime(300), distinctUntilChanged())\r\n .subscribe(() => {\r\n this.generateCode();\r\n });\r\n }\r\n}\r\n","import { Component, EventEmitter, Output, AfterViewInit } from '@angular/core';\r\nimport { MatDialog, MatDialogRef } from '@angular/material/dialog';\r\nimport { CommonService } from '../../common.service';\r\nimport { FormBuilder, FormControl, FormGroup } from '@angular/forms';\r\n\r\n@Component({\r\n selector: 'pdfInfoDialog',\r\n templateUrl: 'pdfInfo.html'\r\n})\r\nexport class PdfInfoDialog implements AfterViewInit {\r\n registration: FormGroup;\r\n public message: string;\r\n public distName: string = '';\r\n public distCompany: string = '';\r\n public user: string;\r\n public company: string;\r\n @Output() dialogDist: EventEmitter = new EventEmitter();\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n public commonService: CommonService,\r\n private formBuilder: FormBuilder,\r\n private dialog: MatDialog\r\n ) {\r\n this.registration = this.formBuilder.group({\r\n distName: new FormControl(''),\r\n distCompany: new FormControl(''),\r\n endUserName: new FormControl(''),\r\n endUserCompany: new FormControl('')\r\n });\r\n }\r\n\r\n closeDistModal = () => {\r\n this.commonService.notifyOther({\r\n option: 'dialog',\r\n value: {\r\n distName: this.registration.get('distName').value,\r\n distCompany: this.registration.get('distCompany').value,\r\n endUserName: this.registration.get('endUserName').value,\r\n endUserCompany: this.registration.get('endUserCompany').value\r\n }\r\n });\r\n this.dialog.closeAll();\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.registration.get('endUserName').patchValue(this.user, { emitEvent: false });\r\n this.registration.get('endUserCompany').patchValue(this.company, { emitEvent: false });\r\n }\r\n}\r\n","import { Component, EventEmitter, Output, AfterViewInit } from '@angular/core';\r\nimport { MatDialogRef } from '@angular/material/dialog';\r\nimport { CommonService } from '../../common.service';\r\nimport { ToolProvider } from '../../../app/tool/tool.service';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { compress } from 'compress-json';\r\n\r\n@Component({\r\n selector: 'workOfflineDialog',\r\n templateUrl: 'workOffline.html'\r\n})\r\nexport class WorkOfflineDialog implements AfterViewInit {\r\n public title: string;\r\n public message: string;\r\n public data: ToolProvider;\r\n public totalGroupings: number = 0;\r\n public completedCount: number = 0;\r\n public failedCount: number = 0;\r\n public failedFetch: boolean = true;\r\n public completedFetch: boolean = false;\r\n private cancelFetch: boolean = false;\r\n @Output() dialogDist: EventEmitter = new EventEmitter();\r\n constructor(\r\n public dialogRef: MatDialogRef,\r\n public commonService: CommonService,\r\n public cache: CacheService\r\n ) {}\r\n\r\n closeDistModal = () => {\r\n this.cancelFetch = true;\r\n this.dialogRef.close({\r\n gotAllData: this.totalGroupings === this.completedCount\r\n });\r\n };\r\n\r\n ngAfterViewInit() {\r\n this.dialogRef.disableClose = true;\r\n this.cacheParamsAndRecsForOfflineMode();\r\n }\r\n\r\n cacheParamsAndRecsForOfflineMode = async () => {\r\n const totalKeys = await this.data.getProductkeyCount();\r\n this.totalGroupings = Math.ceil(totalKeys / 100);\r\n\r\n this.cache.saveItem('mapModeTwoProductKeyCount', this.totalGroupings);\r\n\r\n for (let grouping = 0; grouping < this.totalGroupings; grouping++) {\r\n if (this.cancelFetch) {\r\n break;\r\n }\r\n\r\n const returnedParams = await this.data.getSetOfParamsAndRecs(grouping);\r\n\r\n if (returnedParams) {\r\n for (const key in returnedParams) {\r\n this.cache.saveItem(`paramsAndRecs-${key}`, compress(returnedParams[key]), 'paramsAndRecs');\r\n }\r\n this.completedCount++;\r\n } else {\r\n this.failedCount++;\r\n this.failedFetch = true;\r\n }\r\n }\r\n this.completedFetch = true;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport math from 'mathjs';\r\n@Injectable()\r\nexport class ConversionFormulas {\r\n public convertHRAtoUTS = (hardness: number): number => {\r\n return 9 * hardness + math.pow(hardness / 28.0, 7.0);\r\n };\r\n\r\n public convertHBStoHRA = (hardness: number): number => {\r\n return this.convertHRBtoHRA(this.convertHBStoHRB(hardness, 'HRA'));\r\n };\r\n\r\n public convertHBStoHRB = (hardness: number, hra: string = ''): number => {\r\n let HRBArray = [\r\n 0,\r\n 2,\r\n 3,\r\n 5,\r\n 6,\r\n 7,\r\n 8,\r\n 10,\r\n 11,\r\n 12,\r\n 13,\r\n 15,\r\n 16,\r\n 17,\r\n 18,\r\n 20,\r\n 21,\r\n 22,\r\n 23,\r\n 25,\r\n 26,\r\n 27,\r\n 28,\r\n 29,\r\n 31,\r\n 32,\r\n 33,\r\n 34,\r\n 35,\r\n 36,\r\n 38,\r\n 39,\r\n 40,\r\n 41,\r\n 42,\r\n 43,\r\n 44,\r\n 45,\r\n 47,\r\n 48,\r\n 49,\r\n 50,\r\n 51,\r\n 52,\r\n 53,\r\n 54,\r\n 55,\r\n 56,\r\n 57,\r\n 58,\r\n 59,\r\n 60,\r\n 61,\r\n 62,\r\n 63,\r\n 64,\r\n 64,\r\n 65,\r\n 66,\r\n 67,\r\n 68,\r\n 68,\r\n 69,\r\n 70,\r\n 71,\r\n 71,\r\n 72,\r\n 73,\r\n 73,\r\n 74,\r\n 75,\r\n 75,\r\n 76,\r\n 76,\r\n 77,\r\n 78,\r\n 78,\r\n 79,\r\n 79,\r\n 80,\r\n 80,\r\n 81,\r\n 81,\r\n 82,\r\n 82,\r\n 83,\r\n 83,\r\n 83,\r\n 84,\r\n 84,\r\n 85,\r\n 85,\r\n 85,\r\n 86,\r\n 86,\r\n 86,\r\n 87,\r\n 87,\r\n 88,\r\n 88,\r\n 88,\r\n 89,\r\n 89,\r\n 89,\r\n 89,\r\n 90,\r\n 90,\r\n 90,\r\n 91,\r\n 91,\r\n 91,\r\n 91,\r\n 92\r\n ];\r\n\r\n if (hra === '') {\r\n if (hardness >= 70) {\r\n return HRBArray[hardness - 48];\r\n } else {\r\n return 0;\r\n }\r\n } else if (hardness >= 48) {\r\n return HRBArray[hardness - 48];\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n public convertHRBtoHBS = (hardness: number): number => {\r\n let hbs =\r\n 1 /\r\n (0.0209261 -\r\n 0.000313747 * hardness +\r\n 0.0000032472 * math.pow(hardness, 2) -\r\n 0.0000000171476 * math.pow(hardness, 3));\r\n\r\n return hbs > 160 ? 0 : 5 * math.round(hbs / 5);\r\n };\r\n\r\n public convertHRBtoHBW = (hardness: number): number => {\r\n let BHNArray = [\r\n 100,\r\n 101,\r\n 103,\r\n 104,\r\n 106,\r\n 107,\r\n 108,\r\n 110,\r\n 112,\r\n 114,\r\n 116,\r\n 117,\r\n 119,\r\n 121,\r\n 123,\r\n 125,\r\n 127,\r\n 130,\r\n 132,\r\n 135,\r\n 137,\r\n 139,\r\n 141,\r\n 144,\r\n 147,\r\n 150,\r\n 153,\r\n 156,\r\n 159,\r\n 162,\r\n 165,\r\n 169,\r\n 172,\r\n 176,\r\n 180,\r\n 185,\r\n 190,\r\n 195,\r\n 200,\r\n 205,\r\n 210,\r\n 216,\r\n 222,\r\n 228,\r\n 234,\r\n 240\r\n ];\r\n\r\n return hardness >= 55 ? BHNArray[hardness - 55] : 0;\r\n };\r\n\r\n public convertHBWtoHRA = (hardness: number): number => {\r\n let hrb = this.convertHBWtoHRB(hardness, false);\r\n let hrc = this.convertHBWtoHRC(hardness, false);\r\n let minHBW = 225;\r\n let maxHBW = 241;\r\n\r\n if (hardness < minHBW) {\r\n return this.convertHRBtoHRA(hrb);\r\n } else if (hardness > maxHBW) {\r\n return this.convertHRCtoHRA(hrc);\r\n } else {\r\n return (\r\n (this.convertHRCtoHRA(hrc) * (hardness - minHBW) + this.convertHRBtoHRA(hrb) * (maxHBW - hardness)) /\r\n (maxHBW - minHBW)\r\n );\r\n }\r\n };\r\n\r\n public convertHBWtoHRB = (hardness: number, validate: boolean = true): number => {\r\n let hrb = 114.665 + 0.0882795 * hardness - 0.000141855 * math.pow(hardness, 2) - 6695.28 / hardness;\r\n return hrb > 100 && validate ? 0 : hrb;\r\n };\r\n\r\n public convertHBWtoHRC = (hardness: number, validate: boolean = true): number => {\r\n let hrc: number = 18.1673 + 0.120388 * hardness - 0.0000694388 * math.pow(hardness, 2) - 4883.27 / hardness;\r\n return hrc < 20 && validate ? 0 : hrc;\r\n };\r\n\r\n public convertHRCtoHBW = (hardness: number): number => {\r\n let BHNArray = [\r\n 226,\r\n 231,\r\n 237,\r\n 243,\r\n 247,\r\n 253,\r\n 258,\r\n 264,\r\n 271,\r\n 279,\r\n 286,\r\n 294,\r\n 301,\r\n 311,\r\n 319,\r\n 327,\r\n 336,\r\n 344,\r\n 353,\r\n 362,\r\n 371,\r\n 381,\r\n 390,\r\n 400,\r\n 409,\r\n 421,\r\n 432,\r\n 443,\r\n 455,\r\n 469,\r\n 481,\r\n 496,\r\n 512,\r\n 525,\r\n 543,\r\n 560,\r\n 577,\r\n 595,\r\n 615,\r\n 634,\r\n 654\r\n ];\r\n\r\n return hardness < 61 ? BHNArray[hardness - 20] : 0;\r\n };\r\n\r\n public convertHRCtoHRA = (hardness: number): number => {\r\n return (2.76747 - math.sqrt(math.pow(2.76747, 2) - 0.02376712 * (125.501 + hardness))) / 0.01188356;\r\n };\r\n\r\n public convertHRBtoHRA = (hardness: number): number => {\r\n return (3.33354 - math.sqrt(math.pow(3.33354, 2) - 0.0600428 * (48.235 + hardness))) / 0.0300214;\r\n };\r\n\r\n public convertRpmToSfm = (speed: number, diameter: number): number => {\r\n return (math.PI * diameter * speed) / 12;\r\n };\r\n\r\n public convertSfmToRpm = (surfaceSpeed: number, endmillDiameter: number): number => {\r\n return endmillDiameter > 0 ? (surfaceSpeed * 12) / (math.PI * endmillDiameter) : 0;\r\n };\r\n\r\n public convertIpmToIpt = (speed: number, feed: number, fluteCount: number): number => {\r\n return speed > 0 && fluteCount > 0 ? feed / (speed * fluteCount) : 0;\r\n };\r\n\r\n public convertIptToIpm = (speed: number, fpt: number, fluteCount: number): number => {\r\n return speed * fluteCount * fpt;\r\n };\r\n\r\n public convertTeaToRdoc = (engageAngle: number, endmillDiameter: number, fillet: number = 0) => {\r\n let angleRad = (math.PI * engageAngle) / 180;\r\n let cutWidth = (endmillDiameter * (1 - math.cos(angleRad))) / 2;\r\n\r\n if (fillet > 0) {\r\n let toolRadius = endmillDiameter / 2;\r\n let pathRadius = fillet - toolRadius;\r\n\r\n cutWidth =\r\n fillet -\r\n math.sqrt(\r\n math.pow(pathRadius, 2) +\r\n math.pow(toolRadius, 2) -\r\n pathRadius * endmillDiameter * math.cos(math.PI - angleRad)\r\n );\r\n }\r\n\r\n return cutWidth;\r\n };\r\n\r\n public convertRdocToTea = (cutWidth: number, endmillDiameter: number, fillet: number = 0) => {\r\n let angleRad;\r\n if (endmillDiameter > 0) {\r\n angleRad = math.acos((endmillDiameter - 2 * cutWidth) / endmillDiameter);\r\n\r\n if (fillet > 0) {\r\n let toolRadius = endmillDiameter / 2;\r\n let pathRadius = fillet - toolRadius;\r\n let numerator = math.pow(pathRadius, 2) + math.pow(toolRadius, 2) - math.pow(fillet - cutWidth, 2);\r\n let denominator = pathRadius * endmillDiameter;\r\n\r\n angleRad = math.abs(numerator) > denominator ? math.PI : math.PI - math.acos(numerator / denominator);\r\n }\r\n\r\n return (180 * angleRad) / math.PI;\r\n }\r\n\r\n return 0;\r\n };\r\n}\r\n","import { Injectable } from '@angular/core';\r\nimport {\r\n Machine_,\r\n Cutter_,\r\n Material_,\r\n Speed_,\r\n Parameters_,\r\n Hem_,\r\n Machining_,\r\n Recommendation_,\r\n RecommendationLabel\r\n} from './objects';\r\nimport _ from 'lodash';\r\nimport math from 'mathjs';\r\nimport { StandardFormulas } from './standardFormulas';\r\nimport { ConversionFormulas } from './conversionsFormulas';\r\n\r\n@Injectable()\r\nexport class Formulas {\r\n public hem: Hem_;\r\n public standardTool: Cutter_;\r\n public standardMaterial: Material_;\r\n public ArrayMatlISO: string[];\r\n constructor(public conversionsFormulas: ConversionFormulas, public standardFormulas: StandardFormulas) {\r\n this.ArrayMatlISO = [\r\n 'n1',\r\n 'n2',\r\n 'n3',\r\n 'n4',\r\n 'n5',\r\n 'n6',\r\n 'n7',\r\n 'n8',\r\n 'p1',\r\n 'p2',\r\n 'p3',\r\n 'p4',\r\n 'p5',\r\n 'p6',\r\n 'm1',\r\n 'm2',\r\n 'm3',\r\n 'm4',\r\n 'm5',\r\n 'k1',\r\n 'k2',\r\n 'k3',\r\n 's1',\r\n 's2',\r\n 's3',\r\n 's4',\r\n 's5',\r\n 's6',\r\n 's7'\r\n ];\r\n\r\n this.standardTool = this.getStandardTool();\r\n this.standardMaterial = this.getStandardMaterial();\r\n this.hem = this.getHEM();\r\n }\r\n\r\n public emRoundFactor = (endmillDia: number): number => {\r\n let emRoundFactor = math.round(math.log10(100 * endmillDia), 0) / 400;\r\n return emRoundFactor;\r\n };\r\n\r\n public calculateResultantFactor = (tool: Cutter_): number => {\r\n let cof = 0;\r\n if (tool.coatingCode) {\r\n switch (tool.coatingCode.toLowerCase()) {\r\n case 'uncoated':\r\n cof = 0.5;\r\n break;\r\n case 'un':\r\n cof = 0.5;\r\n break;\r\n case 'aplus':\r\n case 'zplus':\r\n cof = 0.4;\r\n break;\r\n }\r\n }\r\n let shearAngle = math.PI / 4 - tool.rake / 2 - math.atan(cof) / 2;\r\n if (shearAngle > 0) {\r\n let shearForce = 1 / math.sin(shearAngle);\r\n\r\n let normalForce = shearForce / math.cos(shearAngle - tool.rake);\r\n\r\n return normalForce * math.sqrt(1 + math.pow(cof, 2));\r\n } else {\r\n return 1;\r\n }\r\n };\r\n\r\n public calculateInchesPerMinutes = (speed: number, fpt: number, fluteCount: number): number => {\r\n return speed * fluteCount * fpt;\r\n };\r\n\r\n public calculateMaterialStretch = (\r\n material: Material_,\r\n standardMaterial: Material_ = this.standardMaterial,\r\n hem: Hem_ = this.hem\r\n ): number => {\r\n return (\r\n math.pow(material.plasticity / this.standardMaterial.plasticity, hem.plasticExp) *\r\n math.pow(this.standardMaterial.elasticity / material.elasticity, hem.elasticExp)\r\n );\r\n };\r\n\r\n public calculateMaterialChip = (material: Material_, tool: Cutter_, hardness: number = 0): number => {\r\n hardness = hardness === 0 ? material.hra : hardness;\r\n let emUTS = 372;\r\n let tensileStrength =\r\n (material.tensileStrength * this.conversionsFormulas.convertHRAtoUTS(hardness)) /\r\n this.conversionsFormulas.convertHRAtoUTS(material.hra);\r\n let shearStrength = tensileStrength * material.shearFactor;\r\n\r\n return (emUTS * math.PI) / (128 * this.calculateResultantFactor(tool) * shearStrength * math.cos(tool.helix));\r\n };\r\n\r\n public calculateMaterialSurfaceFeetPerMinute = (\r\n material: Material_,\r\n hardness: number = 0,\r\n standardMaterial: Material_ = this.standardMaterial,\r\n hem: Hem_ = this.hem\r\n ): number => {\r\n hardness = hardness === 0 ? material.hra : hardness;\r\n\r\n let tensileStrength =\r\n (material.tensileStrength * this.conversionsFormulas.convertHRAtoUTS(hardness)) /\r\n this.conversionsFormulas.convertHRAtoUTS(material.hra);\r\n let hardInflection = this.conversionsFormulas.convertHBWtoHRA(392);\r\n let hardPow = 184.0 / 9.0;\r\n let hardMax = 92.0;\r\n let hardExp = math.pow(hardness / hardInflection, hardPow);\r\n let hardFactor = 1 - ((1 + math.pow(hardInflection / hardMax, hardPow)) * hardExp) / (1 + hardExp);\r\n let hardLimit = 71.5;\r\n let densityFactor = math.pow(material.density, 1.0 / 3.0);\r\n let cteFactor = math.pow(material.thermalExpansionCoefficient, 1.0 / 2.0);\r\n let abrasiveFactor = math.pow(this.conversionsFormulas.convertHRAtoUTS(hardness) / tensileStrength, 11.0 / 90.0);\r\n let thermalFactor = math.pow(material.thermal, 23.0 / 30.0);\r\n let heatCapFactor = math.pow(material.heat, 15.0 / 8.0);\r\n let cFactor =\r\n (194.8 * math.pow(this.standardMaterial.elasticity, hem.elasticExp)) /\r\n math.pow(this.standardMaterial.plasticity, hem.plasticExp);\r\n\r\n if (hardness > hardLimit) {\r\n hardFactor = hardFactor * (1 + math.pow((hardness - hardLimit) / 7.5, 2.0));\r\n }\r\n\r\n let msfpm = (cFactor * hardFactor * thermalFactor * heatCapFactor) / (densityFactor * abrasiveFactor * cteFactor);\r\n\r\n return msfpm;\r\n };\r\n\r\n public calculateChipThinness = (cutWidth: number, endmillDiameter: number) => {\r\n return endmillDiameter / 2 > cutWidth && cutWidth > 0\r\n ? (2 * math.sqrt(endmillDiameter * cutWidth - math.pow(cutWidth, 2))) / endmillDiameter\r\n : 1;\r\n };\r\n\r\n public calculateChipCoreRatio = (tool: Cutter_, stickOut: number, axDepth: number): number => {\r\n let dia2Core =\r\n (1 - 0.62 * math.sqrt(2 / math.sqrt(3))) / (math.sqrt(2 / math.sqrt(3)) - 1) +\r\n parseInt((tool.fluteCount - 5) / 2 + ''); //cause its expecting a string\r\n let holderStress =\r\n (this.standardFormulas.calculateBendingMoment(stickOut, axDepth, 1) * tool.cutterDiameter) /\r\n (2 * this.standardFormulas.calculateMomentOfInertia(tool.cutterDiameter));\r\n let locStress =\r\n (this.standardFormulas.calculateBendingMoment(tool.lengthOfCut, axDepth, 1) * tool.cutterDiameter) /\r\n (2 *\r\n this.standardFormulas.calculateMomentOfInertia(\r\n (tool.coreDiameter + dia2Core * tool.cutterDiameter) / (1 + dia2Core)\r\n ));\r\n\r\n return holderStress / locStress;\r\n };\r\n\r\n public calculateChipWorkFactor = (toolDiameter: number, stickOut: number, axDepth: number): number => {\r\n let chipExp = 3.5;\r\n let chipBase = math.pow(toolDiameter + 1, chipExp);\r\n let chipDiaRatio = (chipBase - 1) / (toolDiameter * (chipBase + math.pow(1.5, chipExp) - 2));\r\n let emStress = this.standardFormulas.calculateStressFactor(toolDiameter, stickOut, axDepth);\r\n\r\n return chipDiaRatio / emStress;\r\n };\r\n\r\n public calculateScallopStepOver = (emDiameter: number, roughness: number): number => {\r\n let emRadius = emDiameter / 2;\r\n let scallopHeight = roughness / 1000000;\r\n\r\n return 2 * math.sqrt(math.pow(emRadius, 2) - math.pow(emRadius - scallopHeight, 2));\r\n };\r\n\r\n public calculateScallopHeight = (emDiameter: number, stepOver: number): number => {\r\n let emRadius = emDiameter / 2;\r\n let scallopHeight = emRadius - math.sqrt(math.pow(emRadius, 2) - math.pow(stepOver / 2, 2));\r\n\r\n return 1000000 * scallopHeight;\r\n };\r\n\r\n public calculateCutDepth = (tool: Cutter_, hardness: number, path: string = 'High Efficiency Milling'): number => {\r\n if (path === 'Trochoidal Slotting' || path === 'High Efficiency Milling' || path === 'Finishing') {\r\n return tool.lengthOfCut;\r\n } else if (path === '3D Surfacing') {\r\n const roundFactor = math.round(math.log10(100 * tool.cutterDiameter), 0) / 200;\r\n return roundFactor * math.floor(tool.cutterDiameter / (15 * roundFactor));\r\n } else if (hardness > 0) {\r\n const fluteFactor = path === 'Full Slotting' ? tool.fluteCount + 2 : tool.fluteCount + 3;\r\n const hardExp = path === 'Full Slotting' ? 1.0 / 2.0 : 3.0 / 20.0;\r\n const cFactor = path === 'Full Slotting' ? 3068 : 1293;\r\n const stepDown = cFactor / (fluteFactor * math.pow(hardness, hardExp));\r\n const cutDepth = (math.round(stepDown / 5) * tool.cutterDiameter) / 20;\r\n return Math.min(cutDepth, tool.lengthOfCut);\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n calculateFinishWallStock = (diameter: number): number => {\r\n let roundFactor = math.round(math.log10(130 * diameter), 0) / 400;\r\n let stepPercent = math.pow(1 / diameter, 0.25) / 30;\r\n\r\n return diameter === 0 ? 0 : roundFactor * math.ceil((diameter * stepPercent) / roundFactor);\r\n };\r\n\r\n calculateEffectiveDiameter = (endmillDiameter: number, cutDepth: number): number => {\r\n return cutDepth < endmillDiameter / 2 ? 2 * math.sqrt(cutDepth * (endmillDiameter - cutDepth)) : endmillDiameter;\r\n };\r\n\r\n calculatePitch2Ramp = (pitch: number, pathDia: number): number => {\r\n let pathLength = math.PI * pathDia;\r\n return pathLength > 0 ? math.atan(pitch / pathLength) : 0;\r\n };\r\n\r\n calculateRamp2Pitch = (rampAng: number, pathDia: number): number => {\r\n let pathLength = math.PI * pathDia;\r\n return pathLength * math.tan(rampAng);\r\n };\r\n\r\n calculateMaxFilletRdoc = (endmillDia: number, filletRad: number, engageAng: number): number => {\r\n let emRad = endmillDia / 2;\r\n let pathRad = filletRad - emRad;\r\n let angRad = (math.PI * engageAng) / 180;\r\n\r\n return (\r\n filletRad -\r\n math.sqrt(math.pow(emRad, 2) + math.pow(pathRad, 2) - 2 * pathRad * emRad * math.cos(math.PI - angRad))\r\n );\r\n };\r\n\r\n calculateMinFilletRad = (endmillDia: number, cutWidth: number, engageAng: number): number => {\r\n let emRad = endmillDia / 2;\r\n let angRad = (math.PI * engageAng) / 180;\r\n let cosValue = 1 + math.cos(math.PI - angRad);\r\n\r\n return (2 * math.pow(emRad, 2) * cosValue - math.pow(cutWidth, 2)) / (2 * (emRad * cosValue - cutWidth));\r\n };\r\n\r\n calculateMaxFilletEmDia = (filletRad: number, cutWidth: number, engageAng: number): number => {\r\n let angRad = (math.PI * engageAng) / 180;\r\n let cosValue = 1 + math.cos(math.PI - angRad);\r\n let sqrtValue =\r\n cosValue * (cosValue * math.pow(filletRad, 2) - 4 * filletRad * cutWidth + 2 * math.pow(cutWidth, 2));\r\n\r\n return sqrtValue < 0 ? 0 : (cosValue * filletRad + math.sqrt(sqrtValue)) / cosValue;\r\n };\r\n\r\n calculateChipThin = (cutWidth: number, endmillDia: number): number => {\r\n return endmillDia / 2 > cutWidth && cutWidth > 0\r\n ? (2 * math.sqrt(endmillDia * cutWidth - math.pow(cutWidth, 2))) / endmillDia\r\n : 1;\r\n };\r\n\r\n calculateMaxEngageAngle = (tool: Cutter_, cutDepth: number, workMatl: Material_, hardness: number): number => {\r\n let adocFactor =\r\n cutDepth > 0\r\n ? math.pow((36 * tool.cutterDiameter + 17 * (cutDepth - 2 * tool.cutterDiameter)) / (18 * cutDepth), 22.0 / 3.0)\r\n : 0;\r\n\r\n if (tool.breaks === true && cutDepth > tool.cutterDiameter) {\r\n cutDepth = tool.cutterDiameter * math.pow(cutDepth / tool.cutterDiameter, 1.0 / 3.0);\r\n }\r\n\r\n let chipRatio =\r\n (this.calculateMaterialChip(workMatl, this.standardTool, hardness) * this.calculateMaterialStretch(workMatl)) /\r\n this.calculateMaterialChip(this.standardMaterial, this.standardTool, this.standardMaterial.hra);\r\n\r\n let sfmRatio =\r\n this.calculateMaterialSurfaceFeetPerMinute(workMatl, hardness) /\r\n (this.calculateMaterialStretch(workMatl) * this.calculateMaterialSurfaceFeetPerMinute(this.standardMaterial));\r\n\r\n let helixRatio = (1.5 + math.sin(tool.helix)) / (1.5 + math.sin(this.standardTool.helix)); // this require a workMatl and workTool, might have to do further investigation where the \"WORK\" is set\r\n let fluteArea =\r\n (math.pow(tool.cutterDiameter, 2) - math.pow(tool.coreDiameter, 2)) /\r\n (4 * tool.fluteCount * math.pow(tool.cutterDiameter, 2));\r\n fluteArea =\r\n (fluteArea * this.standardTool.fluteCount) /\r\n (math.pow(this.standardTool.cutterDiameter, 2) - math.pow(this.standardTool.coreDiameter, 2));\r\n\r\n if (cutDepth > 0 && tool.fluteCount > 0) {\r\n let maxAngle =\r\n (56 * adocFactor * helixRatio * math.pow(fluteArea, 3.0 / 4.0) * math.pow(sfmRatio, 1.0 / 12.0)) /\r\n math.pow(chipRatio, 3.0 / 19.0);\r\n\r\n return maxAngle > 180 ? 180 : maxAngle;\r\n } else {\r\n return 0;\r\n }\r\n };\r\n\r\n setCutWidth = (tool: Cutter_, cutDepth: number, workMatl: Material_, path: string, hardness: number = 0): number => {\r\n if (hardness == 0) {\r\n hardness = workMatl.hra;\r\n }\r\n\r\n if (path === 'Trochoidal Slotting') {\r\n path = 'High Efficiency Milling';\r\n }\r\n\r\n let baseSFM =\r\n this.calculateMaterialSurfaceFeetPerMinute(workMatl, hardness) / this.calculateMaterialStretch(workMatl);\r\n\r\n let maxEngageAng = this.calculateMaxEngageAngle(tool, cutDepth, workMatl, hardness);\r\n let engageAng = 0;\r\n let adocFactor =\r\n cutDepth > 0\r\n ? math.pow((36 * tool.cutterDiameter + 17 * (cutDepth - 2 * tool.cutterDiameter)) / (18 * cutDepth), 22.0 / 3.0)\r\n : 0;\r\n\r\n if (tool.breaks === true && cutDepth > tool.cutterDiameter) {\r\n cutDepth = tool.cutterDiameter * math.pow(cutDepth / tool.cutterDiameter, 1.0 / 4.0);\r\n }\r\n\r\n if (path === 'High Efficiency Milling') {\r\n let sfmRatio = baseSFM / this.calculateMaterialSurfaceFeetPerMinute(this.standardMaterial);\r\n let chipRatio =\r\n (this.calculateMaterialChip(workMatl, this.standardTool, hardness) * this.calculateMaterialStretch(workMatl)) /\r\n this.calculateMaterialChip(this.standardMaterial, this.standardTool, this.standardMaterial.hra);\r\n let fluteArea =\r\n (math.pow(tool.cutterDiameter, 2) - math.pow(tool.coreDiameter, 2)) /\r\n (4 * tool.fluteCount * math.pow(tool.cutterDiameter, 2));\r\n fluteArea =\r\n (fluteArea * this.standardTool.fluteCount) /\r\n (math.pow(this.standardTool.cutterDiameter, 2) - math.pow(this.standardTool.coreDiameter, 2));\r\n\r\n engageAng =\r\n (41 * adocFactor * math.pow(fluteArea, 2.0 / 5.0) * math.pow(sfmRatio, 1.0 / 5.0)) /\r\n math.pow(chipRatio, 1.0 / 12.0);\r\n } else {\r\n let widthFactor = 50.0 / 163.0;\r\n let fluteFactor = 1.0 / 2.0;\r\n let sfmExp = 8.0 / 45.0;\r\n\r\n engageAng =\r\n (180 * widthFactor * adocFactor * math.pow(baseSFM, sfmExp)) /\r\n (math.PI * math.atan(tool.fluteCount * fluteFactor));\r\n }\r\n\r\n if (engageAng >= maxEngageAng) {\r\n engageAng = maxEngageAng;\r\n }\r\n\r\n let fws = this.calculateFinishWallStock(tool.cutterDiameter);\r\n let ttr = this.conversionsFormulas.convertTeaToRdoc(engageAng, tool.cutterDiameter);\r\n\r\n return path === 'Finishing' ? fws : ttr;\r\n };\r\n\r\n // machine Formulas\r\n\r\n public calculateStandardMachining = (\r\n material: Material_,\r\n tool: Cutter_,\r\n millingParameters: Parameters_,\r\n hardness: number,\r\n standardMaterial: Material_ = this.standardMaterial,\r\n hem: Hem_ = this.hem,\r\n standardTool: Cutter_ = this.standardTool\r\n ): Machining_ => {\r\n let cutWidth = millingParameters.cutWidth;\r\n let toolPath = millingParameters.toolPath.operationName;\r\n\r\n if (toolPath === 'Chamfering') {\r\n cutWidth = millingParameters.chamferWidth;\r\n }\r\n\r\n if (toolPath === 'Trochoidal Slotting') {\r\n toolPath = 'High Efficiency Milling';\r\n }\r\n\r\n let machining: Machining_ = new Machining_();\r\n machining.chipLoad = 0;\r\n\r\n if (hardness === 0) {\r\n hardness = material.hra;\r\n }\r\n\r\n let startSFM = this.calculateMaterialSurfaceFeetPerMinute(material, hardness);\r\n let unitSFM = startSFM / this.calculateMaterialSurfaceFeetPerMinute(this.configureMaterial(standardMaterial));\r\n\r\n if (tool.pitch == 'constant' || tool.pitch == 'even') {\r\n startSFM = (6 * startSFM) / 7;\r\n }\r\n\r\n machining.feedFactor = 1 / this.calculateChipThinness(cutWidth, tool.cutterDiameter);\r\n\r\n let coreRatio = this.calculateChipCoreRatio(tool, millingParameters.stickOut, millingParameters.cutDepth);\r\n let chipWorkAdjust = this.calculateChipWorkFactor(\r\n tool.cutterDiameter,\r\n millingParameters.stickOut,\r\n millingParameters.cutDepth\r\n );\r\n let maxChipAdjust = 2.5 * math.tan(math.PI / 4 - tool.rake) * math.cos(tool.helix);\r\n let chipThickness = hem.emSafety * tool.cutterDiameter * this.calculateMaterialChip(material, tool, hardness);\r\n let helixRatio = math.cos(tool.helix) / math.cos(this.standardTool.helix);\r\n\r\n let axialFactor = math.pow(\r\n (3 *\r\n tool.cutterDiameter *\r\n math.pow(\r\n (313 * math.pow(tool.cutterDiameter, 3)) /\r\n (20 * math.pow(millingParameters.cutDepth, 3) -\r\n 50 * millingParameters.cutDepth * math.pow(millingParameters.stickOut, 2) +\r\n 39 * math.pow(millingParameters.stickOut, 3)),\r\n 8.0 / 7.0\r\n )) /\r\n millingParameters.stickOut,\r\n 1.0 / 3.0\r\n );\r\n let emUTSRatio = 1;\r\n let rampRatio = 1;\r\n let coreSpeedRatio = 1;\r\n\r\n if (tool.end.indexOf('Chamfer') > -1) {\r\n coreRatio = 1;\r\n }\r\n\r\n if (coreRatio > 1) {\r\n coreSpeedRatio = math.pow(coreRatio, 2.0 / (3.0 * coreRatio));\r\n coreRatio = 1;\r\n }\r\n\r\n if (toolPath == 'High Efficiency Milling') {\r\n if (chipWorkAdjust > maxChipAdjust) {\r\n chipWorkAdjust = maxChipAdjust;\r\n }\r\n\r\n if (axialFactor > 1.5) {\r\n axialFactor = 1.5;\r\n }\r\n\r\n emUTSRatio = helixRatio * chipWorkAdjust * this.calculateMaterialStretch(material);\r\n } else if (toolPath === '3D Surfacing') {\r\n startSFM = 3000 * math.pow(unitSFM, 0.7);\r\n emUTSRatio = (helixRatio * math.sqrt(chipWorkAdjust) * this.calculateMaterialStretch(material)) / 1.4;\r\n } else if (toolPath === 'Chamfering') {\r\n startSFM = 133.45 * math.pow(unitSFM / math.pow(this.calculateMaterialStretch(material), 2.55), 0.7382);\r\n axialFactor = 1;\r\n emUTSRatio =\r\n (this.calculateChipThinness(cutWidth, tool.cutterDiameter) * tool.cutterDiameter) /\r\n (5.4 * cutWidth * math.pow(this.calculateMaterialStretch(material), 2.55));\r\n } else if (toolPath === 'Helical Plunge') {\r\n startSFM = (16 * math.pow(startSFM, 7.0 / 8.0)) / 25;\r\n chipWorkAdjust = this.calculateChipWorkFactor(\r\n tool.cutterDiameter,\r\n millingParameters.stickOut,\r\n math.sqrt(millingParameters.cutDepth)\r\n );\r\n axialFactor =\r\n ((1.25 + math.pow((2.0 * tool.cutterDiameter) / millingParameters.cutDepth, 1.0 / 8.0)) *\r\n math.pow((3.0 * tool.cutterDiameter) / millingParameters.stickOut, 2.0 / 3.0)) /\r\n 2;\r\n\r\n let pathDiameter = millingParameters.cutWidth - tool.cutterDiameter;\r\n let helixLength = math.sqrt(math.pow(math.PI * pathDiameter, 2) + math.pow(millingParameters.pitch, 2));\r\n let pitchFactor = (math.PI * pathDiameter) / (48 * millingParameters.pitch);\r\n let rampRatio = 1 + math.pow(millingParameters.pitch / helixLength, 1.0 / 2.5);\r\n\r\n chipThickness = chipThickness * this.calculateMaterialStretch(material) * pitchFactor * rampRatio;\r\n } else {\r\n let unitChipExp = 1.0 / 3.0;\r\n\r\n if (toolPath === 'Finishing') {\r\n unitChipExp = 2.0 / 3.0;\r\n axialFactor = 1;\r\n coreSpeedRatio = 1;\r\n coreRatio = 1;\r\n chipThickness = chipThickness / (50 * tool.cutterDiameter);\r\n } else {\r\n coreSpeedRatio = math.pow(coreSpeedRatio, 1.0 / 3.0);\r\n coreRatio = math.pow(coreRatio, 1.0 / 3.0);\r\n axialFactor = math.pow(chipWorkAdjust, 1.0 / 3.0);\r\n chipThickness = 2.5 * chipThickness * this.calculateChipThinness(cutWidth, tool.cutterDiameter);\r\n }\r\n chipThickness =\r\n chipThickness *\r\n math.pow(\r\n this.calculateMaterialChip(standardMaterial, standardTool) /\r\n this.calculateMaterialChip(material, standardTool, hardness),\r\n unitChipExp\r\n );\r\n\r\n if (cutWidth > tool.cutterDiameter / 2) {\r\n chipThickness = (chipThickness * tool.cutterDiameter) / (2 * cutWidth);\r\n cutWidth = this.conversionsFormulas.convertTeaToRdoc(180, tool.cutterDiameter);\r\n } else if (toolPath !== 'Finishing') {\r\n cutWidth = this.conversionsFormulas.convertTeaToRdoc(\r\n 90 + this.conversionsFormulas.convertRdocToTea(cutWidth, tool.cutterDiameter),\r\n tool.cutterDiameter\r\n );\r\n }\r\n\r\n let standardSFM = 325 / this.calculateChipThinness(cutWidth, tool.cutterDiameter);\r\n startSFM =\r\n standardSFM * math.pow(unitSFM * math.pow(this.calculateMaterialStretch(material), 8.0 / 13.0), 0.70515);\r\n emUTSRatio = (axialFactor * coreSpeedRatio * tool.cutterDiameter) / (2 * cutWidth);\r\n }\r\n\r\n machining.chipLoad = chipThickness * emUTSRatio * coreRatio;\r\n let workFactor =\r\n (2 * cutWidth * emUTSRatio) / (tool.cutterDiameter * this.calculateChipThinness(cutWidth, tool.cutterDiameter));\r\n\r\n if (toolPath === 'Helical Plunging') {\r\n machining.chipLoad = chipThickness * chipWorkAdjust * coreRatio;\r\n workFactor =\r\n (this.calculateChipWorkFactor(\r\n tool.cutterDiameter,\r\n millingParameters.stickOut,\r\n math.pow(millingParameters.cutDepth, 1.0 / 4.0)\r\n ) *\r\n rampRatio) /\r\n 6;\r\n }\r\n\r\n machining.surfaceSpeed = (coreSpeedRatio * startSFM * axialFactor) / workFactor;\r\n\r\n if (tool.end.indexOf('Chamfer') > -1) {\r\n machining.baseMRR = 0;\r\n } else {\r\n machining.baseMRR = this.calculateMachiningMRR(material, tool, workFactor, hardness);\r\n }\r\n\r\n return machining;\r\n };\r\n\r\n public calculatePlungingMachining = (\r\n material: Material_,\r\n tool: Cutter_,\r\n plungingParameters: Parameters_,\r\n hardness: number,\r\n standardMaterial: Material_ = this.standardMaterial,\r\n hem: Hem_ = this.hem,\r\n standardTool: Cutter_ = this.standardTool\r\n ): Machining_ => {\r\n let holeDiameter: number = plungingParameters.holeDiameter;\r\n\r\n let machining: Machining_ = new Machining_();\r\n machining.chipLoad = 0;\r\n\r\n if (hardness === 0) {\r\n hardness = material.hra;\r\n }\r\n\r\n let startSFM = this.calculateMaterialSurfaceFeetPerMinute(material, hardness, standardMaterial, hem);\r\n\r\n if (tool.pitch == 'constant' || tool.pitch == 'even') {\r\n startSFM = (6 * startSFM) / 7;\r\n }\r\n\r\n machining.feedFactor = 1 / this.calculateChipThinness(holeDiameter, tool.cutterDiameter);\r\n\r\n let coreRatio = this.calculateChipCoreRatio(tool, plungingParameters.stickOut, plungingParameters.holeDepth);\r\n let chipWorkAdjust = this.calculateChipWorkFactor(\r\n tool.cutterDiameter,\r\n plungingParameters.stickOut,\r\n plungingParameters.holeDepth\r\n );\r\n let chipThickness = hem.emSafety * tool.cutterDiameter * this.calculateMaterialChip(material, tool, hardness);\r\n let axialFactor = math.pow(\r\n (3 *\r\n tool.cutterDiameter *\r\n math.pow(\r\n (313 * math.pow(tool.cutterDiameter, 3)) /\r\n (20 * math.pow(plungingParameters.holeDepth, 3) -\r\n 50 * plungingParameters.holeDepth * math.pow(plungingParameters.stickOut, 2) +\r\n 39 * math.pow(plungingParameters.stickOut, 3)),\r\n 8.0 / 7.0\r\n )) /\r\n plungingParameters.stickOut,\r\n 1.0 / 3.0\r\n );\r\n let rampRatio = 1;\r\n let coreSpeedRatio = 1;\r\n\r\n if (coreRatio > 1) {\r\n coreSpeedRatio = math.pow(coreRatio, 2.0 / (3.0 * coreRatio));\r\n coreRatio = 1;\r\n }\r\n\r\n if (coreRatio > 1) {\r\n coreSpeedRatio = math.pow(coreRatio, 2.0 / (3.0 * coreRatio));\r\n coreRatio = 1;\r\n }\r\n\r\n startSFM = (16 * math.pow(startSFM, 7.0 / 8.0)) / 25;\r\n chipWorkAdjust = this.calculateChipWorkFactor(\r\n tool.cutterDiameter,\r\n plungingParameters.stickOut,\r\n math.sqrt(plungingParameters.holeDepth)\r\n );\r\n axialFactor =\r\n ((1.25 + math.pow((2.0 * tool.cutterDiameter) / plungingParameters.holeDepth, 1.0 / 8.0)) *\r\n math.pow((3.0 * tool.cutterDiameter) / plungingParameters.stickOut, 2.0 / 3.0)) /\r\n 2;\r\n\r\n let pathDiameter = holeDiameter - tool.cutterDiameter;\r\n let helixLength = math.sqrt(math.pow(math.PI * pathDiameter, 2) + math.pow(plungingParameters.pitch, 2));\r\n let pitchFactor = (math.PI * pathDiameter) / (48 * plungingParameters.pitch);\r\n rampRatio = 1 + math.pow(plungingParameters.pitch / helixLength, 1.0 / 2.5);\r\n\r\n chipThickness = chipThickness * this.calculateMaterialStretch(material) * pitchFactor * rampRatio;\r\n\r\n let workFactor =\r\n (this.calculateChipWorkFactor(\r\n tool.cutterDiameter,\r\n plungingParameters.stickOut,\r\n math.pow(plungingParameters.holeDepth, 1.0 / 4.0)\r\n ) *\r\n rampRatio) /\r\n 6;\r\n\r\n machining.surfaceSpeed = (coreSpeedRatio * startSFM * axialFactor) / workFactor;\r\n machining.chipLoad = chipThickness * chipWorkAdjust * coreRatio;\r\n machining.baseMRR = this.calculateMachiningMRR(material, tool, workFactor, hardness);\r\n\r\n return machining;\r\n };\r\n\r\n public calculateMachiningMRR = (\r\n material: Material_,\r\n tool: Cutter_,\r\n workFactor: number,\r\n hardness: number,\r\n standardMaterial: Material_ = this.standardMaterial,\r\n standardTool: Cutter_ = this.standardTool,\r\n hem: Hem_ = this.hem\r\n ): number => {\r\n let newCutter: Cutter_ = {\r\n description: standardTool.description,\r\n fluteCount: standardTool.fluteCount,\r\n cutterDiameter: tool.cutterDiameter,\r\n lengthOfCut: 2.5 * tool.cutterDiameter,\r\n oal: 6 * tool.cutterDiameter\r\n };\r\n\r\n let mrrTool = this.constEndmillFeatures(newCutter);\r\n let baseSFM =\r\n this.calculateMaterialSurfaceFeetPerMinute(material, hardness) / this.calculateMaterialStretch(material);\r\n let baseIPM = this.conversionsFormulas.convertIptToIpm(\r\n this.conversionsFormulas.convertSfmToRpm(baseSFM, mrrTool.cutterDiameter),\r\n hem.emSafety * mrrTool.cutterDiameter * this.calculateMaterialChip(material, mrrTool, hardness),\r\n mrrTool.fluteCount\r\n );\r\n\r\n let baseMRR = baseIPM * math.pow(mrrTool.cutterDiameter, 2);\r\n\r\n return baseMRR;\r\n };\r\n\r\n public calculateMachining = (\r\n material: Material_,\r\n tool: Cutter_,\r\n parameters: Parameters_,\r\n hardness: number,\r\n standardMaterial: Material_ = this.standardMaterial,\r\n hem: Hem_ = this.hem,\r\n standardTool: Cutter_ = this.standardTool\r\n ): Machining_ => {\r\n return parameters.toolPath.operationName == 'Plunging'\r\n ? this.calculatePlungingMachining(material, tool, parameters, hardness, standardMaterial, hem, standardTool)\r\n : this.calculateStandardMachining(material, tool, parameters, hardness, standardMaterial, hem, standardTool);\r\n };\r\n\r\n //milling formulas\r\n public getStandardMaterial = (): Material_ => {\r\n let newMaterial: Material_;\r\n\r\n newMaterial = {\r\n iso: '',\r\n uns: '',\r\n group: '',\r\n subGroup: '',\r\n name: '',\r\n condition: '',\r\n description: '',\r\n density: 7.85,\r\n hardType: 'HBW',\r\n hardness: 302,\r\n tensileStrength: 1020,\r\n yields: 655,\r\n elongation: 0.18,\r\n elasticity: 205,\r\n poissons: 0.29,\r\n thermalExpansionCoefficient: 12.2,\r\n heat: 0.475,\r\n thermal: 42.6\r\n };\r\n\r\n return this.configureMaterial(newMaterial);\r\n };\r\n\r\n public getHEM = (): Hem_ => {\r\n let hem: Hem_ = {\r\n emSafety: 0.6,\r\n plasticExp: 1.0 / 2.0,\r\n elasticExp: 1.0 / 5.0\r\n };\r\n return hem;\r\n };\r\n\r\n public getStandardTool = (): Cutter_ => {\r\n let newCutter: Cutter_ = {\r\n edp: '00000',\r\n description: 'HEMV-R-50500',\r\n coatingCode: '',\r\n fluteCount: 5,\r\n cutterDiameter: 0.5,\r\n lengthOfCut: 1.25,\r\n oal: 3\r\n };\r\n\r\n return this.constEndmillFeatures(newCutter);\r\n };\r\n\r\n public calculateMachineFactor = (millValue: string, material: Material_, machine: Machine_): number => {\r\n let fixtureFactor = math.pow(\r\n machine.fixtureBar / 100,\r\n math.pow(100 / (machine.fixtureBar + (machine.fixtureBar - 35) / 6), 2)\r\n );\r\n let holderFactor = 1;\r\n\r\n if (machine.holder === 'Hydraulic' || machine.holder === 'Shrink-Fit') {\r\n holderFactor = 1.1;\r\n } else if (machine.holder === 'TG Collet' || machine.holder === 'DA Collet' || machine.holder === 'ER Collet') {\r\n holderFactor = 1.05;\r\n } else if (machine.holder === 'Milling Chuck') {\r\n holderFactor = 0.9;\r\n }\r\n\r\n if (millValue === 'SPEED') {\r\n return holderFactor * math.pow(1 / fixtureFactor, 1.0 / 8.0);\r\n }\r\n\r\n let spindleTaper = machine.spindle.replace(/CV/g, '');\r\n spindleTaper = spindleTaper.replace(/BT/g, '');\r\n spindleTaper = spindleTaper.replace(/HSK/g, '');\r\n spindleTaper = spindleTaper.replace(/NMTB/g, '');\r\n\r\n let spindleValue = parseFloat(spindleTaper);\r\n\r\n if (machine.holder === 'Hydraulic' || machine.holder === 'Shrink-Fit' || machine.holder === 'Milling Chuck') {\r\n holderFactor = 1.05;\r\n } else if (machine.holder === 'Weldon' || machine.holder === 'Press-Fit') {\r\n holderFactor = 1;\r\n } else if (machine.holder === 'TG Collet' || machine.holder === 'DA Collet' || machine.holder === 'ER Collet') {\r\n holderFactor = 0.95;\r\n }\r\n\r\n let spindleFactor = 1;\r\n\r\n if (machine.spindle.substring(0, 3) == 'HSK') {\r\n spindleFactor = 1 + math.log10(math.pow(spindleValue / 40, 1.0 / 12.0));\r\n } else if (machine.spindle.substring(0, 4) == 'NMTB') {\r\n spindleFactor = 0.95 + math.log10(math.pow(spindleValue / 40, 1.0 / 2.5));\r\n } else {\r\n spindleFactor = 1 + math.log10(math.pow(spindleValue / 40, 8.0 / 15.0));\r\n }\r\n\r\n return math.pow(holderFactor * fixtureFactor * spindleFactor, 1.0 / this.calculateMaterialStretch(material));\r\n };\r\n\r\n public setFeed = (\r\n fluteCount: number,\r\n chipLoad: number,\r\n speed: number,\r\n feedBar: number,\r\n feedFactor: number,\r\n maxIPM: number\r\n ): number => {\r\n let feedAggression = feedBar / 100;\r\n let feed = feedAggression * this.calculateInchesPerMinutes(speed, chipLoad * feedFactor, fluteCount);\r\n let ipmPrecision = math.pow(10, math.trunc(math.log10(feed))) / 100;\r\n\r\n return maxIPM > 0 && feed > maxIPM ? maxIPM : ipmPrecision * math.round(feed / ipmPrecision);\r\n };\r\n\r\n public setSpeed = (\r\n cutterDiameter: number,\r\n surfaceSpeed: number,\r\n machine: Machine_,\r\n speedParameters: Speed_,\r\n speedType: string\r\n ): number => {\r\n let speedAgression = speedParameters.speedBar / 100;\r\n let surfaceRPM = this.conversionsFormulas.convertSfmToRpm(surfaceSpeed, cutterDiameter);\r\n let speed = speedAgression * surfaceRPM;\r\n\r\n if (machine.maxRPM > 0 && speed > machine.maxRPM) {\r\n return machine.maxRPM;\r\n } else if (speedType == 'SPEED') {\r\n let rpmPrecision = 5;\r\n\r\n if (speed < 500) {\r\n rpmPrecision = 1;\r\n }\r\n\r\n return rpmPrecision * parseInt((speed / rpmPrecision).toFixed(0));\r\n }\r\n\r\n return speed;\r\n };\r\n\r\n public calculateChipThickness = (\r\n recommendation: Recommendation_,\r\n millingParameters: Parameters_,\r\n feedPerTooth: number,\r\n feedRate: number,\r\n feedFactor: number,\r\n tool: Cutter_\r\n ): Recommendation_ => {\r\n if (millingParameters.toolPath.operationName === '3D Surfacing') {\r\n recommendation.chipThickness = (feedPerTooth * millingParameters.cutterDiameter) / tool.cutterDiameter;\r\n recommendation.mrr = null;\r\n } else if (millingParameters.toolPath.operationName === 'Chamfering') {\r\n recommendation.chipThickness = undefined;\r\n recommendation.mrr = null;\r\n } else {\r\n recommendation.chipThickness = parseFloat((feedPerTooth / feedFactor).toString());\r\n recommendation.mrr = millingParameters.cutDepth * millingParameters.cutWidth * feedRate;\r\n }\r\n\r\n return recommendation;\r\n };\r\n\r\n public calculateRecommendation = (\r\n material: Material_,\r\n machine: Machine_,\r\n speedParameters: Speed_,\r\n millingParameters: Parameters_,\r\n tool: Cutter_,\r\n userHardness: number\r\n ): Recommendation_ => {\r\n let machiningValues = this.calculateMachining(\r\n material,\r\n tool,\r\n millingParameters,\r\n userHardness,\r\n this.getStandardMaterial(),\r\n this.getHEM(),\r\n this.getStandardTool()\r\n );\r\n let surfaceSpeed = machiningValues.surfaceSpeed * this.calculateMachineFactor('SPEED', material, machine);\r\n let chipLoad =\r\n (machiningValues.chipLoad *\r\n this.calculateMachineFactor('Feed', material, machine) *\r\n millingParameters.cutterDiameter) /\r\n tool.cutterDiameter;\r\n let spindleSpeed = this.setSpeed(millingParameters.cutterDiameter, surfaceSpeed, machine, speedParameters, 'SPEED');\r\n let feedRate = this.setFeed(\r\n tool.fluteCount,\r\n chipLoad,\r\n this.setSpeed(millingParameters.cutterDiameter, surfaceSpeed, machine, speedParameters, 'FEED'),\r\n speedParameters.feedBar,\r\n machiningValues.feedFactor,\r\n machine.maxIPM\r\n );\r\n let feedPerTooth = this.conversionsFormulas.convertIpmToIpt(spindleSpeed, feedRate, tool.fluteCount);\r\n\r\n let recommendation: Recommendation_ = {\r\n rpm: spindleSpeed,\r\n ipm: feedRate,\r\n sfm: this.conversionsFormulas.convertRpmToSfm(spindleSpeed, millingParameters.cutterDiameter),\r\n ipt: feedPerTooth\r\n };\r\n recommendation = this.calculateChipThickness(\r\n recommendation,\r\n millingParameters,\r\n feedPerTooth,\r\n feedRate,\r\n machiningValues.feedFactor,\r\n tool\r\n );\r\n\r\n if (millingParameters.toolPath.operationName === 'Trochoidal Slotting') {\r\n recommendation.ipt = null;\r\n recommendation.ipm = null;\r\n }\r\n\r\n return recommendation;\r\n };\r\n\r\n public calcultePlugingRecommendation = (\r\n material: Material_,\r\n machine: Machine_,\r\n speedParameters: Speed_,\r\n plungingParameters: Parameters_,\r\n tool: Cutter_,\r\n userHardness: number\r\n ): Recommendation_ => {\r\n let machiningValues = this.calculateMachining(material, tool, plungingParameters, userHardness);\r\n let surfaceSpeed = machiningValues.surfaceSpeed * this.calculateMachineFactor('SPEED', material, machine);\r\n let chipLoad = machiningValues.chipLoad * this.calculateMachineFactor('Feed', material, machine);\r\n let spindleSpeed = this.setSpeed(tool.cutterDiameter, surfaceSpeed, machine, speedParameters, 'SPEED');\r\n let feedRate = this.setFeed(\r\n tool.fluteCount,\r\n chipLoad,\r\n this.setSpeed(tool.cutterDiameter, surfaceSpeed, machine, speedParameters, 'FEED'),\r\n speedParameters.feedBar,\r\n 1,\r\n machine.maxIPM\r\n );\r\n\r\n let pathDiameter = plungingParameters.holeDiameter - tool.cutterDiameter;\r\n let helixLength = math.sqrt(math.pow(math.PI * pathDiameter, 2) + math.pow(plungingParameters.pitch, 2));\r\n let pathLength = (helixLength * plungingParameters.holeDepth) / plungingParameters.pitch + math.PI * pathDiameter;\r\n let cutTime = pathLength / feedRate;\r\n let cutMinutes = parseInt(math.floor(cutTime).toFixed(0));\r\n let cutSeconds = parseInt(math.ceil(60 * (cutTime - cutMinutes)).toFixed(0));\r\n let cutVolume = math.PI * math.pow(plungingParameters.holeDiameter / 2, 2) * plungingParameters.holeDepth;\r\n\r\n let recommendation: Recommendation_ = {\r\n rpm: spindleSpeed,\r\n ipm: feedRate,\r\n sfm: this.conversionsFormulas.convertRpmToSfm(spindleSpeed, tool.cutterDiameter),\r\n ipt: this.conversionsFormulas.convertIpmToIpt(spindleSpeed, feedRate, tool.fluteCount),\r\n mrr: cutVolume / cutTime\r\n };\r\n\r\n let timeMinStr = cutMinutes.toString();\r\n let timeSecStr = cutSeconds.toString();\r\n\r\n if (cutSeconds < 10) {\r\n timeSecStr = '0' + timeSecStr;\r\n }\r\n\r\n recommendation.holeTime = timeMinStr + ':' + timeSecStr;\r\n\r\n return recommendation;\r\n };\r\n\r\n // endmill Formulas\r\n public resizeArray = (array: Array, newSize: number): Array => {\r\n let newArray: Array = new Array(newSize);\r\n\r\n for (let i = 0; i < newSize && i < array.length; i++) {\r\n newArray.push(array[i]);\r\n }\r\n\r\n return newArray;\r\n };\r\n\r\n private constEndmillFeatures = (cutter: Cutter_): Cutter_ => {\r\n /*\r\n unfortunately this function, was defineEndmillFeatures, has to be kept and renamed to constEndmillFeatures,\r\n for calculating the standard tool and also tool for calculating MRR. The MRR does not use a standard tool,\r\n its a combination of standard and the tool selected\r\n */\r\n\r\n let emAttr: string[] = cutter.description.split('-');\r\n cutter.series = emAttr[0];\r\n cutter.taper = 0;\r\n cutter.coreDiameter = 0;\r\n\r\n //begin catalog logic\r\n if (cutter.description.indexOf('-C-RN-') > -1) {\r\n cutter.catalog = cutter.series + '-C-RN';\r\n } else if (cutter.description.indexOf('-C-') > -1) {\r\n cutter.catalog = cutter.series + '-C';\r\n } else if (cutter.description.indexOf('-RN-') > -1) {\r\n cutter.catalog = cutter.series + '-RN';\r\n } else {\r\n cutter.catalog = cutter.series;\r\n }\r\n\r\n if (cutter.series != 'HXF' && cutter.series.indexOf('CM') < 0) {\r\n cutter.catalog = cutter.catalog + '-' + cutter.fluteCount;\r\n }\r\n //end catalog logic\r\n\r\n //begin tool end logic\r\n if (cutter.series.indexOf('PCM') > -1) {\r\n cutter.end = cutter.series.replace(/HPCM/g, ' ') + '° Chamfer';\r\n cutter.taper = parseFloat(cutter.series.replace(/HPCM/g, '')) / 2;\r\n } else if (cutter.series.indexOf('CM') > -1) {\r\n cutter.end = cutter.series.replace(/HCM/g, ' ') + '° Chamfer';\r\n cutter.taper = parseFloat(cutter.series.replace(/HCM/g, '')) / 2;\r\n } else if (cutter.description.indexOf('BN') > -1) {\r\n cutter.end = 'Ball-Nosed';\r\n } else if (cutter.cornerRadius > 0) {\r\n cutter.end = 'Bull-Nosed';\r\n } else {\r\n cutter.end = 'Square Corner';\r\n }\r\n //end of tool end logic\r\n\r\n cutter.breaks = cutter.description.indexOf('-C-') > -1 || cutter.description.indexOf('R') > -1;\r\n\r\n let lengthCategory = cutter.description.replace(/-C-/g, '');\r\n lengthCategory = lengthCategory.replace(/RN/g, '');\r\n lengthCategory = lengthCategory.replace(cutter.series, '');\r\n lengthCategory = lengthCategory.replace(/-/g, '');\r\n cutter.lengthCategory = lengthCategory.substring(0, 1);\r\n\r\n let helixAngle: number = 0;\r\n let rakeAngle: number = 0;\r\n\r\n let start: number = 0;\r\n\r\n let end: number = this.ArrayMatlISO.length;\r\n let toolMaterials: Array = new Array(end);\r\n\r\n switch (cutter.series) {\r\n case 'H35AL':\r\n case 'H40ALV':\r\n case 'H45AL':\r\n end = 8;\r\n break;\r\n case 'HST':\r\n case 'HSV':\r\n case 'HSVR':\r\n start = 4;\r\n break;\r\n case 'HEV':\r\n case 'HEF':\r\n case 'HSF':\r\n case 'HXF':\r\n case 'HXVR':\r\n start = 8;\r\n break;\r\n }\r\n\r\n toolMaterials = this.resizeArray(toolMaterials, end - start);\r\n\r\n for (let i = start; i < end; i++) {\r\n toolMaterials[i - start] = this.ArrayMatlISO[i];\r\n }\r\n\r\n // additional to old code, we are getting rid of the undefineds\r\n\r\n toolMaterials = _.filter(toolMaterials, toolMaterial => {\r\n if (toolMaterial) {\r\n return toolMaterial;\r\n }\r\n });\r\n\r\n cutter.materials = toolMaterials;\r\n\r\n switch (cutter.series) {\r\n case 'HEMV':\r\n cutter.coreDiameter = (62 * cutter.cutterDiameter) / 100;\r\n helixAngle = 40;\r\n rakeAngle = 7;\r\n break;\r\n case 'H35AL':\r\n cutter.coreDiameter = 0.5 * cutter.cutterDiameter;\r\n helixAngle = 35;\r\n rakeAngle = 12;\r\n break;\r\n case 'H40ALV':\r\n if (cutter.lengthCategory == 'S' || cutter.lengthCategory == 'SR') {\r\n cutter.coreDiameter = 0.45 * cutter.cutterDiameter;\r\n } else if (cutter.lengthCategory == 'R') {\r\n cutter.coreDiameter = 0.55 * cutter.cutterDiameter;\r\n } else {\r\n cutter.coreDiameter = 0.7 * cutter.cutterDiameter;\r\n }\r\n\r\n helixAngle = 40;\r\n rakeAngle = 12;\r\n break;\r\n case 'H45AL':\r\n if (cutter.fluteCount == 2) {\r\n cutter.coreDiameter = 0.44 * cutter.cutterDiameter;\r\n } else {\r\n cutter.coreDiameter = 0.5 * cutter.cutterDiameter;\r\n }\r\n\r\n helixAngle = 45;\r\n rakeAngle = 12;\r\n break;\r\n case 'HST':\r\n cutter.coreDiameter = 0.55 * cutter.cutterDiameter;\r\n helixAngle = 35;\r\n rakeAngle = 7;\r\n break;\r\n case 'HSV':\r\n cutter.coreDiameter = 0.5 * cutter.cutterDiameter;\r\n helixAngle = 35;\r\n rakeAngle = 7;\r\n break;\r\n case 'HSVR':\r\n cutter.coreDiameter = 0.55 * cutter.cutterDiameter;\r\n helixAngle = 37;\r\n rakeAngle = 6;\r\n break;\r\n case 'HEV':\r\n if (cutter.fluteCount == 5) {\r\n cutter.coreDiameter = 0.62 * cutter.cutterDiameter;\r\n rakeAngle = 7;\r\n helixAngle = 40;\r\n } else if (cutter.fluteCount == 6) {\r\n if (cutter.lengthCategory == 'S' || cutter.lengthCategory == 'SR') {\r\n cutter.coreDiameter = 0.62 * cutter.cutterDiameter;\r\n } else {\r\n cutter.coreDiameter = 0.67 * cutter.cutterDiameter;\r\n }\r\n\r\n rakeAngle = 8;\r\n helixAngle = 37;\r\n } else {\r\n if (cutter.lengthCategory == 'S' || cutter.lengthCategory == 'SR') {\r\n cutter.coreDiameter = 0.65 * cutter.cutterDiameter;\r\n } else {\r\n cutter.coreDiameter = 0.75 * cutter.cutterDiameter;\r\n }\r\n\r\n rakeAngle = 5;\r\n helixAngle = 38;\r\n }\r\n\r\n break;\r\n case 'HEF':\r\n cutter.coreDiameter = 0.62 * cutter.cutterDiameter;\r\n helixAngle = 45;\r\n rakeAngle = 7;\r\n break;\r\n case 'HSF':\r\n cutter.coreDiameter = 0.65 * cutter.cutterDiameter;\r\n helixAngle = 45;\r\n rakeAngle = 7;\r\n break;\r\n case 'HXF':\r\n cutter.coreDiameter = 0.75 * cutter.cutterDiameter;\r\n helixAngle = 40;\r\n rakeAngle = 7;\r\n break;\r\n case 'HXVR':\r\n if (cutter.fluteCount == 4) {\r\n cutter.coreDiameter = 0.5 * cutter.cutterDiameter;\r\n helixAngle = 43.5;\r\n rakeAngle = 15;\r\n } else {\r\n cutter.coreDiameter = 0.6 * cutter.cutterDiameter;\r\n helixAngle = 40;\r\n rakeAngle = 10;\r\n }\r\n\r\n break;\r\n case 'HPCM60':\r\n helixAngle = 30;\r\n break;\r\n case 'HPCM90':\r\n helixAngle = 15;\r\n break;\r\n case 'HPCM120':\r\n helixAngle = 15;\r\n break;\r\n }\r\n\r\n cutter.helix = (math.PI * helixAngle) / 180;\r\n cutter.rake = (math.PI * rakeAngle) / 180;\r\n\r\n let endmillFluteWash =\r\n (math.sqrt(math.pow(cutter.cutterDiameter, 2) - math.pow(cutter.coreDiameter, 2)) * 88) /\r\n (21 * math.pow(cutter.fluteCount, math.sqrt(2)));\r\n\r\n cutter.fluteWash = endmillFluteWash * math.cos(cutter.helix);\r\n\r\n cutter.fluteCount = typeof cutter.fluteCount === 'string' ? parseFloat(cutter.fluteCount) : cutter.fluteCount;\r\n\r\n return cutter;\r\n };\r\n\r\n public defineEndmillFeatures = (cutter: Cutter_): Cutter_ => {\r\n let emAttr: string[] = cutter.description.split('-');\r\n cutter.series = emAttr[0];\r\n\r\n //begin catalog logic\r\n if (cutter.description.indexOf('-C-RN-') > -1) {\r\n cutter.catalog = cutter.series + '-C-RN';\r\n } else if (cutter.description.indexOf('-C-') > -1) {\r\n cutter.catalog = cutter.series + '-C';\r\n } else if (cutter.description.indexOf('-RN-') > -1) {\r\n cutter.catalog = cutter.series + '-RN';\r\n } else {\r\n cutter.catalog = cutter.series;\r\n }\r\n\r\n if (cutter.series != 'HXF' && cutter.series.indexOf('CM') < 0) {\r\n cutter.catalog = cutter.catalog + '-' + cutter.fluteCount;\r\n }\r\n //end catalog logic\r\n\r\n //begin tool end logic\r\n if (cutter.series.indexOf('PCM') > -1) {\r\n cutter.end = cutter.series.replace(/HPCM/g, ' ') + '° Chamfer';\r\n } else if (cutter.series.indexOf('CM') > -1) {\r\n cutter.end = cutter.series.replace(/HCM/g, ' ') + '° Chamfer';\r\n } else if (cutter.description.indexOf('BN') > -1) {\r\n cutter.end = 'Ball-Nosed';\r\n } else if (cutter.cornerRadius > 0) {\r\n cutter.end = 'Bull-Nosed';\r\n } else {\r\n cutter.end = 'Square Corner';\r\n }\r\n //end of tool end logic\r\n\r\n //begin lengthCategory logic\r\n let lengthCategory = cutter.description.replace(/-C-/g, '');\r\n lengthCategory = lengthCategory.replace(/RN/g, '');\r\n lengthCategory = lengthCategory.replace(cutter.series, '');\r\n lengthCategory = lengthCategory.replace(/-/g, '');\r\n cutter.lengthCategory = lengthCategory.substring(0, 1);\r\n //end lengthCategory logic\r\n\r\n //begin tool supported material logic\r\n let start: number = 0;\r\n\r\n let end: number = this.ArrayMatlISO.length;\r\n let toolMaterials: Array = new Array(end);\r\n\r\n switch (cutter.series) {\r\n case 'H35AL':\r\n case 'H40ALV':\r\n case 'H45AL':\r\n end = 8;\r\n break;\r\n case 'HST':\r\n case 'HSV':\r\n case 'HSVR':\r\n start = 4;\r\n break;\r\n case 'HEV':\r\n case 'HEF':\r\n case 'HSF':\r\n case 'HXF':\r\n case 'HXVR':\r\n start = 8;\r\n break;\r\n }\r\n\r\n toolMaterials = this.resizeArray(toolMaterials, end - start);\r\n\r\n for (let i = start; i < end; i++) {\r\n toolMaterials[i - start] = this.ArrayMatlISO[i];\r\n }\r\n\r\n // additional to old code, we are getting rid of the undefineds\r\n toolMaterials = _.filter(toolMaterials, toolMaterial => {\r\n if (toolMaterial) {\r\n return toolMaterial;\r\n }\r\n });\r\n\r\n cutter.materials = toolMaterials;\r\n //end tool supported material logic\r\n\r\n //begin flutewash logic\r\n let endmillFluteWash =\r\n (math.sqrt(math.pow(cutter.cutterDiameter, 2) - math.pow(cutter.coreDiameter, 2)) * 88) /\r\n (21 * math.pow(cutter.fluteCount, math.sqrt(2)));\r\n\r\n cutter.fluteWash = endmillFluteWash * math.cos(cutter.helix);\r\n\r\n cutter.fluteCount = typeof cutter.fluteCount === 'string' ? parseFloat(cutter.fluteCount) : cutter.fluteCount;\r\n //end flutewash logic\r\n\r\n if (typeof cutter.pitch !== 'string') {\r\n cutter.pitch = cutter.pitch ? 'even' : 'variable';\r\n }\r\n\r\n cutter.taper = typeof cutter.anglePerSide === 'string' ? parseFloat(cutter.anglePerSide) : cutter.anglePerSide;\r\n\r\n return cutter;\r\n };\r\n\r\n //material formulas\r\n public configureMaterial = (material: Material_): Material_ => {\r\n if (!material.hardType) {\r\n material.hardType = material['hardnessFactor'];\r\n }\r\n\r\n switch (material.hardType) {\r\n case 'HBW':\r\n material.hra = this.conversionsFormulas.convertHBWtoHRA(material.hardness);\r\n break;\r\n case 'HBS':\r\n material.hra = this.conversionsFormulas.convertHBStoHRA(material.hardness);\r\n break;\r\n case 'HRC':\r\n material.hra = this.conversionsFormulas.convertHRCtoHRA(material.hardness);\r\n break;\r\n case 'HRB':\r\n material.hra = this.conversionsFormulas.convertHRBtoHRA(material.hardness);\r\n break;\r\n }\r\n\r\n material.plasticity = 1 + material.elongation;\r\n material.shearFactor = 1 / (5 * math.sqrt(material.poissons - 197.0 / 900.0));\r\n\r\n if (material.iso !== '') {\r\n if (material['elasticitiy']) {\r\n material.elasticity = material['elasticitiy'];\r\n }\r\n }\r\n\r\n return material;\r\n };\r\n\r\n public calculateSfmRatio = (\r\n recommendations: RecommendationLabel[],\r\n holderFactor: number,\r\n spindleFactor: number,\r\n maxRPM: number,\r\n speedAggression: number,\r\n feedAggression: number\r\n ) => {\r\n const sfmField = recommendations.find(rec => rec.recommendationLabel === 'Spindle Speed');\r\n if (sfmField) {\r\n const adjustedSfmValue =\r\n Number(sfmField.recommendationValue) *\r\n (sfmField.recommendationAdjustment.includes('SFM') ? holderFactor * speedAggression : 1) *\r\n (sfmField.recommendationAdjustment.includes('FPT') ? spindleFactor * feedAggression : 1);\r\n\r\n if (maxRPM && adjustedSfmValue > maxRPM) {\r\n return maxRPM / adjustedSfmValue;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return 1;\r\n }\r\n };\r\n\r\n public calculateFptRatio = (\r\n recommendations: RecommendationLabel[],\r\n holderFactor: number,\r\n spindleFactor: number,\r\n maxIPM: number,\r\n speedAggression: number,\r\n feedAggression: number,\r\n sfmRation: number\r\n ) => {\r\n const fptField = recommendations.find(rec => rec.recommendationLabel === 'Feed Per Minute');\r\n if (fptField) {\r\n const adjustedFptValue =\r\n Number(fptField.recommendationValue) *\r\n (fptField.recommendationAdjustment.includes('SFM') ? holderFactor * speedAggression : 1) *\r\n (fptField.recommendationAdjustment.includes('FPT') ? spindleFactor * feedAggression : 1) *\r\n sfmRation;\r\n\r\n if (maxIPM && adjustedFptValue > maxIPM) {\r\n return maxIPM / adjustedFptValue;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return 1;\r\n }\r\n };\r\n}\r\n","import { FormGroup } from '@angular/forms';\r\nimport { Hardness } from 'src/app/tool/hardness.model';\r\n\r\nexport class Hem_ {\r\n public emSafety?: number;\r\n public plasticExp?: number;\r\n public elasticExp?: number;\r\n\r\n constructor(emSafety: number = 0.6, plasticExp: number = 1.0 / 2.0, elasticExp: number = 1.0 / 5.0) {\r\n this.emSafety = emSafety;\r\n this.plasticExp = plasticExp;\r\n this.elasticExp = elasticExp;\r\n }\r\n}\r\n\r\nexport class Speed_ {\r\n public speedBar?: number;\r\n public feedBar?: number;\r\n\r\n constructor(speedBar: number = 0, feedBar: number = 0) {\r\n this.speedBar = speedBar;\r\n this.feedBar = feedBar;\r\n }\r\n}\r\n\r\nexport class Parameters_ {\r\n public toolPath?: ToolPath | Strategy;\r\n public cutterDiameter?: number;\r\n public stickOut?: number;\r\n public stickoutPercentage?: number;\r\n public pitch?: number;\r\n public rampAngle?: number;\r\n public holeDiameter?: number;\r\n public pathDiameter?: number;\r\n public holeDepth?: number;\r\n public effectiveDiameter?: number;\r\n public chamferHeight?: number;\r\n public chamferWidth?: number;\r\n public scallopHeight?: number;\r\n public scallopWidth?: number;\r\n public cutWidth?: number;\r\n public cutDepth?: number;\r\n public stepDown?: number;\r\n public stepOver?: number;\r\n public adocdecimal?: number;\r\n public rdocdecimal?: number;\r\n public engagementAngle?: number;\r\n public vSliderValue?: number;\r\n public invalidEndmill?: boolean;\r\n\r\n constructor(\r\n toolPath: ToolPath | Strategy = undefined,\r\n cutterDiameter: number = 0,\r\n stickOut: number = 0,\r\n stickoutPercentage: number = 0,\r\n pitch: number = 0,\r\n rampAngle: number = 0,\r\n holeDiameter: number = 0,\r\n pathDiameter: number = 0,\r\n holeDepth: number = 0,\r\n effectiveDiameter: number = 0,\r\n chamferHeight: number = 0,\r\n chamferWidth: number = 0,\r\n scallopHeight: number = 0,\r\n scallopWidth: number = 0,\r\n cutWidth: number = 0,\r\n cutDepth: number = 0,\r\n stepDown: number = 0,\r\n stepOver: number = 0,\r\n adocdecimal: number = 0,\r\n rdocdecimal: number = 0,\r\n engagementAngle: number = 0,\r\n vSliderValue: number = 0,\r\n invalidEndmill: boolean = false\r\n ) {\r\n this.toolPath = toolPath;\r\n this.cutterDiameter = cutterDiameter;\r\n this.stickOut = stickOut;\r\n this.stickoutPercentage = stickoutPercentage;\r\n this.pitch = pitch;\r\n this.rampAngle = rampAngle;\r\n this.holeDiameter = holeDiameter;\r\n this.pathDiameter = pathDiameter;\r\n this.holeDepth = holeDepth;\r\n this.effectiveDiameter = effectiveDiameter;\r\n this.chamferHeight = chamferHeight;\r\n this.chamferWidth = chamferWidth;\r\n this.scallopHeight = scallopHeight;\r\n this.scallopWidth = scallopWidth;\r\n this.cutWidth = cutWidth;\r\n this.cutDepth = cutDepth;\r\n this.stepDown = stepDown;\r\n this.stepOver = stepOver;\r\n this.adocdecimal = adocdecimal;\r\n this.rdocdecimal = rdocdecimal;\r\n this.engagementAngle = engagementAngle;\r\n this.vSliderValue = vSliderValue;\r\n this.invalidEndmill = invalidEndmill;\r\n }\r\n}\r\n\r\nexport class Material_ {\r\n // the actual material?\r\n public id?: number;\r\n public iso?: string;\r\n public uns?: string;\r\n public group?: string;\r\n public subGroup?: string;\r\n public name?: string;\r\n public condition?: string;\r\n public description?: string;\r\n public density?: number;\r\n public hardType?: string;\r\n public hardness?: number;\r\n public tensileStrength?: number;\r\n public yields?: number;\r\n public elongation?: number;\r\n public elasticity?: number;\r\n public poissons?: number;\r\n public thermalExpansionCoefficient?: number;\r\n public heat?: number;\r\n public thermal?: number;\r\n public hra?: number;\r\n public plasticity?: number;\r\n public shearFactor?: number;\r\n public chosenCondition?: string;\r\n public hrc?: number;\r\n public hardnessFactor?: string;\r\n public materialKey?: number;\r\n\r\n // yeild is a reserve word, had to change to yields\r\n constructor(\r\n iso: string = undefined,\r\n uns: string = undefined,\r\n group: string = undefined,\r\n subGroup: string = undefined,\r\n name: string = undefined,\r\n condition: string = undefined,\r\n description: string = undefined,\r\n density: number = 0,\r\n hardType: string = undefined,\r\n hardness: number,\r\n tensileStrength: number = 0,\r\n yields: number = 0,\r\n elongation: number = 0,\r\n elasticity: number = 0,\r\n poissons: number = 0,\r\n thermalExpansionCoefficient: number = 0,\r\n heat: number = 0,\r\n thermal: number = 0,\r\n hra: number = 0,\r\n plasticity: number = 0,\r\n shearFactor: number = 0,\r\n chosenCondition: string = '',\r\n hrc: number = 0,\r\n hardnessFactor: string = '',\r\n materialKey = undefined\r\n ) {\r\n this.iso = iso;\r\n this.uns = uns;\r\n this.group = group;\r\n this.subGroup = subGroup;\r\n this.name = name;\r\n this.condition = condition;\r\n this.description = description;\r\n this.density = density;\r\n this.hardType = hardType;\r\n this.hardness = hardness;\r\n this.tensileStrength = tensileStrength;\r\n this.yields = yields;\r\n this.elongation = elongation;\r\n this.elasticity = elasticity;\r\n this.poissons = poissons;\r\n this.thermalExpansionCoefficient = thermalExpansionCoefficient;\r\n this.heat = heat;\r\n this.thermal = thermal;\r\n this.hra = hra;\r\n this.plasticity = plasticity;\r\n this.shearFactor = shearFactor;\r\n this.chosenCondition = chosenCondition;\r\n this.hrc = hrc;\r\n this.hardnessFactor = hardnessFactor;\r\n this.materialKey = materialKey;\r\n }\r\n}\r\n\r\nexport class EndMill_ {\r\n public id?: number = 0;\r\n public edp?: string = '';\r\n public description?: string = '';\r\n public coatingCode?: string = '';\r\n public fluteCount?: number = 0;\r\n public cutterDiameter?: number = 0;\r\n public neckDiameter?: number = 0;\r\n public lengthOfCut?: number = 0;\r\n public overallReach?: number = 0;\r\n public overallLength?: number = 0;\r\n public oal?: number = 0;\r\n public tipDiameter?: number = 0;\r\n public tip?: number = 0;\r\n public cornerRadius?: number = 0;\r\n public itemId?: number = 0;\r\n public pitch?: string = '';\r\n public rNeck?: boolean = false;\r\n public taper?: number = 0;\r\n //break is a reserve word, need to change to breaks\r\n public breaks?: boolean = false;\r\n public coreDiameter?: number = 0;\r\n public helix?: number = 0;\r\n public rake?: number = 0;\r\n public metricNumbers?: {\r\n cutterDiameter?: number;\r\n coreDiameter?: number; // this is calculated when tool is selected\r\n lengthOfCut?: number;\r\n overallLength?: number;\r\n overallReach?: number;\r\n neckDiameter?: number;\r\n tip?: number;\r\n cornerRadius?: number;\r\n };\r\n public searchParameter?: string;\r\n constructor(\r\n id?: number,\r\n edp?: string,\r\n description?: string,\r\n coatingCode?: string,\r\n fluteCount?: number,\r\n cutterDiameter?: number,\r\n neckDiameter?: number,\r\n lengthOfCut?: number,\r\n overallReach?: number,\r\n overallLength?: number,\r\n oal?: number,\r\n tipDiameter?: number,\r\n tip?: number,\r\n cornerRadius?: number,\r\n pitch?: boolean, // pitch comes back from backend as a boolean\r\n rNeck?: boolean,\r\n anglePerSide?: number,\r\n breaks?: number,\r\n coreDiameter?: number,\r\n helix?: number,\r\n rake?: number,\r\n metricNumbers?: object,\r\n searchParameter?: string\r\n ) {\r\n this.id = id;\r\n this.edp = edp;\r\n this.description = description;\r\n this.coatingCode = coatingCode;\r\n if (fluteCount) {\r\n this.fluteCount = isNaN(fluteCount) ? parseFloat(fluteCount.toString()) : fluteCount;\r\n } else {\r\n this.fluteCount = 0;\r\n }\r\n this.cutterDiameter = cutterDiameter;\r\n this.neckDiameter = neckDiameter;\r\n this.lengthOfCut = lengthOfCut;\r\n this.overallReach = overallReach;\r\n this.overallLength = overallLength;\r\n this.oal = oal;\r\n this.tipDiameter = tipDiameter;\r\n this.tip = tip;\r\n this.cornerRadius = cornerRadius;\r\n this.rNeck = rNeck;\r\n this.taper = anglePerSide; //taper is anglePerSide on backend, will take anglePerSide and use as Taper on Frontend, to not change formula code\r\n this.breaks = breaks ? false : true; // breaks is returned as a number from backend\r\n this.coreDiameter = coreDiameter;\r\n this.helix = helix;\r\n this.rake = rake;\r\n this.metricNumbers = metricNumbers;\r\n this.searchParameter = searchParameter;\r\n }\r\n}\r\n\r\nexport class Cutter_ extends EndMill_ {\r\n public catalog?: string = '';\r\n public series?: string = '';\r\n public end?: string = '';\r\n public lengthCategory?: string = '';\r\n public toolImageUrl?: string = '';\r\n public fluteWash?: number = 0;\r\n public materials?: Array = [];\r\n public toolDetails?: Array = [];\r\n public materialIds?: Array = [];\r\n public brand?: string = '';\r\n public brandShortName?: string = '';\r\n public brandKey?: number = undefined;\r\n public productTable?: string = '';\r\n public metric?: number = 0;\r\n public profile?: string = '';\r\n public includedAngle?: number = 0;\r\n public anglePerSide?: number = 0;\r\n public shankDiameter?: number = 0;\r\n\r\n constructor(\r\n id?: number,\r\n edp?: string,\r\n description?: string,\r\n coatingCode?: string,\r\n fluteCount?: number,\r\n cutterDiameter?: number,\r\n neckDiameter?: number,\r\n lengthOfCut?: number,\r\n overallReach?: number,\r\n overallLength?: number,\r\n oal?: number,\r\n tip?: number,\r\n tipDiameter?: number,\r\n cornerRadius?: number,\r\n pitch?: boolean, // pitch comes back from backend as a 0/1\r\n rNeck?: boolean,\r\n taper?: number,\r\n breaks?: number,\r\n coreDiameter?: number,\r\n helix?: number,\r\n rake?: number,\r\n metricNumbers?: object,\r\n catalog?: string,\r\n series?: string,\r\n end?: string,\r\n lengthCategory?: string,\r\n fluteWash?: number,\r\n materials?: Array,\r\n brand?: string,\r\n brandShortName?: string,\r\n brandKey?: number,\r\n productTable?: string,\r\n metric?: number,\r\n profile?: string,\r\n includedAngle?: number,\r\n anglePerSide?: number,\r\n shankDiameter?: number\r\n ) {\r\n super(\r\n id,\r\n edp,\r\n description,\r\n coatingCode,\r\n fluteCount,\r\n cutterDiameter,\r\n neckDiameter,\r\n lengthOfCut,\r\n overallReach,\r\n overallLength,\r\n oal,\r\n tipDiameter,\r\n tip,\r\n cornerRadius,\r\n pitch,\r\n rNeck,\r\n taper,\r\n breaks,\r\n coreDiameter,\r\n helix,\r\n rake,\r\n metricNumbers\r\n );\r\n this.catalog = catalog;\r\n this.series = series;\r\n this.end = end;\r\n this.lengthCategory = lengthCategory;\r\n this.fluteWash = fluteWash;\r\n this.materials = materials;\r\n this.brand = brand;\r\n this.brandShortName = brandShortName;\r\n this.brandKey = brandKey;\r\n this.productTable = productTable;\r\n this.metric = metric;\r\n this.profile = profile;\r\n this.includedAngle = includedAngle;\r\n this.anglePerSide = anglePerSide;\r\n this.shankDiameter = shankDiameter;\r\n }\r\n}\r\n\r\nexport interface ToolDetails {\r\n toolImageUrl: string;\r\n searchParameter: string;\r\n toolDetails: ToolInfo[];\r\n}\r\n\r\ninterface ToolInfo {\r\n itemName: string;\r\n itemValue: string;\r\n itemUrl: string;\r\n}\r\n\r\nexport class Machine_ {\r\n public spindle?: string = '';\r\n public holder?: string = '';\r\n public maxRPM?: number = 0;\r\n public maxIPM?: number = 0;\r\n public fixtureBar?: number = 0;\r\n public holderAdjustment?: MachineAdjustments[] = [];\r\n public spindleAdjustment?: MachineAdjustments[] = [];\r\n public dirty?: boolean = false; // mainly used for mobile to tell if user chose anything\r\n\r\n constructor(\r\n spindle?: string,\r\n holder?: string,\r\n maxRPM?: number,\r\n maxIPM?: number,\r\n fixtureBar?: number,\r\n holderAdjustment?: MachineAdjustments[],\r\n spindleAdjustment?: MachineAdjustments[],\r\n dirty?: boolean\r\n ) {\r\n this.spindle = spindle;\r\n this.holder = holder;\r\n this.maxRPM = maxRPM;\r\n this.maxIPM = maxIPM;\r\n this.fixtureBar = fixtureBar;\r\n this.holderAdjustment = holderAdjustment;\r\n this.spindleAdjustment = spindleAdjustment;\r\n this.dirty = dirty;\r\n }\r\n}\r\n\r\nexport interface MachineBrandLevel {\r\n brandKey: number;\r\n mapModes: { [mapMode: number]: MachineMapModeLevel };\r\n}\r\n\r\nexport interface MachineMapModeLevel {\r\n holders: MachineOptions[];\r\n mapMode: number;\r\n spindles: MachineOptions[];\r\n}\r\n\r\nexport interface MachineOptions {\r\n type: string;\r\n name: string;\r\n adjustments: MachineAdjustments[];\r\n}\r\n\r\nexport class MachineAdjustments {\r\n adjust: string;\r\n factor: number;\r\n}\r\n\r\nexport class Machining_ {\r\n public feedFactor?: number = 0;\r\n public chipLoad?: number = 0;\r\n public surfaceSpeed?: number = 0;\r\n public baseMRR?: number = 0;\r\n\r\n constructor(feedFactor?: number, chipLoad?: number, surfaceSpeed?: number, baseMRR?: number) {\r\n this.feedFactor = feedFactor;\r\n this.chipLoad = chipLoad;\r\n this.surfaceSpeed = surfaceSpeed;\r\n this.baseMRR = baseMRR;\r\n }\r\n}\r\n\r\nexport class Recommendation_ {\r\n public rpm?: number = undefined;\r\n public ipm?: number = undefined;\r\n public sfm?: number = undefined;\r\n public ipt?: number = undefined;\r\n public mrr?: number = undefined;\r\n public holeTime?: string = undefined;\r\n public chipThickness?: number = undefined;\r\n public insideCornerValue?: number = undefined;\r\n public ipmFeedInsideSlot?: number = undefined;\r\n public trochoidalSlotWidth?: number = undefined;\r\n public recommendationAdjustment?: string = '';\r\n public recommendationLabel?: string = '';\r\n public recommendationValue?: string = '';\r\n public speedAggression?: number = undefined;\r\n public feedAggression?: number = undefined;\r\n constructor(\r\n rpm?: number,\r\n ipm?: number,\r\n sfm?: number,\r\n ipt?: number,\r\n mrr?: number,\r\n holeTime?: string,\r\n chipThickness?: number,\r\n insideCornerValue?: number,\r\n ipmFeedInsideSlot?: number,\r\n trochoidalSlotWidth?: number,\r\n speedAggression?: number,\r\n feedAggression?: number\r\n ) {\r\n this.rpm = rpm;\r\n this.ipm = ipm;\r\n this.sfm = sfm;\r\n this.ipt = ipt;\r\n this.mrr = mrr;\r\n this.holeTime = holeTime;\r\n this.chipThickness = chipThickness;\r\n this.insideCornerValue = insideCornerValue;\r\n this.ipmFeedInsideSlot = ipmFeedInsideSlot;\r\n this.trochoidalSlotWidth = trochoidalSlotWidth;\r\n this.speedAggression = speedAggression;\r\n this.feedAggression = feedAggression;\r\n }\r\n}\r\n\r\nexport class CurrentToolPath {\r\n public name: string;\r\n public description: string;\r\n public labledImage: string;\r\n public unLabledImage: string;\r\n public mapMode?: number;\r\n public operationKey?: number;\r\n public operationImage?: string;\r\n public operationName?: string;\r\n public operationToolPathDescription?: string;\r\n public operationToolPathTitle?: string;\r\n public operationImageAssetForParameterSection?: string;\r\n public strategies?: Strategy[];\r\n public toolPathId?: number;\r\n constructor(\r\n name: string,\r\n description: string,\r\n labledImage: string,\r\n unLabledImage: string,\r\n mapMode: number,\r\n operationKey?: number,\r\n operationImage?: string,\r\n operationName?: string,\r\n operationToolPathDescription?: string,\r\n operationToolPathTitle?: string,\r\n operationImageAssetForParameterSection?: string,\r\n strategies?: Strategy[],\r\n toolPathId?: number\r\n ) {\r\n this.name = name;\r\n this.description = description;\r\n this.labledImage = labledImage;\r\n this.unLabledImage = unLabledImage;\r\n this.mapMode = mapMode;\r\n this.operationKey = operationKey;\r\n this.operationImage = operationImage;\r\n this.operationName = operationName;\r\n this.operationToolPathDescription = operationToolPathDescription;\r\n this.operationToolPathTitle = operationToolPathTitle;\r\n this.strategies = strategies;\r\n this.operationImageAssetForParameterSection = operationImageAssetForParameterSection;\r\n this.toolPathId = toolPathId;\r\n }\r\n}\r\n\r\nexport class ToolContainer {\r\n // defined the types\r\n public material?: Material_ = undefined;\r\n public tool?: Cutter_ = undefined;\r\n public parameters?: Parameters_ = undefined;\r\n public recommendation?: Recommendation_ = undefined;\r\n public machine?: Machine_ = undefined;\r\n public machining?: Machining_ = undefined;\r\n public hardness?: Hardness = undefined;\r\n public currenttoolpath?: ToolPath = undefined;\r\n public recommendationForm?: FormGroup = undefined;\r\n public hem: Hem_;\r\n public parametersFields?: number = 0;\r\n public recommendationFields?: number = 0;\r\n public dirty?: boolean = false;\r\n public mapMode: number = 1;\r\n public displayParamsAndRecs: boolean = true;\r\n public mapModeTwoValues: ParametersAndRecommendations;\r\n public hasStrategyOption: boolean = false;\r\n public currentStrategy?: Strategy = undefined;\r\n public selectedOperation?: string = undefined;\r\n constructor(\r\n hem: Hem_ = new Hem_(),\r\n material?: Material_,\r\n tool?: Cutter_,\r\n parameters?: Parameters_,\r\n recommendation?: Recommendation_,\r\n machine?: Machine_,\r\n machining?: Machining_,\r\n hardness?: Hardness,\r\n currenttoolpath?: ToolPath,\r\n recommendationForm?: FormGroup,\r\n parametersFields?: number,\r\n recommendationFields?: number,\r\n dirty?: boolean,\r\n mapMode?: number,\r\n displayParamsAndRecs?: boolean,\r\n mapModeTwoValues?: ParametersAndRecommendations,\r\n hasStrategyOption?: boolean,\r\n currentStrategy?: Strategy,\r\n selectedOperation?: string\r\n ) {\r\n this.hem = hem;\r\n this.material = material;\r\n this.tool = tool;\r\n this.parameters = parameters;\r\n this.recommendation = recommendation;\r\n this.machine = machine;\r\n this.machining = machining;\r\n this.hardness = hardness;\r\n this.currenttoolpath = currenttoolpath;\r\n this.recommendationForm = recommendationForm;\r\n this.parametersFields = parametersFields;\r\n this.recommendationFields = recommendationFields;\r\n this.dirty = dirty;\r\n this.mapMode = mapMode;\r\n this.displayParamsAndRecs = displayParamsAndRecs;\r\n this.mapModeTwoValues = mapModeTwoValues;\r\n this.hasStrategyOption = hasStrategyOption;\r\n this.currentStrategy = currentStrategy;\r\n this.selectedOperation = selectedOperation;\r\n }\r\n}\r\n\r\nexport interface Operation_ {\r\n operation: string;\r\n toolPaths: ToolPath[];\r\n}\r\n\r\ninterface ToolPath {\r\n operationName: string;\r\n toolPathId: number;\r\n mapMode: number;\r\n operationKey: number;\r\n operationToolPathTitle: string;\r\n operationToolPathDescription: string;\r\n operationImage: string;\r\n operationImageAssetForParameterSection: string;\r\n strategies: Strategy[];\r\n}\r\n\r\nexport interface Strategy {\r\n operationName: string;\r\n strategyId: number;\r\n mapMode: number;\r\n operationKey: number;\r\n operationImageAssetForParameterSection: string;\r\n}\r\n\r\nexport interface ParametersAndRecommendations {\r\n materialKey: number;\r\n operationKey: number;\r\n operationHardnessMax: number;\r\n operationHardnessMin: number;\r\n parameterHardnessMax: number;\r\n parameterHardnessMin: number;\r\n sfmHardnessMax: number;\r\n sfmHardnessMin: number;\r\n parameterLabels: ParameterLabel[];\r\n recommendationLabels: RecommendationLabel[];\r\n}\r\n\r\nexport interface ParameterLabel {\r\n parameterValue: string;\r\n parameterLabel: string;\r\n parameterHyperlink: string;\r\n}\r\n\r\nexport interface RecommendationLabel {\r\n recommendationValue: string;\r\n recommendationLabel: string;\r\n recommendationAdjustment: string;\r\n recommendationPrecision: string;\r\n}\r\n\r\nexport interface PdfSupportInfo {\r\n brandKey: number;\r\n supportName: string;\r\n supportPhoneNumber: string;\r\n supportEmail: string;\r\n}\r\n\r\nexport interface UserDataLoggingInfo {\r\n userId: string;\r\n logType: string;\r\n productKey: number;\r\n materialId: number;\r\n HBW: number;\r\n HBS: number;\r\n HRB: number;\r\n HRC: number;\r\n operationId: number;\r\n holder: string;\r\n spindle: string;\r\n maxRPM: number;\r\n MaxIPM: number;\r\n workHoldingSliderPosition: number;\r\n parameterOneLabel: string;\r\n parameterOneValue: string;\r\n parameterTwoLabel: string;\r\n parameterTwoValue: string;\r\n parameterThreeLabel: string;\r\n parameterThreeValue: string;\r\n parameterFourLabel: string;\r\n parameterFourValue: string;\r\n parameterFiveLabel: string;\r\n parameterFiveValue: string;\r\n parameterSixLabel: string;\r\n parameterSixValue: string;\r\n recommendationOneLabel: string;\r\n recommendationOneValue: string;\r\n recommendationTwoLabel: string;\r\n recommendationTwoValue: string;\r\n recommendationThreeLabel: string;\r\n recommendationThreeValue: string;\r\n recommendationFourLabel: string;\r\n recommendationFourValue: string;\r\n recommendationFiveLabel: string;\r\n recommendationFiveValue: string;\r\n recommendationSixLabel: string;\r\n recommendationSixValue: string;\r\n speedSliderValue: number;\r\n feedSliderValue: number;\r\n}\r\n","import { Injectable } from '@angular/core';\nimport math from 'mathjs';\n\n@Injectable()\nexport class StandardFormulas {\n calculateStressFactor = (toolDiameter: number, stickOut: number, axDepth: number): number => {\n return (2 * stickOut * axDepth - math.pow(axDepth, 2)) / (8 * math.pow(toolDiameter, 2));\n };\n\n calculateMomentOfInertia = (toolDiameter: number): number => {\n return (math.PI * math.pow(toolDiameter, 4.0)) / 64.0;\n };\n\n calculateBendingMoment = (stickOut: number, axDepth: number, force: number): number => {\n return force * (stickOut - axDepth / 2);\n };\n\n calculateTensileStress = (toolDia: number, stickOut: number, axDepth: number, force: number): number => {\n return (\n (this.calculateBendingMoment(stickOut, axDepth, force) * toolDia) / (2 * this.calculateMomentOfInertia(toolDia))\n );\n };\n\n calculateRigidFactor = (toolDia: number, stickOut: number, axDepth: number): number => {\n return (\n (116 * math.pow(toolDia, 3)) /\n (math.pow(axDepth, 3) - 6 * math.pow(stickOut, 2) * axDepth + 8 * math.pow(stickOut, 3))\n );\n };\n\n calculateDeflectFactor = (toolDia: number, stickOut: number, axDepth: number): number => {\n return axDepth / (2 * toolDia * this.calculateRigidFactor(toolDia, stickOut, axDepth));\n };\n}\n","import { Injectable } from '@angular/core';\r\n\r\n@Injectable()\r\nexport class ImageConstants {\r\n public readonly brushedMetalBannerBlue: string = 'assets/background/BrushedMetalBanner_Blue.jpg';\r\n public readonly regularBrushMetal: string = 'assets/background/regularBrushMetal.jpg';\r\n public readonly close: string = 'assets/buttons/close.jpg';\r\n public readonly darkerClose: string = 'assets/buttons/darkerClose.png';\r\n public readonly resetHardnessButtonActive: string = 'assets/buttons/Reset_Hardness_Button_Active.png';\r\n public readonly resetHardnessButtonInactive: string = 'assets/buttons/Reset_Hardness_Button_Inactive.png';\r\n public readonly sliderAdjusters: string = 'assets/knobs/sliderAdjusters.png';\r\n public readonly checkMark: string = 'assets/buttons/checkmark.png';\r\n public readonly logOut: string = 'assets/buttons/logout.png';\r\n public readonly reset: string = 'assets/buttons/reset.png';\r\n public readonly help: string = 'assets/buttons/help.png';\r\n public readonly machiningAdvisorWhite: string = 'assets/images/machiningadvisor_white.png';\r\n public readonly mapBallEndMill: string = 'assets/images/MAP_Ball_End_Mill.jpg';\r\n public readonly mapBallEndMillPadded: string = 'assets/images/MAP_Ball_End_Mill-padded.png';\r\n public readonly mapChamferMill: string = 'assets/images/MAP_Chamfer_Mill.jpg';\r\n public readonly mapChamferMillPadded: string = 'assets/images/MAP_Chamfer_Mill-padded.png';\r\n public readonly mapSquareEndMill: string = 'assets/images/MAP_Square_End_Mill.jpg';\r\n public readonly mapSquareEndMillPadded: string = 'assets/images/MAP_Square_End_Mill-padded.png';\r\n public readonly mapBullNosedPadded: string = 'assets/images/MAP_Bull_End_Mill-padded.png';\r\n public readonly defaultTool: string = 'assets/images/defaultTool.png';\r\n public readonly settings: string = 'assets/buttons/settings.png';\r\n public readonly sliders: string = 'assets/buttons/sliders.png';\r\n public readonly adocSlider: string = 'assets/knobs/adoc_slider.png';\r\n public readonly adocSliderDisabled: string = 'assets/knobs/adoc_slider_disabled.png';\r\n public readonly rdocSlider: string = 'assets/knobs/rdoc_slider.png';\r\n public readonly rdocSliderDisabled: string = 'assets/knobs/rdoc_slider_disabled.png';\r\n public readonly speedFeedDials: string = 'assets/knobs/speed-feed_dials.png';\r\n public readonly speedKnob: string = 'assets/knobs/speedKnob.png';\r\n public readonly speedKnoboffSet: string = 'assets/knobs/speedKnoboffSet.png';\r\n public readonly transTrack: string = 'assets/knobs/trans-track.png';\r\n public readonly transTrack2: string = 'assets/knobs/trans-track2.png';\r\n public readonly toolPathDefault: string = 'assets/toolpaths/tool_path_default.png';\r\n public readonly defaultParameterTool: string = 'assets/images/unavailableOperationImage.png';\r\n\r\n public readonly finishingLabeled: string = 'assets/toolpaths/labeled/finishing.png';\r\n public readonly fullSlottingLabeled: string = 'assets/toolpaths/labeled/full_slotting.png';\r\n public readonly LoopingToolPathLabeled: string = 'assets/toolpaths/labeled/looping_tool_path.png';\r\n public readonly offsetToolLabeled: string = 'assets/toolpaths/labeled/offset_tool.png';\r\n public readonly trochoidalLabeled: string = 'assets/toolpaths/labeled/trochoidal.png';\r\n public readonly trochoidalSlottingLabeled: string = 'assets/toolpaths/labeled/trochoidal_slotting.png';\r\n public readonly zigZagLabeled: string = 'assets/toolpaths/labeled/zig_zag.png';\r\n\r\n public readonly finishingUnlabeled: string = 'assets/toolpaths/unlabeled/finishing.png';\r\n public readonly fullSlottingUnlabeled: string = 'assets/toolpaths/unlabeled/full_slotting.png';\r\n public readonly LoopingToolPathUnlabeled: string = 'assets/toolpaths/unlabeled/looping_tool_path.png';\r\n public readonly offsetToolUnlabeled: string = 'assets/toolpaths/unlabeled/offset_tool.png';\r\n public readonly trochoidalUnlabeled: string = 'assets/toolpaths/unlabeled/trochoidal.png';\r\n public readonly trochoidalSlottingUnlabeled: string = 'assets/toolpaths/unlabeled/trochoidal_slotting.png';\r\n public readonly zigZagUnlabeled: string = 'assets/toolpaths/unlabeled/zig_zag.png';\r\n\r\n public readonly warningIcon: string = 'assets/icon/warningIcon.png';\r\n\r\n public readonly helicalLogo: string = 'assets/images/Helical_Logo.png';\r\n public readonly machiningAdvisorColor: string = 'assets/images/machiningadvisor_color.png';\r\n public readonly muSymbol: string = 'assets/images/mu.png';\r\n\r\n public readonly unavailableOperationImage: string = 'assets/images/unavailableOperationImage.png';\r\n public readonly unavailableOperationThumbnail: string = 'assets/images/unavailableOperationThumbnail.png';\r\n public readonly unavailableToolImage: string = 'assets/images/unavailableToolImage.png';\r\n\r\n public readonly iosShare: string = 'assets/icon/outline_ios_share.png';\r\n public readonly account: string = 'assets/buttons/outline_person.png';\r\n}\r\n","/**\n * ng-knob directive modified by Thiboot for Angular2 and TypeScript\n * https://github.com/thiboot\n *\n * Install d3 typings\n * import {Knob} from '../../knob/ng-knob2';\n * \n *\n * Well tested in ionic2\n */\n\n/**\n * modified by Boyd Law @ Andplus LLC.\n * Add mousewheel behavior, added maxCap\n */\n\nimport { Directive, ElementRef, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport * as d3 from 'd3';\nimport math from 'mathjs';\n\n@Directive({\n selector: 'ui-knob'\n})\nexport class Knob implements OnInit {\n element: HTMLElement;\n @Input() value: number;\n @Input() options: any;\n @Input() readOnly: boolean = false;\n @Output() valueChange = new EventEmitter();\n\n dragInteraction: any;\n clickInteraction: any;\n inDrag: Boolean;\n bgArc: any;\n trackArc: any;\n changeArc: any;\n valueArc: any;\n interactArc: any;\n hoopArc: any;\n changeElem: any;\n valueElem: any;\n eventType: string = undefined;\n\n behindKnobchangeElem: any;\n behindKnobValueElem: any;\n\n defaultOptions: {};\n\n constructor(private el: ElementRef) {\n //All that need to be instanciated before bindings\n this.element = this.el.nativeElement;\n this.value = 0;\n\n this.defaultOptions = {\n skin: {\n type: 'simple',\n width: 10,\n color: 'rgba(255,0,0,.5)',\n spaceWidth: 5\n },\n animate: {\n enabled: true,\n duration: 1000,\n ease: 'bounce'\n },\n size: 200,\n startAngle: 0,\n endAngle: 360,\n unit: '',\n displayInput: true,\n inputFormatter: function(v) {\n return v;\n },\n readOnly: false,\n trackWidth: 50,\n barWidth: 50,\n trackColor: 'rgba(0,0,0,0)',\n barColor: 'rgba(255,0,0,.5)',\n prevBarColor: 'rgba(0,0,0,0)',\n textColor: '#222',\n barCap: 0,\n trackCap: 0,\n fontSize: 'auto',\n subText: {\n enabled: false,\n text: '',\n color: 'gray',\n font: 'auto'\n },\n bgColor: '',\n bgFull: false,\n scale: {\n enabled: false,\n type: 'lines',\n color: 'gray',\n width: 4,\n quantity: 20,\n height: 10,\n spaceWidth: 15\n },\n step: 1,\n displayPrevious: false,\n min: 0,\n max: 100,\n dynamicOptions: false,\n behindKnob: false\n };\n }\n\n /**\n * Implement this interface to execute custom initialization logic after your directive's data-bound properties have been initialized.\n * ngOnInit is called right after the directive's data-bound properties have been checked for the first time, and before any of its children have been checked.\n * It is invoked only once when the directive is instantiated.\n */\n ngOnInit() {\n this.inDrag = false;\n this.options = Object.assign(this.defaultOptions, this.options);\n this.readOnly = false;\n this.draw();\n }\n\n /**\n * Actions when value or options change in host component\n */\n ngOnChanges(changes) {\n if (changes.value) {\n if (\n this.defaultOptions != null &&\n changes.options != null &&\n changes.options.currentValue != null &&\n this.value != null\n ) {\n this.options = Object.assign(this.defaultOptions, changes.options.currentValue);\n if (this.readOnly) {\n this.draw();\n } else {\n d3.select(this.element)\n .on('drag', null)\n .on('dragend', null);\n }\n }\n\n if (\n this.defaultOptions != null &&\n this.options != null &&\n changes.value.currentValue != null &&\n changes.value.previousValue != null &&\n changes.value.currentValue !== changes.value.previousValue\n ) {\n if (this.options.maxCap) {\n if (changes.value.currentValue <= this.options.maxCap) {\n this.setValue(changes.value.currentValue);\n }\n } else {\n this.setValue(changes.value.currentValue);\n }\n }\n }\n }\n\n /**\n * Convert from value to radians\n */\n valueToRadians(\n value: number,\n valueEnd: number,\n angleEnd: number = 0,\n angleStart: number = 0,\n valueStart: number = 0\n ) {\n valueEnd = valueEnd || 100;\n valueStart = valueStart || 0;\n angleEnd = angleEnd || 360;\n angleStart = angleStart || 0;\n return (math.PI / 180) * (((value - valueStart) * (angleEnd - angleStart)) / (valueEnd - valueStart) + angleStart);\n }\n /**\n * Convert from radians to value\n */\n radiansToValue(radians, valueEnd, valueStart, angleEnd, angleStart) {\n valueEnd = valueEnd || 100;\n valueStart = valueStart || 0;\n angleEnd = angleEnd || 360;\n angleStart = angleStart || 0;\n return (((180 / math.PI) * radians - angleStart) * (valueEnd - valueStart)) / (angleEnd - angleStart) + valueStart;\n }\n /**\n * Create the arc\n */\n createArc(innerRadius, outerRadius, startAngle?, endAngle?, cornerRadius?) {\n var arc = d3.svg.arc();\n arc\n .innerRadius(innerRadius)\n .outerRadius(outerRadius)\n .startAngle(startAngle)\n .endAngle(endAngle)\n .cornerRadius(cornerRadius);\n return arc;\n }\n\n /**\n * Draw the arc\n */\n drawArc(svg, arc, label, style, click?, drag?, wheel?) {\n var elem = svg\n .append('path')\n .attr('class', label)\n .attr('d', arc)\n .style(style)\n .attr('transform', 'translate(' + this.options.size / 2 + ', ' + this.options.size / 2 + ')');\n\n if (this.options.readOnly === false || !this.readOnly) {\n if (click) {\n elem.on('click', click);\n }\n if (drag) {\n elem.call(drag);\n }\n }\n return elem;\n }\n /**\n * Create the arcs\n */\n createArcs() {\n var outerRadius = parseInt((this.options.size / 2).toString(), 10),\n startAngle = this.valueToRadians(this.options.startAngle, 360),\n endAngle = this.valueToRadians(this.options.endAngle, 360);\n if (this.options.scale.enabled) {\n outerRadius -= this.options.scale.width + this.options.scale.spaceWidth;\n }\n var trackInnerRadius = outerRadius - this.options.trackWidth,\n changeInnerRadius = outerRadius - this.options.barWidth,\n valueInnerRadius = outerRadius - this.options.barWidth,\n //interactInnerRadius = outerRadius - this.options.barWidth,\n interactInnerRadius = 1,\n trackOuterRadius = outerRadius,\n changeOuterRadius = outerRadius,\n valueOuterRadius = outerRadius,\n interactOuterRadius = outerRadius,\n diff;\n\n if (this.options.barWidth > this.options.trackWidth) {\n diff = (this.options.barWidth - this.options.trackWidth) / 2;\n trackInnerRadius -= diff;\n trackOuterRadius -= diff;\n } else if (this.options.barWidth < this.options.trackWidth) {\n diff = (this.options.trackWidth - this.options.barWidth) / 2;\n changeOuterRadius -= diff;\n valueOuterRadius -= diff;\n changeInnerRadius -= diff;\n valueInnerRadius -= diff;\n //interactInnerRadius = outerRadius - this.options.trackWidth;\n }\n if (this.options.bgColor) {\n if (this.options.bgFull) {\n this.bgArc = this.createArc(0, outerRadius, 0, math.PI * 2);\n } else {\n this.bgArc = this.createArc(0, outerRadius, startAngle, endAngle);\n }\n }\n if (this.options.skin.type === 'tron') {\n trackOuterRadius = trackOuterRadius - this.options.skin.width - this.options.skin.spaceWidth;\n changeOuterRadius = changeOuterRadius - this.options.skin.width - this.options.skin.spaceWidth;\n valueOuterRadius = valueOuterRadius - this.options.skin.width - this.options.skin.spaceWidth;\n interactOuterRadius = interactOuterRadius - this.options.skin.width - this.options.skin.spaceWidth;\n this.hoopArc = this.createArc(outerRadius - this.options.skin.width, outerRadius, startAngle, endAngle);\n }\n\n this.trackArc = this.createArc(trackInnerRadius, trackOuterRadius, startAngle, endAngle, this.options.trackCap);\n this.changeArc = this.createArc(changeInnerRadius, changeOuterRadius, startAngle, startAngle, this.options.barCap);\n this.valueArc = this.createArc(valueInnerRadius, valueOuterRadius, startAngle, startAngle, this.options.barCap);\n\n this.interactArc = this.createArc(interactInnerRadius, interactOuterRadius, startAngle, endAngle);\n }\n /**\n * Draw the arcs\n */\n drawArcs(clickInteraction, dragBehavior) {\n var svg = d3\n .select(this.element)\n .classed('svg-container', true) //container class to make it responsive\n .append('svg')\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr('viewBox', '0 0 ' + this.options.size + ' ' + this.options.size)\n .classed('svg-content-responsive mainWindow', true);\n\n if (this.options.behindKnob) {\n var secondarysvg = d3\n .select(this.element)\n .select('.behindKnob')\n .classed('svg-container', true) //container class to make it responsive\n .append('svg')\n .attr('preserveAspectRatio', 'xMidYMid meet')\n .attr('viewBox', '0 0 ' + this.options.size + ' ' + this.options.size)\n .classed('svg-content-responsive secondWindow', true);\n }\n\n if (this.options.bgColor) {\n this.drawArc(svg, this.bgArc, 'bgArc', { fill: this.options.bgColor });\n }\n\n if (this.options.displayInput) {\n var fontSize = this.options.size * 0.2 + 'px';\n if (this.options.fontSize !== 'auto') {\n fontSize = this.options.fontSize + 'px';\n }\n if (this.options.step < 1) {\n this.value = Number(this.value.toFixed(1));\n }\n var v = this.value;\n if (typeof this.options.inputFormatter === 'function') {\n v = this.options.inputFormatter(v);\n }\n svg\n .append('text')\n .attr('class', 'text')\n .attr('text-anchor', 'middle')\n .attr('font-size', fontSize)\n .style('fill', this.options.textColor)\n .text(v + this.options.unit || '')\n .attr(\n 'transform',\n 'translate(' + this.options.size / 2 + ', ' + (this.options.size / 2 + this.options.size * 0.06) + ')'\n );\n\n if (this.options.subText.enabled) {\n fontSize = this.options.size * 0.07 + 'px';\n if (this.options.subText.font !== 'auto') {\n fontSize = this.options.subText.font + 'px';\n }\n svg\n .append('text')\n .attr('class', 'sub-text')\n .attr('text-anchor', 'middle')\n .attr('font-size', fontSize)\n .style('fill', this.options.subText.color)\n .text(this.options.subText.text)\n .attr(\n 'transform',\n 'translate(' + this.options.size / 2 + ', ' + (this.options.size / 2 + this.options.size * 0.15) + ')'\n );\n }\n }\n if (this.options.scale.enabled) {\n var radius,\n quantity,\n count = 0,\n angle = 0,\n data,\n startRadians = this.valueToRadians(\n this.options.min,\n this.options.max,\n this.options.endAngle,\n this.options.startAngle,\n this.options.min\n ),\n endRadians = this.valueToRadians(\n this.options.max,\n this.options.max,\n this.options.endAngle,\n this.options.startAngle,\n this.options.min\n ),\n diff = 0;\n if (this.options.startAngle !== 0 || this.options.endAngle !== 360) {\n diff = 1;\n }\n if (this.options.scale.type === 'dots') {\n var width = this.options.scale.width;\n radius = this.options.size / 2 - width;\n quantity = this.options.scale.quantity;\n var offset = radius + this.options.scale.width;\n data = d3.range(quantity).map(function() {\n angle = count * (endRadians - startRadians) - math.PI / 2 + startRadians;\n count = count + 1 / (quantity - diff);\n return {\n cx: offset + math.cos(angle) * radius,\n cy: offset + math.sin(angle) * radius,\n r: width\n };\n });\n svg\n .selectAll('circle')\n .data(data)\n .enter()\n .append('circle')\n .attr({\n r: function(d: { r }) {\n return d.r;\n },\n cx: function(d: { cx }) {\n return d.cx;\n },\n cy: function(d: { cy }) {\n return d.cy;\n },\n fill: this.options.scale.color\n });\n } else if (this.options.scale.type === 'lines') {\n var height = this.options.scale.height;\n radius = this.options.size / 2;\n quantity = this.options.scale.quantity;\n data = d3.range(quantity).map(function() {\n angle = count * (endRadians - startRadians) - math.PI / 2 + startRadians;\n count = count + 1 / (quantity - diff);\n return {\n x1: radius + math.cos(angle) * radius,\n y1: radius + math.sin(angle) * radius,\n x2: radius + math.cos(angle) * (radius - height),\n y2: radius + math.sin(angle) * (radius - height)\n };\n });\n svg\n .selectAll('line')\n .data(data)\n .enter()\n .append('line')\n .attr({\n x1: function(d: { x1 }) {\n return d.x1;\n },\n y1: function(d: { y1 }) {\n return d.y1;\n },\n x2: function(d: { x2 }) {\n return d.x2;\n },\n y2: function(d: { y2 }) {\n return d.y2;\n },\n 'stroke-width': this.options.scale.width,\n stroke: this.options.scale.color\n });\n }\n }\n if (this.options.skin.type === 'tron') {\n this.drawArc(svg, this.hoopArc, 'hoopArc', { fill: this.options.skin.color });\n }\n this.drawArc(svg, this.trackArc, 'trackArc', { fill: this.options.trackColor });\n\n if (this.options.displayPrevious) {\n this.changeElem = this.drawArc(svg, this.changeArc, 'changeArc', { fill: this.options.prevBarColor });\n } else {\n this.changeElem = this.drawArc(svg, this.changeArc, 'changeArc', { 'fill-opacity': 0 });\n }\n\n this.valueElem = this.drawArc(svg, this.valueArc, 'valueArc', { fill: this.options.barColor });\n if (this.options.behindKnob) {\n this.behindKnobValueElem = this.drawArc(secondarysvg, this.valueArc, 'valueArc', { fill: this.options.barColor });\n }\n\n var cursor = 'pointer';\n if (this.options.readOnly || !this.readOnly) {\n cursor = 'default';\n }\n this.drawArc(\n svg,\n this.interactArc,\n 'interactArc',\n { 'fill-opacity': 0, cursor: cursor },\n clickInteraction,\n dragBehavior\n );\n\n if (this.options.behindKnob) {\n this.drawArc(\n secondarysvg,\n this.interactArc,\n 'interactArc',\n { 'fill-opacity': 0, cursor: cursor },\n clickInteraction,\n dragBehavior\n );\n }\n }\n /**\n * Draw knob component\n */\n draw() {\n if (this.options.behindKnob) {\n d3.select(this.element)\n .select('svg:nth-child(2)')\n .remove();\n d3.select(this.element)\n .select('.behindKnob')\n .select('svg')\n .remove();\n } else {\n d3.select(this.element)\n .select('svg')\n .remove();\n }\n var that = this;\n\n that.createArcs();\n\n this.dragInteraction = dragInteraction;\n this.clickInteraction = clickInteraction;\n\n var dragBehavior = d3.behavior\n .drag()\n .on('drag', dragInteraction)\n .on('dragend', clickInteraction);\n\n d3.select(this.element)\n .on('wheel', function(d) {\n var direction = d3.event.wheelDelta < 0 ? 'down' : 'up';\n wheelInteraction(direction);\n })\n .on('DOMMouseScroll.zoom', null) // disables older versions of Firefox\n .on('wheel.zoom', null); // disables newer versions of Firefox\n\n that.drawArcs(clickInteraction, dragBehavior);\n\n var valueElem = that.valueElem;\n if (that.options.behindKnob) {\n valueElem = this.behindKnobValueElem;\n }\n\n if (that.options.animate.enabled) {\n valueElem\n .transition()\n .ease(that.options.animate.ease)\n .duration(that.options.animate.duration)\n .tween('', function() {\n var i = d3.interpolate(\n that.valueToRadians(that.options.startAngle, 360),\n that.valueToRadians(\n that.value,\n that.options.max,\n that.options.endAngle,\n that.options.startAngle,\n that.options.min\n )\n );\n return function(t) {\n var val = i(t);\n valueElem.attr('d', that.valueArc.endAngle(val));\n that.changeElem.attr('d', that.changeArc.endAngle(val));\n };\n });\n } else {\n that.changeArc.endAngle(\n this.valueToRadians(\n this.value,\n this.options.max,\n this.options.endAngle,\n this.options.startAngle,\n this.options.min\n )\n );\n that.changeElem.attr('d', that.changeArc);\n that.valueArc.endAngle(\n this.valueToRadians(\n this.value,\n this.options.max,\n this.options.endAngle,\n this.options.startAngle,\n this.options.min\n )\n );\n valueElem.attr('d', that.valueArc);\n }\n\n function wheelInteraction(direction) {\n if (!that.readOnly) {\n that.eventType = 'wheel';\n that.inDrag = false;\n var value = that.value;\n\n if (direction === 'up') {\n if (that.options.maxCap) {\n if (that.value < that.options.maxCap) {\n value = that.value + 1;\n }\n } else {\n value = that.value + 1;\n }\n } else {\n if (that.value - 1 >= 0) {\n value = that.value - 1;\n }\n }\n that.setValue(value);\n that.valueChange.emit({ value: value, event: that.eventType }); // emitting value is off for whatever reason, need to emit the object's value\n }\n }\n\n function dragInteraction() {\n if (!that.readOnly) {\n that.eventType = 'drag';\n that.inDrag = true;\n var x = (d3.event).x - that.options.size / 2;\n var y = (d3.event).y - that.options.size / 2;\n\n interaction(x, y, false);\n }\n }\n\n function clickInteraction() {\n if (!that.readOnly) {\n that.eventType = 'click';\n that.inDrag = false;\n var coords = d3.mouse(this.parentNode);\n var x = coords[0] - that.options.size / 2;\n var y = coords[1] - that.options.size / 2;\n\n interaction(x, y, true);\n }\n }\n\n function interaction(x, y, isFinal) {\n //For some reason the drag area cordnates are different on fire fox.\n //Multiplying by -1 fixes the issue. Using until new knob plugin is found\n if (\n window.navigator.userAgent.indexOf('Chrome/') < 0 &&\n (window.navigator.userAgent.indexOf('Firefox/') > 0 || window.navigator.userAgent.indexOf('Safari/') > 0)\n ) {\n x = x * -1;\n y = y * -1;\n }\n if (!that.readOnly) {\n var arc = math.atan(y / x) / (math.PI / 180),\n radians,\n delta;\n\n if ((x >= 0 && y <= 0) || (x >= 0 && y >= 0)) {\n delta = 90;\n } else {\n delta = 270;\n if (that.options.startAngle < 0) {\n delta = -90;\n }\n }\n\n radians = (delta + arc) * (math.PI / 180);\n that.value = that.radiansToValue(\n radians,\n that.options.max,\n that.options.min,\n that.options.endAngle,\n that.options.startAngle\n );\n if (that.options.maxCap) {\n if (that.value >= that.options.maxCap) {\n that.value = that.options.maxCap;\n }\n }\n\n var valueElem = that.valueElem;\n if (that.options.behindKnob) {\n valueElem = that.behindKnobValueElem;\n }\n\n if (that.value >= that.options.min && that.value <= that.options.max) {\n if (that.options.maxCap) {\n if (that.value <= that.options.maxCap) {\n that.value =\n math.round(\n ~~((that.value < 0 ? -0.5 : 0.5) + that.value / that.options.step) * that.options.step * 100\n ) / 100;\n if (that.options.step < 1) {\n that.value = Number(that.value.toFixed(1));\n }\n\n that.valueArc.endAngle(\n that.valueToRadians(\n that.value,\n that.options.max,\n that.options.endAngle,\n that.options.startAngle,\n that.options.min\n )\n );\n valueElem.attr('d', that.valueArc);\n\n if (isFinal) {\n that.changeArc.endAngle(\n that.valueToRadians(\n that.value,\n that.options.max,\n that.options.endAngle,\n that.options.startAngle,\n that.options.min\n )\n );\n that.changeElem.attr('d', that.changeArc);\n }\n if (that.options.displayInput) {\n let v = that.value;\n if (typeof that.options.inputFormatter === 'function') {\n v = that.options.inputFormatter(v);\n }\n d3.select(that.element)\n .select('.text')\n .text(v + that.options.unit || '');\n }\n that.valueChange.emit({ value: that.value, event: that.eventType });\n }\n } else {\n that.value =\n math.round(~~((that.value < 0 ? -0.5 : 0.5) + that.value / that.options.step) * that.options.step * 100) /\n 100;\n if (that.options.step < 1) {\n that.value = Number(that.value.toFixed(1));\n }\n\n if (that.options.maxCap) {\n if (that.value <= that.options.maxCap) {\n that.valueArc.endAngle(\n that.valueToRadians(\n that.value,\n that.options.max,\n that.options.endAngle,\n that.options.startAngle,\n that.options.min\n )\n );\n valueElem.attr('d', that.valueArc);\n }\n } else {\n that.valueArc.endAngle(\n that.valueToRadians(\n that.value,\n that.options.max,\n that.options.endAngle,\n that.options.startAngle,\n that.options.min\n )\n );\n valueElem.attr('d', that.valueArc);\n }\n if (isFinal) {\n that.changeArc.endAngle(\n that.valueToRadians(\n that.value,\n that.options.max,\n that.options.endAngle,\n that.options.startAngle,\n that.options.min\n )\n );\n that.changeElem.attr('d', that.changeArc);\n }\n if (that.options.displayInput) {\n let v = that.value;\n if (typeof that.options.inputFormatter === 'function') {\n v = that.options.inputFormatter(v);\n }\n d3.select(that.element)\n .select('.text')\n .text(v + that.options.unit || '');\n }\n }\n\n that.valueChange.emit({ value: that.value, event: that.eventType });\n }\n }\n }\n }\n /**\n * Set a value\n */\n setValue(newValue) {\n if (!this.readOnly) {\n if (this.options.maxCap) {\n if (newValue > this.options.maxCap) {\n newValue = this.options.maxCap;\n }\n }\n\n if (!this.inDrag && this.value >= this.options.min && this.value <= this.options.max) {\n var radians = this.valueToRadians(\n newValue,\n this.options.max,\n this.options.endAngle,\n this.options.startAngle,\n this.options.min\n );\n this.value =\n math.round(~~((newValue < 0 ? -0.5 : 0.5) + newValue / this.options.step) * this.options.step * 100) / 100;\n if (this.options.step < 1) {\n this.value = Number(this.value.toFixed(1));\n }\n this.changeArc.endAngle(radians);\n d3.select(this.element)\n .select('.changeArc')\n .attr('d', this.changeArc);\n this.valueArc.endAngle(radians);\n d3.select(this.element)\n .select('.valueArc')\n .attr('d', this.valueArc);\n\n if (this.options.behindKnob) {\n d3.select(this.element)\n .select('.behindKnob')\n .select('.changeArc')\n .attr('d', this.changeArc);\n d3.select(this.element)\n .select('.behindKnob')\n .select('.valueArc')\n .attr('d', this.valueArc);\n }\n\n this.valueChange.emit({ value: this.value, event: this.eventType });\n if (this.options.displayInput) {\n var v = this.value;\n if (typeof this.options.inputFormatter === 'function') {\n v = this.options.inputFormatter(v);\n }\n d3.select(this.element)\n .select('.text')\n .text(v + this.options.unit || '');\n }\n }\n }\n }\n}\n","import { Injectable } from '@angular/core';\nimport { HttpHeaders } from '@angular/common/http';\nimport { Observable, from } from 'rxjs';\nimport { CacheService } from 'ionic-cache';\nimport { ApplicationConfig } from '../config';\n\n@Injectable()\nexport class ServiceProvider {\n public readonly config: any;\n public cache: CacheService;\n constructor() {\n this.config = new ApplicationConfig();\n }\n\n public createHeader = (): HttpHeaders => {\n return new HttpHeaders({\n 'Content-Type': 'application/json',\n Accept: 'application/json'\n });\n };\n\n public createAuthorizationHeader = (token: string): HttpHeaders => {\n return new HttpHeaders({\n Authorization: 'Bearer ' + token,\n Accept: 'application/json'\n });\n };\n\n public createXFormHeader = (): HttpHeaders => {\n return new HttpHeaders({\n 'Content-Type': 'application/x-www-form-urlencoded',\n Accept: 'application/json'\n });\n };\n\n public loadToken = (cache: any): Observable => {\n return from(\n cache\n .getItem('access_token')\n .then(token => {\n return token;\n })\n .catch(() => {\n return localStorage.getItem('access_token');\n })\n );\n };\n\n public loadMaterials = (cache: any): Observable => {\n return from(\n this.cache\n .getItem('materials')\n .then(materials => {\n return materials;\n })\n .catch(() => {\n return localStorage.getItem('materials');\n })\n );\n };\n\n public loadEndmills = (cache: any): Observable => {\n return from(\n this.cache\n .getItem('endmills')\n .then(endmills => {\n return endmills;\n })\n .catch(() => {\n return localStorage.getItem('endmills');\n })\n );\n };\n}\n","import { Injectable } from '@angular/core';\r\nimport { Platform } from '@ionic/angular';\r\nimport { MatDialog } from '@angular/material/dialog';\r\nimport _ from 'lodash';\r\nimport math from 'mathjs';\r\nimport { ErrorDialog } from './dialog/error/error';\r\nimport { AlertDialog } from './dialog/alert/alert';\r\nimport { ConfirmDialog } from './dialog/confirm/confirm';\r\nimport { GCodeDialog } from './dialog/gCode/gCode';\r\nimport { PdfInfoDialog } from './dialog/pdfInfo/pdfInfo';\r\nimport { WorkOfflineDialog } from './dialog/workOffline/workOffline';\r\nimport { Message } from './dialog/message.interface';\r\nimport { CacheService } from 'ionic-cache';\r\nimport { ImageConstants } from './image-constants';\r\ndeclare var Apptentive;\r\n\r\n@Injectable()\r\nexport class Utils {\r\n public paramIcon: HTMLImageElement = new Image();\r\n constructor(\r\n private platform: Platform,\r\n public dialog: MatDialog,\r\n private cache: CacheService,\r\n public imageConstants: ImageConstants\r\n ) {\r\n this.paramIcon.src = imageConstants.iosShare;\r\n }\r\n\r\n openDialog = (\r\n message: Message,\r\n type?: string,\r\n callback?: (result: any) => void,\r\n failcallback?: (result: any) => void\r\n ) => {\r\n if (message.message || type === 'gcode') {\r\n let dialogRef: any = () => {\r\n switch (type) {\r\n case 'alert':\r\n return this.dialog.open(AlertDialog);\r\n case 'error':\r\n return this.dialog.open(ErrorDialog);\r\n case 'confirm':\r\n return this.dialog.open(ConfirmDialog);\r\n case 'gcode':\r\n return this.dialog.open(GCodeDialog, {\r\n data: message.data ? message.data : undefined\r\n });\r\n case 'pdfinfo':\r\n return this.dialog.open(PdfInfoDialog);\r\n case 'workOffline':\r\n return this.dialog.open(WorkOfflineDialog);\r\n default:\r\n return this.dialog.open(AlertDialog);\r\n }\r\n };\r\n\r\n let instance = dialogRef().componentInstance;\r\n instance.message = message.message;\r\n instance.title = message.title;\r\n\r\n instance.data = message.data ? message.data : undefined;\r\n\r\n instance.user = message.user ? message.user : '';\r\n instance.company = message.company ? message.company : '';\r\n\r\n if (callback) {\r\n instance.dialogRef.afterClosed().subscribe(result => {\r\n if (failcallback) {\r\n if (result) {\r\n callback(result);\r\n } else {\r\n failcallback(result);\r\n }\r\n } else {\r\n if (result) {\r\n callback(result);\r\n }\r\n }\r\n });\r\n }\r\n }\r\n };\r\n\r\n extractedUsername = (value: string): string => {\r\n return value.substring(0, value.indexOf('@'));\r\n };\r\n\r\n inputChecker = (value: string, rulesToCheck: string[]): boolean => {\r\n /*\r\n we can set up a bunch of rules\r\n */\r\n let rules: object[] = [\r\n {\r\n name: 'required',\r\n regex: /.*\\S.*/\r\n }\r\n ];\r\n\r\n for (let ruleToCheck of rulesToCheck) {\r\n let rule = _.find(rules, rule => ruleToCheck.toLowerCase() === rule['name'].toLowerCase());\r\n if (!rule.regex.test(value)) {\r\n return false;\r\n }\r\n }\r\n\r\n return true;\r\n };\r\n\r\n pascaleCase = (name: string): string => {\r\n if (name) {\r\n let arr, i, l;\r\n arr = String(name).split(/\\s|_/);\r\n\r\n i = 0;\r\n l = arr.length;\r\n\r\n while (i < l) {\r\n arr[i] = arr[i].substr(0, 1).toUpperCase() + (arr[i].length > 1 ? arr[i].substr(1).toLowerCase() : '');\r\n i++;\r\n }\r\n\r\n return arr.join(' ');\r\n } else {\r\n return name;\r\n }\r\n };\r\n\r\n networkCheck = (callback?: (result: any) => void) => {\r\n // navigator is not reliable, because it only detects up the browser level\r\n // doing it this way, we are checking if there is any connection at all\r\n\r\n return this.cache.isOnline;\r\n };\r\n\r\n convertDecimalToInteger = (value: number): number => {\r\n let str = value.toString();\r\n let valueArray = str.split('.')[1];\r\n valueArray.length;\r\n // length is the place of the decimal\r\n //if 4 then 1000\r\n // 10 x 10 x 10 x 10\r\n\r\n let place = 1;\r\n\r\n for (let i = 1; i <= valueArray.length; i++) {\r\n place = 10 * place;\r\n }\r\n\r\n return value * place;\r\n };\r\n\r\n isApp = (): boolean => {\r\n // if its mobileweb, then we are done\r\n if (this.platform.is('mobileweb') || this.platform.is('mobile')) {\r\n return window.innerWidth < 851 ? true : false;\r\n } else {\r\n return window.innerWidth < 851 ? true : false;\r\n }\r\n };\r\n\r\n clearObject = (object: object, replaceWith: any): object => {\r\n Object.keys(object).map(k => {\r\n object[k] = replaceWith;\r\n if (typeof object[k] === 'object') {\r\n this.clearObject(object[k], replaceWith);\r\n }\r\n });\r\n\r\n return object;\r\n };\r\n\r\n filter = (items: object[], moreFilter?: object): object[] => {\r\n let retItems: object[] = items;\r\n\r\n if (moreFilter) {\r\n Object.keys(moreFilter).map(k => {\r\n retItems = retItems.filter(item => {\r\n if (item[k] && moreFilter[k]) {\r\n if (typeof item[k] === 'string') {\r\n return item[k].toLowerCase().indexOf(moreFilter[k].toLowerCase()) === 0;\r\n } else {\r\n return item[k] === moreFilter[k];\r\n }\r\n } else {\r\n return true;\r\n }\r\n });\r\n });\r\n }\r\n\r\n return retItems;\r\n };\r\n\r\n calculateAspectRatioFit = (srcWidth: number, srcHeight: number, maxWidth: number, maxHeight: number): object => {\r\n let ratio = math.min(maxWidth / srcWidth, maxHeight / srcHeight);\r\n\r\n return {\r\n width: srcWidth * ratio,\r\n height: srcHeight * ratio\r\n };\r\n };\r\n\r\n percentageOf = (input: number, min: number, max: number): number => {\r\n return ((input - min) * 100) / (max - min);\r\n };\r\n\r\n percentage = (input: number, min: number, max: number): number => {\r\n let k = max / input;\r\n return 100 / k;\r\n };\r\n\r\n /**\r\n * detect IE\r\n * returns version of IE or false, if browser is not Internet Explorer\r\n * for IE detection to add in special cases of CSS or code\r\n */\r\n detectIE = (): boolean => {\r\n let ua = window.navigator.userAgent;\r\n\r\n let ie = false;\r\n\r\n let msie = ua.indexOf('MSIE ');\r\n if (msie > 0) {\r\n // IE 10 or older => return version number\r\n ie = true;\r\n }\r\n\r\n let trident = ua.indexOf('Trident/');\r\n if (trident > 0) {\r\n // IE 11 => return version number\r\n ie = true;\r\n }\r\n\r\n let edge = ua.indexOf('Edge/');\r\n if (edge > 0) {\r\n // Edge (IE 12+) => return version number\r\n ie = true;\r\n }\r\n\r\n // other browser\r\n return ie;\r\n };\r\n\r\n centerPdfText = (doc, text, yCoordinate) => {\r\n let textWidth = (doc.getStringUnitWidth(text) * doc.internal.getFontSize()) / doc.internal.scaleFactor;\r\n var textOffset = (doc.internal.pageSize.width - textWidth) / 2;\r\n doc.text(textOffset, yCoordinate, text);\r\n };\r\n\r\n // Adds an array of items to the pdf. Set maxLineWidth to 0 to not jsPDF split text line\r\n listPdfText = (doc, items, xCord, startYCord, maxLineWidth, labelType, parameterHyperlink?) => {\r\n let yCord = startYCord;\r\n if (labelType === 'titles') {\r\n doc.setTextColor(100);\r\n } else {\r\n doc.setTextColor(0);\r\n }\r\n _.forEach(items, (item, index) => {\r\n if (!item) {\r\n item = '';\r\n }\r\n if (maxLineWidth > 0) {\r\n doc.text(doc.splitTextToSize(item.toString(), maxLineWidth), xCord, yCord);\r\n if (parameterHyperlink && !!parameterHyperlink[index]) {\r\n // Need to subtract the 3 from the ycord to line it up with the text from the added size\r\n doc.link(maxLineWidth + 2, yCord - 3, 3, 3, { url: parameterHyperlink[index] });\r\n doc.addImage(this.paramIcon, 'png', maxLineWidth + 2, yCord - 3, 3, 3);\r\n }\r\n } else {\r\n doc.text(item.toString(), xCord, yCord);\r\n }\r\n yCord += 7;\r\n });\r\n };\r\n\r\n difference = (object, base): object => {\r\n let changes = (object, base): object => {\r\n return _.transform(object, function(result, value, key) {\r\n if (!_.isEqual(value, base[key])) {\r\n result[key] = _.isObject(value) && _.isObject(base[key]) ? changes(value, base[key]) : value;\r\n }\r\n });\r\n };\r\n return changes(object, base);\r\n };\r\n\r\n //Added try catch for apprentive so the app doesn't break.\r\n //Some cases Apptentive had an issue on their end or it tries to fire it when it's not supposed to be used\r\n apptentiveEngage = (\r\n event: string,\r\n customData?: object,\r\n successCallback?: (result: any) => void,\r\n failureCallback?: (result: any) => void\r\n ) => {\r\n let mobileWeb = this.platform.is('mobileweb') || !document.URL.startsWith('file');\r\n if (!mobileWeb && (this.platform.is('android') || this.platform.is('ios'))) {\r\n try {\r\n Apptentive.engage(successCallback, failureCallback, event, customData);\r\n } catch (error) {\r\n console.log('Error: ' + error);\r\n }\r\n }\r\n };\r\n\r\n openApptentiveMessageCenter = (successCallback?: (result: any) => void, failureCallback?: (result: any) => void) => {\r\n let mobileWeb = this.platform.is('mobileweb') || !document.URL.startsWith('file');\r\n if (!mobileWeb && (this.platform.is('android') || this.platform.is('ios'))) {\r\n try {\r\n Apptentive.showMessageCenter(successCallback, failureCallback, { app: 'Harvey Tool Milling Advisor' });\r\n } catch (error) {\r\n console.log('Error: ' + error);\r\n }\r\n }\r\n };\r\n}\r\n","var map = {\n\t\"./ion-accordion_2.entry.js\": [\n\t\t83750,\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-accordion_2_entry_js\"\n\t],\n\t\"./ion-action-sheet.entry.js\": [\n\t\t90733,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-action-sheet_entry_js\"\n\t],\n\t\"./ion-alert.entry.js\": [\n\t\t20985,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-alert_entry_js\"\n\t],\n\t\"./ion-app_8.entry.js\": [\n\t\t93899,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_framework-delegate-c3305a28_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-app_8_entry_js\"\n\t],\n\t\"./ion-avatar_3.entry.js\": [\n\t\t5121,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-avatar_3_entry_js\"\n\t],\n\t\"./ion-back-button.entry.js\": [\n\t\t52960,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-back-button_entry_js\"\n\t],\n\t\"./ion-backdrop.entry.js\": [\n\t\t45473,\n\t\t\"node_modules_ionic_core_dist_esm_ion-backdrop_entry_js\"\n\t],\n\t\"./ion-breadcrumb_2.entry.js\": [\n\t\t57951,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-breadcrumb_2_entry_js\"\n\t],\n\t\"./ion-button_2.entry.js\": [\n\t\t19787,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-button_2_entry_js\"\n\t],\n\t\"./ion-card_5.entry.js\": [\n\t\t66165,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-card_5_entry_js\"\n\t],\n\t\"./ion-checkbox.entry.js\": [\n\t\t83418,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-checkbox_entry_js\"\n\t],\n\t\"./ion-chip.entry.js\": [\n\t\t35119,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-chip_entry_js\"\n\t],\n\t\"./ion-col_3.entry.js\": [\n\t\t90799,\n\t\t\"node_modules_ionic_core_dist_esm_ion-col_3_entry_js\"\n\t],\n\t\"./ion-datetime-button.entry.js\": [\n\t\t16519,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_data-caf38df0_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-datetime-button_entry_js\"\n\t],\n\t\"./ion-datetime_3.entry.js\": [\n\t\t68918,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_data-caf38df0_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-datetime_3_entry_js\"\n\t],\n\t\"./ion-fab_3.entry.js\": [\n\t\t94028,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-fab_3_entry_js\"\n\t],\n\t\"./ion-img.entry.js\": [\n\t\t98107,\n\t\t\"node_modules_ionic_core_dist_esm_ion-img_entry_js\"\n\t],\n\t\"./ion-infinite-scroll_2.entry.js\": [\n\t\t72178,\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-infinite-scroll_2_entry_js\"\n\t],\n\t\"./ion-input.entry.js\": [\n\t\t20123,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-input_entry_js\"\n\t],\n\t\"./ion-item-option_3.entry.js\": [\n\t\t18706,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-item-option_3_entry_js\"\n\t],\n\t\"./ion-item_8.entry.js\": [\n\t\t12099,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-item_8_entry_js\"\n\t],\n\t\"./ion-loading.entry.js\": [\n\t\t84868,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-loading_entry_js\"\n\t],\n\t\"./ion-menu_3.entry.js\": [\n\t\t54377,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-menu_3_entry_js\"\n\t],\n\t\"./ion-modal.entry.js\": [\n\t\t15678,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_framework-delegate-c3305a28_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-modal_entry_js\"\n\t],\n\t\"./ion-nav_2.entry.js\": [\n\t\t16735,\n\t\t\"default-node_modules_ionic_core_dist_esm_framework-delegate-c3305a28_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-nav_2_entry_js\"\n\t],\n\t\"./ion-picker-column-internal.entry.js\": [\n\t\t42322,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-picker-column-internal_entry_js\"\n\t],\n\t\"./ion-picker-internal.entry.js\": [\n\t\t57754,\n\t\t\"node_modules_ionic_core_dist_esm_ion-picker-internal_entry_js\"\n\t],\n\t\"./ion-popover.entry.js\": [\n\t\t87686,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_framework-delegate-c3305a28_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-popover_entry_js\"\n\t],\n\t\"./ion-progress-bar.entry.js\": [\n\t\t48555,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-progress-bar_entry_js\"\n\t],\n\t\"./ion-radio_2.entry.js\": [\n\t\t30568,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-radio_2_entry_js\"\n\t],\n\t\"./ion-range.entry.js\": [\n\t\t6231,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-range_entry_js\"\n\t],\n\t\"./ion-refresher_2.entry.js\": [\n\t\t45772,\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-refresher_2_entry_js\"\n\t],\n\t\"./ion-reorder_2.entry.js\": [\n\t\t14977,\n\t\t\"default-node_modules_ionic_core_dist_esm_index-e6d1a8be_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-reorder_2_entry_js\"\n\t],\n\t\"./ion-ripple-effect.entry.js\": [\n\t\t42886,\n\t\t\"node_modules_ionic_core_dist_esm_ion-ripple-effect_entry_js\"\n\t],\n\t\"./ion-route_4.entry.js\": [\n\t\t54990,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-route_4_entry_js\"\n\t],\n\t\"./ion-searchbar.entry.js\": [\n\t\t13810,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-searchbar_entry_js\"\n\t],\n\t\"./ion-segment_2.entry.js\": [\n\t\t2446,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-segment_2_entry_js\"\n\t],\n\t\"./ion-select_3.entry.js\": [\n\t\t47619,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-select_3_entry_js\"\n\t],\n\t\"./ion-slide_2.entry.js\": [\n\t\t28393,\n\t\t\"node_modules_ionic_core_dist_esm_ion-slide_2_entry_js\"\n\t],\n\t\"./ion-spinner.entry.js\": [\n\t\t56281,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-spinner_entry_js\"\n\t],\n\t\"./ion-split-pane.entry.js\": [\n\t\t35932,\n\t\t\"node_modules_ionic_core_dist_esm_ion-split-pane_entry_js\"\n\t],\n\t\"./ion-tab-bar_2.entry.js\": [\n\t\t57970,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-tab-bar_2_entry_js\"\n\t],\n\t\"./ion-tab_2.entry.js\": [\n\t\t80298,\n\t\t\"default-node_modules_ionic_core_dist_esm_framework-delegate-c3305a28_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-tab_2_entry_js\"\n\t],\n\t\"./ion-text.entry.js\": [\n\t\t71006,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-text_entry_js\"\n\t],\n\t\"./ion-textarea.entry.js\": [\n\t\t74783,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-textarea_entry_js\"\n\t],\n\t\"./ion-toast.entry.js\": [\n\t\t62749,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-toast_entry_js\"\n\t],\n\t\"./ion-toggle.entry.js\": [\n\t\t55404,\n\t\t\"default-node_modules_ionic_core_dist_esm_theme-7670341c_js\",\n\t\t\"common\",\n\t\t\"node_modules_ionic_core_dist_esm_ion-toggle_entry_js\"\n\t],\n\t\"./ion-virtual-scroll.entry.js\": [\n\t\t39043,\n\t\t\"node_modules_ionic_core_dist_esm_ion-virtual-scroll_entry_js\"\n\t]\n};\nfunction webpackAsyncContext(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\treturn Promise.resolve().then(function() {\n\t\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\t\te.code = 'MODULE_NOT_FOUND';\n\t\t\tthrow e;\n\t\t});\n\t}\n\n\tvar ids = map[req], id = ids[0];\n\treturn Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() {\n\t\treturn __webpack_require__(id);\n\t});\n}\nwebpackAsyncContext.keys = function() { return Object.keys(map); };\nwebpackAsyncContext.id = 50863;\nmodule.exports = webpackAsyncContext;","export default \"\\n \\n\\n\";","export default \"\\n \\n \\n \\n \\n

Please wait while we complete your registration

\\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\";","export default \"\\n
\\n \\n \\n
\\n \\n
\\n \\n \\n
\\n \\n Please check your email inbox, and click the link in the email you received to reset your password.\\n \\n \\n \\n \\n
\\n
\\n Enter the email address you used to create the account. Check your email inbox, and click the link in\\n the email you received to reset your password.\\n
\\n
\\n\\n \\n \\n\\n \\n Email is required\\n \\n \\n \\n
\\n \\n
\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\";","export default \"\\n
\\n \\n \\n
\\n \\n
\\n \\n \\n \\n \\n \\n \\n Email is required\\n \\n \\n \\n \\n \\n Password is required\\n \\n \\n \\n \\n
\\n \\n
\\n
\\n Don't have an account?\\n \\n
\\n
\\n
\\n
\\n
\\n
\\n
\\n\";","export default \"\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Registration\\r\\n All fields are required.\\r\\n \\r\\n \\r\\n\\r\\n\\r\\n\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n   I agree to the following terms.\\r\\n \\r\\n Agreement is required\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n Next\\r\\n \\r\\n \\r\\n Submit\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Submit\\r\\n \\r\\n \\r\\n   I agree to the following terms.\\r\\n \\r\\n Agreement is required\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{tab.label}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n {{tab.label}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n First Name is required\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Last Name is required\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Please enter a valid email address\\r\\n \\r\\n \\r\\n Email is required\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Company Name is required\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Job Title is required\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Street Address is required\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n City is required\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{ country.getName() }}\\r\\n \\r\\n \\r\\n Country is required\\r\\n \\r\\n \\r\\n
\\r\\n
0\\\">\\r\\n \\r\\n \\r\\n {{ state.getName() }}\\r\\n \\r\\n \\r\\n State is required\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Zip Code is required\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Phone Number is required\\r\\n \\r\\n \\r\\n Please enter a valid phone number for your country\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Password is required\\r\\n \\r\\n \\r\\n Must have 1 capital letter, 1 number, 1 symbol (!@$%&^*#)\\r\\n \\r\\n \\r\\n Password has to be 8 characters or more\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Confirm Password is required\\r\\n \\r\\n \\r\\n \\r\\n Confirm Password does not match\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n Thank you for registering, an email will be sent to you shortly detailing the next steps.\\r\\n \\r\\n
\\r\\n\";","export default \"\\n
\\n \\n \\n \\n \\n
\\n Your password has been changed, please proceed to Login. \\n \\n \\n \\n \\n Password is required\\n \\n \\n Must have 1 capital letter, 1 number, 1 symbol (!@$%&^*#)\\n \\n \\n Password has to be 8 characters or more\\n \\n \\n \\n \\n \\n Confirm Password is required\\n \\n \\n \\n Confirm Password does not match\\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n\";","export default \"\\r\\n \\r\\n

Tool

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{ option.searchParameter ? option.searchParameter : option.itemId + ' (' + option.description + ')'}}\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n {{selectedToolOption.value.length < minimumSearchLength ? 'Start Typing to See Results' :\\r\\n showNoResultsMessage ? 'No Results Found' : ''}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n Tool details\\r\\n
\\r\\n
\\r\\n
\\r\\n Enter the Tool # above to view its tool information.\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{toolDetail.itemName}} \\r\\n 0\\\"\\r\\n >{{toolDetail.itemValue}}\\r\\n {{toolDetail.itemValue}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n\";","export default \"\\r\\n \\r\\n

Machine

\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{spindle.name}}\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n {{holder.name}}\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Workholding Security\\r\\n
\\r\\n
\\r\\n
LOOSE
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
RIGID
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","export default \"\\n \\n

Material

\\n
\\n \\n
\\n \\n
\\n
\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n {{subgroup}}\\n \\n \\n
\\n
\\n\\n
\\n \\n \\n
\\n \\n
\\n
\\n
\\n \\n \\n {{material.uiName}}\\n \\n \\n
\\n
\\n\\n
\\n \\n \\n
\\n \\n
\\n Select a Condition\\n
\\n\\n
\\n \\n \\n {{condition.condition}}\\n \\n \\n
\\n
\\n
\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n Whole numbers only\\n \\n
\\n \\n
\\n
\\n
\\n\\n\";","export default \"\\r\\n \\r\\n

Operation

\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n {{operationType.operation}}\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n {{toolPath.operationName}}\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
0\\\">\\r\\n \\r\\n \\r\\n {{strategy.operationName}}\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n\";","export default \"\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Select the image with resembles the tool path you are using with your CAM application:\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
{{toolPath.operationToolPathTitle}}
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
{{toolPath.operationToolPathDescription}}
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n

Parameters

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Stick Outs\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n Radial Depth\\r\\n
\\r\\n \\r\\n reset\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n RDOC cannot be more than 1\\r\\n \\r\\n \\r\\n RDOC cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n RDOC cannot be more than 100%\\r\\n \\r\\n \\r\\n RDOC cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n Axial Depth\\r\\n
\\r\\n \\r\\n reset\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n ADOC cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n ADOC cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Engagement Angle\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n °\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Angle cannot be more than 180°\\r\\n \\r\\n \\r\\n Angle cannot be less than \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Stick Out\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Pitch\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n RDOC cannot be more than 1\\r\\n \\r\\n \\r\\n RDOC cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Ramp Angle\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n °\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Angle cannot be more than 1.5°\\r\\n \\r\\n \\r\\n Angle cannot be less than \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Hole Diameter\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Value cannot be more than 180\\r\\n \\r\\n \\r\\n Value cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Path Diameter\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Value cannot be more than 180\\r\\n \\r\\n \\r\\n Value cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Hole Depth\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Value cannot be more than 180\\r\\n \\r\\n \\r\\n Value cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Stick Out\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Effective Diameter\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Chamfer Height\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Value cannot be more than 1.5\\r\\n \\r\\n \\r\\n Value cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Chamfer Width\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Value cannot be more than 180\\r\\n \\r\\n \\r\\n Value cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Stick Out\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Stickout cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n \\r\\n Axial Depth\\r\\n
\\r\\n \\r\\n reset\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n ADOC cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n ADOC cannot be less than 0%\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Scallop Height (Ra)\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n μin\\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Tool Stepover\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n Cannot be less than 0\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
Selected Tool
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
Tool Engagement Angle
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
Tool Engagement Angle
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
ADOC/RDOC Adjuster
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
{{rows.length}}
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ currentPath !== 'Helical Plunge' ? ((((getColumns().length-1))*10)+10)+'%' : ''}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n {{ currentPath !== 'Helical Plunge' ? rows.length+'%' : rows.length}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n {{ currentPath !== 'Helical Plunge' ? ((((getColumns().length-1))*10)+10)+'%' : ''}}\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
Tool Engagement Angle
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
Tool Engagement Angle
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n\\r\\n\";","export default \"\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Surface Speed\\r\\n
\\r\\n
\\r\\n {{recommendation.sfm | number : '.0-0'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Feed per tooth\\r\\n
\\r\\n
\\r\\n {{recommendation.ipt | number: '.4-4'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n MRR\\r\\n
\\r\\n
\\r\\n {{(recommendation.mrr | number: '.3-3')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n Chip Thickness\\r\\n
\\r\\n
\\r\\n {{(recommendation.chipThickness | number: '.4-4')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.recommendationLabel}}\\r\\n
\\r\\n
\\r\\n
\\r\\n {{calculateRecommendationValue(recommendation)}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Speed\\r\\n
\\r\\n
\\r\\n {{(recommendation.rpm | number: '.0-0')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{getMapModeTwoSliderLable(settingsHolder.mapModeTwoValues.recommendationLabels, 'speedSlider')}}\\r\\n
\\r\\n
\\r\\n {{getMapModeTwoSliderValue(settingsHolder.mapModeTwoValues.recommendationLabels, 'speedSlider') | number: '1.0-4'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
+ Tool Life
\\r\\n
\\r\\n
\\r\\n
+ Production
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n Reset\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Feed/Minute\\r\\n
\\r\\n
\\r\\n {{recommendationAdjustment === 2 ? 'N/A' : (recommendation.ipm | number: '.0-0')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{getMapModeTwoSliderLable(settingsHolder.mapModeTwoValues.recommendationLabels, 'feedSlider')}}\\r\\n
\\r\\n
\\r\\n {{getMapModeTwoSliderValue(settingsHolder.mapModeTwoValues.recommendationLabels, 'feedSlider') | number: '1.0-4'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
- Tool Deflection
\\r\\n
\\r\\n
\\r\\n
+ Production
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Corner Adjustment (Reference Only)\\r\\n
\\r\\n
\\r\\n Corner adjustment applies to High Efficiency Milling and Finishing.\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Corner Adjustment (Reference Only)\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{ option.getName() }}\\r\\n \\r\\n \\r\\n Must choose a Inside Corner Type\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{(recommendation.insideCornerValue | number: '.0-3')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Trochoidal Feed Rate Inside Slot\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Trochoidal Slot Width:\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n IPM (Feed) Inside Slot\\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.ipmFeedInsideSlot}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Cutting Time (For Reference Only)\\r\\n
\\r\\n
\\r\\n {{recommendation.holeTime}} (Minutes : Seconds)\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n

\\r\\n Recommendations   \\r\\n \\r\\n

\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Surface Speed\\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.sfm | number : '.0-0'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Speed\\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.rpm | number: '.0-0'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Feed per tooth\\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.ipt | number: '.4-4'}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Feed per minute\\r\\n
\\r\\n
\\r\\n
\\r\\n {{(recommendation.ipm | number: '.0-0')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Chip Thickness\\r\\n
\\r\\n
\\r\\n
\\r\\n {{(recommendation.chipThickness | number: '.4-4')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n MRR\\r\\n
\\r\\n
\\r\\n
\\r\\n {{(recommendation.mrr | number: '.3-3')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.recommendationLabel}}\\r\\n
\\r\\n
\\r\\n
\\r\\n {{calculateRecommendationValue(recommendation)}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n Corner Adjustment (Reference Only)\\r\\n
\\r\\n
\\r\\n Corner adjustment applies to High Efficiency Milling and Finishing.\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Corner Adjustment (Reference Only)\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n {{ option.getName() }}\\r\\n \\r\\n \\r\\n Must choose a Inside Corner Type\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n {{(recommendation.insideCornerValue | number: '.0-3')}} \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Trochoidal Feed Rate Inside Slot\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n Trochoidal Slot Width:\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n Must be a positive number\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n IPM (Feed) Inside Slot\\r\\n
\\r\\n
\\r\\n
\\r\\n {{recommendation.ipmFeedInsideSlot}}\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n View G-Code\\r\\n
\\r\\n\\r\\n
\\r\\n
\\r\\n Cutting Time (For Reference Only)\\r\\n
\\r\\n
\\r\\n {{recommendation.holeTime}} (Minutes : Seconds)\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
Speed
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n
Increased Production
\\r\\n\\r\\n \\r\\n\\r\\n
Increased Tool Life
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
Feed
\\r\\n \\r\\n \\r\\n %\\r\\n \\r\\n
Increased Production
\\r\\n\\r\\n \\r\\n\\r\\n
Less Tool Deflection
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n\\r\\n\";","export default \"
\\r\\n\\r\\n \\r\\n\\r\\n\\r\\n
\\r\\n
\\r\\n INPUT OVERVIEW\\r\\n
\\r\\n \\r\\n
\\r\\n TOOL\\r\\n
\\r\\n
{{startFields.tool}}
\\r\\n \\r\\n \\r\\n
\\r\\n MATERIAL\\r\\n
\\r\\n
{{startFields.material}}
\\r\\n \\r\\n \\r\\n
\\r\\n OPERATION\\r\\n
\\r\\n
{{startFields.operation}}
\\r\\n \\r\\n \\r\\n
\\r\\n MACHINE\\r\\n
\\r\\n
{{startFields.machine}}
\\r\\n \\r\\n
\\r\\n\";","export default \"\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n {{field.name}}\\r\\n
\\r\\n
\\r\\n {{field.numberFormat === null ? field.value : (field.value | number: field.numberFormat)}}\\r\\n
\\r\\n \\r\\n
\\r\\n\";","export default \"\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
Logout
\\r\\n
\\r\\n Help & Tips\\r\\n
\\r\\n
Contact Us
\\r\\n
User Setting\\r\\n
Work Offline
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
'Your Project Parameters and Recommendations are now complete'
\\r\\n
VIEW
\\r\\n
START OVER
\\r\\n
\\r\\n
\\r\\n
Searching for selected tool
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n {{tab.label}}\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Input Specs\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Output\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n Summary\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n \\r\\n
= 4 ) ? 2 : 1\\\" *ngIf=\\\"(4 > i)\\\">\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
= 4 ) ? 2 : 1\\\" *ngIf=\\\"(i > 3)\\\">\\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n
\\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n \\r\\n \\r\\n\\r\\n \\r\\n
\\r\\n
\\r\\n\";","export default \"

\\n\\n\\n \\n\\n\";","export default \"

\\n\\n\\n
\\n \\n \\n
\\n
\\n\";","export default \"

\\n\\n\\n \\n\\n\";","export default \"
\\r\\n

\\r\\n \\r\\n
\\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n \\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\\r\\n
\\r\\n\";","export default \"

\\n\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n \\n \\n \\n
\\n
\\n
\\n
\\n
\\n\\n
\\n \\n \\n
\\n
\\n\";","export default \"

\\r\\n\\r\\n
\\r\\n
Getting Product Keys
\\r\\n
\\r\\n
\\r\\n
Current Progress
\\r\\n
{{completedCount + failedCount}} / {{this.totalGroupings}} completed
\\r\\n
\\r\\n
\\r\\n
You successfully completed the process and are now able to work offline!
\\r\\n
\\r\\n
\\r\\n
Unfortunately, during the process {{failedCount}} products failed and they will not be available when working offline.
\\r\\n
\\r\\n
\\r\\n\\r\\n
\\r\\n \\r\\n \\r\\n
\\r\\n
\";"],"names":[],"sourceRoot":"webpack:///"}