XDL Manual

XDL PlanetView È°¿ë ù¹ø°

(piXoneer XDL Tutorial)

 

 

 

 

 

 NXPlanetView¸¦ È°¿ëÇÏ¿© ±¸ ±â¹Ý 2D µµ½Ã ȯ°æ¿¡¼­

 ±â´ÉÈ°¿ë¹ýÀ» ÀÍÈ÷°í ¸¶¿ì½º À§Ä¡¿¡ µû¸¥

ÁÂÇ¥ µµ½Ã, ³ªÄ§¹Ý µµ½Ã, µµ½Ã ±â´ÉÀ» ±¸ÇöÇØ º¾´Ï´Ù.

 

 

2017. 01.

¼öÁ¤ 2019. 02.

 

 

¸ñÂ÷

XDL PlanetView È°¿ë ù¹ø°... 1

1    »ç¿ëÇϱâ... 3

1.1    XDL ¿£Áø... 3

2    NXPlanetView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â... 3

2.1    ±âº» ÇÁ·Î±×·¥ ÀÛ¼º... 3

2.2    ÇÁ·Î±×·¥ µðÀÚÀÎ... 6

2.3    ±â´É ¹× À̺¥Æ® Ãß°¡... 10

 

 

 

 

1     »ç¿ëÇϱâ

 

1.1    XDL ¿£Áø

¼³Ä¡ ÇÁ·Î±×·¥À¸·Î ¹èÆ÷µÇ´Â XDL ¿£ÁøÀº Visual Studio 2010 x86 Release ¹öÀüÀ¸·Î, Visual Studio 2010 ÀÌ»óÀÇ ¹öÀü¿¡¼­ »ç¿ë °¡´ÉÇÏ´Ù.

¾Æ·¡ÀÇ ¼³¸íÀº Visual Studio 2010À» ±âÁØÀ¸·Î ÇÏ°Ú´Ù.

2     NXPlanetView¸¦ ÀÌ¿ëÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ ¸¸µé±â

l  º» ¿¹Á¦ ÇÁ·Î±×·¥Àº NXPlanetView¿Í NXPlantLayer¸¦ ÀÌ¿ëÇÏ¿© Planet2D ¸ðµå »ó¿¡¼­ ±âº» »ç¿ë¹ýÀ» ÀÍÈ÷°í °£´ÜÇÑ µµ½Ã±â´ÉÀ» Ãß°¡ÇØ º¸µµ·Ï ÇÑ´Ù.

2.1    ±âº» ÇÁ·Î±×·¥ ÀÛ¼º

2.1.1     Visual Studio 2010À» ½ÇÇàÇÑ´Ù.

2.1.2     ¸Þ´º [ÆÄÀÏ]-[»õ·Î ¸¸µé±â]-[ÇÁ·ÎÁ§Æ®]¸¦ ¼±ÅÃÇÑ´Ù.

