Click or drag to resize
XDL

NXPlanetView Class

이 클래스는 사용자가 Planet 어플리케이션을 쉽게 만들 수 있도록 개발했다. 여럿 호스트를 컨트롤 할 수 있다 예).Net container control, like panel, window.. 만약에 하나의 컨테이너에 많은 뷰를 사용하려면 NXPlanetViewHost를 사용해야 한다.
Inheritance Hierarchy

Namespace:  Pixoneer.NXDL.NXPlanet
Assembly:  NXPlanet (in NXPlanet.dll) Version: 1.2.817.72
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
현재 뷰에서 마우스의 이동에 따라 초점을 맞출지 여부를 확인하거나 설정한다.
Public propertyAutoRefreshRate
자동 화면 갱신 속도를 초당 갱신 횟수로 설정한다. 0이면 자동 갱신을 하지 않는다. (기본값: 0)
Public propertyBrightness
밝기 조절을 확인하거나 설정한다.
Public propertyCallbackMode
콜백 모드: 그래픽 엔진의 주 쓰레드에서 렌더링 엔진을 통해 순차적으로 뷰 렌더링을 제어하는 모드. 콜백 모드가 아닌 쓰레드 모드: 별도의 뷰 전용 쓰레드에서 렌더링을 제어하는 모드. 기본값은 콜백 모드이며 쓰레드 모드는 현재 실험적인 기능이다.
Public propertyContrast
대비 값을 확인하거나 설정한다.
Public propertyEarthMode
Planet의 유형을 확인하거나 설정한다.
Public propertyEnableGroundEffect
안개, 태양광 효과와 같은 그라운드 쉐이더 효과를 켜거나 끈다. 기본값은 꺼진 상태이고, 끄면 2D와 같이 원본 영상으로 보인다.
Public propertyFrameCapture
프레임 갈무리 버퍼. 프레임 갈무리 버퍼를 지정하면 렌더 화면을 프레임버퍼(FBO)를 써서 그리고 저장한다.
Public propertyGridType
현재 보여지고 있는 그리드 유형을 확인하거나 설정한다.
Public propertyInverseMouseButton
마우스의 오른쪽 버튼과 왼쪽버튼의 교환 여부를 확인하거나 설정한다.
Public propertyInverseMouseWheel
마우스 휠을 이용한 확대/축소 이벤트 방향을 확인하거나 설정한다.
Public propertyLayerCount
뷰의 레이어의 개수를 가져온다.
Public propertyLayoutMode
레이아웃의 모드를 확인하거나 설정한다.
Public propertyPlanet2DProjection
2D 지도 투영(Map Projection) 방식을 확인한다.
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 propertyShowGrid
그리드 레이어의 표시 여부를 확인하거나 설정한다.
Public propertyShowPBP
지명을 화면에 도시할지의 여부를 설정하거나 확인한다.
Public propertyShowStar
배경 별의 도시 여부를 확인하거나 설정한다.
Public propertyShowStatusInfo
현재 도시 상태 정보를 확인하거나 설정한다.
Public propertyToolboxAreaUnit
영역 계산시 단위를 확인하거나 설정한다.
Public propertyToolboxDistUnit
거리 계산시 단위를 확인하거나 설정한다.
Public propertyToolboxMode
도구상자의 작업 모드를 확인하거나 설정한다.
Public propertyToolboxSet
Planet의 툴박스의 속성을 가져온다.
Public propertyUsePrivateEffects
뷰 전용 플래닛 효과 사용 설정. 다중 뷰 환경에서 태양 위치 등 각종 효과를 다르게 줄 때 활용한다. (기본값: false)
Public propertyViewAreaFOV
뷰의 각도를 확인하거나 설정한다.
Public propertyViewAreaID
뷰의 ID를 확인한다.
Public propertyViewshedTool
뷰의 shed 툴을 가져온다.
Public propertyZoomCenterMode
마우스 휠의 모드를 확인하거나 설정한다.
Top
Methods
  NameDescription
