GeOnDT GeOnDT for JS

Class: U3dGeometry

U3dGeometry

~extends UEventDispatcher
모든 3D 도형이 상속하는 기반 클래스입니다.
좌표·색상·투명도·그림자·사용자 정의 속성처럼 도형 종류와 무관한 공통 속성과 동작을 제공하며, 점·선·육면체 같은 실제 도형은 이 클래스를 상속한 하위 클래스로 만듭니다.

좌표는 두 가지를 함께 다룹니다. setPositions·addPosition으로 넣는 위경도(EPSG:4326)는 도형이 속한 레이어가 월드 좌표로 바꿔 넣고, setVertex·addVertex로 넣는 월드 좌표(EPSG:3857)는 곧바로 지오메트리에 반영됩니다.

new U3dGeometry(opt, isInit)

3D 도형의 기반 객체를 생성합니다. (주로 하위 클래스에서 상속하여 사용합니다)

Name Type Default Description
opt U3dGeometryCO {} optional

생성 옵션 (이름·색상·투명도·좌표 등 공통 옵션)

isInit boolean true optional

true면 생성 시 즉시 초기화합니다. 상속 클래스에서 초기화를 미룰 때만 false를 사용합니다

Members

이 도형이 발생시키는 이벤트의 이름 모음입니다.
geometry.on(U3dGeometry.EVENT.CHANGE, handler)처럼 리스너를 등록할 때 사용합니다.

도형 표면 색상입니다.
생성 시에는 THREE.Color로 변환해 담고, setColor로 바꾸면 넘긴 값이 그대로 들어갑니다. 재질에 반영하려면 setColor를 사용합니다.

depthOffsetnumber undefined

깊이 판정을 카메라 쪽으로 당기는 보정치입니다. (미터)
지형에 반쯤 묻힌 도형이 잘려 보이는 것을 줄이는 데 사용하며, 값을 지정한 적이 없으면 undefined입니다. 자세한 동작은 setDepthOffset에서 설명합니다.

dynamicDepthOffsetboolean

깊이 보정치를 매 프레임 자동으로 측정할지 여부입니다.
true면 렌더 직전에 지형에 묻힌 정도를 재서 depthOffset 대신 그 값을 사용합니다. 기본값은 false입니다.

namestring

도형 이름입니다.
레이어에서 도형을 찾을 때 쓰는 식별자이며, 생성 옵션에 넣지 않으면 무작위 문자열이 자동으로 만들어집니다.

opacitynumber

불투명도입니다. (0~1)
0이면 완전 투명, 1이면 불투명하며 기본값은 0.7입니다. 재질에 반영하려면 setOpacity를 사용합니다.

typestring

도형 종류 식별자입니다.
기본값은 'basic'이며, 이 값으로 무엇이 달라지는지는 하위 클래스마다 다릅니다. 예를 들어 육면체는 'topimage'를 넣으면 윗면에 이미지를 입힌 재질로 만듭니다.

wireframeboolean

면을 채우지 않고 삼각형 모서리만 선으로 그릴지 여부입니다.
형태와 분할 상태를 확인할 때 사용하며 기본값은 false입니다.

Methods

addPosition(x, y, z)

도형에 위경도 좌표를 하나 추가합니다.
좌표를 넣어 두면 도형이 속한 레이어가 월드 좌표로 바꿔 형상에 반영합니다.

Name Type Description
x Vector3 | number

좌표 하나를 담은 Vector3, 또는 경도 (EPSG:4326)

y number optional

위도 (EPSG:4326). 첫 번째 인자에 숫자를 넣었을 때만 사용합니다

z number optional

높이 (미터). 첫 번째 인자에 숫자를 넣었을 때만 사용합니다

addProperties(key, value)

사용자 정의 속성을 하나 추가합니다.
이미 같은 키가 있으면 값을 덮어쓰지 않고 콘솔에 기록을 남깁니다. 값을 바꿀 때는 changeProperties를 사용합니다.

