보통 C#에서 Application.StartupPath 로 프로그램 시작 폴더를 얻어오는데 WPF에서는 Library가 달라서 불가능!

하지만 불가능이 어디있겠습니까? 당신이 솔로를 탈출하는 것만 빼면 말이죠.

아, 저도 솔로입니다. ㅋㅋ

... 아래와 같습니다!!

using System.Diagnostics;

...

string _configPath = System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName) + "\\LaunchingConfig.xml";



Process에 등록된 프로그램의 실행파일 경로를 가져오는 듯 보입니다. ㅋㅋ

그럼 수고들하시게요~
신고
Posted by ParkPill 박필


C#에서의 윈도우 이동과 다를 바 없다. 다만 한 가지 다른 점이 있다면,

Handle을 가져오는 방법이다.

new System.Windows.Interop.WindowInteropHelper(this).Handle

요정도 해줘야 핸들이 따라온다 ㅎㅎ

나머진 C#과 동일하므로 생략!!

모르면 같다 붙여보고, 컴파일해보고, 머 그러다보면 알게 되고 ㅎㅎ 수고요~



[DllImportAttribute("user32.dll")]
public static extern int SendMessage(IntPtr hWnd, int Msg, int wParam, int lParam);
[DllImportAttribute("user32.dll")]
public static extern bool ReleaseCapture();
public const int HT_CAPTION = 0x02;
public const int WM_NCLBUTTONDOWN = 0xA1;

protected override void
OnMouseDown(System.Windows.Input.MouseButtonEventArgs e){

            ReleaseCapture();
            SendMessage(new System.Windows.Interop.WindowInteropHelper(this).Handle, WM_NCLBUTTONDOWN, HT_CAPTION, 0);
}

신고
Posted by ParkPill 박필

Graphics g = Graphics.FromHwnd(new System.Windows.Interop.WindowInteropHelper(this).Handle);

뭐 다른 설명 필요하신 분? ㅋㅋ

C# 에서 CreateGraphics() 이 WPF에 없습니다! 그래서 혹시나 필요하신 분들은 요놈을 쓰시면 됩니다.

어지간하면 Blend에서 다 가능하지만 또 고집스러운 사람들(나... ㅋㅋ)이 있기에 올려봅니다. ㅋㅋ

신고
Posted by ParkPill 박필
영어 공부해서 어따 쓰랴. 아래의 주소에 있는 글을 번역해서 올려본다.
출처 : http://www.wpftutorial.net/IntroductionTo3D.html

WPF 3D 소개

 

3D 그래픽 기초

 3D 그래픽의 개념은 사물에 대한 세 개의 관점 즉 3차원을 가진다는 것이다. 우리의 화면이 단 2개의 차원만을 가지고 있기 때문에 우리는 사물의 단면을 가지는 camara를 정의해야 한다. 아래의 사진은 사물을 평면에 투사한 것이다. 이 투사도는 3D 엔진에 의해 비트맵으로 렌더링된 것이다. 이 엔진은 3차원의 공간에 존재하는 모든 에 의해 계산된 모든 픽셀의 색을 결정한다.

 사물의 모든 면은 물질(Material) Brush를 가진다. 물질은 특정 각도에서 얼마만큼의 빛을 반사할 것인지 그리고 Brush는 색을 결정한다. Brush는 단색일 수도 또는 Gradient일수도 혹은 Texture라고 불리는 Image일 수도 있다.

 

삼각형의 세계

 

 3D 그래픽의 세계에서는 모든 사물은 삼각형의 집합으로 이루어진다. 하지만 왜 굳이 삼각형일까? 그 이유는 삼각형이 2D의 화면에 나타내기에 가장 균일한 기하학적 구조이기 때문이다. 렌더링 엔진은 한 장면에서 빛과의 각도와 물질을 바탕으로 각각의 삼각형의 색을 계산할 수 있다. 만일 우리가 세상을 사각형으로 표현한다면 그 점들은 평면일 수가 없다. 또한 모든 표면들은 표현하거나 계산하기에 훨씬 더 복잡할 것이다.

 

