Refine wall chaining and door arch clipping
This commit is contained in:
@@ -396,6 +396,12 @@ export const WallTool: React.FC = () => {
|
||||
let gridPosition: WallPlanPoint = [0, 0]
|
||||
let previousWallEnd: [number, number] | null = null
|
||||
|
||||
const stopDrafting = () => {
|
||||
buildingState.current = 0
|
||||
wallPreviewRef.current.visible = false
|
||||
setDraftMeasurement(null)
|
||||
}
|
||||
|
||||
const onGridMove = (event: GridEvent) => {
|
||||
if (!(cursorRef.current && wallPreviewRef.current)) return
|
||||
|
||||
@@ -439,6 +445,11 @@ export const WallTool: React.FC = () => {
|
||||
}
|
||||
|
||||
const onGridClick = (event: GridEvent) => {
|
||||
if (buildingState.current === 1 && event.nativeEvent.detail >= 2) {
|
||||
stopDrafting()
|
||||
return
|
||||
}
|
||||
|
||||
const walls = getCurrentLevelWalls()
|
||||
const localClick: WallPlanPoint = [event.localPosition[0], event.localPosition[2]]
|
||||
|
||||
@@ -460,9 +471,19 @@ export const WallTool: React.FC = () => {
|
||||
const dx = snappedEnd[0] - startingPoint.current.x
|
||||
const dz = snappedEnd[1] - startingPoint.current.z
|
||||
if (dx * dx + dz * dz < 0.01 * 0.01) return
|
||||
createWallOnCurrentLevel([startingPoint.current.x, startingPoint.current.z], snappedEnd)
|
||||
// Both start and end are building-local ✓
|
||||
const createdWall = createWallOnCurrentLevel(
|
||||
[startingPoint.current.x, startingPoint.current.z],
|
||||
snappedEnd,
|
||||
)
|
||||
if (!createdWall) return
|
||||
|
||||
const nextStart = createdWall.end
|
||||
startingPoint.current.set(nextStart[0], event.localPosition[1], nextStart[1])
|
||||
endingPoint.current.copy(startingPoint.current)
|
||||
cursorRef.current.position.copy(startingPoint.current)
|
||||
wallPreviewRef.current.visible = false
|
||||
buildingState.current = 0
|
||||
buildingState.current = 1
|
||||
setDraftMeasurement(null)
|
||||
}
|
||||
}
|
||||
@@ -478,9 +499,7 @@ export const WallTool: React.FC = () => {
|
||||
const onCancel = () => {
|
||||
if (buildingState.current === 1) {
|
||||
markToolCancelConsumed()
|
||||
buildingState.current = 0
|
||||
wallPreviewRef.current.visible = false
|
||||
setDraftMeasurement(null)
|
||||
stopDrafting()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user