2.1.3     [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚ¿¡¼­ ¿ÞÂÊÀÇ ÅÛÇø´ â¿¡¼­ ¡°Visual C#¡±À» ¼±ÅÃÇÏ°í, ´ëÈ­»óÀÚ Áß°£ÀÇ ¸ñ·Ï¿¡¼­ ¡°Windows Forms ÀÀ¿ë ÇÁ·Î±×·¥¡±À» ¼±ÅÃÇÑ´Ù. ÇÁ·ÎÁ§Æ®ÀÇ À̸§(XDL_PlanetView1)À» ÀÔ·ÂÇÏ°í [»õ ÇÁ·ÎÁ§Æ®] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

¡°È®ÀΡ± ¹öÆ°À» ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ±âº»ÀûÀ¸·Î »ý¼ºµÇ°í, È­¸é¿¡ FormÀ» µðÀÚÀÎÇÒ ¼ö ÀÖ´Â È­¸éÀÌ »ý¼ºµÈ´Ù. ¸¸¾à ¾Æ·¡¿Í °°ÀÌ Form µðÀÚÀÎ È­¸éÀÌ »ý¼ºµÇÁö ¾ÊÀ¸¸é, [¼Ö·ç¼Ç Ž»ö±â] â¿¡¼­ ¡°Form1.cs¡±¸¦ ¸¶¿ì½º ´õºí Ŭ¸¯ÇÏ¿© µðÀÚÀÎÈ­¸éÀ» ¿¬´Ù.

 

 

2.1.4     [µµ±¸»óÀÚ]ÀÇ [Ç׸ñ¼±ÅÃ]À» ¼±ÅÃÇÑ´Ù.

[µµ±¸ »óÀÚ] âÀÇ ¡°ÀϹݡ±¿¡¼­ ¸¶¿ì½º ¿À¸¥ÂÊ ¹öÆ°À» Ŭ¸¯ÇÏ¿© »ý¼ºµÇ´Â Æ˾÷¸Þ´º¿¡¼­ ¡°Ç׸ñ ¼±Åá± ¸Þ´º¸¦ ¼±ÅÃÇÑ´Ù.

 

 

¸Þ´º¸¦ ¼±ÅÃÇÏ¸é ¾Æ·¡¿Í °°ÀÌ [µµ±¸ »óÀÚ Ç׸ñ ¼±ÅÃ] ´ëÈ­»óÀÚ°¡ ³ªÅ¸³ª¸ç, ´ëÈ­»óÀÚ ¾Æ·¡ÂÊ¿¡ ÀÖ´Â ¡°Ã£¾Æº¸±â¡± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

¿­±â ´ëÈ­»óÀÚ¿¡¼­ ¡°C:\Pixoneer\XDL1.2\bin\NXPlanet.dll¡± ÆÄÀÏÀ» ¼±ÅÃÇÑ ÈÄ ¡°¿­±â¡±¸¦ Ŭ¸¯ÇÏ°í, [µµ±¸ »óÀÚ Ç׸ñ ¼±ÅÃ] ´ëÈ­»óÀÚÀÇ ¡°È®ÀΡ± ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

 

.Net Framework ±¸¼º¿ä¼Ò ÅÇ¿¡ ´Ù¾çÇÑ ·¹À̾î¿Í NXPlanetView°¡ ¼³Á¤µÈ´Ù. ¡°È®ÀΡ±¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

[µµ±¸»óÀÚ]¿¡ ´Ù¾çÇÑ PlanetLayerµé°ú NXPlanetView°¡ Ãß°¡µÊÀ» È®ÀÎÇÑ´Ù.

 

 

2.1.5     ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]ÀÇ ¿À¸¥ÂÊ ¸¶¿ì½º Ŭ¸¯À» ÅëÇØ [ÂüÁ¶Ãß°¡]¸¦ ¼±ÅÃÇÑ´Ù.

2.1.6 [ã¾Æº¸±â]ÅÇÀ¸·Î À̵¿ÇÑ ÈÄ ¡°C:\Pixoneer\XDL1.2\bin\¡±°æ·Î·Î À̵¿ÇÑ´Ù. CtrlÅ°¸¦ ´©¸¥ ä ¡°NXDL.dll¡±, ¡°NXPlanet.dll¡±, ¡°NXDLgr.dll¡±À» ¼±ÅÃÇÑ ÈÄ ¡°È®ÀΡ±¹öÆ°À» ¼±ÅÃÇÑ´Ù.

2.1.7 ¼Ö·ç¼Ç Ž»ö±âÀÇ ÇÁ·ÎÁ§Æ® ÇϺÎÀÇ [ÂüÁ¶]Ç׿¡ NXDL, NXDLgr, NXPlanetÀÌ Ãß°¡µÇ¾úÀ½À» È®ÀÎÇÑ´Ù.

 

2.2    ÇÁ·Î±×·¥ µðÀÚÀÎ

 

¹øÈ£

Name

Control type

Caption

Items

¨ç

checkBoxInverseMouseButton

CheckBox

InverseMouseButton

 

¨è

checkBoxInverseMouseWheel

CheckBox

InverseMouseWheel

 

¨é

checkBoxRotatable

CheckBox

Rotatable

 

¨ê

comboBoxGrid

ComboBox

 

None

Degrees

GARS

¨ë

comboBoxScale

ComboBox

 

1000000

500000

100000

50000

10000

¨ì

buttonScaleApply

Button

Apply

 

¨í

checkBoxShowPBP

CheckBox

Show PBP

 

¨î

checkBoxShowStar

CheckBox

Show Star

 

¨ï

checkBoxStatusInfo

CheckBox

Show StatusInfo

 

