GeOnDT GeOnDT for JS

Class: U3dSelect

U3dSelect

~extends UEventDispatcher
지도 위 3D 객체를 사용자가 고르는 기능(선택)을 담당하는 클래스입니다.
클릭(POINT), 영역·선·원 그리기(AREA/LINE/CIRCLE), 드래그 사각형(BOX) 모드로 객체를 찾아 내부 선택 목록에 넣고, 외곽선 또는 색상으로 강조 표시하며, 진행 상황을 U3dSelect.EVENT(start/change/end) 이벤트로 알립니다. 생성 후 setApp(app)으로 앱을 연결하고 active()를 호출해야 사용자 입력을 받기 시작하며, 다 쓰면 remove()로 해제합니다.

new U3dSelect(opt)

생성만으로는 동작하지 않습니다. setApp(app)으로 앱을 연결한 뒤 active()를 호출해야 클릭·드래그 입력을 받습니다.

Name Type Default Description
opt U3dSelectCO {} optional

생성 옵션. 항목별 의미와 기본값은 U3dSelectCO 참조

Members

EVENTObject

이 클래스가 dispatch하는 선택 이벤트 이름입니다. on(U3dSelect.EVENT.END, callback)처럼 사용합니다.
START: 사용자가 선택 동작을 시작했을 때(payload data는 null). CHANGE: 선택 목록이 바뀌는 중(드래그·다각형 점 추가 등). END: 선택 동작이 끝났을 때. CHANGE/END의 payload는 {type, data, work}이며 data는 선택 객체 배열, work는 getSelectWork()와 같은 형태의 작업 정보입니다. BOX 모드는 추가로 pointerdown/pointermove/pointerup을 dispatch합니다.

TYPEObject

강조 표시 방식 이름입니다. setSelectType()과 생성 옵션 selectType에 사용합니다.
COLOR: 선택 객체의 재질 색을 바꿔 강조. OUTLINE: 객체 외곽선을 그려 강조(기본값).

exceptTextureboolean

강조 표시 중 모델 텍스처를 감출지 여부(생성 옵션 exceptTexture).

modestring

현재 선택 모드(UDEF.SELECT_MODE의 값: point/area/line/circle/box). setMode()로 바꾼다.

selectBoxEventSelectBoxEvent

BOX 모드의 선택 박스와 리스너 식별자 묶음. 형태는 SelectBoxEvent 참조.

styleKeyValue undefined

색상 강조 시 재질에 적용할 스타일(생성 옵션 style). remove() 후 undefined.

uuidstring

이 선택기 인스턴스의 고유 식별자(GUID). BOX 모드 리스너 이름의 접두어로 쓰인다.

Methods

active()

선택기능 활성화 함수
현재 모드에 맞는 클릭/드래그 리스너를 앱에 등록합니다. setApp()이 먼저 호출되어 있어야 하며, 이미 활성 상태면 아무 것도 하지 않습니다. BOX 모드에서는 드래그 동안 지도 카메라 조작이 막힙니다.

addRayOption(key, value)

Raycaster(교차 검사) 옵션을 추가/갱신하는 함수
지정된 옵션은 내부 intersect 호출(intersectAtPixel, intersectFromScene)에 전달됩니다.

Name Type Description
key string

레이캐스터 옵션 이름(예: usevisible, 교차 대상 필터 등 앱 intersect 함수가 받는 옵션)

value any

그 옵션에 넣을 값. 같은 키를 다시 지정하면 덮어쓴다

addSelected(object, intersect)Promise.<void>

해당 모델을 선택하는 기능
선택 목록에 넣고 현재 강조 방식(outline/color)으로 표시하며, 배열을 넘기면 각 원소를 차례로 선택합니다. USelect가 아닌 값과 공유 메시(USharedMesh)는 조용히 무시됩니다. 이벤트는 발생시키지 않습니다.

Name Type Description
object USelect | Array.<USelect>

선택할 객체 또는 객체 배열

intersect U3dIntersectLike optional

picking 결과. 병합 메시의 부분(faceIndex)이나 인스턴스(instanceId)만 강조할 때 전달

Returns:
Type Description
Promise.<void> 선택 처리가 끝나면 이행되는 Promise. 내부 선택 목록이 없는 비정상 상태에서만 거부된다

addTargetLayer(layerName)

