Skip to content

Commit bade6cc

Browse files
committed
feat: implement face mode
1 parent e3dec64 commit bade6cc

2 files changed

Lines changed: 17 additions & 2 deletions

File tree

packages/front/src/measurement/AreaMeasurement/index.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ export class AreaMeasurement extends Measurement<Area, "area"> {
3333
/**
3434
* The possible modes in which a measurement of this type may be created.
3535
*/
36-
modes: AreaMeasurerModes[number][] = ["free", "square"];
36+
modes: AreaMeasurerModes[number][] = ["free", "square", "face"];
3737

3838
private _mode: AreaMeasurerModes[number] = "free";
3939

@@ -166,6 +166,21 @@ export class AreaMeasurement extends Measurement<Area, "area"> {
166166

167167
if (!(pickerData && pickerData.point)) return;
168168

169+
if (this.mode === "face") {
170+
const facePoints = pickerData.facePoints;
171+
if (!facePoints) return;
172+
const points: THREE.Vector3[] = [];
173+
for (let i = 0; i < facePoints.length - 2; i += 3) {
174+
const x = facePoints[i];
175+
const y = facePoints[i + 1];
176+
const z = facePoints[i + 2];
177+
points.push(new THREE.Vector3(x, y, z));
178+
}
179+
this._temp.area.points.add(...points);
180+
this.endCreation();
181+
return;
182+
}
183+
169184
const { area, point } = this._temp;
170185

171186
if (!this._temp.isDragging) {

packages/front/src/measurement/AreaMeasurement/src/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ export interface AreaMeasurerTempData {
1414
/**
1515
* Represents the modes available for measuring areas. `free`: Allows freeform area measurement without constraints. `square`: Restricts area measurement to square shapes.
1616
*/
17-
export type AreaMeasurerModes = ["free", "square"];
17+
export type AreaMeasurerModes = ["free", "square", "face"];

0 commit comments

Comments
 (0)