¨ð

nxPlanetView1

NXPlanetView

 

 

¨ñ

nxPlanetLayer1

NXPlanetLayer

 

 

 

2.2.1     [µµ±¸ »óÀÚ]ÀÇ ¡°SplitContainer¡±¸¦ ¼±ÅÃÇÏ°í Form1¿¡ ²ø¾î´Ù°¡ ³õ´Â´Ù.

 

 

Form1¿¡ splitContainer1ÀÌ Ãß°¡µÇ¸ç ¾Æ·¡¿Í °°ÀÌ ¡°Panel1¡±°ú ¡°Panel2¡±°¡ »ý±ä´Ù. Panel1¿¡´Â ¨ç~¨ïÀÇ ÄÁÆ®·ÑÀ» Ãß°¡ÇÏ¿© µðÀÚÀÎÇÏ°í, Panel2¿¡´Â ¨ð, ¨ñ ÄÁÆ®·ÑÀ» Ãß°¡ÇÑ´Ù. Panel1ÀÇ µðÀÚÀÎÀº À§ÀÇ Ç¥¸¦ Âü°í·Î ±¸¼ºÇϵµ·Ï ÇÏ¸ç ¿©±â¿¡¼­´Â »ý·«Çϵµ·Ï ÇÑ´Ù.

 

 

2.2.2     [µµ±¸ »óÀÚ]ÀÇ [ÀϹÝ]¿¡¼­ NXPlanetView¸¦ ¼±ÅÃÇÑ µÚ µå·¡±×ÇÏ¿© Form1ÀÇ Panel2¿¡ ³õ´Â´Ù. Form1 À§¿¡ NXPlanetView ÄÁÆ®·ÑÀÌ »ý¼ºµÈ´Ù.

 

 

2.2.3     »ý¼ºµÈ NXPlanetView ÄÁÆ®·ÑÀÇ ¿À¸¥ÂÊ »ó´Ü¿¡ ¡°¡± ±âÈ£¸¦ Ŭ¸¯ÇÏ¸é ¡°ºÎ¸ð ÄÁÅ×À̳ʿ¡¼­ µµÅ·¡± ¹öÆ°ÀÌ »ý¼ºµÇ´Âµ¥ ÀÌ ¹öÆ°À» Ŭ¸¯ÇÑ´Ù.

 

2.2.4     NXPlanetView ÄÁÆ®·ÑÀÌ Form1¿¡ µµÅ·µÇ¾î ÀüüÄÁÆ®·Ñ ¿µ¿ªÀ¸·Î È®´ëµÈ´Ù.

 

 

Form1.Designer.cs¿¡¼­ º¸¸é ÄÁÆ®·Ñ nxPlanetView1 ¸â¹öº¯¼ö°¡ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. NXPlanetView´Â ´Ù¾çÇÑ NXPlanetLayerXXXXXµéÀ» ´ãÀ» ¼ö ÀÖ´Â ÄÁÅ×À̳ÊÀÌ´Ù. Áï, NXPlanetView´Â ´Ù¾çÇÑ °èÃøÀÇ ·¹À̾î·Î ±¸¼ºÇÏ¿© ±¸ ±â¹Ý ±â´ÉÀ» ´Ù¾çÇÏ°Ô ±¸ÇöÇÒ ¼ö ÀÖ´Ù.

2.2.5     [µµ±¸ »óÀÚ]ÀÇ [ÀϹÝ]¿¡¼­ NXPlanetLayer¸¦ ¼±ÅÃÇÑ µÚ µå·¡±×ÇÏ¿© nxPlanetView1 À§¿¡ ³õ´Â´Ù.

NXPlanetLayer´Â PlanetView¿¡ Ãß°¡µÇ¾î XDL ¿£Áø¿¡¼­ ¹ß»ýÇÏ´Â À̺¥Æ®¸¦ ¿ÜºÎ ¾îÇø®ÄÉÀ̼ǿ¡¼­ ó¸®ÇÒ ¼ö ÀÖ´Ù.  Form1.Designer.cs¿¡¼­ º¸¸é ´ÙÀ½°ú °°ÀÌ ÄÁÆ®·Ñ nxPlanetLayer1 ¸â¹öº¯¼ö°¡ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

Windows Form µðÀÚÀ̳ʿ¡¼­ »ý¼ºÇÑ ÄÚµå

