Sidebar.Geometry.Modifiers.js 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { UIDiv, UIButton, UIRow } from './libs/ui.js';
  2. import { computeMikkTSpaceTangents } from 'three/addons/utils/BufferGeometryUtils.js';
  3. import * as MikkTSpace from 'three/addons/libs/mikktspace.module.js';
  4. function SidebarGeometryModifiers( editor, object ) {
  5. const strings = editor.strings;
  6. const signals = editor.signals;
  7. const container = new UIDiv().setMarginLeft( '120px' );
  8. const geometry = object.geometry;
  9. // Compute Vertex Normals
  10. const computeVertexNormalsButton = new UIButton( strings.getKey( 'sidebar/geometry/compute_vertex_normals' ) );
  11. computeVertexNormalsButton.onClick( function () {
  12. geometry.computeVertexNormals();
  13. signals.geometryChanged.dispatch( object );
  14. } );
  15. const computeVertexNormalsRow = new UIRow();
  16. computeVertexNormalsRow.add( computeVertexNormalsButton );
  17. container.add( computeVertexNormalsRow );
  18. // Compute Vertex Tangents
  19. if ( geometry.hasAttribute( 'position' ) && geometry.hasAttribute( 'normal' ) && geometry.hasAttribute( 'uv' ) ) {
  20. const computeVertexTangentsButton = new UIButton( strings.getKey( 'sidebar/geometry/compute_vertex_tangents' ) );
  21. computeVertexTangentsButton.onClick( async function () {
  22. await MikkTSpace.ready;
  23. computeMikkTSpaceTangents( geometry, MikkTSpace );
  24. signals.geometryChanged.dispatch( object );
  25. } );
  26. const computeVertexTangentsRow = new UIRow();
  27. computeVertexTangentsRow.add( computeVertexTangentsButton );
  28. container.add( computeVertexTangentsRow );
  29. }
  30. // Center Geometry
  31. const centerButton = new UIButton( strings.getKey( 'sidebar/geometry/center' ) );
  32. centerButton.onClick( function () {
  33. geometry.center();
  34. signals.geometryChanged.dispatch( object );
  35. } );
  36. const centerRow = new UIRow();
  37. centerRow.add( centerButton );
  38. container.add( centerRow );
  39. //
  40. return container;
  41. }
  42. export { SidebarGeometryModifiers };