Name Type Description
key string

속성을 구분할 키. 빈 문자열은 추가하지 않습니다

value *

키에 담을 값. 형식에 제한이 없고 화면 표현에는 쓰이지 않으며, undefined와 null은 추가하지 않습니다

addVertex(vec3)

꼭짓점 좌표를 추가합니다.

Name Type Description
vec3 WorldPositionVector3

추가할 꼭짓점 좌표 (월드 좌표, EPSG:3857)

addWorldPosition(x, y, z)

월드 좌표를 위경도로 변환해 도형에 좌표로 추가합니다.
월드 좌표를 그대로 두려면 addVertex를 사용합니다.

Name Type Description
x number

월드 X좌표 (EPSG:3857)

y number

월드 Y좌표 (EPSG:3857)

z number

월드 Z좌표 (EPSG:3857). 위도 보정 배율을 곱해 미터 높이로 바뀝니다

changeProperties(key, value)

이미 있는 사용자 정의 속성의 값을 바꿉니다.
없는 키를 넘기면 값을 만들지 않고 콘솔에 기록을 남깁니다. 새로 넣을 때는 addProperties를 사용합니다.

Name Type Description
key string

값을 바꿀 속성의 키

value *

새로 넣을 값. undefined와 null은 반영하지 않습니다

getCenter()Vector3

도형의 중심점을 반환합니다. (지오메트리 경계 상자의 중심 기준)

Returns:
Type Description
Vector3 도형 로컬 좌표 기준 중심점. 호출할 때마다 새 벡터를 만들어 돌려줍니다

getDepthOffset()number|undefined

현재 깊이 보정값을 반환합니다.

Returns:
Type Description
number | undefined 깊이 보정값 (미터). 깊이 보정하지 않으면 undefined를 반환합니다.

getDepthOffsetFunction()function|undefined

현재 설정된 depthOffset 측정 함수를 반환합니다. (setDepthOffsetFunction과 짝을 이룹니다)

Returns:
Type Description
function | undefined 설정해 둔 측정 함수. 설정한 적이 없으면 undefined이며 이때는 기본 측정 함수를 사용합니다

getDynamicDepthOffset()boolean

깊이 보정치를 매 프레임 자동으로 측정하는 상태인지 반환합니다. (setDynamicDepthOffset과 짝을 이룹니다)

Returns:
Type Description
boolean 자동 측정을 사용하면 true

getGeometry()UBufferGeometry

이 도형이 사용하는 BufferGeometry 객체를 반환합니다.

Returns:
Type Description
UBufferGeometry 정점·법선 같은 형상 데이터를 담은 지오메트리. 이 도형이 쓰고 있는 객체이므로 고치면 화면에도 반영됩니다

getImage()string|undefined

도형 재질에 적용된 이미지 텍스처의 URL을 반환합니다. (setImage와 짝을 이룹니다)

Returns:
Type Description
string | undefined 마지막으로 setImage에 넘긴 URL. 호출한 적이 없으면 undefined이며, 재질이 없어 실제로 입히지 못한 경우에도 넘긴 URL이 그대로 남습니다

getLineColor()ColorLike

외곽선 색상을 반환합니다. (setLineColor와 짝을 이룹니다)
지정한 적이 없으면 기본값 '#000000'입니다. 외곽선이 없는 도형에서는 setLineColor가 값을 저장하지 않으므로 생성 옵션에 넣은 값이 그대로 남습니다.

Returns:
Type Description
ColorLike 외곽선 색상

getMaterial()Material|Array.<Material>|undefined

도형에 적용된 재질(Material) 객체를 반환합니다.

Returns:
Type Description
Material | Array.<Material> | undefined 이 도형이 쓰고 있는 재질. 면마다 다른 재질을 쓰는 도형은 배열이며, 재질을 만들기 전이면 undefined

getParam()*

