fix: 슬라이서 툴패스가 빌드플레이트 중심에서 벗어나던 문제 수정
PrusaSlicer가 모델을 베드 중심(130,130)에 두고 gcode 좌표를 베드 좌표계
(0~260) 그대로 내보내는데, 렌더링에서 거기에 +BED/2(+130)를 또 더해서 모델이
(260,260) 모서리 쪽으로 밀려 보였음("중심에서 벗어나 있네").
수정: gcode X → three X 오프셋 없이 그대로, gcode Z(높이) → three Y,
gcode Y → three Z = BED - gcodeY. Z를 뒤집는 건 STL 미리보기(rotateX -90)가
STL +Y를 three -Z로 보내는 것과 정렬하기 위함. 실측: 모델 three X/Z 둘 다
130.00 중심, 0~260 베드 안. STL 미리보기와 동일 위치로 겹침.
Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
@@ -314,8 +314,9 @@
|
||||
}
|
||||
if (px !== nx || py !== ny || pz !== nz) {
|
||||
const color = extruding ? (TYPE_COLORS[curType] ?? DEFAULT_COLOR) : TRAVEL_COLOR;
|
||||
// gcode 좌표계: X/Y가 베드 평면(0~260), Z가 높이. 세그먼트엔 {x=gcodeX, y=gcodeZ(높이), z=gcodeY}.
|
||||
// STL(rotateX -90)과 정렬하기 위해 렌더단에서 Z를 BED-gcodeY 로 뒤집음(아래 renderToolpath).
|
||||
layers[curLayer].segs.push({ x1: px, y1: pz, z1: py, x2: nx, y2: nz, z2: ny, color });
|
||||
// 주의: gcode 좌표계는 X/Y 평면, Z가 높이. three는 Y가 높이. y1=pz(높이), z1=py(평면Y).
|
||||
}
|
||||
x = nx; y = ny; z = nz; e = ne;
|
||||
}
|
||||
@@ -338,10 +339,13 @@
|
||||
for (let s = 0; s < segs.length; s++) {
|
||||
const sg = segs[s];
|
||||
const o = s * 6;
|
||||
// gcode (X,Y,Z) → three (X, Z, Y) 매핑으로 STL과 정렬(위 parseGcode에서 이미 적용).
|
||||
// 여기선 이미 y1=높이, z1=평면Y 로 넣어둠. 플레이트 중앙 오프셋 더함.
|
||||
pos[o] = sg.x1 + BED / 2; pos[o + 1] = sg.y1; pos[o + 2] = sg.z1 + BED / 2;
|
||||
pos[o + 3] = sg.x2 + BED / 2; pos[o + 4] = sg.y2; pos[o + 5] = sg.z2 + BED / 2;
|
||||
// gcode (X,Y,Z) → three (X, 높이Y, Z) 매핑. PrusaSlicer가 모델을 베드 중심(130,130)에
|
||||
// 두고 gcode 좌표를 베드 좌표계(0~260) 그대로 내보내므로 X는 오프셋 없이 그대로.
|
||||
// Z는 BED-gcodeY 로 뒤집어 STL 미리보기(rotateX -90 → STL +Y가 three -Z)와 정렬 —
|
||||
// 옛 코드의 +BED/2 오프셋은 gcode가 이미 베드좌표인 걸 몰라 두 번 더해서 (260,260) 모서리로
|
||||
// 밀어버렸음(2026-09-20 "중심에서 벗어남" 수정).
|
||||
pos[o] = sg.x1; pos[o + 1] = sg.y1; pos[o + 2] = BED - sg.z1;
|
||||
pos[o + 3] = sg.x2; pos[o + 4] = sg.y2; pos[o + 5] = BED - sg.z2;
|
||||
const c = new THREE.Color(sg.color);
|
||||
col[o] = c.r; col[o + 1] = c.g; col[o + 2] = c.b;
|
||||
col[o + 3] = c.r; col[o + 4] = c.g; col[o + 5] = c.b;
|
||||
|
||||
Reference in New Issue
Block a user