mirror of
https://github.com/xibyte/jsketcher
synced 2025-12-06 08:25:19 +01:00
101 lines
No EOL
2.6 KiB
JavaScript
101 lines
No EOL
2.6 KiB
JavaScript
|
|
class BRepDebug {
|
|
|
|
constructor() {
|
|
this.booleanSessions = [];
|
|
}
|
|
|
|
startBooleanSession(a, b, type) {
|
|
this.currentBooleanSession = new BooleanSession(a, b, type)
|
|
this.booleanSessions.push(this.currentBooleanSession);
|
|
}
|
|
|
|
setBooleanWorkingOperands(a, b) {
|
|
this.currentBooleanSession.workingOperandA = a;
|
|
this.currentBooleanSession.workingOperandB = b;
|
|
}
|
|
|
|
setBooleanResult(result) {
|
|
this.currentBooleanSession.result = result;
|
|
}
|
|
|
|
startBooleanLoopDetection(graph) {
|
|
this.currentBooleanSession.loopDetection.push({
|
|
id: this.currentBooleanSession.loopDetection.length + 1,
|
|
steps: [],
|
|
detectedLoops: [],
|
|
graph: graph.graphEdges.slice()
|
|
});
|
|
}
|
|
|
|
|
|
booleanLoopDetectionBeginLoop() {
|
|
last(this.currentBooleanSession.loopDetection).steps.push({type: 'TRY_LOOP'});
|
|
}
|
|
|
|
booleanLoopDetectionStep(edge) {
|
|
last(this.currentBooleanSession.loopDetection).steps.push({type: 'TRY_EDGE', edge});
|
|
}
|
|
|
|
booleanLoopDetectionSuccess(loop) {
|
|
const ld = last(this.currentBooleanSession.loopDetection);
|
|
ld.detectedLoops.push(loop);
|
|
ld.steps.push({type: 'LOOP_FOUND'});
|
|
}
|
|
|
|
booleanLoopDetectionNextStep(candidates, winner) {
|
|
last(this.currentBooleanSession.loopDetection).steps.push({type: 'NEXT_STEP_ANALYSIS', candidates, winner});
|
|
}
|
|
|
|
transferEdge(edge, face, chosenEdge) {
|
|
this.currentBooleanSession.transferedEdges.push({edge, face, chosenEdge});
|
|
}
|
|
|
|
faceFilter(connectedToAffectedFaces, allFaces) {
|
|
this.currentBooleanSession.faceFilter.connectedToAffectedFaces = connectedToAffectedFaces;
|
|
this.currentBooleanSession.faceFilter.allFaces = allFaces;
|
|
}
|
|
|
|
setOverlappingFaces(groups) {
|
|
this.currentBooleanSession.overlappingFacesGroups = groups;
|
|
}
|
|
|
|
booleanFaceIntersection(faceA, faceB, curve, nodes) {
|
|
this.currentBooleanSession.faceIntersections.push({faceA, faceB, curve, nodes})
|
|
}
|
|
|
|
markEdge(id, edge, color) {
|
|
this.currentBooleanSession.markedEdges.push({
|
|
id, edge, color
|
|
});
|
|
}
|
|
}
|
|
|
|
class BooleanSession {
|
|
|
|
constructor(a, b, type) {
|
|
this.id = ID_COUNTER ++;
|
|
this.type = type;
|
|
this.inputOperandA = a;
|
|
this.inputOperandB = b;
|
|
this.loopDetection = [];
|
|
this.transferedEdges = [];
|
|
this.mergeFacesLoopDetection = [];
|
|
this.currentLoopDetection = null;
|
|
this.overlappingFacesGroups = [];
|
|
this.markedEdges = [];
|
|
this.faceIntersections = [];
|
|
this.faceFilter = {
|
|
connectedToAffectedFaces: null,
|
|
allFaces: null,
|
|
};
|
|
}
|
|
}
|
|
|
|
function last(arr) {
|
|
return arr[arr.length - 1];
|
|
}
|
|
|
|
let ID_COUNTER = 1;
|
|
|
|
export default (new BRepDebug());
|