private System.Windows.Forms.SplitContainer splitContainer1;
private Pixoneer.NXDL.NXPlanet.NXPlanetView nxPlanetView1;
private Pixoneer.NXDL.NXPlanet.NXPlanetLayer nxPlanetLayer1;

 

2.2.6     ¼Ö·ç¼ÇÀ» ºôµåÇÏ°í ½ÇÇàÇÑ´Ù.

 

 

2.3    ±â´É ¹× À̺¥Æ® Ãß°¡

2.3.1     Form1À» ¼±ÅÃÇÏ°í [¼Ó¼º] â - [À̺¥Æ® ] ¸Þ´º¸¦ ¼±ÅÃÇÑ µÚ ¡°Load¡± À̺¥Æ®¸¦ ´õºí Ŭ¸¯ÇÑ´Ù.

 

 

¡°Load¡± À̺¥Æ®¸¦ ´õºí Ŭ¸¯Çϸé, ¡°Form1_Load¡± ÇÔ¼ö°¡ ÀÚµ¿ÀûÀ¸·Î Ãß°¡µÇ°í ¾Æ·¡¿Í °°ÀÌ Ãß°¡ÀûÀÎ ±â´ÉÀ» ±¸ÇöÇÒ ¼ö ÀÖµµ·Ï Form1.csÀÇ ÄÚµå·Î À̵¿ÇÏ´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.

 

 

Form1_Load ÇÔ¼ö¿Í ÇÔ²² ¾Æ·¡¿Í °°ÀÌ Äڵ带 Ãß°¡ÇÑ´Ù.

using Pixoneer.NXDL;
using Pixoneer.NXDL.NGR;
using Pixoneer.NXDL.NXPlanet;

namespace XDL_PlanetView1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            nxPlanetView1.BackColor = Color.Black;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // Camera À§Ä¡ ¼³Á¤
            XGeoPoint gpEye = XGeoPoint.FromDegree(127.4, 38.0, 1500000);
            nxPlanetView1.SetCameraPosition(gpEye, XAngle.FromDegree(0.0));

            // ÄÁÆ®·ÑÀÇ Ãʱ⠼³Á¤
            checkBoxInverseMouseButton.Checked = 
nxPlanetView1.InverseMouseButton;
            checkBoxInverseMouseWheel.Checked = 
nxPlanetView1.InverseMouseWheel;
            checkBoxRotatable.Checked = nxPlanetView1.Rotatable;

            checkBoxShowPBP.Checked = nxPlanetView1.ShowPBP;
            checkBoxShowStar.Checked = true;
            checkBoxShowStatusInfo.Checked = nxPlanetView1.ShowStatusInfo;

            if (nxPlanetView1.GridType == NXPlanetView.eGridType.GridNone)
                comboBoxGrid.SelectedIndex = 0;
            else if (nxPlanetView1.GridType == 
NXPlanetView.eGridType.GridDegrees)
                comboBoxGrid.SelectedIndex = 1;
            else if (nxPlanetView1.GridType == 
NXPlanetView.eGridType.GridGARS)
                comboBoxGrid.SelectedIndex = 2;
            else
                comboBoxGrid.SelectedIndex = 0;

            // È­¸é °»½Å ¿äû
            nxPlanetView1.RefreshScreen();
        }
    }
}

2.3.2     ¨ç~¨ï ÄÁÆ®·ÑÀ» °¢°¢ µðÀÚÀθðµå¿¡¼­ ¼±ÅÃÇÑ ÈÄ ´õºí Ŭ¸¯ÇÑ´Ù.

ÄÁÆ®·Ñ¿¡¼­ ¸¶¿ì½º·Î ´õºí Ŭ¸¯ÇÏ¸é ´ëÇ¥ÀûÀÎ À̺¥Æ®¿¡ ´ëÇØ ÀÚµ¿ÀûÀ¸·Î ÇÔ¼ö°¡ Ãß°¡µÈ´Ù.

 

 

¾Æ·¡¿Í °°ÀÌ Äڵ带 Ãß°¡ÇÑ´Ù.

 

