질문답변

제목[re]2D객체제어 문의 드립니다.2025-10-17 09:09
카테고리GeOnDT for JS
작성자

안녕하세요. 문의하신 내용 확인 후 답변드립니다.

 

U2dVectorShaderLayer는 타일 단위로 타일 위에 직접 덧그리는 구조로 되어 있습니다.
이러한 구조에서는 하나의 Mesh만으로 visible 상태를 제어할 경우,
특정 Feature의 가시화 제어가 올바르게 동작하지 않을 수 있습니다.

이에 대한 대안으로 투명도(Opacity)를 활용한 가시화 제어 방법을 안내드립니다.

 

투명도 제어로 인한 가시화 제어 방법

  1. 대상 feature 가시화 off

const feature = '대상 feature'; // vectorLayer._featuresMap.get(featureId); 를 통해서 feature를 반환 받을수 있습니다.
const cacheItems = vectorLayer._cache.items(); //현재 cache 의 값들을 반환
const cacheItemsList = Object.values(cacheItems); //key, value로 설정 되어있는 객체 value의 목록으로 반환
const style = feature.getStyle(); // 대상 스타일 저장 (복구시 필요)
console.log(style);

for (let i = 0; i < cacheItemsList.length; i++) {
    const mesh = cacheItemsList[i];
    const tileKey = mesh.userData.tileKey;
    const tile = app._drawArg.getTile(tileKey);
    vectorLayer.setFeatureStyle(feature, {fillOpacity:0, strokeOpacity: 0}) // 스타일 변경 (채움 투명도, 선 투명도)
    vectorLayer.disposeTile(tile); // 타일 지우기
    vectorLayer.addTileFromScene(tile); // 타일 추가하여 다시 그리기
}

 

    

  - 스타일 변경으로 가시화 제어 전                                                                                            - 스타일 변경으로 가시화 제어 후

 

 2. 대상 feature 가시화 on

const feature = '복구 대상 feature'
const style = '이전에 저장한 대상 feature의 style';
const cacheItems = vectorLayer._cache.items(); //현재 cache 의 값들을 반환
const cacheItemsList = Object.values(cacheItems); //key, value로 설정 되어있는 객체 value의 목록으로 반환
for (let i = 0; i < cacheItemsList.length; i++) {
    const mesh = cacheItemsList[i];
    const tileKey = mesh.userData.tileKey; // mesh가 해당하는 tileKey 값
    const tile = app._drawArg.getTile(tileKey); 
    vectorLayer.setFeatureStyle(feature, style) // 원래의 스타일 복구하여 설정하기
    vectorLayer.disposeTile(tile); // 타일 지우기
    vectorLayer.addTileFromScene(tile); // 타일 다시 그리기
}
 

 

이상으로 답변드리며, 추가 문의사항이나 도움이 필요하신 부분이 있으시면 언제든지 말씀해주시기 바랍니다.
감사합니다.