Click or drag to resize
XDL

NXPlanetView Class

이 클래스는 전 세계지도를 기반으로 2차원과 3차원 렌더링 환경을 제공한다. 하나의 컨테이너에 둘 이상의 뷰를 사용하려면 NXPlanetViewHost를 사용해야 한다.
Inheritance Hierarchy
SystemObject
  SystemMarshalByRefObject
    System.ComponentModelComponent
      System.Windows.FormsControl
        System.Windows.FormsScrollableControl
          System.Windows.FormsPanel
            Pixoneer.NXDL.NXPlanetNXPlanetView

Namespace: Pixoneer.NXDL.NXPlanet
Assembly: NXPlanet (in NXPlanet.dll) Version: 2.0.3.38
Syntax
C#
public class NXPlanetView : Panel

The NXPlanetView type exposes the following members.

Constructors
 NameDescription
Public methodNXPlanetView NXPlanetView 객체를 생성하고 데이터 멤버를 초기화한다. 기본 생성자.
Public methodNXPlanetView(XFrameCaptureBuffer, Boolean) 화면에 표시하지 않고 프레임버퍼로 그릴 뷰를 만든다.
Top
Properties
 NameDescription
Public propertyAutoFocus 현재 뷰에서 마우스의 이동에 따라 초점을 강제적으로 가져올지 여부를 확인하거나 설정한다. 다른 컨트롤에(입력 컨트롤 등) 입력초점을 남기려면 false로 설정한다.
Public propertyAutoRefreshRate 자동 화면 갱신 속도를 초당 갱신 횟수로 설정한다. 0이면 자동 갱신을 하지 않는다. (기본값: 0)
Public propertyBrightness 밝기 조절을 확인하거나 설정한다.
Public propertyCallbackMode 콜백 모드: 그래픽 엔진의 주 쓰레드에서 렌더링 엔진을 통해 순차적으로 뷰 렌더링을 제어하는 모드. 콜백 모드가 아닌 쓰레드 모드: 별도의 뷰 전용 쓰레드에서 렌더링을 제어하는 모드. 기본값은 콜백 모드이며 쓰레드 모드는 현재 실험적인 기능이다.
Public propertyContrast 대비 값을 확인하거나 설정한다.
Public propertyDisplayMode 배경지도의 색상 도시 모드를 확인하거나 설정한다.
Public propertyEarthMode Planet의 유형을 확인하거나 설정한다.
Public propertyEnableGroundEffect 안개, 태양광 효과와 같은 그라운드 쉐이더 효과를 적용할지 여부를 설정한다. 기본값은 적용하지 않는 것이고, 이 경우 배경지도가 Planet2D와 같이 원본 영상처럼 보인다.
Public propertyEnableLightingEffect 빛 효과(주변광(ambient), 분사광(diffuse), 반사광(specular)) 적용여부를 설정한다. Planet3D 모드에서만 적용된다.
Public propertyEnableSkyEffect 안개, 태양광 효과와 같은 하늘 쉐이더 효과를 적용할지 여부를 설정한다. 기본값은 효과를 적용하는 것이고 Planet3D 모드에서만 적용된다.
Public propertyForceDraw true 로 설정하면 View 컨트롤이 보이지 않게 설정되어 있어도 화면 내용을 렌더링한다.
Public propertyFrameCapture 프레임 갈무리 버퍼. 프레임 갈무리 버퍼를 지정하면 렌더 화면을 프레임버퍼(FBO)를 사용해서 저장한다.
Public propertyGridType 격자 기준선(grid) 유형을 확인하거나 설정한다.
Public propertyHeightFactor Planet3D 모드에서의 고도값 증가 또는 감소 비율. 0보다 작거나 1인 경우에는 원본 값을 사용하여 렌더링하도록 한다.
Public propertyInverseMouseButton 마우스의 오른쪽 버튼과 왼쪽버튼의 이벤트 기능을 확인하거나 설정한다. 기본값은 false이고 이 경우 마우스 왼쪽 버튼으로 영상 이동을, 오른쪽 버튼으로는 회전을 할 수 있다.
Public propertyInverseMouseWheel 마우스 휠을 이용한 확대/축소 이벤트 방향을 확인하거나 설정한다. 기본값은 false이고 이 경우 마우스 휠을 땅길 때 확대되고, 밀 때 축소된다.
Public propertyLayerCount 뷰의 레이어 개수를 가져온다.
Public propertyLayoutMode 레이아웃의 모드를 확인하거나 설정한다.
Public propertyMaxDisplayLevel2D Planet2D 모드에서 배경지도 렌더링을 위한 최대 도시 레벨을 확인한다.
Public propertyPlanet2DProjection 2D 지도 투영(Map Projection) 방식을 확인한다. 2D 지도 투영 방식은 Planet 환경설정 파일의 Planet2DProjection 태그에서 설정할 수 있다.
Public propertyRelativeHeight 상대적인 높이 레이아웃을 확인하거나 설정한다 (0.0~1.0) 의미(0%~100%).
Public propertyRelativeLeft 상대적인 왼쪽 레이아웃을 확인하거나 설정한다 (0.0~1.0) 의미(0%~100%).
Public propertyRelativeTop 상대적인 오른쪽 레이아웃을 확인하거나 설정한다 (0.0~1.0) 의미(0%~100%).
Public propertyRelativeWidth 상대적인 폭 레이아웃을 확인하거나 설정한다 (0.0~1.0) 의미(0%~100%).
Public propertyRestrictRenerArea 화면에 도시되는 영역을 제한하거나 설정을 확인한다.
Public propertyRotatable 회전 기능을 확인하거나 설정한다.
Public propertySaturation 채도 값을 확인하거나 설정한다.
Public propertyShowControlPoint Planet3D 모드의 화면을 기울이거나(tilting) 또는 확대/축소할 때 중심점을 도시할지 여부를 설정하거나 확인한다.
Public propertyShowGrid 그리드 레이어의 표시 여부를 확인하거나 설정한다.
Public propertyShowPBP 지명(PBP : Pixoneer Base Placename)을 화면에 도시할지의 여부를 설정하거나 확인한다.
Public propertyShowPBV 지도 벡터(PBV : Pixoneer Base Vector)를 화면에 도시할지의 여부를 설정하거나 확인한다.
Public propertyShowStar 배경 별의 도시 여부를 확인하거나 설정한다.
Public propertyShowStatusInfo 현재 도시 상태 정보를 확인하거나 설정한다.
Public propertySingleBaseMap 개별젹인 배경지도를 사용할 수 있도록 설정하거나 설정여부를 확인한다.
Public propertyToolboxAreaUnit 영역 계산시 단위를 확인하거나 설정한다.
Public propertyToolboxDistUnit 거리 계산시 단위를 확인하거나 설정한다.
Public propertyToolboxMode 도구상자의 작업 모드를 확인하거나 설정한다.
Public propertyToolboxSet Planet의 툴박스의 속성을 가져온다.
Public propertyUsePrivateEffects 뷰 전용 플래닛 효과 사용 설정. 다중 뷰 환경에서 태양 위치 등 각종 효과를 다르게 줄 때 활용한다. (기본값: false)
Public propertyViewAreaFOV 뷰의 각도를 확인하거나 설정한다.
Public propertyViewAreaID 뷰의 ID를 확인한다.
Public propertyViewshedTool 뷰의 shed 툴을 가져온다.
Public propertyZoomCenterMode 마우스 휠에 따른 화면 확대축소의 기준을 확인하거나 설정한다.
Public propertyZoomWheelMode 마우스 휠에 대한 기본 줌 모드를 설정한다.
Public propertyZoomWheelStaticFactor 마우스 휠에 대한 기본 확대/축소 비율을 설정한다. 0~1 사이값이 유효하다.(0인 경우 확대/축소변환 없음, 1인 경우 2배 확대/축소)
Top
Methods
 NameDescription
