summaryrefslogtreecommitdiff
path: root/app/assets/javascripts/blob/3d_viewer/mesh_object.js
blob: 96758884abf2b6972e7c07ddd1137d2b308ba8db (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import {
  Matrix4,
  MeshLambertMaterial,
  Mesh,
} from 'three/build/three.module';

const defaultColor = 0xE24329;
const materials = {
  default: new MeshLambertMaterial({
    color: defaultColor,
  }),
  wireframe: new MeshLambertMaterial({
    color: defaultColor,
    wireframe: true,
  }),
};

export default class MeshObject extends Mesh {
  constructor(geo) {
    super(
      geo,
      materials.default,
    );

    this.geometry.computeBoundingSphere();

    this.rotation.set(-Math.PI / 2, 0, 0);

    if (this.geometry.boundingSphere.radius > 4) {
      const scale = 4 / this.geometry.boundingSphere.radius;

      this.geometry.applyMatrix(
        new Matrix4().makeScale(
          scale,
          scale,
          scale,
        ),
      );
      this.geometry.computeBoundingSphere();

      this.position.x = -this.geometry.boundingSphere.center.x;
      this.position.z = this.geometry.boundingSphere.center.y;
    }
  }

  changeMaterial(type) {
    this.material = materials[type];
  }
}