private void checkBoxInverseMouseButton_CheckedChanged(object sender, EventArgs e)
{
    // PlanetView´Â ±âº»ÀûÀ¸·Î ¸¶¿ì½º ¿ÞÂÊ ¹öÆ°Àº È­¸éÀ̵¿À», 
// ¿À¸¥ÂÊ ¹öÆ°Àº È­¸éȸÀü ±â´ÉÀ» ´ã´çÇÑ´Ù.
    // ÀÌ ±â´ÉÀ» ÀüȯÇÏ·Á¸é NXPlanetViewÀÇ InserverMouseButtonÀ» true·Î ¼³Á¤ÇÏ¸é µÈ´Ù.
    nxPlanetView1.InverseMouseButton = checkBoxInverseMouseButton.Checked;
}

private void checkBoxInverseMouseWheel_CheckedChanged(object sender, EventArgs e)
{
    // PlanetView´Â ±âº»ÀûÀ¸·Î ¸¶¿ì½º ÈÙÀ» ´ç±â¸é È­¸éÈ®´ë°¡, ¹Ð¸é È­¸éÃà¼Ò°¡ µÈ´Ù.
    // ÀÌÀ» ÀüȯÇÏ·Á¸é NXPlanetViewÀÇ InverseMouseWheelÀ» true·Î ¼³Á¤ÇÏ¸é µÈ´Ù.
    nxPlanetView1.InverseMouseWheel = checkBoxInverseMouseWheel.Checked;
}

private void checkBoxRotatable_CheckedChanged(object sender, EventArgs e)
{
    // NXPlanetViewÀÇ Rotatble ¼Ó¼ºÀ» ¼³Á¤Çϸé È­¸éȸÀü ¿©ºÎ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖ´Ù.
    nxPlanetView1.Rotatable = checkBoxRotatable.Checked;
}

private void comboBoxGrid_SelectedIndexChanged(object sender, EventArgs e)
{
    int gridIndex = comboBoxGrid.SelectedIndex;
    if (gridIndex == 0) // none
        nxPlanetView1.GridType = NXPlanetView.eGridType.GridNone;
    else if (gridIndex == 1)    // Degrees
        nxPlanetView1.GridType = NXPlanetView.eGridType.GridDegrees;
    else if (gridIndex == 2)    // GARS
        nxPlanetView1.GridType = NXPlanetView.eGridType.GridGARS;
}

private void buttonScaleApply_Click(object sender, EventArgs e)
{
    double mapAltitude = 1500000.0;
    int scaleIndex = comboBoxScale.SelectedIndex;
    if (scaleIndex == 0)   // 1000000
        mapAltitude =
nxPlanetView1.GetMapAltitude(NXPlanetView.eMapScale.Scale_1000000);
    else if (scaleIndex == 1)   // 500000
        mapAltitude = nxPlanetView1.GetMapAltitude(NXPlanetView.eMapScale.Scale_500000);
    else if (scaleIndex == 2)   // 100000
        mapAltitude = nxPlanetView1.GetMapAltitude(NXPlanetView.eMapScale.Scale_100000);
    else if (scaleIndex == 3)   // 50000
        mapAltitude = nxPlanetView1.GetMapAltitude(NXPlanetView.eMapScale.Scale_50000);
    else if (scaleIndex == 4)   // 10000
        mapAltitude = nxPlanetView1.GetMapAltitude(NXPlanetView.eMapScale.Scale_10000);


// ÇöÀçÀÇ camera Á¤º¸ °¡Á®¿À±â
    NXCameraState state = nxPlanetView1.GetCameraState();

    XGeoPoint eyePos = new XGeoPoint();
    eyePos.lond = state.lonEye.deg;
    eyePos.latd = state.latEye.deg;
    eyePos.hgt = mapAltitude;


// À§Ä¡¸¦ À¯ÁöÇÑ »óÅ·Πī¸Þ¶óÀÇ ³ôÀ̸¸ ¼öÁ¤ÇÏ¿© ¼³Á¤
    nxPlanetView1.SetCameraPosition(eyePos, XAngle.FromDegree(0.0));
    nxPlanetView1.RefreshScreen();
}

private void checkBoxShowPBP_CheckedChanged(object sender, EventArgs e)
{
    // ÁöÇü Áöµµ À§¿¡ ÅؽºÆ®ÇüÅÂÀÇ Áö¸íÀ» ÁßøÇÏ¿© µµ½ÃÇÒ ¼ö Àִµ¥, 
// ÀÌ¿¡ ´ëÇÑ ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù.
    nxPlanetView1.ShowPBP = checkBoxShowPBP.Checked;
    nxPlanetView1.RefreshScreen();
}

