WIN32_FIND_DATA File_Data; 파일 정보를 구조체
HANDLE hFile;
LPCSTR path = "D:\\EXTool\\test\\ani\\*.woa";
hFile = FindFirstFile( path, &File_Data); //폴더에 있는 첫번째 파일 정보를 읽어 온다.
if(hFile == INVALID_HANDLE_VALUE) //파일읽기 실패
return;
do{
char* temp = new char[sizeof(File_Data.cFileName)];
//wcscpy(temp,File_Data.cFileName); //유니코드일경우
strcpy(temp,File_Data.cFileName);
m_FileName.push_back(temp);
}while(FindNextFile(hFile,&File_Data)); //다음 파일 정보를 알아온다.
FindClose(hFile);
리스트 컨트롤에는 디자인 방식은 큰 아이콘, 작은 아이콘, 리스트, 리포트가 있습니다.
리스트와 리포트에 차이는 리스트는 수평으로 아이템이 늘어나서 수평 스크롤이 생기고,
리포트는 수직이 스크롤이 생김니다.
리스트는 아이템을 바로 추가 해줄수있지만 리포트에서는 컬럼을 만든후에 아이템을 추가 해주어야 함니다.
컬럼 추가하기 - m_ctrList.InsertColumn(0,_T("이름"),LVCFMT_LEFT,200);
아이템 추가하기 - m_ctrList.InsertItem(0,_T("aaa"));
선택된 아이템 인덱스 알아오기
POSITION pos = m_ctrList.GetFirstSelectedItemPosition(); //처음에 선택된 인덱스 1부터 시작
while(pos)
{
int nSelItem = m_ctrList.GetNextSelectedItem(pos);
//다음에 선택된 인덱스로 포인터를 돌려주고 그 전에 선택된 인덱스를 돌려준다. 0번부터 시작
}
리스트와 리포트에 차이는 리스트는 수평으로 아이템이 늘어나서 수평 스크롤이 생기고,
리포트는 수직이 스크롤이 생김니다.
리스트는 아이템을 바로 추가 해줄수있지만 리포트에서는 컬럼을 만든후에 아이템을 추가 해주어야 함니다.
컬럼 추가하기 - m_ctrList.InsertColumn(0,_T("이름"),LVCFMT_LEFT,200);
아이템 추가하기 - m_ctrList.InsertItem(0,_T("aaa"));
선택된 아이템 인덱스 알아오기
POSITION pos = m_ctrList.GetFirstSelectedItemPosition(); //처음에 선택된 인덱스 1부터 시작
while(pos)
{
int nSelItem = m_ctrList.GetNextSelectedItem(pos);
//다음에 선택된 인덱스로 포인터를 돌려주고 그 전에 선택된 인덱스를 돌려준다. 0번부터 시작
}
노드 다루기
메인 익스포트 루틴(DoExport)
class MRCexport : public ScenExport {
public:
//지원하는 확장자 개수메인 익스포트 루틴(DoExport)
class MRCexport : public ScenExport {
public:
int ExtCount() { return 1;}
//확장자("MRC")를 돌려준다.
const TCHAR* Ext(int n) {retunr _T("MRC");}
//MRC 파일로 익스포트 한다.
int DoExport(const TCHAR* name, ExpInterface *ei, Interface* i,
BOOL suppressPrompts = FALSE, DWORD option=0);
};
맥스가 메인 익스포트 루틴에 넘겨준 Interface를 이용하면 현재의 장면 데이터에 접근할수 있다.
노드에 접근할때는 루트부터 검색하게 되지만 맥스안에서 선택한 객체라면 직접 적근 할수도 있다.
INode* pNode = i->GetSelNode(0); //0번째 노드를 찾는다.
INode* const pRoot = i->GetRootNode(); //루트노를 찾는다.
노드 탐색 방법
int count = pNode->NumberOfChidren(); //자식 개수를 알아온다.
INode* pChNode = pNode->GetChildNode(i); //i 번째 자식
객체의 종류는 노드의 클래스 식별자로 알수있다.
- Class_ID 또는 SuperClassID
익스포트 플러그인에서 필요한 정보는 이 노드가 메시인지 뼈대인지를 알아내는것이다.
메시 알아내기
bool IsMesh(INdoe* pNode)
{
if(pNode == NULL) retrun false;
ObjectState os = pNode->EvalWorldState(0);
if(os.obj->SuperClassID() == GEOMOBJECT_CLASS_ID)
return turn;
return false;
}
본 알아내기
bool IsBone(INode* pNode)
{
if(pNode == NULL) return false;
ObjectState os = pNode->EvalWorldstate(0);
if(!os.obj) return false;
if(os.obj->ClassID() == Class_ID(BONE_CLASS_ID,0))
return true;
if(os.obj->ClassID() == Class_ID(DUMMY_CLASS_ID,0))
return false;
Control *cont = pNode->GetTMController();
if(cont->ClassID() == BIPSLAVE_CONTROL_CLASS_ID || cont->ClassID == BIPBODY_CONTROL_ID)
return true;
return false;
}
이런식으로 노드들을 탐색하고 어떤 객체인지 판정하다가 메시 노드를 만나면 메시에 정점 데이터를 얻어야 된다.
if(os.obj->SuperClassID() == GEOMOBJECT_CLASS_ID)
return turn;
return false;
}
본 알아내기
bool IsBone(INode* pNode)
{
if(pNode == NULL) return false;
ObjectState os = pNode->EvalWorldstate(0);
if(!os.obj) return false;
if(os.obj->ClassID() == Class_ID(BONE_CLASS_ID,0))
return true;
if(os.obj->ClassID() == Class_ID(DUMMY_CLASS_ID,0))
return false;
Control *cont = pNode->GetTMController();
if(cont->ClassID() == BIPSLAVE_CONTROL_CLASS_ID || cont->ClassID == BIPBODY_CONTROL_ID)
return true;
return false;
}
이런식으로 노드들을 탐색하고 어떤 객체인지 판정하다가 메시 노드를 만나면 메시에 정점 데이터를 얻어야 된다.

Prev

Rss Feed