2016. 1. 19. 13:48

// int -> string


// vc++ 11 이전 

#include <sstream>


int num = 5;

std::stringstream stream;

stream << num;

std::string str = stream.str( );


// vc++ 11 이후

int num = 5;

std::string str = std::to_string( num );



// string -> int

// vc++11 이전

std::string str( 5 );

int num = atoi(str.str( ) );


// vc++11 이후

std::string str( 5 );

int num = std::stoi( str );

2016. 1. 14. 16:46

* 4가지 Inventor 이벤트 처리 메커니즘


1. 씬 매니저에 의해 제공되는 Inventor의 자동 이벤트 처리 메커니즘 사용

- 이벤트를 처리하는 노드들의 몇 가지 종류를 포함

- 사용하기 가장 쉬운 메커니즘

- How Nodes Handle Evnets: SoHandleEventAction


2. Inventor의 이벤트 콜백 메커니즘 사용

- 이벤트를 처리하는 사용자 콜백 노드 사용

- 이 방법은 객체 당 이벤트를 처리하고 꽤 구현하기 쉽다

- 단점 : 어떤 패스가 모니터 되는지 또는 어떤 이벤트가 관심있는지에 대해 설명하는 필드를 가질 수 없다

- Using Event Callback Nodes


3. Inventor의 이벤트 처리 메커니즘을 전적으로 오버라이딩

- 응용 프로그램에 직접적으로 모든 이벤트를 전달

- 만약 객체당 이벤트를 처리할 필요가 없고 X 이벤트를 직접적으로 적용하는 걸 선호한다면 이 방법을 사용해라

- 이 벙법은 씬 순환에 직접 통과하고 오직 윈도우 이벤트만 처리한다

- Sending Events Directly to the Application


4. Inventor의 일반적인 콜백 메커니즘을 사용

- 사용자 작성 콜백 노드는 모든 액션을 다룬다

- 렌더링과 같은 또다른 액슨을 구현하기를 원하고 이벤트를 처리하기를 원하면 이 메커니점을 사용해라

- 만약 오직 이벤트만 처리하기를 원하면 2번을 사용해라

- 이벤트 콜백 노드는 당신에게 더 많은 일을 하기 때문이다

- SoCallback 노드의 예제에 관한 17장을 봐라


- 1, 2, 4 를 추천한다

- 윈도우 시스템에 독립적이다

- 더 유연하다

- 1, 2 번은 아마 가장 쉽다

2016. 1. 14. 16:33

- 어떻게 Open Inventor가 입력 이벤트를 처리하는지 설명

- Inventor의 내장 선택 정책 중 하나를 선택하여 객체를 선택

- 이벤트 콜백 노드를 생성함으로써 자신만의 선택 정책 구현

- 씬에서 선택된 객체를 하이라이트

- 선택 리스트가 변할 때 응용 프로그램이 어떤 연산을 수행하도록 허락하는 선택 콜백 함수 작성


* Open Inventor 이벤트 모델 설명

- 이것은 처리를 위해 데이터 베이스 안에서 객체에 대해 키 누르기 또는 마우스 움직임과 같은 이벤트를 보내는 간단한 메커니즘을 제공

- 윈도우 시스템이 클라이언트 윈도우에 이벤트를 보내는 것과 같은 대다수의 방식처럼, Inventor는 그것들을 처리할 수 있는 데이터 베이스 객체에 이벤트를 보낸다

- 중요한 개념은 이벤트 처리, SoXtRenderArea의 사용, 렌더링을 사용하는 위젯 그리고 Inventor 데이터베이스에서 이벤트 처리에 대한 Inventor 프로그래밍 모델을 포함한다

- SoHandelEventAction뿐만 아니라, 이벤트 콜백 함수의 개념, 선택 노드, 하이라이팅에 대해 자세하게 묘사한다


* 개요

- 사용자가 처리 박스 조종자에 마우스 버튼을 클릭하거나 스크린 상에서 새로운 위치에 물체를 드래그할 때, Inventor는 마우스로부터 사용자 입력을 어떻게 받고 그에 따라 객체를 이동할 수 있는가?

- 어떤 물체를 포함하지 않는 런더링된 이미지에서 공간을 마우스 클릭하면 무슨 일이 일어나는가?

- Inventor는 여러 개의 사용자 선택 객체를 어떻게 추적하는가?

- 이것들은 당신이 상호적인 Inventor 응용 프로그램을 작성하기 전에 대답되어야 할 모든 질문들이다