모든 도형이 공통으로 갖는 속성(색상·투명도·그림자·와이어프레임)을 반환합니다. (setParam과 짝을 이룹니다)
각 도형의 고유 속성은 하위 클래스가 이 메서드를 오버라이드해서 덧붙이며, 그 안에서 super.getParam()을 펼쳐 공통 속성을 함께 담습니다. 다만 U3dFlowPipe처럼 공통 속성을 담지 않고 자체 속성 객체만 돌려주는 도형도 있어, 반환 타입은 도형마다 다릅니다.

Returns:
Type Description
* 현재 속성 객체. color·opacity·lineColor·shadow·wireframe·depthOffset·dynamicDepthOffset·depthOffsetFunction이 담기며, 호출할 때마다 새 객체를 만들어 돌려줍니다
Example
const param = geometry.getParam();
other.setParam(param);   // 같은 속성으로 맞추기

getPositions()Array.<GeoPositionVector3>

도형의 위경도 좌표 배열을 반환합니다.

Returns:
Type Description
Array.<GeoPositionVector3> 위경도 좌표 배열 (EPSG:4326)

getProperties()KeyValue

도형에 저장된 사용자 정의 속성(properties)을 반환합니다.
properties는 id·이름·업무 데이터 등 임의의 부가 정보를 key-value 형태로 담아 두는 공간입니다.

Returns:
Type Description
KeyValue 사용자 정의 속성 (key-value)

getShowLabel()boolean

라벨을 표시하는 상태인지 반환합니다. (setShowLabel과 짝을 이룹니다)

Returns:
Type Description
boolean 라벨을 표시하면 true

getVertex()Array.<WorldPositionVector3>

도형의 꼭짓점 좌표(월드 좌표) 배열을 반환합니다.

Returns:
Type Description
Array.<WorldPositionVector3> 꼭짓점 좌표 배열 (월드 좌표, EPSG:3857)

getVertexIndex(vec3)number

좌표의 인덱스를 조회합니다. 내부 _coordinates 배열(위경도)에서 동일 참조의 인덱스를 반환합니다.

Name Type Description
vec3 GeoPositionVector3

조회할 좌표 (위경도, EPSG:4326)

Returns:
Type Description
number 일치하는 좌표의 인덱스, 없으면 -1

isShadow()boolean

도형의 그림자가 켜져 있는지 여부를 반환합니다.

Returns:
Type Description
boolean 그림자를 드리우면 true. 그림자를 드리우는 설정만 확인합니다

removePosition(idx)

지정한 인덱스의 위경도 좌표를 제거합니다.

Name Type Description
idx number

제거할 좌표 인덱스

removeProperties(key)

지정한 키의 사용자 정의 속성을 제거합니다.
없는 키를 넘기면 아무것도 바뀌지 않습니다.

Name Type Description
key string

제거할 속성의 키

removeVertex(idx)

지정한 인덱스의 꼭짓점 좌표를 제거하고 지오메트리를 갱신합니다.

Name Type Description
idx number

제거할 꼭짓점 인덱스

setColor(color)

도형의 색상을 설정합니다.

Name Type Description
color ColorRepresentation

도형 색상. 16진수 숫자(0xff0000), CSS 색 문자열('#ff0000') 또는 THREE.Color를 넣습니다

setDepthOffset(depthOffset)

도형이 지형이나 다른 모델에 가려지는 것을 완화하도록 깊이 값을 카메라 쪽으로 당깁니다.
0보다 크면 그만큼 앞에 있는 것처럼 깊이 판정을 받아, 지면에 반쯤 묻힌 도형이 경사지에서 지형에 잘려 보이는 문제를 줄일 수 있습니다. 깊이 테스트는 그대로 켜져 있으므로, 이 범위를 넘어서 앞에 있는 것은 여전히 이 도형을 가립니다.

