12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- /*
- * ClipTool.js
- *
- * @author realor
- */
- import * as THREE from '../lib/three.module.js'
- import { Tool } from './Tool.js'
- import { Solid } from '../core/Solid.js'
- import { BSP } from '../core/BSP.js'
- class ClipTool extends Tool {
- constructor(application, options) {
- super(application)
- this.name = 'clip'
- this.label = 'tool.clip.label'
- this.help = 'tool.clip.help'
- this.className = 'clip'
- this.setOptions(options)
- this.immediate = true
- this.material = new THREE.MeshPhongMaterial({ color: 0x4040ff, side: THREE.DoubleSide })
- }
- execute() {
- const application = this.application
- var objects = application.selection.roots
- var operands = []
- for (var i = 0; i < objects.length && operands.length < 2; i++) {
- var object = objects[i]
- if (object instanceof Solid) {
- operands.push(object)
- }
- }
- if (operands.length >= 2) {
- let bsp1 = new BSP()
- let object1 = operands[0]
- let geometry1 = object1.geometry
- let matrix1 = object1.matrixWorld
- bsp1.fromSolidGeometry(geometry1, matrix1)
- let bsp2 = new BSP()
- let object2 = operands[1]
- let geometry2 = object2.geometry
- let matrix2 = object2.matrixWorld
- bsp2.fromSolidGeometry(geometry2, matrix2)
- let bspResult = bsp1.clip(bsp2)
- let solid = new Solid()
- solid.updateGeometry(bspResult.toSolidGeometry(), true)
- application.addObject(solid, null, false, true)
- }
- }
- }
- export { ClipTool }
|