angular-stl-model-viewer
Version:
Angular component for rendering a STL model
1 lines • 15.7 kB
Source Map (JSON)
{"version":3,"file":"angular-stl-model-viewer.mjs","sources":["../../../projects/angular-stl-model-viewer/src/lib/angular-stl-model-viewer.component.ts","../../../projects/angular-stl-model-viewer/src/lib/angular-stl-model-viewer.module.ts","../../../projects/angular-stl-model-viewer/src/public-api.ts","../../../projects/angular-stl-model-viewer/src/angular-stl-model-viewer.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\nimport {\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ElementRef,\n EventEmitter,\n Input,\n NgZone,\n OnDestroy,\n OnInit,\n Output\n} from '@angular/core'\n\nimport * as THREE from 'three'\n\nimport { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'\nimport { STLLoader } from 'three/examples/jsm/loaders/STLLoader.js'\n\nimport { Vector3 } from 'three'\n\nexport interface MeshOptions {\n castShadow?: boolean\n position?: THREE.Vector3\n receiveShadow?: boolean\n scale?: THREE.Vector3\n up?: THREE.Vector3\n userData?: Record<string, any>\n visible?: boolean\n}\n\nconst defaultMeshOptions = {\n castShadow: true,\n position: new THREE.Vector3(0, 0, 0),\n receiveShadow: true,\n scale: new THREE.Vector3(0.03, 0.03, 0.03)\n}\n\nconst isWebGLAvailable = () => {\n try {\n const canvas = document.createElement('canvas')\n return !!(\n window.WebGLRenderingContext\n && (canvas.getContext('webgl') || canvas.getContext('experimental-webgl'))\n )\n }\n catch {\n return false\n }\n}\n\n@Component({\n changeDetection: ChangeDetectionStrategy.OnPush,\n selector: 'stl-model-viewer',\n styles: [\n `\n:host {\n width: 100%;\n height: 100%;\n display: block;\n}\n `\n ],\n template: ''\n})\nexport class StlModelViewerComponent implements OnInit, OnDestroy {\n @Input() stlModels: string[] = []\n @Input() stlModelFiles: string[] = []\n @Input() hasControls = true\n @Input() camera: THREE.PerspectiveCamera = new THREE.PerspectiveCamera(\n 35,\n window.innerWidth / window.innerHeight,\n 1,\n 15\n )\n\n @Input() cameraTarget: THREE.Vector3 = new THREE.Vector3(0, 0, 0)\n @Input() light: THREE.Light = new THREE.PointLight(0xffffff, 80)\n @Input() material: THREE.Material = new THREE.MeshPhongMaterial({\n color: 0x999999,\n shininess: 400,\n specular: 0x222222\n })\n\n @Input() scene: THREE.Scene = new THREE.Scene()\n @Input() renderer: THREE.WebGLRenderer = new THREE.WebGLRenderer({\n antialias: true\n })\n\n @Input() controls: any | null = null\n @Input() meshOptions: MeshOptions[] = []\n @Input() centered = true\n\n @Output() rendered = new EventEmitter<void>()\n\n hasWebGL = isWebGLAvailable()\n meshGroup = new THREE.Object3D()\n isRendered = false\n showStlModel = true\n stlLoader = new STLLoader()\n middle = new THREE.Vector3()\n\n constructor(\n private cdr: ChangeDetectorRef,\n private eleRef: ElementRef,\n private ngZone: NgZone\n ) {\n this.cdr.detach()\n // default light position\n this.light.position.set(1, 1, 2)\n\n // default camera position\n this.camera.position.set(3, 3, 3)\n\n // default scene background\n this.scene.background = new THREE.Color(0xffffff)\n\n // default renderer options\n this.renderer.setPixelRatio(window.devicePixelRatio)\n this.renderer.shadowMap.enabled = true\n }\n\n ngOnInit() {\n if (!this.hasWebGL) {\n console.error(\n 'stl-model-viewer: Seems like your system does not support webgl.'\n )\n return\n }\n\n this.ngZone.runOutsideAngular(() => {\n this.init()\n })\n }\n\n ngOnDestroy() {\n window.removeEventListener('resize', this.onWindowResize, false)\n\n this.meshGroup.children.forEach(child => this.meshGroup.remove(child))\n this.scene.children.forEach(child => this.scene.remove(child))\n this.camera.remove(this.light)\n\n if (this.material) {\n this.material.dispose()\n }\n\n if (this.controls) {\n this.controls.removeEventListener('change', this.render)\n this.controls.dispose()\n }\n\n if (this.eleRef && this.eleRef.nativeElement.children.length > 1) {\n this.eleRef.nativeElement.removeChild(this.renderer.domElement)\n }\n this.renderer.renderLists.dispose()\n this.renderer.domElement.remove()\n\n this.renderer.dispose()\n }\n\n async createMesh(\n path: string,\n meshOptions: MeshOptions = {},\n parse = false\n ): Promise<THREE.Mesh> {\n let geometry: THREE.BufferGeometry = null\n if (parse) {\n geometry = this.stlLoader.parse(path)\n }\n else {\n geometry = await this.stlLoader.loadAsync(path)\n }\n this.material.shininess = 100\n const mesh = new THREE.Mesh(geometry, this.material)\n\n if (this.centered) {\n geometry.computeBoundingBox()\n geometry.boundingBox.getCenter(this.middle)\n mesh.geometry.applyMatrix4(\n new THREE.Matrix4().makeTranslation(\n -this.middle.x,\n -this.middle.y,\n -this.middle.z\n )\n )\n }\n\n const vectorOptions = ['position', 'scale', 'up']\n const options = Object.assign({}, defaultMeshOptions, meshOptions)\n\n Object.getOwnPropertyNames(options).forEach((option) => {\n if (vectorOptions.indexOf(option) > -1) {\n const vector = options[option] as Vector3\n const meshVectorOption = mesh[option] as Vector3\n meshVectorOption.set(vector.x, vector.y, vector.z)\n }\n else {\n mesh[option] = options[option]\n }\n })\n\n return mesh\n }\n\n render = () => {\n this.renderer.render(this.scene, this.camera)\n }\n\n setSizes() {\n const width = this.eleRef.nativeElement.offsetWidth\n const height = this.eleRef.nativeElement.offsetHeight\n\n this.camera.aspect = width / height\n this.camera.updateProjectionMatrix()\n\n this.renderer.setSize(width, height)\n }\n\n onWindowResize = () => {\n this.setSizes()\n this.render()\n }\n\n private async init() {\n this.camera.add(this.light)\n this.scene.add(this.camera)\n\n // use default controls\n if (this.hasControls) {\n if (!this.controls) {\n this.controls = new OrbitControls(\n this.camera,\n this.renderer.domElement\n )\n this.controls.enableZoom = true\n this.controls.minDistance = 1\n this.controls.maxDistance = 7\n }\n this.controls.addEventListener('change', this.render)\n }\n\n window.addEventListener('resize', this.onWindowResize, false)\n let meshCreations: Promise<THREE.Mesh>[] = []\n if (this.stlModels.length > 0) {\n meshCreations = this.stlModels.map((modelPath, index) =>\n this.createMesh(modelPath, this.meshOptions[index])\n )\n }\n else {\n meshCreations = this.stlModelFiles.map((modelFile, index) =>\n this.createMesh(modelFile, this.meshOptions[index], true)\n )\n }\n const meshes: THREE.Object3D[] = await Promise.all(meshCreations)\n\n meshes.map(mesh => this.meshGroup.add(mesh))\n\n this.scene.add(this.meshGroup)\n this.eleRef.nativeElement.appendChild(this.renderer.domElement)\n this.setSizes()\n this.render()\n this.ngZone.run(() => {\n this.isRendered = true\n this.rendered.emit()\n this.cdr.detectChanges()\n })\n }\n}\n","import { NgModule } from '@angular/core'\nimport { StlModelViewerComponent } from './angular-stl-model-viewer.component'\n\n@NgModule({\n exports: [StlModelViewerComponent],\n imports: [\n StlModelViewerComponent\n ]\n})\nexport class StlModelViewerModule { }\n","/*\n * Public API Surface of angular-stl-model-viewer\n */\n\nexport * from './lib/angular-stl-model-viewer.component'\nexport * from './lib/angular-stl-model-viewer.module'\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}