사용자는 미터 단위로 지정하며, 렌더 직전에 월드 단위로 변환됩니다. dynamicDepthOffset이 켜져 있으면 동적 계산값을 적용하고, 계산할 수 없을 때만 사용자 지정값을 사용합니다.

Name Type Description
depthOffset number

카메라 쪽으로 당길 최소 거리 (미터). 0을 넣으면 보정하지 않는 것과 같고, 음수는 0으로 맞춥니다. 숫자로 바꿀 수 없는 값을 넣으면 undefined가 되어 getDepthOffset도 undefined를 돌려줍니다

Example
disc.setDepthOffset(10); // 10m

setDepthOffsetFunction(func)

dynamicDepthOffset이 true일 때 매 프레임 지형 묻힘 정도를 측정하는 데 사용할 함수를 설정합니다.
측정 함수는 {drawArg, object, camPos, size, cameraDistance}를 인자로 받아 미터 단위 depthOffset을 돌려줍니다.
함수가 아닌 값은 등록하지 않고 지금 설정을 유지합니다. 설정한 적이 없으면 기본 측정 함수(measureGroundDepthOffset)를 사용합니다.

Name Type Description
func function

깊이 보정치를 재는 함수. {drawArg, object, camPos, size, cameraDistance}를 받아 미터 단위 값을 반환합니다

Example
disc.setDepthOffsetFunction(({cameraDistance}) => cameraDistance * 0.001);

setDynamicDepthOffset(enabled)

렌더 직전에 지형 묻힘 정도를 자동으로 측정할지 지정합니다.

Name Type Description
enabled boolean

true면 렌더 직전에 묻힘 정도를 재서 쓰고, false면 depthOffset에 지정한 값을 그대로 씁니다

setGeometry(geometry)

이 도형의 BufferGeometry 객체를 교체합니다.

Name Type Description
geometry UBufferGeometry

새로 사용할 지오메트리. 이전 지오메트리는 자동으로 해제되지 않습니다

setImage(url)

도형 재질에 이미지 텍스처를 입힙니다.
이미지는 비동기로 내려받으며, 다 받은 뒤 가로가 길면 좌우를, 세로가 길면 상하를 뒤집어 붙입니다. 이미 붙여 둔 이미지가 있으면 함께 해제합니다.

Name Type Description
url string

이미지 URL

setLineColor(lineColor)

외곽선(테두리 선) 색상을 설정합니다.
외곽선을 가진 도형에만 적용되며, 외곽선이 없는 도형에서 호출하면 색을 바꾸지 않고 콘솔에 기록을 남깁니다.

Name Type Description
lineColor ColorLike

외곽선 색상. 16진수 숫자(0x000000), CSS 색 문자열('#000000') 또는 THREE.Color를 넣습니다

setMaterial(material)

도형의 재질(Material) 객체를 설정합니다.

Name Type Description
material *

새로 사용할 재질. 면마다 다르게 하려면 배열을 넘깁니다. 하위 클래스는 이 메서드를 재정의해 다른 값을 받기도 합니다

setOpacity(opacity)

도형의 투명도를 설정합니다. (0이면 완전 투명, 1이면 불투명)

Name Type Description
opacity number

투명도 (0~1)

setParam(param)

모든 도형이 공통으로 갖는 속성을 일괄 적용합니다.
각 도형의 고유 속성(width, piperadius 등)은 하위 클래스가 이 메서드를 오버라이드해서 처리하며, 그 안에서 super.setParam(param)으로 이 공통 처리를 먼저 수행합니다.

Name Type Description
param * optional

변경할 속성 객체. color·opacity·shadow·lineColor·wireframe·depthOffset·dynamicDepthOffset·depthOffsetFunction을 읽으며, 넣지 않은 항목은 현재 값을 유지합니다

Example
geometry.setParam({ color: '#ff0000', opacity: 0.5 });

setPosition(x, y, z)

도형의 위경도 좌표를 이 좌표 하나로 바꿉니다. (기존 좌표는 모두 대체됩니다)

