Files
Aislo/B07_DesignDetail/openwebcad/src/App.consts.ts
T
eomsangdonandClaude Opus 5 b4a653e682 fix(B07): 우클릭 뒤에도 선택 도구가 살아 있게 하고, 커서 옆 글자를 줄인다
선택 아이콘을 누르고 우클릭하면 커서 옆 안내가 사라졌다. 우클릭은 ENTER이고,
선택 도구는 ENTER로 최종 상태(SELECTION_COMPLETED, type: final)에 들어가 멈춘다.
그 끝남은 move·copy·rotate가 선택을 자식으로 불러 쓸 때 onDone으로 필요하므로 두고,
선택이 그 자체로 활성 도구일 때만 새로 세운다.

커서를 따라다니는 글자가 18px이라 컸다. 쓰이지 않던 상수
CANVAS_INPUT_FIELD_FONT_SIZE를 12로 낮춰 두 곳이 함께 쓰게 했다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-30 21:23:24 +09:00

241 lines
6.6 KiB
TypeScript

/**
* Very small number that will be used to compare floating point numbers on equality
* since javascript isn't always very accurate with floating point numbers
*/
export const EPSILON = 1e-6;
/**
* Margin around the SVG elements when exporting to a .svg image
*/
export const SVG_MARGIN = 10;
/**
* Margin around the PDF elements when exporting to a .pdf document
*/
export const PDF_MARGIN = 10;
/**
* The width and height of the cross that will be drawn instead of the cursor when hovering the drawing canvas
*/
export const CURSOR_SIZE = 30;
/**
* The background color of the canvas
*/
export const CANVAS_BACKGROUND_COLOR = '#111';
/**
* The foreground color of the canvas
* This will be the color of the lines you draw
*/
export const CANVAS_FOREGROUND_COLOR = '#fff';
/**
* The color of the angle guide lines that are drawn when you are close to an angle step from the last drawn point
*/
export const ANGLE_GUIDES_COLOR = '#999999';
/**
* The style of the line dash of the angle guide lines that are drawn when you are close to an angle step from the last drawn point
*/
export const ANGLE_GUIDES_DASH = [5, 5];
/**
* The color of the snap points that are drawn when you are close to a snap point
* These are the shapes you see when you get near an line endpoint or a circle center point, ...
*/
export const SNAP_POINT_COLOR = '#FFFF00';
/**
* How far a snap point can be from the mouse to still be considered a close snap point
*/
export const SNAP_POINT_DISTANCE = 15;
/**
* How far the mouse can be from an angle guide line to show the "near angle step" snap point
*/
export const SNAP_ANGLE_DISTANCE = 15;
/**
* How far the mouse can be from an entity to highlight it and subsequently select it when you click
*/
/** 객체를 집는 반경 — **화면 픽셀**. 월드 거리로 쓸 때는 helpers/pick-radius로 확대율을 나눈다 */
export const HIGHLIGHT_ENTITY_DISTANCE = 10;
/**
* The size of the snap point indicator shapes that are shown on active snap points
*/
export const SNAP_POINT_SIZE = 15;
/** 그립 사각형의 화면 크기(px)와 색 — 선택 객체의 편집점 */
export const GRIP_SIZE = 8;
export const GRIP_COLOR = '#3aa0ff';
/**
* How long you need to hover over a snap point to make it a marked snap point that will show angle guides
* in milliseconds
*/
export const HOVERED_SNAP_POINT_TIME = 1000;
/**
* Maximum number of snap points that can be marked at the same time
* Marked snap points also get angle guides
*/
export const MAX_MARKED_SNAP_POINTS = 3;
/**
* Length of the extensions that extend past the measurement arrows of a measurement
* Screen pixels: converted to world units per current zoom so drawings in meters stay legible
*/
export const MEASUREMENT_EXTENSION_LENGTH = 12;
/**
* Distance that measurement lines stay away from the point of origin of the measurement
* Screen pixels (zoom-independent)
*/
export const MEASUREMENT_ORIGIN_MARGIN = 8;
/**
* Distance the measurement is drawn while drawing the start and endpoints of the measurements but before the user decides the offset point
* Screen pixels (zoom-independent)
*/
export const MEASUREMENT_DEFAULT_OFFSET = 60;
/**
* Length of the arrow heads for measurements
*/
export const ARROW_HEAD_LENGTH = 20;
/**
* Width of the arrow heads for measurements
*/
export const ARROW_HEAD_WIDTH = 7;
/**
* Number of decimals to show on measurements. eg: 2 would give a measurement of: 503.32
*/
export const MEASUREMENT_DECIMAL_PLACES = 2;
/**
* Distance between the measurement line and the label of the measurement
* Screen pixels (zoom-independent)
*/
export const MEASUREMENT_LABEL_OFFSET = 8;
/**
* Size of the measurement labels containing the length of the measurements
* Screen pixels (zoom-independent)
*/
export const MEASUREMENT_FONT_SIZE = 16;
/**
* Colors for the selection rectangle
*/
export const SELECTION_RECTANGLE_COLOR_INTERSECTION = '#b6ff9a';
export const SELECTION_RECTANGLE_COLOR_CONTAINS = '#6899f3';
export const SELECTION_RECTANGLE_WIDTH = 1;
export const SELECTION_RECTANGLE_STYLE = [5, 5]; // Dashed line
/**
* Angle guides and move tool line styles
*/
export const GUIDE_LINE_COLOR = '#999';
export const GUIDE_LINE_WIDTH = 1;
export const GUIDE_LINE_STYLE = [5, 5]; // Dashed line
/**
* 확대 배율 = exp(delta * 지수). 델타에 비례하므로 마우스 휠 한 칸(deltaY 100)은
* 종전과 같은 10%를 움직이고, 트랙패드가 잔 델타를 초당 수십 번 보내도 그 크기만큼만
* 움직인다 (ln(1.1)/100 = 0.000953).
*/
export const WHEEL_ZOOM_EXPONENT = 0.000953;
/**
* 트랙패드 핀치(ctrl+휠)용 지수. 핀치는 한 동작의 델타 총합이 휠 한 칸보다 작아
* 같은 값을 쓰면 거의 안 움직인다. 확대가 너무 빠르면/느리면 이 값만 조정한다.
*/
export const PINCH_ZOOM_EXPONENT = 0.003;
/** deltaMode가 줄(1)·쪽(2) 단위로 올 때 픽셀로 환산하는 값 (마우스 휠 한 칸 = 100px 기준). */
export const WHEEL_LINE_PX = 33;
export const WHEEL_PAGE_PX = 800;
/**
* Canvas input field offset to mouse location
*/
export const CANVAS_INPUT_FIELD_MOUSE_OFFSET = 20;
/**
* Canvas input field width
*/
export const CANVAS_INPUT_FIELD_WIDTH = 150;
/**
* Canvas input field height
*/
export const CANVAS_INPUT_FIELD_HEIGHT = 20;
/**
* Canvas input field background color
*/
export const CANVAS_INPUT_FIELD_BACKGROUND_COLOR = '#161616';
/**
* Canvas input field text color
*/
export const CANVAS_INPUT_FIELD_TEXT_COLOR = '#FFF';
/**
* Canvas input field background color when text is selected
*/
export const CANVAS_INPUT_FIELD_SELECTION_BACKGROUND_COLOR = '#1e90ff';
/**
* Canvas input field text color when text is selected
*/
export const CANVAS_INPUT_FIELD_SELECTION_TEXT_COLOR = '#000';
/**
* Canvas input field text size in pixels
*/
export const CANVAS_INPUT_FIELD_FONT_SIZE = 12;
/**
* Canvas input field instruction text color
*/
export const CANVAS_INPUT_FIELD_INSTRUCTION_TEXT_COLOR = '#999';
/**
* Multiplier to determine the pdf line width from the in application line width
* This seems to be needed since 1px line widths look quite fat in pdf
*/
export const PDF_LINE_WIDTH_FACTOR = 0.25;
export const COLOR_LIST = [
'#ffffff',
'#2f4f4f',
'#800000',
'#006400',
'#d2b48c',
'#ff0000',
'#00ced1',
'#ffa500',
'#ffff00',
'#00ff00',
'#0000ff',
'#ff00ff',
'#1e90ff',
'#dda0dd',
'#ff1493',
'#98fb98',
];
/**
* Number to multiply degrees with to end up with the equivalent radians
*/
export const TO_RADIANS = Math.PI / 180;
/**
* Number to multiply radians with to end up with the equivalent degrees
*/
export const TO_DEGREES = 180 / Math.PI;