- 여기서는 어떻게 윈도우에 구체화된 이벤트가 Inventor 이벤트로 번역되는지에 대한 짧은 설명을 제겅한다

- Inventor 이벤트의 다른 종류와 그것들과 연관된 함수들을 설명한다

- 어떻게 씬 매니저가 구체적인 이벤트에 대해 이벤트 처리기를 찾고 어떻게 다른 노드들이 이벤트를 다루는지에 대해 배운다


* 이벤트 처리기에 대한 일반적인 프로그래밍 모델


- Inventor는 씬 데이터 베이스에 대해 내장 이벤트 모델을 포함한다

- 이 모델은 어떤 구체적인 윈도우 시스템 또는 툴킷에 기초하지 않는다.

- Inventor 프로그램을 작성할 때 당신은 X 윈도우 프로그래밍 모델을 선택할 수 있고 윈도우를 열기 위해 윈도우 시스템에 의해 제공되는 도구를 사용할 수 있고 Inventor로 이벤트를 보낼 수 있다

- Inventor는 X로부터의 이벤트 번역을 Inventor 이벤트 클래스로 제공한다

- 아래 그림은 X 이벤트가 렌더링 영역에 어떻게 통과하는지 보여준다

- Inventor 씬 매니저에 의해 처리되는 Inventor 이벤트로 번역되는지 보여준다

- Inventor는 윈도우 시스템에 독립적이기 때문에 다른 윈도우 시스템을 선택할 수 있고 자신만의 이벤트 번역기를 작성할 수 있다






* X 윈도우 시스템 사용하기


- Inventor는 X 윈도우 시스템과 함께 사용할 수 있는 Xt 유틸리티 집합 제공

- 렌더링 영역 "위젯"

- 메인 루프와 초기화 함수

- 이벤트 번역기 유틸리티


- 이 특징들에 추가하여 Inventor 컴포넌트 라이브러리는 또한 Xt 컴포넌트의 집합을 포함한다

- 이 컴포넌트들은 씬 데이터 베이스를 직접적으로 변경하기 위한 사용자 인터페이스에 관한 뷰어와 편집기를 포함한다


- 윈도우 시스템에 독립적인 Inventor의 측면에 초점

- 이벤트 ( SoEvent 로부터 파생 )

- 씬 매니저

- 이벤트 액션 처리

- 이벤트 콜백 함수

- 선택 노드


* Render Area

- 윈도우가 리사이즈 되거나 노출되거나 씬이 변화할 때 윈도우를 다시 그리는 내장 센서

- 내장 이벤트 처리기

- 투명도 타입과 안티 앨리어싱의 양과 같은 제어


Inventor 이벤트( SoEvent )


- 타입 정보( SoType )

- 이벤트가 발생한 시간

- 이벤트가 발생했을 때 커서 위치

- 이벤트가 발생했을 때 변경 키(Shift, Control, Alt)의 상태


- SoEvent의 하위 클래스는 추가 정보 포함

- 예를 들어 SoButtonEvent는 이벤트가 발생했을 때 버튼이 눌렸는지 아닌지에 대한 정보를 포함

- SoMouseButtonEvent 는 버튼이 눌렸을 때 어떤 버튼이 눌렸는지에 관한 정보를 포함


- 매크로 사용

- SO_MOUSE_PRESS_EVENT() : SoEvent와 버튼 숫자를 넣는다

                                   버튼이 눌렸을 때 TRUE 를 리턴

- SO_MOUSE_RELEASE_EVENT() : 버튼을 떼었을 때 TRUE 리턴


- SoKeyboardEvent 는 어떤 키가 눌렸는지에 관한 정보를 포함한다


- SoLocation2Event 는 커서가 움직였을 때마다 발생한다

- 이 이벤트는 윈도우 좌표에서 커서의 절대 위치를 포함한다

- (0, 0) 은 왼쪽 아래 코너로 시작한다


- SoMotion3Event 는 공간 볼과 같은 3D 입력 장치가 움직일 때마다 발생

- 이 이벤트는 장치의 이전 위치에 관한 상대적인 회전과 이동을 포함한다


* 씬 매니저

- SoSceneManager는 윈도우-시스템 독립적인 렌더링 영역에 속한 Inventor에서 사용되는 공통적인 클래스이다

- 렌더링 영역은 씬 그래프를 처리하기 위해 씬 매니저를 사용한다

- 씬 매니저는 렌더링과 이벤트 처리 둘 다 처리한다

- 어떤 특정한 윈도우 시스템에 독립적이다




























2016. 1. 14. 10:37