Public methodAddRenderLayer(NXPlanetLayer)
뷰에 레이어를 추가한다.
Public methodAddRenderLayer(NXRenderLayer)
뷰에 레이어를 추가한다.
Public methodCalcSize
뷰의 사이즈를 다시 계산하며, 엔진에 의해 자동 호출 된다.
Public methodCalculateScale
현재 뷰의 스케일을 계산한다.
Public methodCaptureScreen
화면을 캡쳐한다.
Public methodChangeLayerOrder
렌더 레이어의 순서를 바꿔준다.
Public methodClearLayer
뷰에 연결된 모든 레이어를 삭제한다.
Public methodGeographicToScreen
위경도 좌표를 스크린 좌표로 변환한다.
Public methodGeographicToWorld
위경도 좌표를 세계 좌표로 변환한다.
Public methodGetCameraState
현재 카메라의 상태를 가져온다.
Public methodGetFreezeViewArea
뷰의 고정여부를 가져온다.
Public methodGetHandle
뷰의 컨트롤 핸들을 가져온다.
Public methodGetIndexMapMode
인덱스 맵 모드를 가져온다.
Public methodGetLayer
렌더 레이어를 가져온다.
Public methodGetLayerOrder
현재 렌더 레이어의 순서를 가져온다.
Public methodGetMapAltitude(Double)
입력 축척에 대응하는 카메라의 높이를 가져온다.
Public methodGetMapAltitude(NXPlanetVieweMapScale)
입력 축척에 대응하는 카메라의 높이를 가져온다.
Public methodGetMouseControlMode
마우스 제어 상태를 가져온다.
Public methodGetPTMOverlayLayer
Planet의 지형 관리자로부터 오버레이 레이어를 가져온다.
Public methodGetWOS
뷰의 WOS를 가져온다( World offset and Scale).
Public methodIsUnderMouse
마우스아래 뷰가 있는지 확인한다.
Public methodLookTarget
바라보는 위치와 거리, 방위각과 고도 값에 의해 현재 카메라 상태를 설정한다. [Planet 3D뷰를 위함]
Public methodMaxZoomIn
고도를 통해 최대 줌인을 설정한다.
Public methodMaxZoomOut
고도를 통해 최대 줌 아웃을 설정한다.
Public methodOnKeyDownBridge
어플리케이션에서 사용할 수 없다.
Public methodOnKeyUpBridge
어플리케이션에서 사용할 수 없다.
Public methodOnMouseWheelBridge
어플리케이션에서 사용할 수 없다.
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, 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 methodSetMouseControlMode
마우스 제어 상태를 가져온다.
Public methodSetPBIDefaultDataSet
현재 사용하고 있는 것에 PBI 데이터 소스가 설정된다.
Public methodSetPBPDefaultDataSet
현재 사용하고 있는 것에 PBE 데이터 소스가 설정된다.
Public methodSetRenderArea
화면에 렌더링되는 영역을 설정한다. Planet2D 모드에서만 적용된다. RestrictRenderArea를 참으로 설정하면 이 함수를 통해 설정된 값으로 렌더링 영역이 제한된다.
Public methodSetRenderSkip
렌더링 주기를 설정한다.
Public methodSetUnderMouse
내부 함수, 마우스 아래에 있는 뷰의 상태를 설정한다.
Public methodSetViewZoomCenterPosition
해당 좌표를 기준으로 마우스 휠 줌을 한다.
Public methodSetWorkSpaceHgt
카메라의 높이 구간을 설정한다
Public methodSetWorkSpaceLat
카메라의 위도 구간을 설정한다.
Public methodSetWorkSpaceLon
카메라의 경도 구간을 설정한다
Public methodTraceLayerAndContents
Public methodWorldToGeographic
세계 좌표를 위경도 좌표로 변환한다.
Public methodWorldToScreen
세계 좌표를 스크린 좌표로 변환한다.
Top
Events
  NameDescription
Public eventOnKeyDown
키보드의 키가 다운될 때 발생된다.
Public eventOnKeyUp
키보드의 키가 업될 때 발생된다.
Public eventOnMouseWheel
마우스 휠이 사용될 때 발생된다.
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