Fix U-shape logic in createKlasseTemplate to be open at bottom, not hollow rectangle

This commit is contained in:
2026-06-22 21:11:41 +00:00
parent e02c2b00c2
commit 8381d916d2
@@ -71,7 +71,7 @@ class SeatingTemplateTool extends Tool {
// Create table // Create table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_table_' + i, id: crypto.randomUUID() + '_table_' + i,
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: tableX, x: tableX,
@@ -88,7 +88,7 @@ class SeatingTemplateTool extends Tool {
// Top side chairs // Top side chairs
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_chair_top_' + i + '_' + j, id: crypto.randomUUID() + '_chair_top_' + i + '_' + j,
type: 'chair', type: 'chair',
layerId: 'default', layerId: 'default',
x: tableX + positionRatio * tableWidth - chairWidth / 2, x: tableX + positionRatio * tableWidth - chairWidth / 2,
@@ -100,7 +100,7 @@ class SeatingTemplateTool extends Tool {
// Bottom side chairs // Bottom side chairs
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_chair_bottom_' + i + '_' + j, id: crypto.randomUUID() + '_chair_bottom_' + i + '_' + j,
type: 'chair', type: 'chair',
layerId: 'default', layerId: 'default',
x: tableX + positionRatio * tableWidth - chairWidth / 2, x: tableX + positionRatio * tableWidth - chairWidth / 2,
@@ -126,7 +126,7 @@ class SeatingTemplateTool extends Tool {
// Create round table // Create round table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_table_' + i + '_' + j, id: crypto.randomUUID() + '_table_' + i + '_' + j,
type: 'round_table', type: 'round_table',
layerId: 'default', layerId: 'default',
x: tableX - tableRadius, x: tableX - tableRadius,
@@ -148,7 +148,7 @@ class SeatingTemplateTool extends Tool {
const chairY = tableY + (tableRadius + this.chairSpacing) * Math.sin(angle) - 22.5; const chairY = tableY + (tableRadius + this.chairSpacing) * Math.sin(angle) - 22.5;
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_chair_' + i + '_' + j + '_' + k, id: crypto.randomUUID() + '_chair_' + i + '_' + j + '_' + k,
type: 'chair', type: 'chair',
layerId: 'default', layerId: 'default',
x: chairX, x: chairX,
@@ -176,7 +176,7 @@ class SeatingTemplateTool extends Tool {
// Create table // Create table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_table_' + i + '_' + j, id: crypto.randomUUID() + '_table_' + i + '_' + j,
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: tableX, x: tableX,
@@ -198,7 +198,7 @@ class SeatingTemplateTool extends Tool {
// Create main table (president's table) // Create main table (president's table)
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_main_table', id: crypto.randomUUID() + '_main_table',
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: x + tableWidth / 2, x: x + tableWidth / 2,
@@ -213,7 +213,7 @@ class SeatingTemplateTool extends Tool {
for (let i = 0; i < sideTablesCount; i++) { for (let i = 0; i < sideTablesCount; i++) {
// Left side table // Left side table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_left_table_' + i, id: crypto.randomUUID() + '_left_table_' + i,
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: x, x: x,
@@ -225,7 +225,7 @@ class SeatingTemplateTool extends Tool {
// Right side table // Right side table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_right_table_' + i, id: crypto.randomUUID() + '_right_table_' + i,
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: x + tableWidth + tableWidth / 2, x: x + tableWidth + tableWidth / 2,
@@ -238,7 +238,7 @@ class SeatingTemplateTool extends Tool {
// Create chairs for side tables // Create chairs for side tables
// Left side chairs // Left side chairs
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_left_chair_' + i, id: crypto.randomUUID() + '_left_chair_' + i,
type: 'chair', type: 'chair',
layerId: 'default', layerId: 'default',
x: x - this.chairSpacing - chairWidth, x: x - this.chairSpacing - chairWidth,
@@ -250,7 +250,7 @@ class SeatingTemplateTool extends Tool {
// Right side chairs // Right side chairs
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_right_chair_' + i, id: crypto.randomUUID() + '_right_chair_' + i,
type: 'chair', type: 'chair',
layerId: 'default', layerId: 'default',
x: x + tableWidth + tableWidth / 2 + tableWidth / 2 + this.chairSpacing, x: x + tableWidth + tableWidth / 2 + tableWidth / 2 + this.chairSpacing,
@@ -262,7 +262,7 @@ class SeatingTemplateTool extends Tool {
} }
} }
// Create Klasse template (U-shape classroom layout) // Create Klasse template (U-shape classroom layout open at bottom)
private createKlasseTemplate(x: number, y: number): void { private createKlasseTemplate(x: number, y: number): void {
const tableWidth = 120; const tableWidth = 120;
const tableHeight = 60; const tableHeight = 60;
@@ -271,7 +271,7 @@ class SeatingTemplateTool extends Tool {
// Create teacher's table // Create teacher's table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_teacher_table', id: crypto.randomUUID() + '_teacher_table',
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: x + tableWidth, x: x + tableWidth,
@@ -281,13 +281,14 @@ class SeatingTemplateTool extends Tool {
properties: {} properties: {}
}); });
// Create student tables in U-shape // Create student tables in U-shape (open at bottom)
const rows = 4; const rows = 4;
const cols = 5; const cols = 5;
for (let i = 0; i < rows; i++) { for (let i = 0; i < rows; i++) {
for (let j = 0; j < cols; j++) { for (let j = 0; j < cols; j++) {
// Skip center tables to create U-shape // Create U-shape that is open at the bottom
// Skip inner tables but keep the bottom row
if (i > 0 && i < rows - 1 && j > 0 && j < cols - 1) continue; if (i > 0 && i < rows - 1 && j > 0 && j < cols - 1) continue;
const tableX = x + j * (tableWidth + this.tableSpacing); const tableX = x + j * (tableWidth + this.tableSpacing);
@@ -295,7 +296,7 @@ class SeatingTemplateTool extends Tool {
// Create table // Create table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_student_table_' + i + '_' + j, id: crypto.randomUUID() + '_student_table_' + i + '_' + j,
type: 'rectangular_table', type: 'rectangular_table',
layerId: 'default', layerId: 'default',
x: tableX, x: tableX,
@@ -307,7 +308,7 @@ class SeatingTemplateTool extends Tool {
// Create chair behind each table // Create chair behind each table
this.yjsDoc.createElement({ this.yjsDoc.createElement({
id: Date.now().toString() + '_student_chair_' + i + '_' + j, id: crypto.randomUUID() + '_student_chair_' + i + '_' + j,
type: 'chair', type: 'chair',
layerId: 'default', layerId: 'default',
x: tableX + tableWidth / 2 - chairWidth / 2, x: tableX + tableWidth / 2 - chairWidth / 2,