Programming

    [C#] 현재 실행되는 실행 파일의 경로 얻기

    실행 파일의 경로가 필요한 경우가 종종 발생한다. Application.ExecutablePath 위 속성을 이용하면 실행 파일 경로를 쉽게 얻을 수 있다. string sExecutableFolder = Application.ExecutablePath; int n = sExecutableFolder.LastIndexOf(@"\"); sExecutableFolder.Substring(0, n+1); 이렇게 하면 실행 파일이 존재하는 Folder 경로를 얻을 수도 있게 된다.

    [OGRE] ManualObject to Mesh

    ManualObject를 생성한 후, 다시 사용하고 싶을 때, Mesh로 만들어 놓으면, 나중에 mesh만 호출하면 되니 편리한 것 같다. ManualObject mo = scenMgr.CreateManualObject("test"); ... MeshPtr temp_mesh = mo.ConvertToMesh("unit.mesh"); 동일한 형상을 재활용하기 위해서는 instance를 만드는게 제일 좋은데, 그렇게 동작하는지, 복사해서 생성하는지는 테스트가 필요할 것 같다.

    [OGRE] Loading Meshes From Any Path

    리소스 경로는 resource.cfg 파일에 정의되어 있어야 한다. 임의의 경로에 있는 mesh를 읽어들이는 코드는 다음과 같다. // "source" should contain the pathname to your mesh file Ogre::String source; /* An alternate (better) way of doing the following would be to use the FileStreamDataStream class, which avoids having to use the more esoteric "stat" struct and stdio APIs. For more, see http://www.ogre3d.org/docs/api/html/classOgre_1_1FileStre..

    [C#] 속도 측정용 간단 코드

    using System.Diagnostics; Stopwatch sw = new Stopwatch(); sw.Start(); RenderScene(); sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); 간단하게 처리 가능.

    [MFC,OGRE] MFC에서 OGRE 사용하기

    원문 1 : http://blog.naver.com/xtar/70000770469 원문 2 : http://blog.naver.com/xtar/70000770626 원문 3 : http://blog.naver.com/xtar/70000770830 10년전 기준 코드이므로, 현재 버전에서는 다를 것 같다. Ogre는 잘 사용하지 않지만, 기록 차원에서 정리한다. Ogre를 초기화 하는데 필요한 과정을 정리해 보면 다음과 같다. 1. Ogre::Root 객체 생성 및 초기화 1.1. Ogre::Root 객체 생성 1.2. Resource 경로 설정 1.3. Ogre::RenderSystem 선택 (DirectX or OpenGL 같은 것들) 1.4. Ogre::Root 초기화: initialise() 호출 ..

    [OGRE] 매뉴얼 객체로 좌표축 만들기

    원문 http://cafe.naver.com/ogre3d/1556 매뉴얼 객체로 좌표축을 만드는 코드이다. 좌측 하단으로 위치를 고정해주는 코드. Vector3 AppCamera::getScreenPos(SCREEN_POS sp) { Vector3 pos = getPosition(); Quaternion ori = getOrientation(); float x=20, y=13, z=40; if (sp == LT) return pos + ori * Vector3(-x, y,-z); else if (sp == LB) return pos + ori * Vector3(-x,-y,-z); else if (sp == RT) return pos + ori * Vector3(x,y,-z); else //RB retur..

    [VisualStudio] 빌드 후 이벤트 복사

    DLL을 생성하는 프로젝트와 같은 경우, 빌드된 dll을 특정 폴더로 자동으로 이동하고 싶을 경우가 생긴다. 프로젝트 속성 > 구성 속성 > 일반 > 출력 디렉토리 위 속성에 원하는 폴더와 파일 이름을 지정하면 빌드 결과물이 해당 폴더에 생긴다. 그러나, 생성되는 결과물은 그대로 두고 다른 위치에 복사하고 싶을 경우도 발생한다. 이때는 빌드 후 이벤트를 지정해서 해결한다. 프로젝트 속성 > 구성 속성 > 빌드 이벤트 > 빌드 후 이벤트 copy “$(TargetDir)output.dll” “복사할 경로”; 이렇게 지정해 주면 빌드가 완료된 이후 복사할 경로로 파일이 복사된다.

    [MFC] 한글 바이트 세기

    영문은 1바이트, 한글을 2바이트를 차지하는 경우, 전체 문자열의 바이트 수를 알아야 한다. WideCharToMultiByte 함수를 사용하면 간단하게 해결. int GetByteCount(CString str_text) { char* cStr = NULL; _bstr_t _bstr_(str_text); int temp_length = WideCharToMultiByte(CP_ACP, 0, _bstr_, -1, cStr, 0, NULL, 0); return temp_length-1; } 일단 몇 가지 테스트를 통한 결과를 봐서는 잘 동작하는 것 같다. ㅋ

    [MFC] Active Directory 계정 정보 얻기

    사용자가 계정을 입력하고 프로그램을 사용할 수 있도록 해야 하는데, AD 인증을 받으란다. Active Directory..... 많이 들어보긴 했는데... 아무튼 AD 계정 정보를 얻어오는 소스가 있다.. code project에 Simple Active Directory Browsing 이걸 이용하면 되지 않을까 한다. 어디 또 써먹을 때가 있으려나....

    [MFC] 콘트롤의 사이즈나 위치 변경시 깜박임 현상 줄이기

    콘트롤들의 위치나 크기를 변경하고자 할 때 통상 SetWindowPos()나 MoveWindow() 함수를 이용한다. 그런데 이 함수들은 각각의 콘트롤들이 개별적으로 그려지기 때문에 화면 깜박임이 심하다. 특히, FormView나 Dialog를 사용하면 더 심해진다. 이럴때 BeginDeferWindowPos(), DeferWindowPos(), EndDeferWindowPos()라는 Window API 함수를 쓰면된다. 자세한 사용법은 Help를 보시면 되지만 간단히 요약하면 HDWP hdwp = ::BeginDeferWindowPos (2); ::DeferWindowPos (hdwp, ctrl1.GetSafeHwnd (), HWND_TOP, Rect1.left, Rect1.top, Rect1.Widt..