fix basic extrude

master
howard 2021-04-10 03:53:44 -07:00
parent 0ae39d196a
commit 51f53bf752
6 changed files with 94 additions and 79 deletions

View File

@ -72,6 +72,8 @@ export class Scene {
freePt.material.size=8
freePt.visible = false
freePt.depthTest = false
freePt.userData.type = 'point'
helpersGroup.add(freePt);
}
@ -211,14 +213,16 @@ export class Scene {
for (let x = 0; x < this.selected.length; x++) {
const obj = this.selected[x]
obj.material.color.set(color[obj.userData.type])
if (obj.userData.type == 'point') obj.visible = false
}
this.selected = []
for (let x = 0; x < this.hovered.length; x++) {
const obj = this.selected[x]
obj.material.color.set(color[obj.userData.type])
}
this.obj3d.dispatchEvent({ type: 'change' })
this.selected = []
console.log('fireed')
}
@ -226,10 +230,8 @@ export class Scene {
subtract (m1, m2) {
let bspA = CSG.fromMesh(m1)
let bspB = CSG.fromMesh(m2)
m1.traverse(e=>e.layers.disable(0))
m2.traverse(e=>e.layers.disable(0))
// m1.visible = false
// m2.visible = false
m1.traverse(e=>e.layers.disableAll())
m2.traverse(e=>e.layers.disableAll())
// // Subtract one bsp from the other via .subtract... other supported modes are .union and .intersect
@ -240,6 +242,7 @@ export class Scene {
let mesh = CSG.toMesh(bspResult, m1.matrix, m1.material)
mesh.userData.type = 'mesh'
mesh.name = `${m1.name}-${m2.name}`
mesh.layers.enable(1)
const edges = new THREE.EdgesGeometry( mesh.geometry, 15 );
edges.type = 'BufferGeometry'

View File

@ -18,6 +18,7 @@ export function onHover(e) {
let hoverPts;
if (this.obj3d.userData.type != 'sketch') {
this.obj3d.children[0].children[0].visible = false
raycaster.layers.set(1)
hoverPts = raycaster.intersectObjects(this.obj3d.children, true)
} else {
@ -49,8 +50,10 @@ export function onHover(e) {
}
if (idx.length) { // after filtering, if hovered objs still exists
console.log(hoverPts)
if (hoverPts[idx[0]].object != this.hovered[0]) { // if the previous hovered obj is not the same as current
for (let x = 0; x < this.hovered.length; x++) { // first clear old hovers that are not selected
@ -58,16 +61,11 @@ export function onHover(e) {
if (!this.selected.includes(obj)) {
if (typeof obj == 'object') {
obj.material.color.set(color[obj.userData.type])
if (this.obj3d.userData.type != 'sketch') {
if (obj.userData.type == 'mesh') {
obj.children[0].material.color.set(color['line'])
}
}
} else {
// this.obj3d.children[0].children[this.fptObj[obj]].visible = false
this.obj3d.children[0].children[0].visible = false
}
}
}
@ -127,9 +125,6 @@ export function onHover(e) {
obj.children[0].material.color.set(color['line'])
}
}
} else {
// this.obj3d.children[0].children[this.fptObj[obj]].visible = false
this.obj3d.children[0].children[0].visible = false
}
}
}
@ -148,11 +143,12 @@ export function onPick(e) {
if (this.mode || e.buttons != 1) return
if (this.hovered.length) {
const obj = this.hovered[this.hovered.length - 1]
let obj = this.hovered[this.hovered.length - 1]
this.selected.push(this.hovered[this.hovered.length - 1])
if (this.obj3d.userData.type != 'sketch') {
if (this.obj3d.userData.type == 'sketch') {
this.selected.push(obj)
} else {
if (typeof obj == 'object') {
if (obj.userData.type == "mesh") {
obj.material.color.set(hoverColor[obj.userData.type])
@ -166,13 +162,16 @@ export function onPick(e) {
pp.geometry.attributes.position.needsUpdate = true
pp.visible = true
obj = pp
this.fptObj[obj] = this.fptIdx
this.fptIdx++
}
this.obj3d.dispatchEvent({ type: 'change' })
this.selected.push(obj)
return;
}
if (typeof this.hovered[0] == 'object') {
switch (this.hovered[0].userData.type) {
switch (obj.userData.type) {
case 'dimension':
const idx = this.obj3d.children[1].children.indexOf(this.hovered[0])
if (idx % 2) {
@ -197,21 +196,19 @@ export function onPick(e) {
default:
break;
}
}
} else {
for (let x = 0; x < this.selected.length; x++) {
const obj = this.selected[x]
if (typeof obj == 'object') {
obj.material.color.set(color[obj.userData.type])
if (this.obj3d.userData.type != 'sketch' && obj.userData.type == 'mesh') {
if (this.obj3d.userData.type != 'sketch') {
if (obj.userData.type == 'mesh') {
obj.children[0].material.color.set(color['line'])
}
} else {
this.obj3d.children[0].children[this.fptObj[obj] + 1].visible = false
} else if (obj.userData.type == 'point') {
obj.visible = false
}
}
}
this.obj3d.children[0].children[0].visible = false
this.obj3d.dispatchEvent({ type: 'change' })
this.selected = []
}

View File

@ -33,10 +33,11 @@ export class DepTree {
}
deleteNode(id) {
getDescendents(id) {
const dfs = (id) => {
visited.add(id)
nodesToDel.push(id)
desc.push(id)
for (let k in this.tree[id]) {
if (!visited.has(k)) {
dfs(k)
@ -45,10 +46,20 @@ export class DepTree {
}
const visited = new Set()
const desc = []
const nodesToDel = []
dfs(id)
return desc
}
deleteNode(id) {
const nodesToDel = this.getDescendents(id)
nodesToDel.sort((a, b) => this.order[b] - this.order[a])

View File

@ -68,7 +68,6 @@ export const ToolTip = () => {
function getTextWidth(text, font = "16px sans-serif") {
console.log(text)
// https://stackoverflow.com/a/21015393
// re-use canvas object for better performance
let canvas = getTextWidth.canvas || (getTextWidth.canvas = document.createElement("canvas"));

View File

@ -46,12 +46,13 @@ const TreeEntry = ({ entId }) => {
const [_, forceUpdate] = useReducer(x => x + 1, 0);
// const vis = obj3d.visible
const vis = obj3d.layers.mask&1
const vis = obj3d.layers.mask & 1
return <div className='btn-light select-none flex justify-start w-full h-7 items-center text-sm'
onDoubleClick={() => {
activeSketchId && treeEntries[activeSketchId].deactivate()
console.log(entry)
entry.activate()
sc.clearSelection()
sc.activeSketch = entry;
@ -95,7 +96,7 @@ const TreeEntry = ({ entId }) => {
vis ?
<MdVisibility className='btn-green h-full w-auto p-1.5'
onClick={() => {
obj3d.traverse((e)=>e.layers.disable(0))
obj3d.traverse((e) => e.layers.disableAll())
sc.render()
forceUpdate()
}}
@ -103,7 +104,15 @@ const TreeEntry = ({ entId }) => {
:
<MdVisibilityOff className='btn-green h-full w-auto p-1.5'
onClick={() => {
obj3d.traverse((e)=>e.layers.enable(0))
if (obj3d.userData.type == 'sketch') {
obj3d.traverse((e) => e.layers.enable(0))
} else {
obj3d.traverse((e) => {
e.layers.enable(0)
e.layers.enable(1)
})
}
sc.render()
forceUpdate()
}}

View File

@ -1,42 +1,38 @@
fix css on design tree (a lot of work) \
fix css on design tree (a lot of work) \\ done
clear dim on exit exit sketch / rehydrate when back or after loading \\\ done
dimension to origin // done
- select sketch for extrusion
reattaching sketch
- need to auto hide ( consume) when new boolean created \\
- need to auto hide ( consume) when new boolean created \\ done
- sensible default names, like extrude 1, sketch 1, leverage react for this
boolean flesh out refresh / replace mesh / delete mesh
boolean flesh out refresh / replace mesh
- / delete mesh \\ done
- create derived part using relationship as name \\ done
- hidden bodies messes up hover highlight \\ fixed
- add for union and intersect
- auto update
- consume skeches after extrude // done
- consume skeches after extrude
extrude edit dialog. directio and magnitude
fix extrusion loop find
file save
stl export
angle
other constraints / sprite
vertical // done
horizontal // done
tangent
vertical
horizontal
angle
- select sketch for extrusion
- boolean unable to select click
auto update extrude
extrude dialogue
loopfind
button panel cleanup
file save, stl export
constriant buttons ,tangent, angle
finish mode messed up after restore
constraint labels
reattach sketch
auto snap
tree ent renaming and better default names