fix(B07): 잠금 도면층을 집던 경로 다섯 곳을 마저 닫는다

앞선 감사가 불완전했다. 같은 부류로 도각·원지반을 건드리던 곳이 더 있었다.

- select-tool.helpers pickEntityAt: 클릭 선택 후보에 잠금 객체가 섞여
  도각을 물면 아무 일도 안 일어나는 죽은 클릭이 됐다.
- eraser-tool: 자르기의 교차점 계산이 도각 선을 절단 경계로 썼다.
- property-tools OVERKILL: 선택이 없으면 전체가 대상이라 도각까지 지웠다.
- text-tools 찾기/바꾸기: 도각 표제란 글자를 바꿔 버렸다.
- selection-tools 유형/유사 선택: 잠금 객체까지 세어 토스트 개수가 틀렸다.

전부 getPickableEntities()로 바꾼다.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-31 15:48:08 +09:00
co-authored by Claude Opus 5
parent 008b0ede14
commit 9bf6de9b10
5 changed files with 27 additions and 11 deletions
@@ -5,7 +5,13 @@ import { getAnnotationScale } from '../../commands/dim-settings';
import { EntityName } from '../../entities/Entity';
import type { Entity } from '../../entities/Entity';
import type { TextEntity } from '../../entities/TextEntity';
import { addEntities, getActiveTextStyle, getEntities, setEntities } from '../../state';
import {
addEntities,
getActiveTextStyle,
getEntities,
getPickableEntities,
setEntities,
} from '../../state';
import { Tool } from '../../tools';
import { textEntity } from '../factories/entity-factory';
import { createSequenceTool } from '../factories/sequence-tool';
@@ -80,14 +86,18 @@ export const findToolStateMachine = createSequenceTool({
helpers: false,
steps: [
{ kind: 'text', instructions: '찾을 문자열을 입력하십시오.' },
{ kind: 'text', instructions: '바꿀 문자열을 입력하십시오 (그대로 두려면 ENTER).', defaultValue: '' },
{
kind: 'text',
instructions: '바꿀 문자열을 입력하십시오 (그대로 두려면 ENTER).',
defaultValue: '',
},
],
commit: (input) => {
const needle = input.text(0);
const replacement = input.text(1);
let found = 0;
let replaced = 0;
for (const entity of getEntities()) {
for (const entity of getPickableEntities()) {
if (entity.getType() !== EntityName.Text) continue;
const text = entity as TextEntity;
if (!text.getLabel().includes(needle)) continue;
@@ -100,7 +100,7 @@ export function handleMouseClick(worldMouseLocation: Point) {
const clickedPointOnShape = closestEntity.segment.start;
// Find entities that intersect with the closest entity
const intersections = getAllIntersectionPoints(closestEntity.entity, getEntities());
const intersections = getAllIntersectionPoints(closestEntity.entity, getPickableEntities());
const entityType = closestEntity.entity.getType();
switch (entityType) {
@@ -139,7 +139,10 @@ export function handleMouseClick(worldMouseLocation: Point) {
addEntities(segmentEntities, false);
// Remove (a segment) of the 4th line closest to the cursor
const lineIntersections = getAllIntersectionPoints(closestSegmentInfo.entity, getEntities());
const lineIntersections = getAllIntersectionPoints(
closestSegmentInfo.entity,
getPickableEntities()
);
eraseLineSegment(
closestSegmentInfo.entity as LineEntity,
clickedPointOnShape,
@@ -7,6 +7,7 @@ import {
addEntities,
deleteEntities,
getEntities,
getPickableEntities,
getLayerById,
setEntities,
setSelectedEntityIds,
@@ -112,7 +113,7 @@ export const overkillToolStateMachine = createSequenceTool({
steps: [{ kind: 'selection', instructions: '중복을 정리할 객체를 선택한 뒤 ENTER.' }],
commit: (input) => {
const selected = input.entities(0);
const target = selected.length ? selected : getEntities();
const target = selected.length ? selected : getPickableEntities();
const duplicates = findDuplicateEntities(target);
if (!duplicates.length) {
toast.info('중복된 객체가 없습니다.');
@@ -18,6 +18,7 @@ import { pickRadius } from '../helpers/pick-radius';
import {
getActiveLayerId,
getEntities,
getPickableEntities,
getLayers,
getSelectedEntities,
getSelectedEntityIds,
@@ -36,7 +37,7 @@ let pickCycleIndex = 0;
function pickEntityAt(worldPoint: Point): Entity | null {
const radius = pickRadius();
const candidates = findEntitiesWithinDistance(worldPoint, getEntities(), radius);
const candidates = findEntitiesWithinDistance(worldPoint, getPickableEntities(), radius);
if (!candidates.length) {
lastPickPoint = null;
return null;
@@ -2,7 +2,7 @@
import { toast } from 'react-toastify';
import type { Entity } from '../../entities/Entity';
import { hideEntities, isolateEntities, showAllEntities } from '../../helpers/visibility';
import { getEntities, setEntities, setSelectedEntityIds } from '../../state';
import { getEntities, getPickableEntities, setEntities, setSelectedEntityIds } from '../../state';
import { Tool } from '../../tools';
import { createSequenceTool } from '../factories/sequence-tool';
@@ -12,12 +12,13 @@ export const qSelectToolStateMachine = createSequenceTool({
steps: [
{
kind: 'text',
instructions: '선택할 객체 유형을 입력하십시오 (Line · Circle · Arc · Text · PolyLine · Hatch).',
instructions:
'선택할 객체 유형을 입력하십시오 (Line · Circle · Arc · Text · PolyLine · Hatch).',
},
],
commit: (input) => {
const wanted = input.text(0).trim().toLowerCase();
const matched = getEntities().filter(
const matched = getPickableEntities().filter(
(entity) => entity.getType().toLowerCase() === wanted
);
if (!matched.length) {
@@ -35,7 +36,7 @@ export const selectSimilarToolStateMachine = createSequenceTool({
steps: [{ kind: 'entity', instructions: '기준이 될 객체를 선택하십시오.' }],
commit: (input) => {
const reference = input.entity(0);
const similar = getEntities().filter(
const similar = getPickableEntities().filter(
(entity) =>
entity.getType() === reference.getType() &&
entity.lineColor === reference.lineColor &&