2015/12/22
Python 3.4 에 OpenCV 3.0 설치하기
먼저 필요한 파일은 아래 경로에서 다운 받았다.
http://www.lfd.uci.edu/~gohlke/pythonlibs/
필요한 패키지는 OpenCV, Numpy, Scipy 이다.
http://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv
opencv_python-3.0.0-cp34-none-win32.whl
http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy
numpy-1.10.2+mkl-cp34-none-win32.whl
http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy
scipy-0.16.1-cp34-none-win32.whl
아래 내용은 위 패키지를 설치한 내용이다.
X:\temp> pip install opencv_python-3.0.0-cp34-none-win32.whl Unpacking x:\temp\opencv_python-3.0.0-cp34-none-win32.whl Installing collected packages: opencv-python Successfully installed opencv-python Cleaning up... X:\temp> pip install "numpy-1.10.2+mkl-cp34-none-win32.whl" Unpacking x:\temp\numpy-1.10.2+mkl-cp34-none-win32.whl Installing collected packages: numpy Successfully installed numpy Cleaning up... X:\temp> pip install scipy-0.16.1-cp34-none-win32.whl Unpacking x:\temp\scipy-0.16.1-cp34-none-win32.whl Installing collected packages: scipy Successfully installed scipy Cleaning up...
설치를 마치고 테스트를 해 보았다.
OpenCV 웹사이트에서 샘플 코드를 가져와 테스트를 해 보았다.
import numpy as np import cv2 img = np.zeros((512,512,3), np.uint8) img = cv2.line(img,(0,0),(511,511),(255,0,0),5) img = cv2.rectangle(img,(384,0),(510,128),(0,255,0),3) img = cv2.circle(img,(447,63), 63, (0,0,255), -1) img = cv2.ellipse(img,(256,256),(100,50),0,0,180,255,-1) pts = np.array([[10,5],[20,30],[70,20],[50,10]], np.int32) pts = pts.reshape((-1,1,2)) img = cv2.polylines(img,[pts],True,(0,255,255)) font = cv2.FONT_HERSHEY_SIMPLEX cv2.putText(img,'OpenCV',(10,500), font, 4,(255,255,255),2,cv2.LINE_AA) cv2.namedWindow('image', cv2.WINDOW_NORMAL) cv2.imshow('image',img) cv2.waitKey(0) cv2.destroyAllWindows()
아래 이미지는 위 코드를 실행하여 출력된 화면이다.
이제 간단한 이미지 처리 테스트는 Python 을 이용하면 편할 것 같다.
2015/12/03
SVN 서버에 log 없이 Commit 할 수 없도록 설정하기
SVN 서버 설정에는 Commit 관련하여 hook 라는 여러가지 이벤트를 처리할 수 있는 방법이 있다.
Visual SVN 의 Repository 의 Property를 보면 Hooks 탭을 볼 수있는데 이 탭에서 여러가지 Event에 대한 설정을 할 수 있다.
Commit 관련하여 시작할 때와 파일을 올리고 Commit 하기 직전 그리고 Commit을 완료한 시점에 대한 hook를 설정할 수 있다.
start-commit
run before commit transaction begins, can be used to do special permission checking
pre-commit
run at the end of the transaction, but before commit. Often used to validate things such as a non zero length log message.
post-commit
runs after the transaction has been committed. Can be used for sending emails, or backing up repository.
- 출처 : Stack Overflow
pre-commit hook에 Windows 배치스크립트를 작성하여 검사할 수 있으며 이 스크립트가 0이 아닌 에러코드를 넘길 경우 Commit이 취소 된다.
아래 코드는 Stack Overflow에서 얻은 로그를 6자 이상 넣도록 하는 배치코드 이다.
setlocal enabledelayedexpansion set REPOS=%1 set TXN=%2 set SVNLOOK="%VISUALSVN_SERVER%\bin\svnlook.exe" SET M= REM Concatenate all the lines in the commit message FOR /F "usebackq delims==" %%g IN (`%SVNLOOK% log -t %TXN% %REPOS%`) DO SET M=!M!%%g REM Make sure M is defined SET M=0%M% REM Here the 6 is the length we require IF NOT "%M:~6,1%"=="" goto NORMAL_EXIT :ERROR_TOO_SHORT echo "Commit note must be at least 6 letters" >&2 goto ERROR_EXIT :ERROR_EXIT exit /b 1 REM All checks passed, so allow the commit. :NORMAL_EXIT exit 0
2015/10/26
블로그 이사
오랜동안 고민을 하고 있었는데 다음이 카카오에 인수된 후 서비스를 하나 둘 접는 모습에 티스토리도 곧 사라질 수 있을 것 같은 두려움에 이사를 결정하였다.
공식적으로 두 블로그 사이에 데이터 이전을 지원하는 방법이 없다. 그래서 두 블로그의 글들을 XML로 백업하여 분석해 보았다. 구조가 많이 달라 완벽하게 이전은 어려웠다. 특히 Blogger에서는 첨부파일을 지원하지 않아 내용은 복사하고 첨부와 이미지는 티스토리의 링크를 유지 하기로 하고 글들을 이전 하였다.
요즘 틈틈히 공부하고 있는 python을 이용하여 Tistory 백업 파일을 분석하여 Blogger로 형식으로 전환을 하는 작업을 하였다. 글들은 모두 이전을 했는 글 형식까지 정확히 이전을 하지 못해 이전한 글들은 기록차원에서 보관하고 찾아 볼 때마다 조금씩 다듬기로 하였다.
2015/09/23
AutoIt3 Script 편집용 SciTE 사용자 설정하기
AutoIt3와 함께 배포되는 SciTE는 시스템 환경설정에 따라 사용자 설정파일 위치가 달라진다. 하지만 SciTE4AutoIt3 portable 버전 포함된 SciTE는 실행파일고 동일한 위치에 사용자 설정 파일이 저장된다.
SciTE 설정은 기존 윈도우 프로그램과는 사믓 다른 구조이다. 대화상자에 사용가능한 옵션을 보여주지 않고 설정 파일에 직접 수정해야 한다. 게다가 설정 파일이 여러가지 존재한다. Global, Local, User, Directory 등이 있다. 이 중에서 User 설정을 변경하여 사용하면 된다. SciTE 메뉴에서 Options -> Open User Optioins File 을 실행하면 사용자 설정 파일이 열리는데 처음에는 아무 내용도 없다. 필요한 사항을 채워 넣어야 하는데 Open Global Options File을 열어서 필요한 내용을 복사하여 사용하면 된다.
먼저 자주 사용되는 몇 가지를 수정해 보았다.
참고로 환경 설정에도 블럭 개념이 있는데 이는 Python과 유사하게 들여쓰기로 구분한다.
우선 폰트 설정이다.
아래 내용은 윈도우에서 적용 될 설정 내용 이다. 얼마적 적용한 D2Coding 으로 바꾸어 놓았다.
if PLAT_WIN
font.base=font:D2Coding,size:10,$(font.override)
font.small=font:D2Coding,size:8,$(font.override)
font.comment=font:D2Coding,size:9,$(font.override)
font.code.comment.box=$(font.comment),$(font.override)
font.code.comment.line=$(font.comment),$(font.override)
font.code.comment.doc=$(font.comment),$(font.override)
font.code.comment.nested=$(font.comment),$(font.override)
font.text=font:D2Coding,size:11,$(font.override)
font.text.comment=font:D2Coding,size:9,$(font.override)
font.embedded.base=font:D2Coding,size:9,$(font.override)
font.embedded.comment=font:D2Coding,size:8,$(font.override)
font.vbs=font:D2Coding,size:10,$(font.override)
font.monospace=font:D2Coding,size:11
font.override=$(font.monospace)
위 내용을 붙여넣고 저장하면 바로 적용된다.
그리고 SciTE이 이전 작업 세션을 기억하고 있다가 프로그램을 시작할 때 세션을 복구 하는데 이도 옵션으로 조정할 수 있다.
save.session=0
으로 설정하면 항상 새롭게 SciTE가 실행 된다.
무수히 많은 옵션이 있는데 다른 옵션은 차차 익혀 나가야 겠다
Original Post : http://neodreamer-dev.tistory.com/763
2015/09/22
AutoIt3 개발 환경 만들기
2015/09/22 - [Dev Story] - Hello AutoIt3
AutoIt 과 SciTE4AutoIt3 를 설치하고 난 후 AutoIt3 경로의 SciTE 폴더의 SciTE.exe 를 실행하면 스크립트를 작성할 수 있고 단축키로 실행할 수 있다.
AutoIt 을 위해 최적화를 해 놓은 편집기 답게 많은 기능을 제공하고 있다.
SublimeText
메뉴바에서 Preference 메뉴의 Package Control을 선택하고 install package를 실행하고 AutoItScript package를 설치한다.
패키지를 설치하면 SublimeText 의 Build System에 AutoIt 이 등록이 된다.
다음으로 AutoIt3 의 경로를 설정해 주어야 한다. 설정을 하기 위해 아래 메뉴를 선택하여 AutoIt3 설정 파일을 연다.
Preferences > Package Settings > AutoIt > AutoIt Settings - Default
설정 항목은 4개인데 위쪽 3개 항목에 대한 경로를 설정하면 된다.
{
"AutoItExePath": "D:\\Dev\\AutoIt3\\AutoIt3.exe",
"AutoItCompilerPath": "D:\\Dev\\AutoIt3\\Aut2Exe\\Aut2exe.exe",
"TidyExePath": "D:\\Dev\\AutoIt3\\SciTE\\Tidy\\Tidy.exe",
"IncludeHelperAU3Path": "{PACKAGE_PATH}\\AutoItScript\\Include_Helper.au3"
}
이제 설정은 마쳤고 스크립트를 작성하고 실행하면 된다.
아래 화면은 예제 스크립트를 실행한 화면이다.
Notepad++
Notepad++은 추가로 설치해줄 것은 없다. 기본적으로 AutoIt 파일에 대한 Syntax Highlight를 지원해 준다.
단지 실행 시 AutoIt3 경로를 포함한 명령행을 작성해주면 된다.
F6 키로 Execute 대화상자를 호출하고 명령문을 입력한 뒤 Save... 를 선택하여 다른이름으로 저장하고 다음에는 해당 이름을 선택하여 실행하면 된다.
아래 화면은 Notepad++에서 .au3 파일을 실행한 화면이다.
Original Post : http://neodreamer-dev.tistory.com/762
Hello AutoIt3
나중에 또 쓸 기회가 있을 수 있어 기록으로 내용을 간단한게 남긴다.
우선 AutoIt(https://www.autoitscript.com/site/autoit/) 은 베이직 스크립트와 유사한 문법으로 윈도우에서 실행되는 스크립트이며 작성된 스크립트를 실행파일로 변환도 가능하다.
AutoIt 는 별도의 스크립트 작성기나 인터렉트브 환경을 지원하지 않고 있으며 SciTE 편집기를 AutIt 환경에 맞게 설정한 것을 제공한다.
홈페이지를 방문하여 아래 두 파일만 다운로드하면 사용할 수 있다.
SciTE4AutoIt3_Portable.zip
AutoIt-v3.zip 파일만 받으면 기본적인 실행및 컴파일이 가능하며 제공하는 편집기를 사용하려면 SciTE4AutoIt3_Portable.zip 파일을 받으면 된다.두 파일을 한 곳에 압축해제하고 SciTE는 AutoIt-v3를 압축해제한 후 해제한 폴더의 SciTE 폴더에 SciTE4AutoIt3_Portable.zip 파일을 압축 해제 해 놓고 AutoIt-v3를 압축 해제한 경로를 시스템 Path에 등록하면 기본 환경 설정이 된 것이다.
메모장이든 기본 편집기는 스크립트를 아래와 같이 작성하고 HelloAutoIt3.au3 로 저장한다.
#comments-start
The first AutoIt Script
#comments-end
#cs
Author: NeoDreamer
Write : 2015/09/22
#ce
ConsoleWrite("Hello AutoIt3") ; Write string to Console
ConsoleWrite(@Crlf)
아래 명령을 실행하면 위의 스크립트가 실행 된다.
AutoIt3 HelloAutoIt3.au3 | more
ConsoleWrite가 있는 경우 도스창에서 실행시 "| more" 옵션을 주어야 결과 화면이 보이는데 이유는 확인해 봐야겠다.
Original Post : http://neodreamer-dev.tistory.com/761
2015/09/15
프로그래머를 위한 한글 폰트 D2Coding
그래서 대부분의 프로그래머는 고정폭 폰트 중에서 유사한 문자를 구분하기 쉽게 디자인한 폰트를 사용한다.
물론 프로그래머의 개성에따라 구분되어야 하는 문자는 다르다.
기존 고정폭 폰트중 한글을 포함한 프로그래머가 사용할 수 있는 폰트는 네이버에서 베포하는 나눔고딕코딩이 전부였다. 일부 한글 폰트와 영문 폰트를 조합하여 새로운 폰트를 만드는 경우가 있었는데 이는 매우 불안정해 보였다. 한글과 영문폰트의 폭이 맞지 않거나 인쇄가 되지 않는 문제가 있었다.
얼마전 Open Project 인 D2Coding 폰트가 공개되었다.
http://dev.naver.com/projects/d2coding/
아래 화면은 D2Coding 폰트와 나눔고딕코딩 폰트를 비교한 화면이다. D2Coding은 나눔바른고딕을 나눔고딕코딩은 나눔고딕을 기반으로 하고 있다. 두 폰트의 차이점은 여러가지가 있겠지만 그중 자간과 행간이 큰 차이점으로 보인다.
나눔고딕코딩은 오밀조밀한 구성으로 혼란스럽고 가독성이 많이 떨어지는 것 같았고 D2Coding은 그 보다는 편해 보였다. 물론 편집기마다 조금 다를 수 있다. 아래 화면은 Notepad++에서 갈무리를 한 화면이다.
그간 유일하다시피한 한글을 포함한 프로그래머 글꼴인 나눔고딕코딩을 사용하지 않은 이유가 오밀조밀한 구성으로 가독성이 많이 떨어지고 눈이 피곤해지는 것 같은 이유였는데 D2Coding에서는 많이 개선된것 같아 앞으로 사용하면서 장단점을 파악해 봐야 겠다.
한글을 포함한 고정폭 폰트의 장점이라하면 영숫자 사이에 한글을 포함하여도 폰트 폭의 변화가 없어 각 컬럼에 맞게 코딩을 할 수 있다는 것이다. 기존 영문 전용 폰트의 경우 한글을 포함하게되면 한글 폰트와 영문 폰트가 폭이 달라서 문장의 길이가 달라져 보기 싫었다. 게다가 시스템마다 영문폰트에 연결된 한글 폰트가 달라 다르게 표시 될 수도 있는 문제가 있다.
아래 이미지는 몇몇 영문 폰트를 갈무리한 것이다.
Fixed System을 제외하고는 한글 폰트를 포함하면 문장 길이가 컬럼수와 다르게 출력이 된다. 물론 코드에 2바이트 문자를 사용하지 않는 경우에는 이러한 현상이 문제가 되지 않는다.
하지만 주석이든 뭐든 한글이 사용하게 되면 컬럼이 맞지 않는 경우에는 좀 거슬리게 된다.
Original Post : http://neodreamer-dev.tistory.com/760
2015/09/14
Windows 10 네트워크 접속 암호 관리
아마도 Windows 8.x 버전에서도 동일 할 것으로 생각되지만 실제 테스트 해보지는 않았다.
우선 Windows 10의 시작메뉴에서 마우스 우측 버튼을 눌러 보여지는 메뉴에서 제어판을 호출 한다.
2015/09/07
PyCharm 에러: Fatal Python error: Py_Initialize: can't initialize sys standard streams
pycharm 에 python interpreter를 설정하고 아래와 같은 단순 테스트 코드를 수행하였는데 에러를 내 토해냈다.
Code
__author__ = 'NeoDreamer'
print(2 + 3)
ResultE:\Dev\python-3.4.3\python.exe E:/DevWork/Python/pycharm/test/test.py
Fatal Python error: Py_Initialize: can't initialize sys standard streams
LookupError: unknown encoding: x-windows-949
Process finished with exit code 3
Dos 명령창에서 아래 명령을 실행하면 문제 없이 실행이 되었다.E:\Dev\python-3.4.3\python.exe E:/DevWork/Python/pycharm/test/test.py
해결하기 위해 인터넷에서 찾아보니 StackOverflow에 이에대한 해결책(http://goo.gl/xaGb0T)이 나와 있었다.
해결 방법은 편집기의 파일 설정과 프로젝트 설정의 인코딩 방식을 "UTF-8"로 설정하는 것이다.
설정 대화상자는 아래를 참고하여 볼 수 있다.
File > Settings... > Editor > File Encodings
IDE Encoding
Project Encoding
Default encoding for properties files
E:\Dev\python-3.4.3\python.exe E:/DevWork/Python/pycharm/test/test.py
6
Process finished with exit code 0
위 방법은 현재 Project에만 해당하는 것이고 이후 생성되는 프로젝트의 기본 속성을 변경하고자 하는 경우 File 메유에서 Default Settings...에서 변경을 해 주면 된다.
Original Post : http://neodreamer-dev.tistory.com/758
2015/08/27
Chrome 한글 이름 파일명 다운로드 할 때 깨지는 문제
아래 설정 위치에서 인코딩을 유니코드로 설정해 주면 해결된다.
Settings -> Advanced Settings -> Web content -> Customize fonts... -> Encoding
(한글 UI: 설정 -> 고급 설정 -> 웹 콘텐츠 -> 글꼴 맞춤설정 -> 인코딩)
Original Post : http://neodreamer-dev.tistory.com/757
2015/08/20
[Sublime Text 3] 다시 실행시 이전 문서 열지 않도록 설정하기
2015/08/20 - [Com. Story/Tips] - [Sublime Text 3] 폰트 변경하기
Sublime Text를 다시 실행하면 이전에 열어두었던 문서가 다시 열린다. 상황에 따라 편리한 기능이기는 하나 내게는 필요 없는 기능이라 이를 해제하는 방법을 찾아 보았다.
아래 두 항목만 false로 설정을 하면 이전의 문서를 열지 않고 Sublime Text가 실행이 된다.
"remember_open_files": false,
"hot_exit": false
Original Post : http://neodreamer-dev.tistory.com/756
[Sublime Text 3] 폰트 변경하기
Preferences의 System - Defaults 메뉴를 선택하면 아래와 같은 JSON 형해의 설정 파일을 편집창에서 볼 수 있다.
"font_face": "Monaco",
"font_size": 9,
Original Post : http://neodreamer-dev.tistory.com/755
2015/08/15
[Sublime Text 3] 한글을 포함한 파일 읽기 문제
이를 해결하려면 읽어 들이고자하는 문서를 변환해서 불러 들여야 하는데 이러한 변환을 자동으로 해주는 확장 프로그램이 있다. 우선 Package Control 에서 Install Package 를 실행한다.
메뉴에서 Package Control이 보이지 않으면 Package Control이 설치되지 않은 것으로 아래 글을 참고하여 Package Control을 설치한다.
2015/08/15 - [Com. Story/Tips] - Sublime Text 3 에 Package Control 설치하기
install package 를 실행하여 "ConvertToUTF8" 를 찾아 설치한다.
설치를 하면 아래와 같이 "ConvertToUTF8" package에 대한 안내글이 보여진다.
이제 한글을 포함한 문서를 열어보면 정상적으로 보여지는 것을 확인할 수 있다.
그리고 상태 표시줄에 원래 파일의 인코딩을 확인할 수 있으며 이 파일을 저장할 때 원래 인코딩으로 변환하여 저장 된다.
Original Post : http://neodreamer-dev.tistory.com/754
[Sublime Text 3] Package Control 설치하기
인터넷 검색을 통해 알게된 Package Control 설치 방법은 두 가지 방법이 있다.
https://packagecontrol.io/installation
첫 번째 방법은 Console 입력창(Ctrl + `, View - Show Console)에 Python Code를 입력하는 방법이다.
import urllib.request,os,hashlib; h = 'eb2297e1a458f27d836c04bb0cbaf282' + 'd0e7a3098092775ccb37ca9d6b2e4b7d'; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); by = urllib.request.urlopen( 'http://packagecontrol.io/' + pf.replace(' ', '%20')).read(); dh = hashlib.sha256(by).hexdigest(); print('Error validating download (got %s instead of %s), please try manual install' % (dh, h)) if dh != h else open(os.path.join( ipp, pf), 'wb' ).write(by)
Dependency 에러를 뿜기는 하지만 메뉴에 Package Control을 보여진다.
두 번째 방법은 아래 경로에서 Package Control.sublime-package 파일을 다운받아 Sublime Text 3가 설치되어 있는 경로의 package 폴더에 복사하고 재시작 하면 된다.
https://packagecontrol.io/Package Control.sublime-package
Original Post : http://neodreamer-dev.tistory.com/753
2015/07/30
Visual Studio 2015 Community 버전 ISO로 내려받기
2015 버전도 개인이 무료로 사용할 수 있는 버전인 Community Edition을 제공한다.
아래 페이지를 방문하면 Visual Studio Community 2015 를 내려받을 수 있다.
https://www.visualstudio.com/en-us/downloads/download-visual-studio-vs.aspx
"Download Community Free" 버튼은 단순 실행 파일만 다운로드 하는 것으로 이 실행파일을 실행하면 설치에 필요한 파일들을 다시 인터넷으로 내려받아 설치하는 기능을 제공 한다. 실행 파일은 빠르게 다운로드 받을 수 있지만 설치는 필요한 파일을 계속 내려받아야 하기때문에 다소 느리다.
좀더 아래쪽에 보면 "Visual Studio downloads" 섹션에서 "Visual Studio 2015"를 선택하면 각각의 Edition을 선택할 수 있는데 기본적으로 Community Edition이 선택된다. 선택 후 우측에 보면 Language와 Format을 선택할 수 있는데 Format을 ISO로 선택을 하면 설치에 필요한 모든 것을 포함하는 ISO 파일을 다운 받을 수 있다.
그리고 오늘(2015/07/30)이후부터는 Windows 10 용 Application을 개발할 수 있는 패키지가 포함되어 있다
Original Post : http://neodreamer-dev.tistory.com/752
2015/07/17
Visual Studio 2012 단축키
Ctrl + Alt + L: Solution Explorer 로 포커스 이동
Alt + 방향키(↑,↓): 커서를 함수 단위로 이동
Alt + Shift + 방향키(←,↑,↓,→): Column 단위 선택
Alt + Drag: 컬럼 단위 선택
Alt + F8: 선택 영역 들여쓰기 조정
Ctrl + }: 쌍을 이루는 중괄호로 커서 이동
Ctrl + Shift + }: 쌍을 이루는 줄괄호의 내용을 선택
Ctrl + Shift + S: 모든 파일 저장
Ctrl + K, C: 선택된 줄을 주석 처리 함
Ctrl + K, U: 주석 처리된 줄의 주석 해제
Ctrl + K, D: 코드 들여쓰기 정렬
Ctrl + Comman(,): Navigate To 대화상자 호출
Ctrl + U: 선택 영역 소문자로 바꿈
Ctrl + Shift + U: 선택 영역 대문자로 바꿈
Ctrl + Delete: 현재 커서 위치에서 오른쪽에 있는 문자를 의미단어 단위로 삭제
Ctrl + Enter: 현재 커서가 있는 줄 위에 빈 줄 삽입
Ctrl + Shift + Enter: 현재 커서가 있는 줄 아래에 빈 줄 삽입
Ctrl + L: 현재 라인 잘라내기
Ctrl + Shift + L: 현재 라인 삭제
Shift + End: 현재 줄 커서 위치부터 줄 마지막까지 선택
Shift + Home: 현재 줄 커서 위치부터 줄 처음까지 선
Original Post : http://neodreamer-dev.tistory.com/751
2015/07/15
Windows 10의 Quick Access 목록 삭제하기
개인 PC라면 유용하겠지만 공공PC나 사무용 PC의 경우 여러가지로 문제가 될 수 있다.
이 목록을 쉽게 삭제하고 저장하지 않게 설정하는 방법이 있는데 이전에는 Taskbar의 Properties 에서 지원했지만 지금의 버전(10166)에서는 Quick Access의 Option 메뉴에서 지원 한다.
Options 대화상자에 보면 Privacy 항몸에서 삭제와 보이지 않도록 하는 설정이 있다.
Original Post : http://neodreamer-dev.tistory.com/750
2015/06/17
[HALCON] Win32 함수 충돌
#if defined(_WIN32)
#undef FindText
#undef CreateMutex
#undef CreateEvent
#undef DeleteFile
#endif
위 함수를 사용하고자 하는 경우 Ansi 인지 Unicode 인지 명시하여 사용하면 컴파일 에러를 피할 수 있다.
예) DeleteFileA, DeleteFileW
Original Post : http://neodreamer-dev.tistory.com/749
2015/06/05
OpenCV contrib 빌드하기
Big thanks to Google who funded several successive GSoC programs and let OpenCV in. The results of many successful GSoC 2013 and 2014 projects have been integrated in opencv 3.0 and opencv_contrib (earlier results are also available in OpenCV 2.4.x). We can name:
- text detection
- many computational photography algorithms (HDR, inpainting, edge-aware filters, superpixels, …)
- tracking and optical flow algorithms
- new features, including line descriptors, KAZE/AKAZE
- general use optimization (hill climbing, linear programming)
- greatly improved Python support, including Python 3.0 support, many new tutorials & samples on how to use OpenCV with Python.
- 2d shape matching module and 3d surface matching module
- RGB-D module
- VTK-based 3D visualization module
etc.
빌드를 위해서는 우선 opencv_contrib를 다운 받아야 하는데 아래 경로에서 3.0.0 버전을 다운 받았다.
https://github.com/Itseez/opencv_contrib/releases
위 경로에서 받은 파일을 OpenCV 3.0 경로에 풀어 놓고 CMake를 실행한다.
옵션 중에서 OPENCV_EXTRA_MODULES_PATH 항목에 위에서 압축을 풀어 놓은 곳의 modules 폴더를 지정한다.
Extra Module 경로를 지정하고 configure를 하면 추가된 모듈이 보이고 각각의 모듈에 대한 빌드 여부를 설정할 수 있다
OpenCV 2.9 버전부터인가 제공하던 world 버전도 보이는데 VTK와 함께 빌드에 문제가 있을 것으로 보여 이 모듈만 선택을 하지 않았다. 그리고 다시 configure 하니 정상적으로 구성 되었고 generate 를 선택하여 빌드에 필요한 솔루션을 생성하였다.
Visual Studio 2013 버전으로 생성된 OpenCV.sln 파일을 열고 빌드하였다. 그런데 뜻 밖의 에러에 마주쳤다.
OpenMP 의 for 루프에서 unsigned int를 지원하지 않는 문제였다. Visual Studio 2013 버전은 OpenMP 2.0 을 지원하고 있으며 OpenMP 2.0 버전은 unsigned int를 지원하지 않는다. unsigned int 는 OpenMP 3.0 버전에서 지원한다고 한다. 이것때문에 OpenMP를 포기할 수는 없어 해당 부분 두 곳만 OpenMP를 제거하였다.
두 곳의 OpenMP를 제거하고 빌드하니 아무런 문제 없이 빌드가 되었다.
빌드를 마쳤으니 테스트를 해 봐야겠다.
Original Post : http://neodreamer-dev.tistory.com/748
2015/06/04
OpenCV 3.0 Release
OpenCV 3.0 Release
opencv_contrib 에 포함된 새로운 기능들을 어서 빨리 테스트 해 봐야겠다. 우선 VTK 모듈을 얹은 것 부터 빌드 해 봐야겠다
Original Post : http://neodreamer-dev.tistory.com/747
2015/05/27
OpenCV 드로잉 좌표 한계
좌표값이 32768(32K)를 넘어가는 경우 도형이 그려지지 않는 문제가 있었다.
32768 값을 넘어가면 0으로 바뀌어 버려 이 지점을 포함하는 다각형을 그리는 경우 엉뚱한 도형이 그려졌다.
내부적인 좌표 한계인지는 좀 더 알아봐야 겠지만 문제의 처리가 우선이라 ROI를 지정하여 그리는 방법으로 우회를 하였다
Original Post : http://neodreamer-dev.tistory.com/746
2015/05/26
[MFC] VTK Hello World
지난 번 라이브러리를 빌드 한 후 VTK C++ Tutorial을 하나하나씩 해보기로 하였다. 그 첫번째로 Hello World 이다.
Tutorial에서는 C++ 코드와 CMake를 이용한 빌드를 소개하고 있다. 이를 이전에 빌드한 vtkGUISupportMFC 를 이용하여 대화상자에 출력하도록 해 보았다.
m_pvtkMFCWindow = new vtkMFCWindow(this);
m_pvtkMFCWindow->GetRenderWindow()->AddRenderer(m_pvtkRenderer);
m_pvtkRenderer->SetBackground(0.0, 0.0, 0.5);
// This creates a polygonal cylinder model with eight circumferential facets.
//
m_pCylinder = vtkCylinderSource::New();
m_pCylinder->SetResolution(8);
// The mapper is responsible for pushing the geometry into the graphics
// library. It may also do color mapping, if scalars or other attributes
// are defined.
//
m_pCylinderMapper = vtkPolyDataMapper::New();
m_pCylinderMapper->SetInputConnection(m_pCylinder->GetOutputPort());
// The actor is a grouping mechanism: besides the geometry (mapper), it
// also has a property, transformation matrix, and/or texture map.
// Here we set its color and rotate it -22.5 degrees.
m_pCylinderActor = vtkActor::New();
m_pCylinderActor->SetMapper(m_pCylinderMapper);
m_pCylinderActor->GetProperty()->SetColor(1.0000, 0.3882, 0.2784);
m_pCylinderActor->RotateX(30.0);
m_pCylinderActor->RotateY(-45.0);
// Render on MFCWindow
// Add the actors to the renderer, set the background and size
//
m_pvtkRenderer->AddActor(m_pCylinderActor);
m_pvtkRenderer->SetBackground(0.1, 0.2, 0.4);
// We'll zoom in a little by accessing the camera and invoking a "Zoom"
// method on it.
m_pvtkRenderer->ResetCamera();
m_pvtkRenderer->GetActiveCamera()->Zoom(1.5);
Original Post : http://neodreamer-dev.tistory.com/745
2015/05/23
CListCtrl 에서 Check 상태 변화 확인 하기
void CDlgTestDlg::OnLvnItemchangedList2(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
if(pNMLV->uChanged & LVIF_STATE)
{
if( (pNMLV->uOldState & 0x1000) && (pNMLV->uNewState & 0x2000) )
{
TRACE("Checked Item : %d\n", pNMLV->iItem);
}
else if( (pNMLV->uOldState & 0x2000) && (pNMLV->uNewState & 0x1000) )
{
TRACE("Unchecked Item : %d\n", pNMLV->iItem);
}
}
*pResult = 0;
}
Original Post : http://neodreamer-dev.tistory.com/744
2015/05/21
Windows Shell Commands
출처:http://www.eightforums.com/tutorials/6050-shell-commands-windows-8-a.html
붉은색 명령은 windows 8에서 추가된 명령 이다.
Shell Command | Path of Folder it Opens |
shell:AccountPictures | %AppData%\Microsoft\Windows\AccountPictures |
shell:AddNewProgramsFolder | Control Panel\All Control Panel Items\Get Programs |
shell:Administrative Tools | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Administrative Tools |
shell:AppData | C:\Users\(user-name)\AppData\Roaming |
shell:AppsFolder | Applications |
shell:Application Shortcuts | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\Application Shortcuts |
shell:AppUpdatesFolder | Installed Updates |
shell:Cache | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\Temporary Internet Files |
shell:Camera Roll (8.1 only) | C:\Users\(user-name)\Pictures\Camera Roll |
shell:CD Burning | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\Burn\Burn |
shell:ChangeRemoveProgramsFolder | Control Panel\All Control Panel Items\Programs and Features |
shell:Common Administrative Tools | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools |
shell:Common AppData | C:\ProgramData |
shell:Common Desktop | C:\Users\Public\Desktop |
shell:Common Documents | C:\Users\Public\Documents |
shell:CommonDownloads | C:\Users\Public\Downloads |
shell:CommonMusic | C:\Users\Public\Music |
shell:CommonPictures | C:\Users\Public\Pictures |
shell:Common Programs | C:\ProgramData\Microsoft\Windows\Start Menu\Programs |
shell:CommonRingtones | C:\ProgramData\Microsoft\Windows\Ringtones |
shell:Common Start Menu | C:\ProgramData\Microsoft\Windows\Start Menu |
shell:Common Startup | C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup |
shell:Common Templates | C:\ProgramData\Microsoft\Windows\Templates |
shell:CommonVideo | C:\Users\Public\Videos |
shell:ConflictFolder | Control Panel\All Control Panel Items\Sync Center\Conflicts |
shell:ConnectionsFolder | Control Panel\All Control Panel Items\Network Connections |
shell:Contacts | C:\Users\(user-name)\Contacts |
shell:ControlPanelFolder | Control Panel\All Control Panel Items |
shell:Cookies | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\INetCookies |
shell:Cookies\Low | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\INetCookies\Low |
shell:CredentialManager | C:\Users\(user-name)\AppData\Roaming\Microsoft\Credentials |
shell:CryptoKeys | C:\Users\(user-name)\AppData\Roaming\Microsoft\Crypto |
shell:desktop | Your desktop folder |
shell:device Metadata Store | C:\ProgramData\Microsoft\Windows\DeviceMetadataStore |
shell:documentsLibrary | Libraries\Documents |
shell:downloads | C:\Users\(user-name)\Downloads |
shell:dpapiKeys | C:\Users\(user-name)\AppData\Roaming\Microsoft\Protect |
shell:Favorites | C:\Users\(user-name)\Favorites |
shell:Fonts | C:\Windows\Fonts |
shell:Gadgets | C:\Users\(user-name)\AppData\Local\Microsoft\Windows Sidebar\Gadgets |
shell:Games | Games |
shell:GameTasks | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\GameExplorer |
shell:History | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\History |
shell:HomeGroupCurrentUserFolder | Homegroup folder of current user |
shell:HomeGroupFolder | Homegroup |
shell:ImplicitAppShortcuts | C:\Users\(user-name)\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned\ImplicitAppShortcuts |
shell:InternetFolder | Internet Explorer |
shell:Libraries | Libraries |
shell:Links | C:\Users\(user-name)\Links |
shell:Local AppData | C:\Users\(user-name)\AppData\Local |
shell:LocalAppDataLow | C:\Users\(user-name)\AppData\LocalLow |
shell:MusicLibrary | Libraries\Music |
shell:MyComputerFolder | Computer (Windows 8) or This PC (Windows 8.1) |
shell:My Music | C:\Users\(user-name)\Music |
shell:My Pictures | C:\Users\(user-name)\Pictures |
shell:My Video | C:\Users\(user-name)\Videos |
shell:NetHood | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Network Shortcuts |
shell:NetworkPlacesFolder | Network |
shell:Personal | C:\Users\(user-name)\Documents |
shell:PicturesLibrary | Libraries\Pictures |
shell:PrintersFolder | All Control Panel Items\Printers |
shell:PrintHood | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Printer Shortcuts |
shell:Profile | C:\Users\(user-name) |
shell:ProgramFiles | C:\Program Files |
shell:ProgramFilesCommon | C:\Program Files\Common Files |
shell:ProgramFilesCommonX64 | C:\Program Files\Common Files (64-bit Windows only) |
shell:ProgramFilesCommonX86 | C:\Program Files (x86)\Common Files (64-bit Windows only) |
shell:ProgramFilesX86 | C:\Program Files (x86) (64-bit Windows only) |
shell:ProgramFilesX64 | C:\Program Files (64-bit Windows only) |
shell:Programs | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs |
shell:Public | C:\Public |
shell:PublicAccountPictures | C:\Users\Public\AccountPictures |
shell:PublicGameTasks | C:\ProgramData\Microsoft\Windows\GameExplorer |
shell:PublicLibraries | C:\Users\Public\Libraries |
shell:Quick Launch | C:\Users\(user-name)\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch |
shell:Recent | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Recent |
shell:RecordedTVLibrary | Libraries\Recorded TV |
shell:RecycleBinFolder | Recycle Bin |
shell:ResourceDir | C:\Windows\Resources |
shell:Ringtones | C:\ProgramData\Microsoft\Windows\Ringtones |
shell:Roamed Tile Images | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\RoamedTileImages |
shell:Roaming Tiles | C:\Users\(user-name)\AppData\Local\Microsoft\Windows\RoamingTiles |
shell:SavedGames | C:\Users\(user-name)\Saved Games |
shell:Screenshots (8.1 only) | C:\Users\(user-name)\Pictures\Screenshots |
shell:Searches | C:\Users\(user-name)\Searches |
shell:SearchHomeFolder | search-ms: |
shell:SendTo | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\SendTo |
shell:SkyDrive (8.1 only) | SkyDrive shell folder |
shell:SkyDriveCameraRoll (8.1 only) | C:\Users\(user-name)\SkyDrive\Pictures\Camera Roll |
shell:SkyDriveDocuments (8.1 only) | C:\Users\(user-name)\SkyDrive\Documents |
shell:SkyDrivePictures (8.1 only) | C:\Users\(user-name)\SkyDrive\Pictures |
shell:Start Menu | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Start Menu |
shell:Startup | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup |
shell:SyncCenterFolder | Control Panel\All Control Panel Items\Sync Center |
shell:SyncResultsFolder | Control Panel\All Control Panel Items\Sync Center\Sync Results |
shell:SyncSetupFolder | Control Panel\All Control Panel Items\Sync Center\Sync Setup |
shell:System | C:\Windows\System32 |
shell:SystemX86 | C:\Windows\SysWOW64 |
shell:SystemCertificates | C:\Users\(user-name)\AppData\Roaming\Microsoft\SystemCertificates |
shell:Templates | C:\Users\(user-name)\AppData\Roaming\Microsoft\Windows\Templates |
shell:ThisPCDesktopFolder (8.1 only) | Desktop |
shell:User Pinned | C:\Users\(user-name)\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch\User Pinned |
shell:UserProfiles | C:\Users |
shell:UsersFilesFolder | C:\Users\(user-name) |
shell:UsersFilesFolder\Desktop | C:\Users\(user-name)\Desktop |
shell:UsersLibrariesFolder | Libraries |
shell:VideosLibrary | Libraries\Videos |
shell:Windows | C:\Windows |
Original Post : http://neodreamer-dev.tistory.com/743
Windows 10 업데이트 후 vcomp110d.dll 못 찾는 문제
재배포 패키지를 설치해 봐도 해결이 되지 않았다.
인터넷을 검색하여 "Vcomp110.dll이(가) 없습니다 / 찾을 수 없음 오류 메시지 해결 방법"의 몇가지를 따라해 봤지만 소용이 없었다.
실제로 파일을 없는지 찾아 보던 중 Windows.old 폴더를 발견했다. 아마도 10074 버전에서 사용하던 파일들로 유추가 되었고 그 곳에는 vcomp110d.dll이 존재하였다. 그래서 두 파일(vcomp110.dll, vcomp110d.dll)을 windows\system32 폴더로 복사하였다.
C:\>copy c:\Windows.old\Windows\System32\vcomp110.dll c:\Windows\System32
1 file(s) copied.
C:\>copy c:\Windows.old\Windows\System32\vcomp110d.dll c:\Windows\System32
1 file(s) copied.
이후 문제가 해결 됨
Original Post : http://neodreamer-dev.tistory.com/742
2015/05/16
MFC Unicode project 에서 vtkMFCWindow 생성 문제
이전 글에서 설명한대로 생성한 라이브러리를 테스트 해 보았다.
예제 코드를 복사하여 실행해 보았는데 컴파일에는 문제가 없었는데 실행시 vtkMFCWindow 생성하는 부분에서 아래와 같은 에러가 발생하였다.
쉽게 해결 방법을 찾지 못하다 구글 검색을 통해 해결 방법을 알게 되었다. 비슷한 문제로 고생을 한 개발자가 있었다. 해결 방법은 프로젝트의 문자셋을 멀티바이트로 변경하면 문제가 없다는 것이였다. 하여 프로젝트의 문자셋을 유니코드에서 멀티바이트로 변경하니 실행에 문제가 없었다.
이제 유니코드가 대세임을 감안하면 다른 해결 책을 찾아야 했다. 그래서 VTK 라이브러리중 vtkGUISupportMFC 를 유니코드로 변경하여 라이버리를 만들어 사용하니 사용하는 프로젝트가 유니코드이어도 정상적으로 동작을 하였다
Original Post : http://neodreamer-dev.tistory.com/741
2015/05/07
Hello OpenCV Viz
2015/05/07 - [Dev Story/Tips] - OpenCV viz 빌드하기
필요한 것으로는 VTK 헤더파일과 VTK와 함께 빌드후 생성 된 lib 파일과 dll 파일 그리고 OpenCV 헤더파일이 필요하다. OpenCV 를 빌드할 때 INSTALL 프로젝트를 빌드했다면 install 경로에 모든 헤더파일이 있지만 그렇지 않다면 module\viz\include 폴더에 있는 viz 관련 헤더가 필요하다.
아직은 Viz에 대한 자세한 사항을 몰라 sample과 reference 문서를 보고 간단하게 테스트 코드를 만들어 보았다.
아래 코드는 테스트를 위해 사용된 코드이다.
// Header
// OpenCV
#include "opencv2/opencv.hpp"
#include "opencv2/viz.hpp"
#include "opencv2/viz/widget_accessor.hpp""
#include "vtkPoints.h"
#include "vtkTriangle.h"
#include "vtkCellArray.h"
#include "vtkPolyData.h"
#include "vtkPolyDataMapper.h"
#include "vtkIdList.h"
#include "vtkActor.h"
#include "vtkProp.h"
#pragma comment(lib, "../OpenCV_VTK_VS2013/x86/lib/Release/opencv_core300.lib")
#pragma comment(lib, "../OpenCV_VTK_VS2013/x86/lib/Release/opencv_imgproc300.lib")
#pragma comment(lib, "../OpenCV_VTK_VS2013/x86/lib/Release/opencv_highgui300.lib")
#pragma comment(lib, "../OpenCV_VTK_VS2013/x86/lib/Release/opencv_viz300.lib")
// Source
/// Create a window
cv::viz::Viz3d vizHello("Hello Viz");
vizHello.setWindowSize(cv::Size(600, 480));
// Coordinate
vizHello.showWidget("Coordinate", cv::viz::WCoordinateSystem(1));
// Text 3D
cv::viz::WText3D wdg3DText("Hello OpenCV Viz Text3D"
, cv::Point3d(0.5, 0.5, 0.5), 0.2
, false, cv::viz::Color::green());
vizHello.showWidget("Text 3D", wdg3DText);
// Text 2D
cv::Size szWnd = vizHello.getWindowSize();
cv::viz::WText wdg2DText("Hello OpenCV Viz Text2D"
, cv::Point(szWnd.width / 4, szWnd.height / 4)
, 20, cv::viz::Color::yellow());
vizHello.showWidget("Text 2D", wdg2DText);
vizHello.spin();
아래 이미지는 위의 코드를 실행하면 보여지는 화면 이다.
프로그램이 정상적으로 실행되는 것으로 볼 때 OpenCV에 VTK 라이브러리를 포함 한 빌드에는 문제가 없어 보인다. 화면 출력은 3D는 자체 좌표계로 운영되고 마우스 컨트롤로 변경할 수 있으며 2D는 화면의 좌 하단을 원점으로 출력 된다.
Viz 운영에 있어 중요한 객체는 두 가진 인데 그려지는 윈도우를 담당하는 Viz3D 와 그려지는 내용을 담당하는 Widget 이다. Viz3D의 경우 Widget을 화면에 출력해 주는 역할을 한다
Original Post : http://neodreamer-dev.tistory.com/740
OpenCV viz 빌드하기
OpenCV 2.4.9 버전부터 지원한 3D visualization module 인 viz를 사용해보고자 빌드를 해 보았다.
빌드를하기 위해서는 VTK(Visual Tool Kit)이 필요하다. 3D visualization module 이 VTK를 기반으로 만들어졌기 때문이다.
우선 VTK site(http://www.vtk.org/)에서 소스를 받아 아래 설명에따라 빌드를 한다.
2015/03/31 - [Dev Story/Tips] - VTK 6.2 빌드하기
VTK 빌드를 마친 후 OpenCV를 빌드하여야 한다. 이 때 VTK 를 사용할 수 있도록 설정을 해 주어야 한다.
- WITH_VTK 선택
- VTK_DIR 항목에 위에서 빌드한 VTK 경로를 설정. 이 때 install 경로가 아닌 cmake설정에 쓰인 Where to build binaries 경로를 입력 한다.
- BUILD_opencv_viz 항목 선택
- BUILD_opencv_world 항목은 선택하지 않는다. (빌드시 에러가 발생하며 원인과 해결책은 찾지 못하였음)
2010/04/07 - [Dev Story] - OpenCV 2.1 컴파일 하기
2010/10/17 - [Dev Story] - OpenCV 2.1 + TBB 를 Visual Studio 2010 에서 컴파일하기
2011/01/18 - [Dev Story/Tips] - OpenCV 2.2 + Intel TBB 를 VS2010 에서 컴파일하기(32/64비트 분리)
OpenCV 를 빌드할 때 INSTALL project를 빌드하면 viz 모듈에 포함되어 있는 소스파일이 install 경로의 include 폴더에 복사가 되지만 ALL_BUILD 만 빌드하면 수동으로 viz 모듈의 헤더파일을 복사해야 한다.
위 작업을 Visual Studio 2013 버전으로 OpenCV 3.0 RC1 과 VTK 6.2.0을 이용하여 진행하였으며 VTK는 Static으로 빌드하였다.
이 과정에서 별다른 문제가 발생하지 않고 결과물이 생성 되었다. 일단 빌드는 성공하였고 이를 사용하는 것은 앞으로 조금씩 공부를 하며 진행할 예정이다.
Original Post : http://neodreamer-dev.tistory.com/739
2015/04/02
Visual Studio 2010 unable to start program, side-by-side
개발툴에서 실행을 시키면 아래이미지 처럼 Unable to start program 에러 메시지가 출력이 된다.
생성된 실행 파일로 실행을 하면 아래 이미지 처럼 side-by-side 에러가 발생을 한다.
Visual Studio 2010 버전에서 side-by-side 문제가 해결이 되었다고 알고 있었는데 이전 버전에서 만들어진 프로젝트는 계속 문제가 되나 보다.
일단 프로젝트의 옵션중에서 Linker의 Manifest file 에서 Manifest 생성을 하지 않도록 설정을 하니 프로그램 실행에는 문제가 없었다. 좀 찜찜하긴 하지만 일단 실행이 되니 당분간은 이대로 유지하고 짬이나면 manifest에 대해서 알아봐야겠다.
Original Post : http://neodreamer-dev.tistory.com/738
2015/03/31
VTK 6.2 빌드하기
VTK를 빌드하기 위해서는 kitware에서 제공하는 Cmake 툴이 필요하다.
Cmake 툴을 실행하고 Source Code 경로에 VTK 6.2 버전의 경로를 설정한다.
그리고 binaries 경로는 Visual Studio project가 생성될 경로이다. 적당한 경로를 설정하고 "Advanced" 옵션을 선택하여 모든 옵션을 볼 수 있도록 한다.
그리고 "Configure"버튼을 선택하여 Configuration을 진행한다.
처음 진행을 하면 경로가 없는 경우 경로을 생성한다는 메시지 박스가 출력이 된다.
그리고 프로젝트를 생성하기 위한 컴파일러 버전을 선택하는 대화상자가 나타난다.
컴파일러를 선택하고 Configuration을 진행하면 옵션 리스트가 갱신이 되고 모든 옵션이 붉은색 하이라이트로 표시 된다.
기본적으로 아래 언급된 옵션들에 대하여 사용 여부를 선택 한다.
"BUILD_SHARED_LIBS"
이 옵션은 라이브러리를 Dynamic으로 할 것인지 Static으로 할 것인지 설정하는 옵션으로 이 옵션을 선택하면 Dynamic DLL 이 생성하는 프로젝트가 만들어지고 그렇지 않은 경우 Static DLL을 생성하는 프로젝트가 만들어 진다.
"BUILD_EXAMPLES"
예제 프로젝트를 생성할지 여부를 선택하는 것으로 이를 선택하면 생성된 프로젝트의 빌드 시간이 길어진다. (선택하지 않는 것이 좋다.)
"BUILD_TESTING"
테스트 프로젝트 생성 여부로 BUILD_EXAMPLES 와 같이 프로젝트의 빌드 시간에 많은 영향을 준다.(선택하지 않는 것이 좋다.)
"CMAKE_INSTALL_PREFIX"
생성될 프로젝트 중 install project를 빌드할 경우 최종 결과물이 복사될 경로이다. 빌드하는 PC에서만 사용하는경우 기본값(Program FIles/VTK)으로 두어도 되지만 추후 다른 프로젝트에 쓰고 이동을 하는 경우에 활용하기 위해 별도의 경로를 지정하였다.
"Module_vtkGUISupportMFC"
MFC의 GUI를 지원하기 위해 이 옵션을 선택한다.
옵션 설정을 마치고 "Configuration"을 다시 진행을 하면 "BUILD_TESTING"옵션을 해제한 경우 "...vtkTesting..." 옵션 몇 가지가 붉은색으로 표시가 되는데 이는 다시 "Configuration"을 진행하면 사라진다.
에러(붉은색 하이라이트 옵션)이 없음을 확인하고 "Generate"를 선택하면 binaries 경로도 지정된 곳에 프로젝트가 생성이 된다.
프로젝트 파일 중 VTK.sln 파일을 열어서 ALL_BUILD를 Debug와 Release를 빌드하면 필요한 파일들이 생성이 된다. 추가로 install 프로젝트를 빌드하는 경우 "CMAKE_INSTALL_PREFIX" 경로에 bin, include, lib 폴더가 생성이 되고 관련 파일들이 이 곳으로 복사되어 진다.
참고로 Visual Studio 2013 버전 이상을 사용하는 경우 MBCS 라이브러리를 추가로 설치하고 프로젝트를 빌드해야 한다. Visual Studio 2013 버전부터는 MBCS 라이브러리가 배제된 상태로 제공이 된다. VTK 모든 프로젝트를 Unicode로 설정하여 빌드해 보았는데 무수히 많은 에러를 토해내어서 포기 하였다.
Multibyte MFC Library for Visual Studio 2013
이제 빌드를 마쳤고 하나씩 공부해 나갈 차례이다.
Original Post : http://neodreamer-dev.tistory.com/737
2015/03/25
Visual Studio 2012에서 Feature Pack의 변화
아래 내용은 변경사항 중 MFC와 ATL 라이브러리 관련 변경 사항이다.
MFC및 ATL 라이브러리 변경사항 보기
Removed Fusion support (afxcomctl32.h); therefore, all methods that are defined in afxcomctl32.h have been removed. Header files afxcomctl32.h and afxcomctl32.inl have been deleted.
Changed the name of CDockablePane::RemoveFromDefaultPaneDividier to CDockablePane::RemoveFromDefaultPaneDivider.
Changed the signature of CFileDialog::SetDefExt to use LPCTSTR; therefore, Unicode builds are affected.
Removed obsolete ATL tracing categories.
Changed the signature of CBasePane::MoveWindow to take a const CRect.
Changed the signature of CMFCEditBrowseCtrl::EnableBrowseButton.
Removed m_fntTabs and m_fntTabsBold from CMFCBaseTabCtrl.
Added a parameter to the CMFCRibbonStatusBarPane constructors. (It is a default parameter, and so it is not source-breaking.)
Added a parameter to the CMFCRibbonCommandsListBox constructor. (It is a default parameter, and so it is not source-breaking.)
Removed the AFXTrackMouse API (and related timer proc). Use the Win32 TrackMouseEvent API instead.
Added a parameter to the CFolderPickerDialog constructor. (It is a default parameter, and so it is not source-breaking.)
CFileStatus structure size changed: The m_attribute member changed from BYTE to DWORD (to match the value that's returned from GetFileAttributes).
CRichEditCtrl and CRichEditView use MSFTEDIT_CLASS (RichEdit 4.1 control) instead of RICHEDIT_CLASS (RichEdit 3.0 control) in Unicode builds.
Removed AFX_GLOBAL_DATA::IsWindowsThemingDrawParentBackground because it is always TRUE on Windows Vista, Windows 7, and Windows 8.
Removed AFX_GLOBAL_DATA::IsWindowsLayerSupportAvailable because it is always TRUE on Windows Vista, Windows 7, and Windows 8.
Removed AFX_GLOBAL_DATA::DwmExtendFrameIntoClientArea. Call Windows API directly on Windows Vista, Windows 7, and Windows 8.
Removed AFX_GLOBAL_DATA::DwmDefWindowProc. Call Windows API directly on Windows Vista, Windows 7, and Windows 8.
Renamed AFX_GLOBAL_DATA::DwmIsCompositionEnabled to IsDwmCompositionEnabled to eliminate name collision.
Changed identifiers for a number of MFC internal timers and moved the definitions to afxres.h (AFX_TIMER_ID_*).
Changed the signature of OnExitSizeMove method to agree with the ON_WM_EXITSIZEMOVE macro:
CFrameWndEx
CMDIFrameWndEx
CPaneFrameWnd
Changed the name and signature of OnDWMCompositionChanged to agree with the ON_WM_DWMCOMPOSITIONCHANGED macro:
CFrameWndEx
CMDIFrameWndEx
CPaneFrameWnd
Changed the signature of OnMouseLeave method to agree with the ON_WM_MOUSELEAVE macro:
CMFCCaptionBar
CMFCColorBar
CMFCHeaderCtrl
CMFCProperySheetListBox
CMFCRibbonBar
CMFCRibbonPanelMenuBar
CMFCRibbonRichEditCtrl
CMFCSpinButtonCtrl
CMFCToolBar ReplaceThisText
CMFCToolBarComboBoxEdit
CMFCToolBarEditCtrl
CMFCAutoHideBar
Changed the signature of OnPowerBroadcast to agree with the ON_WM_POWERBROADCAST macro:
CFrameWndEx
CMDIFrameWndEx
Changed the signature of OnStyleChanged to agree with the ON_WM_STYLECHANGED macro:
CMFCListCtrl
CMFCStatusBar
Renamed the internal method FontFamalyProcFonts to FontFamilyProcFonts.
Removed numerous global static CString objects to eliminate memory leaks in some situations (replaced with #defines), and the following class member variables:
CKeyBoardManager::m_strDelimiter
CMFCPropertyGridProperty::m_strFormatChar
CMFCPropertyGridProperty::m_strFormatShort
CMFCPropertyGridProperty::m_strFormatLong
CMFCPropertyGridProperty::m_strFormatUShort
CMFCPropertyGridProperty::m_strFormatULong
CMFCPropertyGridProperty::m_strFormatFloat
CMFCPropertyGridProperty::m_strFormatDouble
CMFCToolBarImages::m_strPngResType
CMFCPropertyGridProperty::m_strFormat
Changed the signature of CKeyboardManager::ShowAllAccelerators and removed the accelerator delimiter parameter.
Added CPropertyPage::GetParentSheet, and in the CPropertyPage class, call it instead of GetParent to get the correct parent sheet window, which may be the parent or a grandparent window to CPropertyPage. You might have to change your code to call GetParentSheet instead of GetParent.
Fixed unbalanced #pragma warning(push) in ATLBASE.H, which caused warnings to be disabled incorrectly. Those warnings are now enabled correctly after ATLBASE.H has been parsed.
Moved D2D-related methods from AFX_GLOBAL_DATA to _AFX_D2D_STATE:
GetDirectD2dFactory
GetWriteFactory
GetWICFactory
InitD2D
ReleaseD2DRefs
IsD2DInitialized
D2D1MakeRotateMatrix
Instead of calling, for example, afxGlobalData.IsD2DInitialized, call AfxGetD2DState->IsD2DInitialized.
Removed obsolete ATL*.CPP files from the \atlmfc\include\ folder.
Moved afxGlobalData initialization to on-demand instead of at CRT initialization time, to satisfy DLLMain requirements.
Added the RemoveButtonByIndex method to the CMFCOutlookBarPane class.
Corrected CMFCCmdUsageCount::IsFreqeuntlyUsedCmd to IsFrequentlyUsedCmd.
Corrected several instances of RestoreOriginalstate to RestoreOriginalState (CMFCToolBar, CMFCMenuBar, CMFCOutlookBarPane).
Removed unused methods from CDockablePane: SetCaptionStyle, IsDrawCaption, IsHideDisabledButtons, GetRecentSiblingPaneInfo, andCanAdjustLayout.
Removed CDockablePane static member variables m_bCaptionText and m_bHideDisabledButtons.
Added an override DeleteString method to CMFCFontComboBox.
Removed unused methods from CPane: GetMinLength and IsLastPaneOnLastRow.
Renamed CPane::GetDockSiteRow(CDockingPanesRow *) to CPane::SetDockSiteRow.
자세한 정보를 아래 링크를 확인 해보면 된다.
https://msdn.microsoft.com/en-us/library/vstudio/bb531344(v=vs.110)
Original Post : http://neodreamer-dev.tistory.com/736