Public methodAddRenderLayer(NXPlanetLayer) 뷰에 레이어를 추가한다.
Public methodCode exampleAddRenderLayer(NXRenderLayer) 뷰에 레이어를 추가한다.
Public methodCalcSize뷰의 사이즈를 다시 계산하며, 엔진에 의해 자동 호출 된다.
Public methodCalculateCADRGScale CADRG 축척에 따른 비율을 계산한다.
CADRG NS PixelSize과의 비율을 이용하여 축척을 계산하여 반환한다.
Public methodCalculateScale 현재 뷰의 스케일을 계산한다.
Public methodCaptureScreen 현재 화면을 그대로 캡쳐한다.
Public methodCode exampleCaptureScreen(String, Int32, Int32, Int32, Int32, Int32, Int32, XFrameCaptureBuffereCaptureMode, String, XThread) Planet View에 도시되어 있는 내용을 해상도 조절하여 저장한다. Planet2D 모드에서만 가능
Public methodCode exampleCaptureScreenByBlock(String, Int32, Int32, Int32, Int32, Int32, Int32, XFrameCaptureBuffereCaptureMode, NXPlanetView, String, XThread) Planet View에 도시되어 있는 내용을 임시 PlanetView 를 이용하여 해상도 조절하여 저장한다. 임시 PlanetView 의 Width, Height 는 256 보다 큰 값으로 각각 설정한다. Planet2D 모드에서만 가능
Public methodCaptureScreenByBlock(String, Int32, Int32, Int32, Int32, Int32, Int32, XFrameCaptureBuffereCaptureMode, NXPlanetView, String, XThread, Int32) Planet View에 도시되어 있는 내용을 임시 PlanetView 를 이용하여 해상도 조절하여 저장한다.
임시 PlanetView 의 Width, Height 는 256 보다 큰 값으로 각각 설정한다.
Planet View에서 선택한 영역의 데이타를 임시 PlanetView에 block별(256*256)로 도시한 뒤 캡쳐한다.
이렇게 캡쳐한 block별 영상을 merge 하여 하나의 영상 파일로 저장한다.
Planet2D 모드에서만 가능
Public methodChangeLayerOrder 렌더 레이어의 순서를 바꿔준다.
Public methodClearLayer 뷰에 연결된 모든 레이어를 삭제한다.
Public methodGeographicToScreen 위경도 좌표를 스크린 좌표로 변환한다.
Public methodGeographicToWorld 위경도 좌표를 세계 좌표로 변환한다.
Public methodGetCameraState 현재 카메라의 상태를 가져온다.
Public methodGetDrawArgs PlanetView 컨트롤 및 렌더링 정보가 담긴 Draw argument를 가져온다.
Public methodGetFreezeViewArea 뷰의 고정여부를 가져온다.
Public methodGetHandle 뷰의 컨트롤 핸들을 가져온다.
Public methodGetIndexMapMode 인덱스 맵 모드를 가져온다.
Public methodGetLayer 렌더 레이어를 가져온다.
Public methodGetLayerOrder 현재 렌더 레이어의 순서를 가져온다.
Public methodGetMapAlitutdeFromCADRGScale CADRG 축척을 기준으로 카메라 높이를 계산한다.
CADRG NS PixelSize와의 비율로 해상도를 계산하고 이에 대한 카메라 높이를 반환한다.
Public methodGetMapAltitude(Double) 입력 축척에 대응하는 카메라의 높이를 가져온다.
Public methodGetMapAltitude(NXPlanetVieweMapScale) 입력 축척에 대응하는 카메라의 높이를 가져온다.
Public methodGetMouseControlMode 마우스 제어 상태를 가져온다.
Public methodGetPTMOverlayLayer Planet의 지형 관리자로부터 중첩 레이어(NXOverlayLayer)를 가져온다.
Public methodGetWOS 뷰의 WOS를 가져온다( World offset and Scale).
Public methodIsUnderMouse 마우스아래 뷰가 있는지 확인한다.
Public methodLookTarget 바라보는 위치와 거리, 방위각과 고도 값에 의해 현재 카메라 상태를 설정한다. [Planet 3D뷰를 위함]
Public methodMaxZoomIn 고도를 통해 최대 줌인을 설정한다.
Public methodMaxZoomOut 고도를 통해 최대 줌 아웃을 설정한다.
Public methodRefreshBaseMap 특정 위치와 해상도에 대한 기본 배경 지도를 갱신 요청한다.
Public methodRefreshLOD LOD를 기반으로 화면을 갱신하여 도시하도록 요청한다.
Public methodRefreshScreen 화면을 갱신하여 도시하도록 요청한다.
Public methodRelease 뷰에 연결된 엔진과 갈무리 버퍼의 연결을 끊고 모든 레이어를 삭제한다.
Public methodRemoveRenderLayer(NXPlanetLayer) 뷰에 레이어를 분리한다.
Public methodRemoveRenderLayer(NXRenderLayer) 뷰에 레이어를 분리한다.
Public methodRequestRender(UInt64) 새로 렌더링을 요청한다. 카메라 설정 등을 바꾸고 요청 식별자를 특정해서 부를 수 있다.
Public methodRequestRender(UInt64, Boolean) 요청 식별자를 특정해서 새로 렌더링을 요청하고 실제 렌더링이 될 때까지 기다릴 수 있다.
Public methodScreenToGeographic 스크린 좌표를 위경도 좌표로 변환한다.
Public methodScreenToWorld 스크린 좌표를 세계 좌표로 변환한다.
Public methodSetCameraPosition(XGeoPoint, XAngle) 현재 카메라의 상태를 눈의 위치와 방위각에 의해 설정하며, 기본 기울기의 값은 0 이다 [Planet 2D뷰를 위함]
Public methodSetCameraPosition(XGeoPoint, XGeoPoint) 카메라 위치와 대상(LookAt)의 위치를 입력하여 카메라의 상태를 설정한다. 카메라 위치를 기준으로 up 벡터를 계산하여 사용한다. [Planet 3D뷰를 위함]
Public methodSetCameraPosition(XGeoPoint, XGeoPoint, XVertex3d) 카메라 위치와 대상(LookAt)의 위치를 입력하여 카메라의 상태를 설정한다. [Planet 3D뷰를 위함]
Public methodSetCameraPosition(XGeoPoint, XAngle, XAngle, XAngle) 현재 카메라의 상태를 눈의 위치와 그리고 yaw, pitch, roll에 의해 설정한다. 시선은 아래 방향(D)이다. [Planet 3D뷰를 위함]
Public methodSetCameraPosition(XGeoPoint, XAngle, XAngle, XAngle, Boolean) 현재 카메라의 상태를 눈의 위치와 그리고 yaw, pitch, roll에 의해 설정한다. [Planet 3D뷰를 위함]
Public methodSetCameraState 현재 카메라의 상태를 설정한다.
Public methodSetEarthShow 지구 레이어를 표시 또는 숨기기 여부를 설정한다.
Public methodSetFreezeViewArea 뷰를 고정시킬지 여부를 설정한다
Public methodSetIndexMapMode 인덱스 맵 모드를 설정한다
Public methodSetLightingFactor 빛 효과를 위한 주변광, 분사광(diffuse), 반사광(specular) 비율을 설정한다.
Public methodCode exampleSetMouseControlMode 확대축소, 회전, 이동의 마우스 제어 상태를 설정한다.
Public methodSetPBEDefaultDataSet 새로운 PBE 데이터 소스를 설정한다. 기존에 이용하는 PBE 데이터는 삭제되고 새로운 데이터를 로딩하여 도시한다.
Public methodSetPBIDefaultDataSet 새로운 PBI 데이터 소스를 설정한다. 기존에 도시되는 PBI 데이터는 삭제되고 새로운 데이터를 로딩하여 도시한다.
Public methodSetPBPDefaultDataSet 새로운 PBP 데이터 소스를 설정한다. 기존에 도시되는 PBP 데이터는 삭제되고 새로운 데이터를 로딩하여 도시한다.
Public methodSetPBVDefaultDataSet 새로운 PBV 데이터 소스를 설정한다. 기존에 도시되는 PBV 데이터는 삭제되고 새로운 데이터를 로딩하여 도시한다.
Public methodSetRenderArea 화면에 렌더링되는 영역을 설정한다. Planet2D 모드에서만 적용된다. RestrictRenderArea를 참으로 설정하면 이 함수를 통해 설정된 값으로 렌더링 영역이 제한된다.
Public methodSetRenderSkip 렌더링 주기를 설정한다.
Public methodCode exampleSetSunFollowCamera 태양의 위치를 카메라의 위치와 동일하게 설정할지를 설정한다. Planet3D 모드에서만 지원
Public methodCode exampleSetSunPosition(XGeoPoint) 대기 효과(밤/낮)를 위한 태양의 위치를 설정한다.
Public methodCode exampleSetSunPosition(XGeoPoint, Single)대기 효과(밤/낮)를 위한 태양의 위치를 설정한다.
Public methodSetUnderMouse 내부 함수, 마우스 아래에 있는 뷰의 상태를 설정한다.
Public methodSetViewZoomCenterPosition 해당 좌표를 기준으로 마우스 휠 줌을 한다.
Public methodSetWorkSpaceHgt 카메라의 높이 구간을 설정한다
Public methodSetWorkSpaceLat 카메라의 위도 구간을 설정한다.
Public methodSetWorkSpaceLon 카메라의 경도 구간을 설정한다
Public methodCode exampleUpdatePBPDataSet PBP 데이터소스를 갱신한다.
Public methodCode exampleUpdatePBVDataSet PBV 데이터소스를 갱신한다.
Public methodWorldToGeographic 세계 좌표를 위경도 좌표로 변환한다.
Public methodWorldToScreen 세계 좌표를 스크린 좌표로 변환한다.
Top
Events
 NameDescription
