기본 콘텐츠로 건너뛰기

4월, 2006의 게시물 표시

[WIN API] FormatMessage 예제

Everyday is Xmas Eve in Savone World!! | 유원미 http://blog.naver.com/savone/80007815552 #include <windows.h> #include <tchar.h> void err_quit(LPCTSTR msg) { LPVOID lpMsgBuf; FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language (LPTSTR) &lpMsgBuf, 0, NULL ); MessageBox( NULL, (LPCTSTR)lpMsgBuf, msg, MB_ICONERROR); LocalFree( lpMsgBuf ); ExitProcess(-1); } int main(int argc, char* argv[]) { HANDLE hFile = CreateFile( _T("readme.txt"), GENERIC_READ|GENERIC_WRITE, 0, NULL, OPEN_EXISTING, 0, NULL); if( hFile == INVALID_HANDLE_VALUE ) { err_quit(_T("CreateFile()")); } return 0; }

경계선 밖에 있는 삼각형 지우기

경계선을 포함하는 삼각형들을 제거하는 단계와 제거된 삼각형들을 에지에 의해 나머지 삼각형들을 제거하는 두가지 단계를 거친다. 경계선을 가지고 중점이 경계선 왼쪽에 있는 삼각형을 선택한다 삼각형을 이루는 에지 중에서 경계선을 제외한 두개의 에지를 구한다 두개의 에지 중에서 경계선이 아닌 에지를 큐에 저장한다 1.의 조건을 만족하는 삼각형이 존재하지 않을 때 까지 위의 순서를 반복한다. 큐에서 에지를 하나 꺼낸다 이 에지 (검사 에지)를 가지는 삼각형을 구한다. 삼각형을 이루는 에지 중에서 검사 에지를 제외한 다른 두개의 에지를 큐에 저장한다 큐가 빌 때까지 위의 순서를 반복한다 경계선 밖의 삼각형을 제거하기 전 경계선 밖의 삼각형을 제거한 모습 2차원 메쉬에서 3차원 형상으로 변환시킨 모습

에지 삽입하기

에지와 교차가 일어나는 모든 삼각형을 구한다. 삼각형을 구성하는 점들을 에지를 기준으로 왼쪽과 오른쪽을 나누어 구한다 삼각형을 삭제한다 삭제된 삼각형들의 외곽선을 구한다 구한 점들을 가지고 새롭게 삼각형을 생성한다 (메쉬 생성의 일반적인 알고리즘은 컨벡스헐 특징을 만족해야 한다. 하지만 여기서는 여러 가지 이유(?)로 이런 특징을 만족하지 않는다. 삼각형들의 외곽선을 구한 이유도 이런 이유에서이다.) 외곽선 밖에 존재하는 삼각형과 중복된 삼각형은 중복이 되지 않도록 제거한다 콘벡스헐 특징을 만족하지 않을 때 경계선에 의해 잘려지는 삼각형을 모두 제거한다 경계선을 기준으로 오른쪽,왼쪽으로 새롭게 삼각형을 생성한다. 새롭게 생성된 삼각형 중에서 제거된 삼각형들을 포함하는 외부 경계선 바깥에 있는 삼각형(A) 들을 제거한다.

삼각형에 점을 삽입하기

삼각형 내부에 점이 삽입될 때 : 삽입 점을 기준으로 3개의 삼각형을 생성한다. 삼각형을 이루는 에지에 점이 놓여질 때 : 삼각형을 이등분 한다. 삼각형을 이루는 점과 겹칠 때 : 삼각형의 분할이 일어나지 않는다.

왜 2차원 메쉬를 시작하게 되었는가

BREP 구조로 표현되는 3차원 표면을 3차원 삼각망으로 구현하기 위해 2차원 메쉬를 생성하는 프로그램을 구현하게 되었다. 여기서 고려대상은 콘 , 토러스 , 구이다. 3 차원 표면을 어떻게 2차원 메쉬로 구현이 가능한지 궁금할 것이다. 기본적인 생각은 이렇다. 일반적으로 3차원 보다는 2차원이 쉽다. 변수 하나가 적으니까 그만큼 고려해야 할 대상과 양이 줄어든다. 그래서 어떻게 해서던 3차원 표면을 2차원으로 표현 가능하게 만들어야 한다. 일반적으로 데카르트 좌표계에서는 3차원 표현을 3개의 매개 변수(x,y,z)로 나타낸다. 콘 ,토러스 , 구는 회전체이기 때문에 2개의 회전 각도로 표현이 가능해진다. 여기서 3개의 매개 변수가 2개의 매개 변수(u,v)로 줄어든다. 물론 이게 전부는 아니다. 3개의 매개 변수가 2개의 매개 변수로 줄어들 때 , 그리고 2개의 매개 변수에서 3개의 매개변수로 서로 변환이 될 때 1:1 대응이 되어야 한다. 이 조건을 만족하지 않는다면 3차원 회전체를 표현하기 위에 2차원 메쉬를 생성한다는 생각은 버려야 할 것이다. 다행히도 우리의 고려 대상인 3차원 회전체(콘 , 토러스 , 구)에서는 이와 같은 조건을 만족한다. 2차원 메쉬의 기본 요소 정점(Vertex) 에지(Edge) Vertex 두개로 이루어 지고 LST(Left Side Triangle) , RST을 가르키는 두 개의 포인터를 가진다. 삼각형(Delaunay Triangle) 본래는 Delaunay Triangle이라고 썼는데 Delaunay Triangle을 만들기 위해서는 제약 조건이 따르므로 여기서는 그냥 Triangle을 만들기로 하자. Triangle을 이루는 세 개의 Vertex를 가진다.(CCW 방향으로 저장된다.) Triangle을 이루는 세 개의 Edge를 가진다.

UOR

예전 프로젝트에서 mm단위의 값을 그냥 MDL 프로그램을 통해서 Write했는데, 오늘 업체에서 값이 이상하다는 연락이 왔습니다. Microstation uor 세팅값에 따라 값이 바뀐다는 것이엇습니다. 프로그램에서 wirte한 값은 mm단위가 아니라 uor 단위였습니다. 그래서 프로그램이 uor을 반영하도록 수정하였다. #include tcb->uorpersub --> sub unit에 대한 uor값 예전에 수정한것으로 생각하고 있었는데... ㅠㅠ 왜 반영이 되지 않았을까? 2011.07.05 XM 상위 버젼에서 tcb를 사용하기 위해서는 tcb.h 파일과 msvar.fdf 파일을 인클루드하여야 합니다.