- 오버레이 평면은 Inventor에서 특별한 목적을 위해 사용될 수 있는 비트 평   면의 separate 집합이다

- 주요 이미지의 최상위에 나타나는 씬에서  물체를 위해 사용되고, 독립적으로 다시 그려진다

- 오버레이 평면에서 위치한 씬 그래프의 색상과 복잡도에 관한 한계가 있지만, 그것들을 사용하는 것은 완전한 씬 그래프를 다시 그리는 것 없이 간단한 씬 그래프를 빠르게 다시 그릴 수 있다

- 오버레이 평면은 사용자 피드백을 제공하기 위해 유용한 메커니즘을 제공한다

- 예를 들면 커서를 따라다니는 지오메트리를 빠르게 그릴 수 있다


- 오버레이 평면에서 씬 그래프를 위치시키는 다음 함수들을 사용하라

- setOverlaySceneGraph()

- 오버레이 평면에서 렌더링 하기 위한 씬 그래프 설정

- setOverlayColorMap()

- 오버레이 비트 평면을 위해 사용하는 색상 설정

- 오버레이 평면은 보통 색상-인덱스 모드 사용

- setOverlayBackgroundIndex()

- 오버레이 이미지를 위한 배경색 인덱스 설정(디폴트 0, 클리어 색상)


오버레이 씬 그래프는 자신만의 다시 그리는 센서를 가지고, 이 제한 조건을 가진 "일반적인" 씬 그래프와 유사하다

- 만약 몇 개의 오버레이 평면을 가지고 있으면, SoLightModel의 model 필드에 대해 BASE_COLOR 를 설정하라

- 씬 그래프를 간단하게 유지하라.

- 빨리 그릴 수 있는 라인 그리기-스타일, 직사각형, 2D 텍스트를 사용하라

- 텍스처를 사용하지 말아라

- 왜냐하면 오버레이 평면은 싱글 버퍼이기 때문에 만약 씬이 너무 복잡하면 다시 그릴 때 깜빡거릴 수 있다

- 색상 맵을 로딩하는 걸 확실히 해라. 오버레이 평면에 대해 디폴트 색상 맵은 없다

- 오버레이 평면에 대한 색상 맵은 색들의 한계 수를 포함한다

- 색상 0 은 클리어이고 변할 수 없다

- 두 개의 비트 평면을 가지고, 색상을 위해 1부터 3까지 인덱스를 사용할 수 있다


 

2016. 1. 12. 23:04

SoRayPickAction은 View Volume 의 near 평면에서 점을 통해 카메라로부터 광선을 따라 물체를 찾는다

이 광선은 전형적으로 윈도우-공간 픽셀의 좌표를 줌으로써 구체화된다

SoRayPickAction은 액션을 적용한 신 그래프를 순환한다

그 후에 가장 가까운 거부터 가장 먼 거까지 정렬된, 찍은 광선을 따라 모든 도형에 대한 경로를 리턴한다

찍는 액션은 주로 지오메트리, 변형, 모양 노드에 관심있다


SoSelection 노드는 자동적으로 객체를 찍는다



* Picking Style

- 디폴트로 신 그래프에서 모든 물체는 찍음 가능하다

- 심지어 투명하거나 안 보이는 물체도 가능하다

- 찍음 액션에 보이지 않는 객체의 그룹 또는 물체를 만들기 위해

SoPickStyle 을 신 그래프에 삽입하고, style 필드를 UNPICKABLE로 설정

_ SHAPE, BOUNDING_BOX


- 액션의 인스턴스 생성


* SoRayPickAction 의 인스턴스 생성 예제


SbViewportRegion viewport;

SoRayPickAction pickAction(viewport);


뷰 포트 영역은 SoText2와 같은 스크린 정렬 물체에 대한 경계 박스를 계산하기 위해 사용


* 파라미터 설정


- 찍음 액션을 적용하기 전에 다음 파라미터를 설정할 수 있음

- 찍을 광선

- 오직 가까운 물체만 리턴할지 또는 광선에 따른 모든 물체를 리턴할지


- 찍음 광선은 두 방법 중에 하나로 구체화할 수 있다.

- 윈도우 점과 반경을 구체화 하든지

- 점과 세계 공간에 대한 방향을 구체화 하든지

- 첫 번째 방법이 상호 작용 프로그램에 대해 더 전형적이다

- 왜냐하면 일반적으로 커서 아래의 영역에 대부분 관심이 있기 때문


* 윈도우 점을 가진 찍음 광선 구체화

- setPoint(), setRadius() 함수를 찍음 광선을 설정하기 위해 사용