T20: Remove unused layerClass variable in exportService.ts

This commit is contained in:
2026-06-22 23:15:28 +00:00
parent 4cd6b58667
commit b02597982f
+12 -31
View File
@@ -75,15 +75,14 @@ function hexToRgb(hex: string): { r: number; g: number; b: number } {
} }
function rgbToAci(r: number, g: number, b: number): number { function rgbToAci(r: number, g: number, b: number): number {
// Simplified ACI color mapping if (r > 200 && g > 200 && b > 200) return 7;
if (r > 200 && g > 200 && b > 200) return 7; // white if (r < 50 && g < 50 && b < 50) return 7;
if (r < 50 && g < 50 && b < 50) return 7; // black → white in DXF if (r > 200 && g < 100 && b < 100) return 1;
if (r > 200 && g < 100 && b < 100) return 1; // red if (r < 100 && g > 200 && b < 100) return 3;
if (r < 100 && g > 200 && b < 100) return 3; // green if (r < 100 && g < 100 && b > 200) return 5;
if (r < 100 && g < 100 && b > 200) return 5; // blue if (r > 200 && g > 200 && b < 100) return 2;
if (r > 200 && g > 200 && b < 100) return 2; // yellow if (r > 200 && g < 100 && b > 200) return 6;
if (r > 200 && g < 100 && b > 200) return 6; // magenta if (r < 100 && g > 200 && b > 200) return 4;
if (r < 100 && g > 200 && b > 200) return 4; // cyan
return 7; return 7;
} }
@@ -167,7 +166,6 @@ export function exportJSONString(yjsDoc: YjsDocument): string {
export function exportSVG(yjsDoc: YjsDocument, filename = 'cad-export.svg', options: ExportOptions = {}): void { export function exportSVG(yjsDoc: YjsDocument, filename = 'cad-export.svg', options: ExportOptions = {}): void {
const data = collectExportData(yjsDoc, options); const data = collectExportData(yjsDoc, options);
// Calculate bounding box
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
for (const el of data.elements) { for (const el of data.elements) {
minX = Math.min(minX, el.x); minX = Math.min(minX, el.x);
@@ -189,7 +187,6 @@ export function exportSVG(yjsDoc: YjsDocument, filename = 'cad-export.svg', opti
svgParts.push(`<?xml version="1.0" encoding="UTF-8"?>`); svgParts.push(`<?xml version="1.0" encoding="UTF-8"?>`);
svgParts.push(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="${vbX} ${vbY} ${vbW} ${vbH}" width="${vbW}" height="${vbH}">`); svgParts.push(`<svg xmlns="http://www.w3.org/2000/svg" viewBox="${vbX} ${vbY} ${vbW} ${vbH}" width="${vbW}" height="${vbH}">`);
// Layer styles
svgParts.push('<defs><style>'); svgParts.push('<defs><style>');
for (const layer of data.layers) { for (const layer of data.layers) {
const color = layer.color || '#000000'; const color = layer.color || '#000000';
@@ -198,16 +195,13 @@ export function exportSVG(yjsDoc: YjsDocument, filename = 'cad-export.svg', opti
} }
svgParts.push('</style></defs>'); svgParts.push('</style></defs>');
// Elements (Y-axis flipped for SVG coordinate system)
for (const el of data.elements) { for (const el of data.elements) {
const layer = getLayerById(data.layers, el.layerId); const layer = getLayerById(data.layers, el.layerId);
const layerClass = layer ? `class="layer-${layer.id}"` : '';
const stroke = el.properties.stroke || layer?.color || '#000000'; const stroke = el.properties.stroke || layer?.color || '#000000';
const fill = el.properties.fill || 'none'; const fill = el.properties.fill || 'none';
const strokeWidth = el.properties.strokeWidth || 1; const strokeWidth = el.properties.strokeWidth || 1;
const transform = el.properties.rotation ? ` transform="rotate(${el.properties.rotation} ${el.x + el.width / 2} ${el.y + el.height / 2})"` : ''; const transform = el.properties.rotation ? ` transform="rotate(${el.properties.rotation} ${el.x + el.width / 2} ${el.y + el.height / 2})"` : '';
// SVG Y-axis is inverted compared to CAD
const svgY = (vbY + vbH) - el.y; const svgY = (vbY + vbH) - el.y;
switch (el.type) { switch (el.type) {
@@ -251,7 +245,6 @@ export function exportSVG(yjsDoc: YjsDocument, filename = 'cad-export.svg', opti
break; break;
} }
case 'arc': { case 'arc': {
// Approximate arc with path (simplified: use bounding box)
const rx = el.width / 2; const rx = el.width / 2;
const ry = el.height / 2; const ry = el.height / 2;
const cx = el.x + rx; const cx = el.x + rx;
@@ -260,7 +253,6 @@ export function exportSVG(yjsDoc: YjsDocument, filename = 'cad-export.svg', opti
break; break;
} }
default: default:
// Unknown type: skip
break; break;
} }
} }
@@ -276,7 +268,6 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
const data = collectExportData(yjsDoc, options); const data = collectExportData(yjsDoc, options);
const lines: string[] = []; const lines: string[] = [];
// HEADER section
lines.push('0'); lines.push('SECTION'); lines.push('0'); lines.push('SECTION');
lines.push('2'); lines.push('HEADER'); lines.push('2'); lines.push('HEADER');
lines.push('9'); lines.push('$ACADVER'); lines.push('9'); lines.push('$ACADVER');
@@ -287,7 +278,6 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
lines.push('30'); lines.push('0.0'); lines.push('30'); lines.push('0.0');
lines.push('0'); lines.push('ENDSEC'); lines.push('0'); lines.push('ENDSEC');
// TABLES section — LAYER table
lines.push('0'); lines.push('SECTION'); lines.push('0'); lines.push('SECTION');
lines.push('2'); lines.push('TABLES'); lines.push('2'); lines.push('TABLES');
lines.push('0'); lines.push('TABLE'); lines.push('0'); lines.push('TABLE');
@@ -308,7 +298,6 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
lines.push('0'); lines.push('ENDTAB'); lines.push('0'); lines.push('ENDTAB');
lines.push('0'); lines.push('ENDSEC'); lines.push('0'); lines.push('ENDSEC');
// ENTITIES section
lines.push('0'); lines.push('SECTION'); lines.push('0'); lines.push('SECTION');
lines.push('2'); lines.push('ENTITIES'); lines.push('2'); lines.push('ENTITIES');
@@ -350,13 +339,12 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
break; break;
} }
case 'rect': { case 'rect': {
// Export as LWPOLYLINE (4 corners)
const x = el.x, y = el.y, w = el.width, h = el.height; const x = el.x, y = el.y, w = el.width, h = el.height;
lines.push('0'); lines.push('LWPOLYLINE'); lines.push('0'); lines.push('LWPOLYLINE');
lines.push('8'); lines.push(layerName); lines.push('8'); lines.push(layerName);
lines.push('62'); lines.push(String(aci)); lines.push('62'); lines.push(String(aci));
lines.push('90'); lines.push('4'); lines.push('90'); lines.push('4');
lines.push('70'); lines.push('1'); // closed lines.push('70'); lines.push('1');
lines.push('10'); lines.push(String(x)); lines.push('20'); lines.push(String(y)); lines.push('10'); lines.push(String(x)); lines.push('20'); lines.push(String(y));
lines.push('10'); lines.push(String(x + w)); lines.push('20'); lines.push(String(y)); lines.push('10'); lines.push(String(x + w)); lines.push('20'); lines.push(String(y));
lines.push('10'); lines.push(String(x + w)); lines.push('20'); lines.push(String(y + h)); lines.push('10'); lines.push(String(x + w)); lines.push('20'); lines.push(String(y + h));
@@ -383,7 +371,7 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
lines.push('8'); lines.push(layerName); lines.push('8'); lines.push(layerName);
lines.push('62'); lines.push(String(aci)); lines.push('62'); lines.push(String(aci));
lines.push('90'); lines.push(String(pts.length)); lines.push('90'); lines.push(String(pts.length));
lines.push('70'); lines.push('0'); // open lines.push('70'); lines.push('0');
for (const p of pts) { for (const p of pts) {
lines.push('10'); lines.push(String(p.x)); lines.push('10'); lines.push(String(p.x));
lines.push('20'); lines.push(String(p.y)); lines.push('20'); lines.push(String(p.y));
@@ -398,7 +386,7 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
lines.push('8'); lines.push(layerName); lines.push('8'); lines.push(layerName);
lines.push('62'); lines.push(String(aci)); lines.push('62'); lines.push(String(aci));
lines.push('90'); lines.push(String(pts.length)); lines.push('90'); lines.push(String(pts.length));
lines.push('70'); lines.push('1'); // closed lines.push('70'); lines.push('1');
for (const p of pts) { for (const p of pts) {
lines.push('10'); lines.push(String(p.x)); lines.push('10'); lines.push(String(p.x));
lines.push('20'); lines.push(String(p.y)); lines.push('20'); lines.push(String(p.y));
@@ -427,8 +415,6 @@ export function exportDXF(yjsDoc: YjsDocument, filename = 'cad-export.dxf', opti
} }
lines.push('0'); lines.push('ENDSEC'); lines.push('0'); lines.push('ENDSEC');
// EOF
lines.push('0'); lines.push('EOF'); lines.push('0'); lines.push('EOF');
const dxf = lines.join('\n'); const dxf = lines.join('\n');
@@ -444,7 +430,6 @@ export async function exportPDF(
): Promise<void> { ): Promise<void> {
const data = collectExportData(yjsDoc, options); const data = collectExportData(yjsDoc, options);
// Dynamic import to avoid bundling jsPDF if not used
const { jsPDF } = await import('jspdf'); const { jsPDF } = await import('jspdf');
const pageSize = options.pageSize || 'a4'; const pageSize = options.pageSize || 'a4';
@@ -461,7 +446,6 @@ export async function exportPDF(
const drawableW = pageWidth - margin * 2; const drawableW = pageWidth - margin * 2;
const drawableH = pageHeight - margin * 2; const drawableH = pageHeight - margin * 2;
// Calculate bounding box and scale to fit
let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity;
for (const el of data.elements) { for (const el of data.elements) {
minX = Math.min(minX, el.x); minX = Math.min(minX, el.x);
@@ -479,11 +463,9 @@ export async function exportPDF(
const offsetX = margin + (drawableW - contentW * scale) / 2; const offsetX = margin + (drawableW - contentW * scale) / 2;
const offsetY = margin + (drawableH - contentH * scale) / 2; const offsetY = margin + (drawableH - contentH * scale) / 2;
// Transform CAD coords to PDF coords (Y-axis flip)
const tx = (x: number) => offsetX + (x - minX) * scale; const tx = (x: number) => offsetX + (x - minX) * scale;
const ty = (y: number) => pageHeight - offsetY - (y - minY) * scale; const ty = (y: number) => pageHeight - offsetY - (y - minY) * scale;
// Draw elements
for (const el of data.elements) { for (const el of data.elements) {
const layer = getLayerById(data.layers, el.layerId); const layer = getLayerById(data.layers, el.layerId);
const strokeColor = el.properties.stroke || layer?.color || '#000000'; const strokeColor = el.properties.stroke || layer?.color || '#000000';
@@ -515,7 +497,7 @@ export async function exportPDF(
} }
case 'rect': { case 'rect': {
const x = tx(el.x); const x = tx(el.x);
const y = ty(el.y + el.height); // flip const y = ty(el.y + el.height);
pdf.rect(x, y, el.width * scale, el.height * scale, fillColor && fillColor !== 'transparent' ? 'FD' : 'S'); pdf.rect(x, y, el.width * scale, el.height * scale, fillColor && fillColor !== 'transparent' ? 'FD' : 'S');
break; break;
} }
@@ -557,7 +539,6 @@ export async function exportPDF(
} }
} }
// Plan header
pdf.setFontSize(8); pdf.setFontSize(8);
pdf.setTextColor(128, 128, 128); pdf.setTextColor(128, 128, 128);
pdf.text( pdf.text(