i'm trying to get a simple canvas to load a simple stl file on an angular project and don't seem to be able to get this to work...
I have a canvas with a viewchild: <canvas #myCanvas></canvas> in my html.
In my .ts file:
import {Component, ViewChild, AfterViewInit} from '@angular/core';
import * as THREE from 'three';
var OrbitControls = require('three-orbit-controls')(THREE)
var STLLoader = require('three-stl-loader')(THREE)
var loader = new STLLoader()
import Scene = THREE.Scene;
import Mesh = THREE.Mesh;
import PerspectiveCamera = THREE.PerspectiveCamera;
import WebGLRenderer = THREE.WebGLRenderer;
import TrackballControls = THREE.TrackballControls;
import {log} from "util";
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent implements AfterViewInit{
ngAfterViewInit(): void {
this.myCanvas.nativeElement.style.background = "grey";
this.myCanvas.nativeElement.style.width="1000px"
this.myCanvas.nativeElement.style.height="500px"
}
@ViewChild("myCanvas") myCanvas;
private scene: Scene;
private camera: PerspectiveCamera;
private renderer: WebGLRenderer;
private controls: TrackballControls;
title = 'app works!';
constructor(){
this.init3D();
}
init3D(){
log("init3D")
// renderer
this.renderer = new THREE.WebGLRenderer({alpha: true, canvas: this.myCanvas});
log(""+window.innerWidth+" "+ window.innerHeight )
this.renderer.setSize( window.innerWidth, window.innerHeight );
// scene
this.scene = new THREE.Scene();
this.scene.background = new THREE.Color( 0xFFFFFF );
// camera
this.camera = new THREE.PerspectiveCamera( 35, window.innerWidth / window.innerHeight, 0.01, 10000 );
this.camera.position.set( 113, 111, 113 );
this.scene.add( new THREE.AmbientLight( 0x222222 ) );
this.scene.add( this.camera ); // required, because we are adding a light as a child of the camera
// controls
this.controls = OrbitControls;
// lights
var light = new THREE.PointLight( 0xffffff, 0.8 );
this.camera.add( light );
loader.load('./assets/plate.stl', geometry => {
var material = new THREE.MeshNormalMaterial()
var mesh = new THREE.Mesh(geometry, material)
log(this.scene.toJSON())
this.scene.add(mesh)
})
this.animate();
window.addEventListener( 'resize', this.onWindowResize, false );
}
animate() {
window.requestAnimationFrame(_ => this.animate());
this.camera.lookAt( this.scene.position );
this.renderer.render(this.scene, this.camera);
}
onWindowResize() {
this.camera.aspect = window.innerWidth / window.innerHeight;
this.camera.updateProjectionMatrix();
this.renderer.setSize( window.innerWidth, window.innerHeight );
}
}
I get no errors but there is nothing in my canvas when the page finish to load. What am i missing here?
i'm trying to get a simple canvas to load a simple stl file on an angular project and don't seem to be able to get this to work... I have a canvas with a viewchild:
<canvas #myCanvas></canvas>
in my html. In my .ts file:I get no errors but there is nothing in my canvas when the page finish to load. What am i missing here?