feat(core): haunch-and-Level-300 coping underside, steel pile 609.6, W03/W04 checks
- Multi-column coping (2·3주형): underside between columns drops 300 below Level with 300 × 300 haunches (spec §4.5, Q3 추천안). - Steel pipe pile diameter 609.6 mm (spec §4.5, Q5 추천안). - Direct foundation keeps the 100 mm blinding concrete (Q4 추천안, test added). - W03: bearing centre closer than half a block width to a step boundary. - W04: block footprint outside the coping plan. Co-Authored-By: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
112f460f1f
commit
5466b3522e
3 files changed
+100
-7
No files matched your search
+18
-3
@@ -6,6 +6,8 @@ export const DIM = {
|
||||
copingH1: 1.0,
|
||||
copingH2: 1.5,
|
||||
levelWidth: 2.1,
|
||||
/** Multi-column coping: underside between columns sits this far below Level, with 45° haunches of the same size (spec §4.5, Q3 추천안). */
|
||||
haunch: 0.3,
|
||||
padThickness: 0.05,
|
||||
padSize: 1.0,
|
||||
blockSize: 1.2,
|
||||
@@ -14,7 +16,8 @@ export const DIM = {
|
||||
footingH: 2.0,
|
||||
blindingMargin: 0.2,
|
||||
blindingT: 0.1,
|
||||
pileDiameter: 0.6,
|
||||
/** 강관 609.6 × 12 (spec §4.5 강관 type, Q5 추천안 적용). */
|
||||
pileDiameter: 0.6096,
|
||||
pileEnd: 0.7,
|
||||
pileSpacing: 2.25,
|
||||
/** Front/back EL difference below this is treated as no lateral step (spec §4.3, Q2). */
|
||||
@@ -204,12 +207,24 @@ export function buildPier(input: PierInput): PierModel {
|
||||
const levelEnd = Math.max(...colS) + DIM.levelWidth / 2;
|
||||
if (levelStart < 0 || levelEnd > L) throw new Error('코핑 길이가 Level 구간보다 짧습니다.');
|
||||
|
||||
// Underside from the right end to the left end. Between columns (2·3주형) it drops 300 below Level with 300 × 300 haunches (spec §4.5, Q3).
|
||||
const underside: [number, number][] = [[L, endBottom]];
|
||||
const levelZones = [...colS].sort((a, b) => b - a).map((s) => [s - DIM.levelWidth / 2, s + DIM.levelWidth / 2] as const);
|
||||
levelZones.forEach(([zoneStart, zoneEnd], k) => {
|
||||
underside.push([zoneEnd, levelBottom], [zoneStart, levelBottom]);
|
||||
const next = levelZones[k + 1];
|
||||
if (!next) return;
|
||||
const gap = zoneStart - next[1];
|
||||
if (gap <= 2 * DIM.haunch) throw new Error('기둥 사이 간격이 헌치(300 × 2)보다 좁아 코핑 하면을 만들 수 없습니다.');
|
||||
const lowerEl = levelBottom - DIM.haunch;
|
||||
underside.push([zoneStart - DIM.haunch, lowerEl], [next[1] + DIM.haunch, lowerEl], [next[1], levelBottom]);
|
||||
});
|
||||
|
||||
const profile: [number, number][] = [[0, endBottom]];
|
||||
for (const seg of segments) {
|
||||
profile.push([seg.s0, seg.top], [seg.s1, seg.top]);
|
||||
}
|
||||
profile.push([L, endBottom], [levelEnd, levelBottom], [levelStart, levelBottom], [0, endBottom]);
|
||||
profile.pop(); // the last point repeats the first one
|
||||
profile.push(...underside);
|
||||
|
||||
const footingTop = input.foundationType === '현장타설말뚝' ? input.footingBottomEl : input.footingBottomEl + DIM.footingH;
|
||||
const columns: ColumnModel[] = colS.map((s) => ({
|
||||
|
||||
Reference in new issue
Block a user