질문답변

제목[re]시설물 추가 관련 문의드립니다.2025-09-16 11:50
카테고리GeOnDT for JS
작성자

안녕하세요 . 시설물 추가 관련 문의 답변 드립니다 .

 

============================================================================================


1. 라이브러리 만의 객체 정보. 즉 서버에서 불러온 원본 모델의 정보는 어디에 존재하는가. 

 

 UI 이벤트로 컴포넌트를 생성할 때 서버에서 불러온 원본 모델( .3ds, .fbx 등 )은 분석모드(UAnalyMultipleComponent )에 등록된 컴포넌트 레이어( analy.getLayer() ) _listModel 에 배열로 저장되어 있습니다.
layer._listModel 또는 layer.getListModel() 함수를 통해 접근할 수 있습니다.


2. 클릭으로 추가된 컴포넌트의 원본 모델 정보는? 

 

분석 모드 클릭 시 추가되는 컴포넌트의 정보는 layer._drawObject에서 찾을 수 있습니다.
 layer._drawObject는 컴포넌트 원본 객체들의 그룹이고, 해당 그룹의 이름이 _listModel 의 키값이 됩니다. 

즉 layer._drawObject.name 의 값으로 _listModel의 배열을 검사해 원본 모델 정보를 가져올 수 있습니다.


3. 위치/회전/크기 값은 어떻게 구하나. 

 

위치 : app.closestPointAtPixel(e.data);로 구할수 있습니다. 
크기나 회전값: layer._scale,  layer._rotation 값으로 구할 수 있습니다.

 

4. 분석 모드 이벤트 등록/제거 

 

analy.on (type, listener) 으로 이벤트를 등록하고 analy.unkey (type, key) 로 이벤트를 제거할 수 있습니다.
특정 이벤트가 아니라 이벤트 전체 제거는 사용하신대로 removeEventListener API를 사용하시면됩니다. 

 

 

 

이해를 돕기 위해 첨부해주신 코드 기반으로 예시 작성해드렸습니다.  참고해주세요

this.addComponent.bind(this)(id).then(()=>{
    this.analy.removeEventListener();
    if( ) else if () 
    ..... 
    
    // 이벤트 리스너 on 추가 
    // removeEventListener 나 addSingle() API 호출로 리스너가 초기화됩니다. 
    // 때문에 호출 하고 꼭 그 아래에 리스너를 추가 등록해야 이벤트를 인식합니다. 

    this.analy.on(("click") (e)=>{ // 클릭 이벤트 등록      
        const position = app.closestPointAtPixel(e.data);  // 클릭좌표 (컴포넌트 추가 위치_) : 위치 값

        const layer = e.target.getLayer(); // U3dMultipleComponentLayer

        const roateion = layer._rotation; // THREE.Euler (radian 각도) : 회전값
        const scale = layer._scale; // THREE.Vector3 : 크기값

        const drawObj = layer._drawObject.name; // ex ) "building2" // 컴포넌트 원본 모델 키 
        const modelList = layer.getListModel(); // 로드된 원본 모델 데이터 목록 

        // 클릭으로 생성된 컴포넌트 원본 모델 정보를 이름 비교로 찾을 수 있습니다. 
        const modelInfo = modelList.find((model){
            return model.name === drawObj;
        });
    } )
});