private void checkBoxShowStar_CheckedChanged(object sender, EventArgs e)
{
    // È­¸é Ãà¼Ò¸¦ Çؼ­ Áöµµ ¿µ¿ª ¹ÛÀ¸·Î ¹þ¾î³ª´Â °æ¿ì, 
// ¹è°æ º°À» Ãß°¡µµ½Ã ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù.
    nxPlanetView1.ShowStar = checkBoxShowStar.Checked;
    nxPlanetView1.RefreshScreen();
}

private void checkBoxShowStatusInfo_CheckedChanged(object sender, 
EventArgs e)
{
    // XDL ¿£ÁøÀÇ µµ½Ã »óÅ Á¤º¸¸¦ È­¸é¿¡ µµ½Ã ¿©ºÎ¸¦ ¼³Á¤ÇÑ´Ù.
    nxPlanetView1.ShowStatusInfo = checkBoxShowStatusInfo.Checked;
    nxPlanetView1.RefreshScreen();
}

 

¸¶Áö¸·À¸·Î View»ó¿¡¼­ ¸¶¿ì½º À§Ä¡¿¡ ´ëÇÑ ÁÂÇ¥¸¦ È­¸éµµ½ÃÇÏ°í, ³ªÄ§¹ÝÀ» È­¸é¿¡ Ãß°¡Çϵµ·Ï ÇÏ°Ú´Ù. ¸ÕÀú ¸¶¿ì½º È­¸é ÁÂÇ¥¸¦ ÀúÀåÇÏ´Â º¯¼ö¿Í È­¸éµµ½Ã¸¦ À§ÇÑ º¯¼ö¸¦ »ý¼ºÇÑ´Ù.

 

public partial class Form1 : Form

{

    private XVertex2d scrPos = new XVertex2d();

    private XTextPrinter textPrinter = new XTextPrinter();

    private XTexture compassTexture = new XTexture();

    public Form1()

