안녕하세요 . 시설물 추가 관련 문의 답변 드립니다 .
============================================================================================
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;
});
} )
});
|