Name Type Description
x Vector3 | number

좌표 하나를 담은 Vector3, 또는 경도 (EPSG:4326)

y number optional

위도 (EPSG:4326). 첫 번째 인자에 숫자를 넣었을 때만 사용합니다

z number optional

높이 (미터). 첫 번째 인자에 숫자를 넣었을 때만 사용합니다

setPositions(coordinates)

위경도 좌표 배열을 설정합니다.

Name Type Description
coordinates Array.<GeoPositionVector3>

위경도 좌표 배열 (EPSG:4326)

setProperties(input)

도형의 사용자 정의 속성 전체를 통째로 설정합니다. (기존 속성은 대체됩니다)
객체 또는 JSON 문자열을 받아 내부에 깊은 복사로 저장하며, 객체가 아니면 무시됩니다.

Name Type Description
input KeyValue | string

속성 객체 또는 JSON 문자열

setRotation(rotation)

도형의 회전값을 설정합니다.
세 축의 각도를 한 번에 지정하며, 값에서 x·y·z만 읽습니다. 하위 클래스가 이 메서드를 다르게 재정의하기도 합니다. U3dAdaptedGeometry는 도(degree) 단위 숫자 세 개를 받습니다.

Name Type Description
rotation Euler

각 축 기준 회전 각도 (라디안). Math.PI / 2가 90도입니다

setShadow(enabled)

도형의 그림자(그림자를 드리우고 받는 것) 사용 여부를 설정합니다.

Name Type Default Description
enabled boolean true optional

그림자 활성화 여부 (true면 켜고, false면 끕니다)

setShowLabel(val)

도형에 붙은 라벨을 화면에 표시할지 정합니다. (기본값 true)

Name Type Description
val boolean

true면 라벨을 표시하고 false면 감춥니다

setTransparent(val)

도형 재질의 투명 처리(transparent)를 켜거나 끕니다.
재질이 하나인 도형에서는 이미 켜져 있는 투명 처리를 끄지 않으므로, 불투명하게 되돌릴 때는 setOpacity(1)을 사용합니다.

Name Type Description
val boolean

true면 투명 처리를 켭니다

setVertex(vertex)

도형의 꼭짓점 좌표(월드 좌표)를 설정하고 지오메트리를 갱신합니다.

Name Type Description
vertex Array.<WorldPositionVector3>

꼭짓점 좌표 배열 (월드 좌표, EPSG:3857)

Type Definitions

U3dGeometryCOobject

~extends UEventDispatcher~UEventDispatcherCO
U3dGeometry 생성자 옵션 입니다.

Properties:
Name Type Argument Default Description
name string <optional>

도형 이름. 레이어에서 도형을 찾을 때 쓰는 식별자이며, 넣지 않으면 무작위 문자열이 자동으로 만들어집니다

color ColorRepresentation <optional>
'#ff0000'

도형 표면 색상. 16진수 숫자(0xff0000), CSS 색 문자열('#ff0000') 또는 THREE.Color를 넣습니다. 검정은 16진수 0x000000이 0으로 취급되어 기본값이 적용되므로 '#000000'처럼 문자열로 넣습니다

opacity number <optional>
0.7

불투명도 (0~1). 넣지 않으면 0.7이며, 값을 재질에 어떻게 반영하는지는 도형 종류마다 다릅니다. 만든 뒤에 바꿀 때는 setOpacity를 사용합니다

type string <optional>

타입 식별자 (하위 클래스마다 의미가 다름)

wireframe boolean <optional>
false

면을 채우지 않고 삼각형 모서리만 선으로 그릴지 여부. 형태와 분할 상태를 확인할 때 사용합니다

depthOffset number <optional>

지형이나 다른 객체에 묻혀 가려지는 것을 완화하도록 깊이(depth) 값을 카메라 쪽으로 당기는 보정치 (미터). 1이면 1m만큼 당기며, 넣지 않으면 보정하지 않습니다