Public eventOnInitialized 뷰의 초기화가 완료되면 발생한다.
Public eventOnKeyDown 키보드의 키가 다운될 때 발생한다.
Public eventOnKeyUp 키보드의 키가 업될 때 발생한다.
Public eventOnMouseWheel 마우스 휠이 사용될 때 발생한다.
Public eventOnSetDatasetEnd 뷰의 배경지도 데이터설정이 끝나면 발생한다.
Top
Example
This is example #1:
C#
partial class FormMain
{
    private Pixoneer.NXDL.NXPlanet.NXPlanetView nxPlanetView2D;

    private void InitializeComponent()
    {
        this.nxPlanetView2D = new Pixoneer.NXDL.NXPlanet.NXPlanetView();
        this.nxPlanetView2D.BackColor = System.Drawing.SystemColors.ActiveCaptionText;
        this.nxPlanetView2D.Brightness = 1F;
        this.nxPlanetView2D.Contrast = 1F;
        this.nxPlanetView2D.Dock = System.Windows.Forms.DockStyle.Fill;
        this.nxPlanetView2D.EarthMode = Pixoneer.NXDL.NXPlanet.NXPlanetView.eEarthMode.Planet2D;
        this.nxPlanetView2D.LayoutMode = Pixoneer.NXDL.NXPlanet.NXPlanetView.eLayoutMode.Windows;
        this.nxPlanetView2D.Location = new System.Drawing.Point(0, 0);
        this.nxPlanetView2D.Name = "nxPlanetView2D";
        this.nxPlanetView2D.RelativeHeight = 1D;
        this.nxPlanetView2D.RelativeLeft = 0D;
        this.nxPlanetView2D.RelativeTop = 0D;
        this.nxPlanetView2D.RelativeWidth = 1D;
        this.nxPlanetView2D.Rotatable = true;
        this.nxPlanetView2D.Saturation = 1F;
        this.nxPlanetView2D.ShowGrid = true;
        this.nxPlanetView2D.ShowStatusInfo = false;
        this.nxPlanetView2D.Size = new System.Drawing.Size(406, 577);
        this.nxPlanetView2D.TabIndex = 0;
        this.nxPlanetView2D.ToolboxAreaUnit = Pixoneer.NXDL.NXPlanet.NXPlanetView.eToolboxAreaUnit.SquareMeter;
        this.nxPlanetView2D.ToolboxDistUnit = Pixoneer.NXDL.NXPlanet.NXPlanetView.eToolboxDistUnit.Meter;
        this.nxPlanetView2D.ToolboxMode = Pixoneer.NXDL.NXPlanet.NXPlanetView.eToolboxMode.None;
        this.nxPlanetView2D.ViewAreaID = 0;
    }

