EgisCorp / XDWorld

WebGL 기반 3D GIS 엔진
15 stars 7 forks source link

objKey로 객체 가능 여부 #411

Closed Ejeongs2 closed 3 months ago

Ejeongs2 commented 3 months ago

엔진 버전 : XDWorld Version : 2.3.0 문의 내용 : 객체 선택을 위해 Module.XDSetMouseState(Module.MML_SELECT_POINT)를 사용하고 있습니다. 클릭형식이 아닌 objKey값을 이용해 선택 객체가 빨강색으로 활성화되는 기능이 필요합니다.

클릭 형식이 아닌 objKey값으로 객체표시를 하는 방법이 있을까요?

YunSumin commented 3 months ago

안녕하세요,

오브젝트 키 객체 조회를 통해 선택상태 지정 관련하여 코드 전달드립니다. 오브젝트 키는 각 레이어마다 중복될 수 있으므로, 선택 시 레이어 정보도 함께 필요합니다.

만약 이름이 "COLOR_POLYGONS"인 레이어에 키 값이 "POLYGON_2"인 오브젝트가 존재하는 경우, 아래와 같이 오브젝트를 참조하여 선택상태로 지정할 수 있습니다.

function selectObject(_layerName, _id) {

    var layer = Module.getObjectLayerList().nameAtLayer(_layerName);
    if (layer == null) {
        return;
    }

    var object = layer.keyAtObject(_id);
    if (object == null) {
        return;
    }

    Module.getMap().setSelectObject(object);

    Module.XDRenderData();
}

image

오브젝트가 real3d 건물 오브젝트인 경우, 위 코드에서 getObjectLayerList 부분을 getTileLayerList로 변경하셔서 적용하시면 됩니다.

function selectObject(_layerName, _id) {

    var layer = Module.getTileLayerList().nameAtLayer(_layerName);
    if (layer == null) {
        return;
    }

    var object = layer.keyAtObject(_id);
    if (object == null) {
        return;
    }

    Module.getMap().setSelectObject(object);

    Module.XDRenderData();
}
selectObject("facility_build", "B143420A");

image

위 코드에서는 JSMap의 setSelectObject API를 사용하여 단일 객체를 선택 상태로 지정하였습니다. 만약 여러 오브젝트를 선택하고자 하는 경우, addSelectObject API를 이어서 사용하시면 기존 오브젝트의 초기화 없이 여러 오브젝트를 선택하실 수 있습니다.

var map = Module.getMap();

var object = layer.keyAtObject("objectA");
if (object != null) {
    map.addSelectObject (object);
}

object = layer.keyAtObject("objectB");
if (object != null) {
    map.addSelectObject (object);
}

오브젝트 선택 상태를 초기화 하고 싶으신 경우 clearSelectObj API를 활용하시면 됩니다.

Module.getMap().clearSelectObj();