1 | 'use strict';
|
2 |
|
3 | import * as THREE from 'three';
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | EdgesHelper.EDGES_MODES = {
|
10 | NONE: 0,
|
11 | FRONT: 1,
|
12 | BACK: 2,
|
13 | BOTH: 3
|
14 | };
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 |
|
22 |
|
23 | var _createEdges = function(mesh, material) {
|
24 | var helper = new THREE.EdgesHelper(mesh);
|
25 | helper.material = material;
|
26 | helper.matrixAutoUpdate = false;
|
27 | helper.matrix = mesh.matrix;
|
28 | return helper;
|
29 | };
|
30 |
|
31 |
|
32 |
|
33 |
|
34 |
|
35 |
|
36 | export default function EdgesHelper(model) {
|
37 | THREE.Object3D.call( this );
|
38 | this.type = 'EdgesHelper';
|
39 |
|
40 | this.frontMaterial = new THREE.LineBasicMaterial({color: 0x000000});
|
41 | this.frontMaterial.depthFunc = THREE.LessEqualDepth;
|
42 |
|
43 | this.backMaterial = new THREE.LineBasicMaterial({color: 0x000000});
|
44 | this.backMaterial.transparent = true;
|
45 | this.backMaterial.depthFunc = THREE.GreaterDepth;
|
46 | this.backMaterial.opacity = 0.25;
|
47 |
|
48 | var _this = this;
|
49 | model.traverse(function(child) {
|
50 | if (child instanceof THREE.Mesh) {
|
51 |
|
52 | _this.add(
|
53 | _createEdges(child, _this.frontMaterial)
|
54 | );
|
55 | _this.add(
|
56 | _createEdges(child, _this.backMaterial)
|
57 | );
|
58 | }
|
59 | });
|
60 | }
|
61 |
|
62 | EdgesHelper.prototype = Object.create( THREE.Object3D.prototype );
|
63 | EdgesHelper.prototype.constructor = EdgesHelper;
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
|
69 |
|
70 |
|
71 | EdgesHelper.AddEdges = function(newModel, edgesMode) {
|
72 | if (edgesMode === EdgesHelper.EDGES_MODES.NONE) return null;
|
73 |
|
74 | newModel.edgesHelper = new EdgesHelper(newModel);
|
75 |
|
76 | newModel.edgesHelper.frontMaterial.visible = false;
|
77 | if (edgesMode === EdgesHelper.EDGES_MODES.FRONT || edgesMode === EdgesHelper.EDGES_MODES.BOTH) {
|
78 | newModel.edgesHelper.frontMaterial.visible = true;
|
79 | }
|
80 |
|
81 | newModel.edgesHelper.backMaterial.visible = false;
|
82 | if (edgesMode === EdgesHelper.EDGES_MODES.BACK || edgesMode === EdgesHelper.EDGES_MODES.BOTH) {
|
83 | newModel.edgesHelper.backMaterial.visible = true;
|
84 | }
|
85 | return newModel.edgesHelper;
|
86 | }; |
\ | No newline at end of file |