횡단설계(B06) 다음을 상세설계 → 수량산출 → 설계도서 순으로 재배열하고, 폴더 번호가 흐름과 일치하도록 이름을 맞바꾼다. - B08_DesignDetail → B07_DesignDetail, B07_Quantity → B08_Quantity (파일 접두어·식별자·라우트·locale 키 전량 스왑) - STAGE_KEYS 4=DESIGN_DETAIL, 5=QUANTITY 스왑 + 라우터 stage 리터럴 교체 - CAD 마운트 /b08-cad → /b07-cad (main.py·vite proxy·iframe URL), openwebcad Toolbar 라벨 B07로 수정 후 재빌드 - 유지: openwebcad postMessage 프로토콜 aislo:b08:*·패키지명(내부 식별자) - 기존 프로젝트 storage 폴더 rename + project_manifest 갱신, DB project_workflow_stages stage_no 4↔5 행 스왑 완료 Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
24 lines
699 B
TypeScript
24 lines
699 B
TypeScript
import { Line, type Point } from '@flatten-js/core';
|
|
import { sortBy } from 'es-toolkit';
|
|
import type { PointWithAngle } from './helpers.types';
|
|
|
|
/**
|
|
* Sorts points that lie on a circle by angle around the circle, angle from 0 => 360
|
|
* @param pointsOnCircle
|
|
* @param centerPoint
|
|
*/
|
|
export function sortPointsOnCircle(
|
|
pointsOnCircle: Point[],
|
|
centerPoint: Point,
|
|
): Point[] {
|
|
const pointsWithAngles: PointWithAngle[] = pointsOnCircle.map(point => {
|
|
return {
|
|
point,
|
|
angle: new Line(centerPoint, point).slope,
|
|
};
|
|
});
|
|
return sortBy(pointsWithAngles, [
|
|
(pointWithAngle: PointWithAngle) => pointWithAngle.angle,
|
|
]).map(pointsWithAngle => pointsWithAngle.point);
|
|
}
|