선택 대상 레이어를 추가하는 함수
targetLayer를 지정하면 picking(선택) 시 해당 레이어들의 scene 위주로 검사하여 성능을 개선할 수 있습니다.

Name Type Description
layerName string

레이어 이름

checkGeom(scene, geom)Array.<({object: any, geom: OLGeometry}|Partial.<{instanceId: number}>)>

지오메트리(드로잉/측정 결과)와 교차하는 객체 목록을 반환하는 함수 주로 AREA/LINE/CIRCLE/BOX 선택 모드에서 선택 결과를 계산할 때 사용합니다.

Name Type Description
scene Object3D | Group | Scene | UMesh

검사할 scene(또는 group)

geom OLGeometry

intersectsExtent(extent)를 제공하는 geometry

Returns:
Type Description
Array.<({object: any, geom: OLGeometry}|Partial.<{instanceId: number}>)> 교차한 객체 목록. 인스턴스 메시는 인스턴스별로 instanceId가 붙는다. 3D Tiles 메시는 검사에서 제외되며 안내 메시지만 남긴다

clear()

선택기능 초기화 함수
선택/드로잉 상태를 초기화하고 측정 레이어의 draw feature를 정리합니다.

clearDrawnSelect()

드로잉으로 그려진 선택 영역(측정 도형)만 제거하는 함수
선택 목록(_selected)은 해제하고, 측정 레이어의 draw feature도 정리합니다.

clearHighlights()

선택 객체 전체의 하이라이트를 제거하는 함수.

clearSelect(isCheckIdle)

선택 취소하는 함수

Name Type Default Description
isCheckIdle boolean false optional

분할(mesh division(*u3f model 한정)) 상태 점검/정리 호출 여부

createVerticalObject(result)UGroup|undefined

선택 객체에 대해 지표면 기준 수직 보조 객체(빔 + 지면 하이라이트)를 생성하는 함수 opt.setVerticalObject === true일 때 선택 시 자동 생성되며, 필요 시 외부에서 직접 호출할 수 있습니다.

Name Type Description
result USelect

타일 mesh를 제외한 선택 객체. 월드 위치(position)와 지오메트리 또는 getBoundingBox()가 있어야 하며, 없으면 만들지 않는다

Returns:
Type Description
UGroup | undefined 앱 Scene에 추가된 수직 보조 그룹(빔 userData.verticalMesh, 지면 하이라이트 userData.planeMesh). 같은 객체에 이미 만든 것이 있으면 해제 후 교체한다. 만들 수 없으면 undefined

deactive()

선택기능 비활성화 함수
입력 리스너를 해제하고 그리던 영역 도형을 확정합니다. 마지막 이벤트가 end가 아니면(선택 동작 도중이면) clear()로 선택도 해제합니다.

drawByWork(work)boolean|undefined

getSelectWork() 형태의 작업 정보를 이용해 선택을 재현하는 함수

  • 드로잉(측정 레이어) 재생성
  • 교차 객체 탐색 후 선택/하이라이트 반영
Name Type Description
work Object

선택 작업 정보. type은 선택 모드, points는 위경도(EPSG:4326) 좌표 목록으로 getSelectWork()의 반환값을 그대로 넘긴다

Returns:
Type Description
boolean | undefined 재현 성공 시 true. 입력이 유효하지 않거나 앱·측정 레이어가 없으면 반환 없음(POINT 모드는 재현 후에도 반환 없음)

getClickId()string|undefined

내부 click 이벤트 등록 키를 반환하는 함수

Returns:
Type Description
string | undefined click listener key

getDbClickId()string|undefined

내부 dblclick 이벤트 등록 키를 반환하는 함수

Returns:
Type Description
string | undefined dblclick listener key

getMeasurePointList()undefined|Array.<GeoPosition>

현재 측정/드로잉 중인 점 목록을 반환하는 함수
AREA/LINE/CIRCLE 모드에서 드로잉 중일 때 유효합니다.

Returns:
Type Description
undefined | Array.<GeoPosition> 그리는 중인 도형의 꼭짓점 위경도(EPSG:4326) 목록. 측정 레이어가 없거나 점이 없으면 undefined

getMode()string

현재 선택된 모드를 반환하는 함수

Returns:
Type Description
string 선택 모드
(단일: 'point', 영역: 'area', 선: 'line', 반경: 'circle', 드래그 사각형: 'box'). 모드가 설정되지 않았으면 빈 문자열