    {

        InitializeComponent();

        nxPlanetView1.BackColor = Color.Black;

 

        Font coordFont = new Font("Gulim", 12, FontStyle.Regular |

 FontStyle.Bold);

        if (!textPrinter.Initialize(coordFont))

        {

            System.Diagnostics.Debug.WriteLine(

"Fail to initialize text printer for coordinate display!");

        }

 

        if (!compassTexture.Load("c:\\Pixoneer\\XDL1.2\\Resource\\compass.png"))

            {

                System.Diagnostics.Debug.WriteLine(

"Fail to load compass texture!");

            }

    }

 

³ªÄ§¹Ý À̹ÌÁö·Î »ç¿ëÇÏ´Â ¡°compass.png¡± ÆÄÀÏÀÌ ¿¹Á¦ ÄÚµå¿Í °°Àº °æ·Î¿¡ ¾øÀ¸¸é, ¿¹Á¦ »ùÇà ÇÁ·Î±×·¥ ¾ÐÃà ÆÄÀÏ¿¡ ÀÖ´Â ÆÄÀÏÀ» ÀÌ¿ëÇϱ⠹ٶõ´Ù.

2.3.3     nxPlanetLayer1À» ¼±ÅÃÇÏ¿© ¡°OnWndProc¡± À̺¥Æ®¿Í ¡°OnOrthoRender¡± À̺¥Æ® ÇÔ¼ö¸¦ Ãß°¡ÇÏ¿© Äڵ带 ÀÛ¼ºÇÑ´Ù.

OnWndProc À̺¥Æ®´Â NXPlanetLayer°¡ Ãß°¡µÇ¾î ÀÖ´Â ViewÀÇ À©µµ¿ì À̺¥Æ®¸¦ ¿ÜºÎ¿¡¼­ ¹Þ¾Æ¼­ »ç¿ëÇÒ ¼ö ÀÖµµ·Ï ÇÑ´Ù. OnOrthoRender´Â NXPlanetLayer°¡ Ãß°¡µÇ¾î ÀÖ´Â ViewÀÇ Ortho-renderingÀÌ ¿Ï·áµÈ ÈÄ ¾îÇø®ÄÉÀ̼ǿ¡¼­ Ãß°¡ÀûÀÎ ÀÛ¾÷À» ±¸ÇöÇØ¾ß ÇÒ ÇÊ¿ä°¡ ÀÖÀ» ¶§ »ç¿ëÇÏ¸é µÈ´Ù. Âü°í·Î NXPlanetViewÀÇ ³»ºÎ Rendering ¼öÇà->OnRender À̺¥Æ® ¹ß»ý->NXPlanetViewÀÇ ³»ºÎ OrthoRendering ¼öÇà->OnOrthoRender À̺¥Æ® ¹ß»ý ¼ø¼­·Î ÀÌ·ç¾îÁø´Ù.

ÄÚµå´Â ¾Æ·¡¿Í °°´Ù.

 

private bool nxPlanetLayer1_OnWndProc(object sender, NXPlanetDrawArgs e, ref Message m)

{

    if (m.Msg == Pixoneer.NXDL.XWndMsg.XWM_MOUSEMOVE)

    {

        scrPos.x = Pixoneer.NXDL.XWndMsg.GetLowValue(m.LParam);

        scrPos.y = Pixoneer.NXDL.XWndMsg.GetHighValue(m.LParam);

        nxPlanetView1.RefreshScreen();

    }

 

    return default(bool);

}

 

private bool nxPlanetLayer1_OnOrthoRender(object sender, NXPlanetDrawArgs e)

{

    if (nxPlanetView1 == null) return false;

 

    XVertex3d posWorld = new XVertex3d();

    // È­¸é ÁÂÇ¥¸¦ À§°æµµ ÁÂÇ¥·Î º¯È¯

    XGeoPoint gpPoint = nxPlanetView1.ScreenToGeographic(scrPos.x, scrPos.y);

    posWorld.x = scrPos.x;

    posWorld.y = scrPos.y;

    posWorld.z = 0.0;

 

    String str = gpPoint.lond.ToString() + ", " + gpPoint.latd.ToString();

 

    // È­¸é¿¡ ÅؽºÆ® ÁÂÇ¥¸¦ µµ½Ã

    bool result = textPrinter.Print(str, posWorld,

Pixoneer.NXDL.NGR.eTextAlign.Align_Center, Color.White, true,

 Color.DarkBlue);

 

    // ³ªÄ§¹Ý µµ½Ã

if (!compassTexture.SendTextureToDevice()) return false;

 

    NXCameraState state = nxPlanetView1.GetCameraState();

 

    int nXSize = compassTexture.Width;

    int nYSize = compassTexture.Height;

 

    e.Graphics.glDisable(XGraphics.GL_DEPTH_TEST);

    e.Graphics.glEnable(XGraphics.GL_BLEND);

 

    e.Graphics.glBindTexture(XGraphics.GL_TEXTURE_2D,

 (uint)compassTexture.GLTextureID);

    e.Graphics.glColor3f(1.0f, 1.0f, 1.0f);

 

    e.Graphics.glPushMatrix();

    e.Graphics.glTranslated(100.0, 100.0);

    e.Graphics.glRotated(-state.azimuth.deg, 0.0, 0.0, 1.0);

 

    e.Graphics.glBegin(XGraphics.GL_QUADS);

    e.Graphics.glTexCoord2f(0, 1); e.Graphics.glVertex3d(-nXSize / 2,

 -nYSize / 2, 0);

    e.Graphics.glTexCoord2f(0, 0); e.Graphics.glVertex3d(-nXSize / 2,

 nYSize / 2, 0);

    e.Graphics.glTexCoord2f(1, 0); e.Graphics.glVertex3d(nXSize / 2,

nYSize / 2, 0);

    e.Graphics.glTexCoord2f(1, 1); e.Graphics.glVertex3d(nXSize / 2,

-nYSize / 2, 0);

    e.Graphics.glEnd();

 

    e.Graphics.glPopMatrix();

 

    e.Graphics.glDisable(XGraphics.GL_BLEND);

    e.Graphics.glEnable(XGraphics.GL_DEPTH_TEST);

 

    return default(bool);

}

2.3.4     ¼Ö·ç¼ÇÀ» ºôµåÇÏ°í ½ÇÇàÇÑ´Ù.