3D로 만들어진 사물의 표면을 우리는  Mesh(덩어리)라고 부른다. Mesh는 수만은 3차원 점들을 이루어져 있다. 이 점들을 우리는 Vertices(점들)이라고 부른다. Vertices삼각형들을 정의하는 어떤 감싸는 패턴에 의해서 합쳐져 있다. 모든 삼각형들은 앞면과 뒷면이 구분되어져 있고 오직 앞면만이 렌더링된다. 앞면은 점들을 감싸는 순서에 의해 정의되어진다. WPF는 반 시계방향의 감싸는 패턴을 가지고 있다. 오른손의 법칙이라는 걸 기억하는가? 주먹을 쥐고 엄지를 들면 엄지를 제외한 나머지 손가락들은 엄지를 기준으로 반 시계방향을 만들어낸다. 엄지는 윗면을 나타내고 나머지 손가락들은 반 시계방향을 이루는 것이다.(, 엄지가 나타내는 방향이 앞면인 것이다)

 


오른손 좌표 시스템
 
 WPF는 오른손 좌표 시스템을 사용한다. 아래의 그림처럼 오른손을 만들었을 때 손가락들이 가리키는 방향이 양의 방향이 된다.


 3D 화면의 구성요소

-         Viewport 3D

Viewport 2D 3D 사이에 문을 열어주는 Control이다.

-         Camera

모든 3D화면 정확히 하나의 camara를 가진다. Camera Position(위치) LookDirection(보는방향) 그리고 UpDirection(위쪽 방향)을 가진다. WPF는 원근법과 직각투영법을 지원한다.

-         3D Models

3D model은 화면상의 사물을 의미한다. 이 기하학적 사물은 mesh meterial을 가지는데, 그 중 meterial은 그 자체로써 brush를 가지며 빛을 분산시키거나 반사시키거나 혹은 발산시킬 수도 있다

-         Lights

빛이 없으면 우리는 아무것도 볼 수가 없다. 그래서 우리는 사물들을 비추기 위해

장면당 최소한 하나의 빛을 갖추어야 한다. WPF는 여러 가지의 빛을 지원한다.

l       AmbientLight

l       DirectionalLight

l       PointLight

l       SpotLight

 

Hello 3D-world : A simple cube

 아래의 예제는 정육면체를 형성하는 12개의 삼각형으로 8개의 점이 이어진 기초적인 정육면체 cube를 어떻게 만드는지를 보여준다.


<Viewport3D>
   <Viewport3D.Camera>
      <PerspectiveCamera Position="-40,40,40" LookDirection="40,-40,-40 " 
                         UpDirection="0,0,1" />
   </Viewport3D.Camera>
   <ModelVisual3D>
      <ModelVisual3D.Content>
         <Model3DGroup>
            <DirectionalLight Color="White" Direction="-1,-1,-3" />
               <GeometryModel3D>
                  <GeometryModel3D.Geometry>
                     <MeshGeometry3D Positions="0,0,0 10,0,0 10,10,0 0,10,0 0,0,10 
                        10,0,10 10,10,10 0,10,10"
                        TriangleIndices="0 1 3 1 2 3  0 4 3 4 7 3  4 6 7 4 5 6 
                                         0 4 1 1 4 5  1 2 6 6 5 1  2 3 7 7 6 2"/>
                  </GeometryModel3D.Geometry>
                  <GeometryModel3D.Material>
                     <DiffuseMaterial Brush="Red"/>
                  </GeometryModel3D.Material>
               </GeometryModel3D>
            </Model3DGroup>
         </ModelVisual3D.Content>
      </ModelVisual3D> </Viewport3D>
신고
Posted by ParkPill 박필
TAG 3D, c#, csharp, cube, WPF, 강좌


티스토리 툴바