질문답변

제목3ds 로드 시 세부 요소 위치 문의2026-03-04 15:53
카테고리GeOnDT for JS
작성자
첨부파일container_a.zip (15.36MB)

안녕하세요.

ESS 성능평가 김희정 대리입니다.

 

3ds 파일을 지도에 뿌릴 때 세부 요소들이 가운데에 몰리는 현상 관련하여 문의드립니다.

 

 

 

레이어 생성 및 컴포넌트 로드 부분입니다.

 

  async _initComponentLayer(name) {

    // 컴포넌트를 담을 레이어 생성

    const layer = this.app.createMultipleComponentLayer({

      name: name,

      needxml: false,

      listmodel: [],

      setinstanced: false,

    });

 

    this.app.addLayer(layer);

    this.app.showLayer(name, true);

 

    // 상세 컴포넌트 불러오기

    await new Promise((resolve, reject) => {

      layer.then(async () => {

        try {

          const loader = new ComponentLoader(this.app, layer);

          await loader.loadComponents();

          resolve();

        } catch (err) {

          reject(err);

        }

      });

    });

    return layer;

  }

 

 

 

 

ComponentLoader 에서 객체를 배치하는 세부 로직은 다음과 같습니다.

 

  async _ensureModelLoaded(info) {

    const loadTask = (async () => {

      if (!this.layer.getLoadedModel(info.name)) {

        this.layer.loadModel({

          name: info.name,

          baseurl: info.baseUrl.endsWith('/') ? info.baseUrl : info.baseUrl + '/',

          fileName: info.fileName,

          ext: info.type,

        });

      }

      const modelInfo = this.layer.getModelInfo(info.name);

      if (modelInfo?.ready) await modelInfo.ready;

    })();

    return loadTask;

  }

 

 

이후 다음 함수를 호출합니다.

 

  _placeSingleModel(obj) {

    const modelName = obj.components[0].properties.lyr_nm;

    if (!this.layer.getLoadedModel(modelName)) return;

    try {

      const position = this._parsePosition(obj.components[0]);

      const component = this.layer.addPosition(position);

 

//  참고용 position

  // geoPosition: {x: 127.1104637675, y: 35.9767698632, z: 37.79130000000001}

  // instanced: true

  // isUpdate: true

  // labelVisible: false

  // mixers: []

  // name: "DF_ISWL_01"

  // object: "container_a"

  // position: UGPoint {x: -196971.98087197455, y: -65751.98532760638, z: 37.79130000000001}

  // rotation: {x: 0, y: 0, z: 0}

  // scale: {x: 1, y: 1, z: 1}

 

      if (component) this.setLODMode(component);

    } catch (err) { console.error(err); }

  }

 

 

 

 

3ds 파일은 3/3 조원석부작님께서 받으신 메일에 첨부되어 있으나, 혹시 몰라 다시 첨부드립니다.

 

 

감사합니다.