1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- /*
- * MeasureSelectionTool.js
- *
- * @author realor
- */
- import { Tool } from './Tool.js'
- import { Solid } from '../core/Solid.js'
- import { Dialog } from '../ui/Dialog.js'
- class MeasureSelectionTool extends Tool {
- constructor(application, options) {
- super(application)
- this.name = 'measure_selection'
- this.label = 'tool.measure_selection.label'
- this.className = 'measure_selection'
- this.setOptions(options)
- this.immediate = true
- }
- execute() {
- let area = 0
- let volume = 0
- let solids = 0
- const application = this.application
- const roots = application.selection.roots
- for (let object of roots) {
- object.traverse(obj => {
- if (obj instanceof Solid) {
- if (obj.visible) {
- solids++
- area += obj.getArea()
- volume += obj.getVolume()
- }
- }
- })
- }
- const decimals = application.decimals
- const units = ' ' + application.units
- const dialog = new Dialog(this.label)
- dialog.setSize(240, 160)
- dialog.setI18N(application.i18n)
- dialog.addTextWithArgs('message.solids_count', [solids], 'row')
- dialog.addTextWithArgs('message.solids_area', [area.toFixed(decimals), units], 'row')
- dialog.addTextWithArgs('message.solids_volume', [volume.toFixed(decimals), units], 'row')
- let av = volume === 0 ? 0 : area / volume
- dialog.addTextWithArgs('message.solids_area_volume', [av.toFixed(decimals)], 'row')
- let button = dialog.addButton('accept', 'button.accept', () => dialog.hide())
- dialog.onShow = () => button.focus()
- dialog.show()
- }
- }
- export { MeasureSelectionTool }
|