UNPKG

2.63 kBJavaScriptView Raw
1'use strict';
2
3import * as THREE from 'three';
4
5/**
6 * Whether to draw edges on front and back faces.
7 * Values are NONE, FRONT, BACK, BOTH.
8 */
9EdgesHelper.EDGES_MODES = {
10 NONE: 0,
11 FRONT: 1,
12 BACK: 2,
13 BOTH: 3
14};
15
16/**
17 * Create an object to render the edges of a mesh
18 * @private
19 * @param {Three.Mesh} mesh The mesh to convert
20 * @param {Three.Material} material The material on the mesh
21 * @return {Three.EdgesHelper} The edges object
22 */
23var _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 * Create an object to render a mesh as edges
33 * @class EdgesHelper
34 * @param {Three.Object3D} model The mesh
35 */
36export 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 // create edge helper for front and back edges
52 _this.add(
53 _createEdges(child, _this.frontMaterial)
54 );
55 _this.add(
56 _createEdges(child, _this.backMaterial)
57 );
58 }
59 });
60}
61
62EdgesHelper.prototype = Object.create( THREE.Object3D.prototype );
63EdgesHelper.prototype.constructor = EdgesHelper;
64
65/**
66 * Create the edges geometry for a model
67 * @param {THREE.Object3D} newModel The model with edges
68 * @param {EdgesHelper.EDGES_MODES} edgesMode Whether to draw edges enumeration
69 * @return {EdgesHelper} The edges object
70 */
71EdgesHelper.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