dynamicDepthOffset boolean <optional>
false

카메라 이동에 따라 동적으로 depthOffset을 연산할지 여부.

depthOffsetFunction Class.<measureGroundDepthOffset> <optional>

dynamicDepthOffset이 true일 때, depthOffset을 동적으로 측정하는 데 사용되는 함수.

vertices Array.<WorldPositionVector3> <optional>

꼭짓점 좌표 배열 (월드 좌표, EPSG:3857)

coordinates Array.<GeoPositionVector3> <optional>

위치 좌표 배열 (위경도, EPSG:4326)

showLabel boolean <optional>
true

도형에 붙은 라벨을 화면에 표시할지 여부

properties KeyValue <optional>

도형과 함께 보관할 사용자 정의 속성. 화면 표현에는 쓰이지 않으며 클릭한 도형의 부가 정보를 담을 때 사용합니다

lineColor ColorLike <optional>
'#000000'

외곽선(테두리 선) 색상. 외곽선을 그리는 도형에만 적용됩니다

U3dGeometryEMIobject

모든 도형이 공통으로 발생시키는 이벤트 이름입니다.
geometry.on(U3dGeometry.EVENT.CHANGE, handler)처럼 리스너를 등록할 때 사용합니다.

Properties:
Name Type Description
CHANGE string

좌표·회전·투명 처리·투명도가 바뀔 때 발생합니다. data에 도형 객체가 담기며, 하위 클래스가 자신의 변경 시점에도 발생시킵니다. setColor는 이 이벤트를 발생시키지 않습니다

BEFORE_DISPOSE string

도형을 정리할 때 발생합니다. 벡터 레이어의 removeGeometry·clear가 DISPOSE와 잇달아 발생시킵니다

DISPOSE string

도형 정리가 끝났음을 알립니다. 일부 도형은 자체 dispose()에서도 발생시킵니다

U3dGeometryStyleParamobject

모든 도형이 공통으로 갖는 속성입니다.
setParam에 넘기는 값이자 getParam이 돌려주는 값이며, 도형 고유 속성은 하위 클래스가 여기에 덧붙입니다.

Properties:
Name Type Argument Description
color ColorRepresentation <optional>

도형 표면 색상. 16진수 숫자, CSS 색 문자열 또는 THREE.Color

opacity number <optional>

불투명도 (0~1). 1보다 작으면 투명 처리가 켜집니다

lineColor ColorLike <optional>

외곽선(테두리 선) 색상

shadow boolean <optional>

그림자를 드리우고 받을지 여부

wireframe boolean <optional>

면을 채우지 않고 모서리만 선으로 그릴지 여부

depthOffset number <optional>

깊이 판정을 카메라 쪽으로 당기는 보정치 (미터)

dynamicDepthOffset boolean <optional>

렌더 직전에 묻힘 정도를 재서 depthOffset을 대신할지 여부

depthOffsetFunction function <optional>

dynamicDepthOffset이 켜져 있을 때 보정치를 재는 함수

U3dOutlineAliasCOobject

외곽선(테두리 선) 표시 여부를 지정하는 옵션입니다.
도형 종류와 무관하게 outline 하나로 지정하며, 나머지 셋은 예전 코드가 쓰던 같은 뜻의 이름입니다. 여러 이름을 함께 넣으면 outline → useline → useLine → edge 순으로 먼저 찾은 값을 사용합니다.

Properties:
Name Type Argument Description
outline boolean <optional>

외곽선을 표시할지 여부. 켜면 면과 면이 만나는 모서리를 선으로 덧그리며, 선 색은 lineColor로 정합니다

useline boolean <optional>

outline의 예전 이름. 새 코드에서는 사용하지 않습니다

useLine boolean <optional>

outline의 예전 이름. 새 코드에서는 사용하지 않습니다

edge boolean <optional>

outline의 예전 이름. 새 코드에서는 사용하지 않습니다