Viewport.Info.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. Viewport.Info = function ( editor ) {
  2. var signals = editor.signals;
  3. var container = new UI.Panel();
  4. container.setPosition( 'absolute' );
  5. container.setLeft( '10px' );
  6. container.setBottom( '10px' );
  7. container.setFontSize( '12px' );
  8. container.setColor( '#fff' );
  9. var objectsText = new UI.Text( '0' ).setMarginLeft( '6px' );
  10. var verticesText = new UI.Text( '0' ).setMarginLeft( '6px' );
  11. var trianglesText = new UI.Text( '0' ).setMarginLeft( '6px' );
  12. container.add( new UI.Text( 'objects' ), objectsText, new UI.Break() );
  13. container.add( new UI.Text( 'vertices' ), verticesText, new UI.Break() );
  14. container.add( new UI.Text( 'triangles' ), trianglesText, new UI.Break() );
  15. signals.objectAdded.add( update );
  16. signals.objectRemoved.add( update );
  17. signals.geometryChanged.add( update );
  18. //
  19. function update() {
  20. var scene = editor.scene;
  21. var objects = 0, vertices = 0, triangles = 0;
  22. for ( var i = 0, l = scene.children.length; i < l; i ++ ) {
  23. var object = scene.children[ i ];
  24. object.traverseVisible( function ( object ) {
  25. objects ++;
  26. if ( object instanceof THREE.Mesh ) {
  27. var geometry = object.geometry;
  28. if ( geometry instanceof THREE.Geometry ) {
  29. vertices += geometry.vertices.length;
  30. triangles += geometry.faces.length;
  31. } else if ( geometry instanceof THREE.BufferGeometry ) {
  32. vertices += geometry.attributes.position.array.length / 3;
  33. if ( geometry.attributes.index !== undefined ) {
  34. triangles += geometry.attributes.index.array.length / 3;
  35. } else {
  36. triangles += geometry.attributes.position.array.length / 9;
  37. }
  38. }
  39. }
  40. } );
  41. }
  42. objectsText.setValue( objects.format() );
  43. verticesText.setValue( vertices.format() );
  44. trianglesText.setValue( triangles.format() );
  45. }
  46. return container;
  47. }