getObjectKey(object)string|void

객체로부터 내부 선택 키를 생성하여 반환하는 함수

Name Type Description
object USelect

대상 객체

Returns:
Type Description
string | void 선택 키(생성 실패 시 반환 없음)

getSelectBox()U3dSelectionBox|undefined

BOX 선택 모드에서 사용되는 선택 박스 객체를 반환하는 함수

Returns:
Type Description
U3dSelectionBox | undefined 드래그 사각형을 그리는 선택 박스. BOX 모드로 활성화된 적이 없으면 undefined

getSelectCount()number

현재 선택된 모델의 개수를 반환하는 함수

Returns:
Type Description
number 선택된 모델 개수

getSelectType()string

현재 선택 하이라이트 타입을 반환하는 함수

Returns:
Type Description
string 선택 타입

getSelectTypeOption()KeyValue

현재 선택 하이라이트 타입의 옵션을 반환하는 함수

Returns:
Type Description
KeyValue outline 강조에 적용되는 mode·renderOrder 등의 옵션. 지정한 적이 없으면 빈 객체

getSelectWork()Object|void

현재 선택 작업(work) 정보를 반환하는 함수
반환값은 이벤트(change/end)의 e.work와 동일한 형태를 의도하며, drawByWork()에 넘겨 같은 선택을 재현할 수 있습니다. POINT 모드에서는 반환과 함께 내부 지점 목록을 비우므로 연속 호출 시 두 번째부터는 빈 목록이 됩니다.

Returns:
Type Description
Object | void 선택 모드와 위경도(EPSG:4326) 좌표 목록. 모드가 없거나 영역 도형이 확정되지 않았으면 반환 없음

getSelected()Array.<USelect>

선택된 객체를 반환하는 함수

Returns:
Type Description
Array.<USelect> 선택된 Mesh 객체 리스트

getSelectedAsKey(key)USelect|undefined

키로 선택 객체를 조회하는 함수

Name Type Description
key string

선택 키(레이어이름^객체id, getSelectedKey()나 getObjectKey()로 얻는 값)

Returns:
Type Description
USelect | undefined 그 키로 선택된 객체. 선택되어 있지 않으면 undefined

getSelectedKey()Array.<string>

선택된 객체 키 목록을 반환하는 함수

Returns:
Type Description
Array.<string> 선택 키 배열. 키는 레이어이름^객체id 형식이며 getSelectedAsKey()에 넘겨 객체를 얻을 수 있다

isActive()boolean

선택기능 활성화 여부를 반환하는 함수

Returns:
Type Description
boolean 선택 기능 활성화 여부

isExceptTexture()boolean|undefined

현재 선택 모델 텍스쳐 제외 여부를 반환하는 함수

Returns:
Type Description
boolean | undefined 선택 모델 텍스쳐 제외 여부(설정되지 않았으면 반환 없음)

off(type, listener)

이벤트리스너 제거 함수

Name Type Description
type string

이벤트 종류. 이 클래스가 dispatch하는 U3dSelect.EVENT의 값(start/change/end)과 BOX 모드의 pointerdown/pointermove/pointerup

listener function

제거할 콜백 함수(on에 넘긴 함수 자체)

on(type, listener)string|null

이벤트리스너 등록함수

Name Type Description
type string

이벤트 종류. 이 클래스가 dispatch하는 U3dSelect.EVENT의 값(start/change/end)과 BOX 모드의 pointerdown/pointermove/pointerup

listener EventCallBack

이벤트 발생 시 {type, data, work} payload를 받는 콜백

Returns:
Type Description
string | null 등록된 리스너 식별자. off(type, id)로 제거할 때 사용하며, 등록에 실패하면 null

remove()

U3dSelect 제거(dispose) 함수
선택 해제·비활성화 후 이 객체에 등록된 모든 이벤트 리스너(on으로 등록한 사용자 리스너 포함)를 제거하고 내부 자원을 해제합니다. 호출 후에는 다시 사용할 수 없습니다.

removeSelected(object)

해당 모델의 선택을 취소하는 기능

Name Type Description
object USelect

모델객체

removeTargetLayer(layerName)

선택 대상 레이어를 제거하는 함수

Name Type Description
layerName string

레이어 이름

removeVerticalObject(key, selected)

선택 해제 시 수직 보조 객체를 제거하는 함수

Name Type Description
key string

