You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.8 KiB
JavaScript
74 lines
1.8 KiB
JavaScript
import { UIDiv, UIButton, UIRow } from './libs/ui.js';
|
|
|
|
import { computeMikkTSpaceTangents } from 'three/addons/utils/BufferGeometryUtils.js';
|
|
import * as MikkTSpace from 'three/addons/libs/mikktspace.module.js';
|
|
|
|
function SidebarGeometryModifiers( editor, object ) {
|
|
|
|
const strings = editor.strings;
|
|
|
|
const signals = editor.signals;
|
|
|
|
const container = new UIDiv().setMarginLeft( '120px' );
|
|
|
|
const geometry = object.geometry;
|
|
|
|
// Compute Vertex Normals
|
|
|
|
const computeVertexNormalsButton = new UIButton( strings.getKey( 'sidebar/geometry/compute_vertex_normals' ) );
|
|
computeVertexNormalsButton.onClick( function () {
|
|
|
|
geometry.computeVertexNormals();
|
|
|
|
signals.geometryChanged.dispatch( object );
|
|
|
|
} );
|
|
|
|
const computeVertexNormalsRow = new UIRow();
|
|
computeVertexNormalsRow.add( computeVertexNormalsButton );
|
|
container.add( computeVertexNormalsRow );
|
|
|
|
// Compute Vertex Tangents
|
|
|
|
if ( geometry.hasAttribute( 'position' ) && geometry.hasAttribute( 'normal' ) && geometry.hasAttribute( 'uv' ) ) {
|
|
|
|
const computeVertexTangentsButton = new UIButton( strings.getKey( 'sidebar/geometry/compute_vertex_tangents' ) );
|
|
computeVertexTangentsButton.onClick( async function () {
|
|
|
|
await MikkTSpace.ready;
|
|
|
|
computeMikkTSpaceTangents( geometry, MikkTSpace );
|
|
|
|
signals.geometryChanged.dispatch( object );
|
|
|
|
} );
|
|
|
|
const computeVertexTangentsRow = new UIRow();
|
|
computeVertexTangentsRow.add( computeVertexTangentsButton );
|
|
container.add( computeVertexTangentsRow );
|
|
|
|
}
|
|
|
|
// Center Geometry
|
|
|
|
const centerButton = new UIButton( strings.getKey( 'sidebar/geometry/center' ) );
|
|
centerButton.onClick( function () {
|
|
|
|
geometry.center();
|
|
|
|
signals.geometryChanged.dispatch( object );
|
|
|
|
} );
|
|
|
|
const centerRow = new UIRow();
|
|
centerRow.add( centerButton );
|
|
container.add( centerRow );
|
|
|
|
//
|
|
|
|
return container;
|
|
|
|
}
|
|
|
|
export { SidebarGeometryModifiers };
|