Click or drag to resize
XDL

NXPlanetView Class

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

Namespace:  Pixoneer.NXDL.NXPlanet
Assembly:  NXPlanet (in NXPlanet.dll) Version: 2.0.3.30
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 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
Examples
This is example #1:
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