    private void FormMain_Load(object sender, EventArgs e)
    {
        nxPlanetView2D.SetCameraPosition(XGeoPoint.FromDegree(127.4, 38.0, 1500000), XAngle.FromDegree(0.0));
        nxPlanetView2D.AddRenderLayer(ref nxPlanetLayer2D);
    }

    private void FormMain_FormClosing(object sender, FormClosingEventArgs e)
    {
        if (!Pixoneer.NXDL.Xfn.DesignMode && Pixoneer.NXDL.NXPlanet.NXPlanetView.m_PlanetEngine != null)
        {
            Pixoneer.NXDL.NXPlanet.NXPlanetView.m_PlanetEngine.Dispose();

            if (nxPlanetLayer2D != null) nxPlanetLayer2D.Dispose();
            Pixoneer.NXDL.NXPlanet.NXPlanetView.m_PlanetEngine = null;
            nxPlanetView2D = null;
            nxPlanetLayer2D = null;
            Xfn.Close();
        }

    }

    private void ADDButton_Click(object sender, EventArgs e)
    {
        FolderBrowserDialog dialog = new FolderBrowserDialog();
        if (dialog.ShowDialog() != System.Windows.Forms.DialogResult.OK) return;
        string selected = dialog.SelectedPath;
        string tocFile = string.Empty;
        string[] SearchFile = Directory.GetFiles(selected, "*.toc");
        foreach (string filename in SearchFile)
        {
            string ff = filename.ToLower();
            if (ff.IndexOf(".toc") >= 0)
            {
                tocFile = ff;
                break;
            }
        }
        if( tocFile == string.Empty )
        {
            MessageBox.Show("Not Exist Toc File", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        ListToc.Items.Add(tocFile);

        bool bRes = NXPlanetEngine.RemovePBIGroup(nRPFGroupID);
        if (bRes == false)
        {
            MessageBox.Show("Remove PBI Group Fail : " + String.Format("{0}", nRPFGroupID), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        nxPlanetView2D.SetPBIDefaultDataSet("1");
        XPBTDataGroup rpfGroup = new XPBTDataGroup();
        rpfGroup.ID = 2;
        rpfGroup.Name = "RPF CADRG";
        rpfGroup.Show = true;

        XPBTDataSource src = new XPBTDataSource();
        src.Type = ePBTSourceType.RPF;
        src.CachingFlag = false;
        src.CachingFolder = "";
        for (int i = 0; i < ListToc.Items.Count; i++)
        {
            src.URL += ListToc.Items[i] as string;
            //if( i != ListToc.Items.Count-1 )
            src.URL += "|";
        }

        rpfGroup.Sources.Add(src);

        NXPlanetEngine.AddPBIGroup(ref rpfGroup);
        nxPlanetView2D.SetPBIDefaultDataSet("1+2");
    }

    private void RemoveButton_Click(object sender, EventArgs e)
    {
        if (ListToc.SelectedIndex > 0)
        {
            MessageBox.Show("None Selected Item", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        if (ListToc.Items.Count == 1)
        {
            return;
        }
        ListToc.Items.RemoveAt(ListToc.SelectedIndex);

        bool bRes = NXPlanetEngine.RemovePBIGroup(nRPFGroupID);
        if (bRes == false)
        {
            MessageBox.Show("Remove PBI Group Fail : " + String.Format("{0}", nRPFGroupID), "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return;
        }
        nxPlanetView2D.SetPBIDefaultDataSet("1");
        XPBTDataGroup rpfGroup = new XPBTDataGroup();
        rpfGroup.ID = 2;
        rpfGroup.Name = "RPF CADRG";
        rpfGroup.Show = true;

        XPBTDataSource src = new XPBTDataSource();
        src.Type = ePBTSourceType.RPF;
        src.CachingFlag = false;
        src.CachingFolder = "";
        for (int i = 0; i < ListToc.Items.Count; i++)
        {
            src.URL += ListToc.Items[i] as string;
            //if( i != ListToc.Items.Count-1 )
            src.URL += "|";
        }

        rpfGroup.Sources.Add(src);
        NXPlanetEngine.AddPBIGroup(ref rpfGroup);            
        nxPlanetView2D.SetPBIDefaultDataSet("1+2");            
    }

}
See Also