안녕하세요.
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 조원석부작님께서 받으신 메일에 첨부되어 있으나, 혹시 몰라 다시 첨부드립니다.
감사합니다.
|