내부 선택 키(layerName + '^' + id)

selected USelect

선택 객체

resetSelectedColor()

선택 객체 출력 색 초기화 함수

resetSelectorColor()

선택 영역 형상 스타일 초기화 함수

setApp(app)

작동할 U3dApp을 설정하는 함수, (U3dSelect 객체를 작동하기 위하여 필수적으로 사용하여야 하는 함수)

Name Type Description
app U3dApp

U3dSelect가 작동할 App

setColor(selected, color, opacity, intersect)

선택 객체에 색상 하이라이트를 적용하는 함수 selectType === UDEF.SELECT_TYPE.COLOR|| ['color'] 에서 사용되며 외부에서 직접 호출할 수도 있습니다.

Name Type Description
selected USelect

대상 모델

color ColorRepresentation

변경 색상

opacity number

투명도(0~1)

intersect U3dIntersectLike optional

picking 정보(faceIndex 등)

setExceptTexture(exceptTexture)

선택 하이라이트 시 모델의 텍스처를 제외할지 설정하는 메서드.
true이면 하이라이트가 적용될 때 텍스처를 표시하지 않는다.

Name Type Description
exceptTexture boolean

선택 모델의 텍스처 제외 여부

setMode(mode)

선택 모드를 설정하는 함수
앱이 연결된 상태면 측정 레이어의 도형 종류를 모드에 맞게 바꾸고, 입력 리스너를 다시 등록한 뒤 clear()를 호출하므로 현재 선택과 그려진 도형이 모두 해제됩니다.

Name Type Description
mode string

선택 모드

  • UDEF.SELECT_MODE.POINT ['point'] | AREA ['area'] | LINE ['line'] | CIRCLE ['circle'] | BOX ['box']
Throws:

지원하지 않는 모드가 입력된 경우

Type
Error

setOutline(selected)

선택 객체에 Outline(외곽선) 하이라이트를 적용하는 함수 selectType === UDEF.SELECT_TYPE.OUTLINE|| 'outline' 에서 사용되며, 외부에서 직접 호출할 수도 있습니다.

Name Type Description
selected USelect

선택 객체(모델/메시)

setSelectType(val, typeOption)

선택 하이라이트 타입을 설정하는 함수

  • UDEF.SELECT_TYPE.OUTLINE||['outline'] : 외곽선 강조
  • UDEF.SELECT_TYPE.COLOR||['color'] : 색상 강조
Name Type Description
val string

선택 타입

typeOption KeyValue

타입 옵션 outline 일때 : {mode : U3dObjectBarrier.MODE의 값 중 하나, renderOrder: U3dObjectBarrier.RENDER_ORDER의 우선순위 값, ...}

setSelectedAsKey(key, select)

키로 선택 객체를 직접 설정하는 함수 일반적으로는 addSelected/removeSelected 사용을 권장합니다.

Name Type Description
key string

선택 키(레이어이름^객체id). 기존 키면 값을 덮어쓴다

select USelect

그 키로 등록할 객체. 하이라이트나 이벤트는 발생시키지 않고 목록에만 넣는다

setSelectedColor(color, opacity)

선택 객체 출력 색 변경 함수
현재 선택된 객체 전체와 수직 보조 객체에 즉시 적용되고, 이후 선택되는 객체에도 같은 색이 쓰입니다. color·opacity에 falsy 값(0, '' 등)을 주면 그 항목은 이전 값을 유지하므로 투명도 0은 지정할 수 없습니다.

Name Type Description
color ColorRepresentation

변경색(three.js가 받는 색 표현: 16진수 숫자, CSS 문자열, Color 객체)

opacity number

투명도 (0 ~1, 1이 불투명)

setSelectorColor(opt)

선택영역 형상 스타일 변경 함수
AREA/LINE/CIRCLE 모드에서 그려지는 도형의 외곽선·채움 스타일을 바꿉니다. 앱이 연결되기 전이거나 opt가 없으면 아무 것도 하지 않습니다.

Name Type Description
opt SelectorColorOption optional

바꿀 스타일. 생략한 항목은 측정 레이어 기본값을 유지한다

setTexture(model, exceptTexture)

선택 표시에서 텍스쳐를 제외/복원하는 함수

Name Type Description
model USelect

대상 모델(UMesh/THREE.Mesh 등)

exceptTexture boolean

true면 텍스쳐를 제외, false면 복원