Click or drag to resize
XDL

NXImageLayerGPU Class

사용자가 OpenGL을 이용하여 객체를 도시할 수 있도록 하는 컨트롤을 나타낸다.
Inheritance Hierarchy

Namespace:  Pixoneer.NXDL.NXImage
Assembly:  NXImage (in NXImage.dll) Version: 2.0.3.31
Syntax
C#
public class NXImageLayerGPU : NXImageLayer

The NXImageLayerGPU type exposes the following members.

Constructors
  NameDescription
Public methodNXImageLayerGPU
NXImageLayerGPU 객체를 생성하고 데이터 멤버를 초기화한다. 기본 생성자.
Top
Properties
  NameDescription
Public propertyLayerVisible
레이어의 도시여부를 확인하거나 설정한다.
(Overrides NXImageLayerLayerVisible.)
Top
Events
  NameDescription
Public eventOnOrthoRender
레이어가 렌더링될 때 사용자가 객체를 정사투영형태로 도시하려고 하면, 여기에 도시 코드를 추가하면 된다. 이 이벤트 함수에서는 화면 좌표 체계로 구현되어야 한다.
Public eventOnPreTranslateMessage
윈도우 메시지가 처리되면 이 이벤트 함수가 발생한다.
Public eventOnRender
레이어가 렌더링될 때 사용자가 객체를 원근법에 따라 도시하려고 하면, 여기에 도시 코드를 추가하면 된다. 이 이벤트 함수에서는 world 좌표 체계로 구현되어야 한다.
Top
Examples
예제 #1:
partial class FormMain
{
    private Pixoneer.NXDL.NXImage.NXImageView nxImageView1;
    private Pixoneer.NXDL.NXImage.NXImageLayerGPU nxImageLayerGPU1;
    public XTextPrinter m_TextPrinter;
    public XTextPrinter m_TextPrinter2;
    public XTexture m_TexLogo;

    private void InitializeComponent()
    {
        this.nxImageView1 = new Pixoneer.NXDL.NXImage.NXImageView();
        this.nxImageLayerGPU1 = new Pixoneer.NXDL.NXImage.NXImageLayerGPU();
        this.nxImageLayerGPU1.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle;
        this.nxImageLayerGPU1.Location = new System.Drawing.Point(20, 110);
        this.nxImageLayerGPU1.Name = "nxImageLayerGPU1";
        this.nxImageLayerGPU1.Size = new System.Drawing.Size(145, 30);
        this.nxImageLayerGPU1.TabIndex = 2;
        this.nxImageLayerGPU1.Visible = false;
        this.nxImageLayerGPU1.OnOrthoRender += new Pixoneer.NXDL.NXImage.NXImageLayerGPU_Event_OrthoRender(this.nxImageLayerGPU1_OnOrthoRender);
        this.nxImageLayerGPU1.OnRender += new Pixoneer.NXDL.NXImage.NXImageLayerGPU_Event_Render(this.nxImageLayerGPU1_OnRender);
        this.nxImageView1.Controls.Add(this.nxImagLayerGPU1);
    }

    public FormMain()
    {
        InitializeComponent();

        m_TextPrinter = new XTextPrinter();
        Font myFont = new Font("Gulim", 12, FontStyle.Strikeout | FontStyle.Underline | FontStyle.Bold);
        m_TextPrinter.Initialize(myFont);

        m_TextPrinter2 = new XTextPrinter();
        Font myFont2 = new Font("Gulim", 15, FontStyle.Strikeout | FontStyle.Underline | FontStyle.Bold);
        m_TextPrinter2.Initialize(myFont2);

        m_TexLogo = new XTexture();
        m_TexLogo.Load("D:/Images/logo.bmp");

    }
    private bool nxImageLayerGPU1_OnRender(NXImageLayerGPU sender, NXImageViewDrawArgs DrawArgs)
    {
        XGraphics g = DrawArgs.Graphics;
        g.glBegin(XGraphics.GL_LINES);
        g.glColor(Color.Red);
        g.glVertex3d(DrawArgs.LLWorld);
        g.glVertex3d(DrawArgs.URWorld);
        g.glColor3f(1.0f, 1.0f, 1.0f);
        g.glEnd();

        if (m_TextPrinter != null)
        {
            XVertex3d vw = DrawArgs.Vertex3d(DrawArgs.MousePosWorld);
            m_TextPrinter.Print("hello",
                vw,
                new XVertex2d(0, 0),
                new XVertex2d(0.5, 0.5),
                Color.Blue,
                true,
                Color.Green);
        }
        return default(bool);
    }

    private bool nxImageLayerGPU1_OnOrthoRender(NXImageLayerGPU sender, NXImageViewDrawArgs DrawArgs)
    {
        XGraphics g = DrawArgs.Graphics;

        if (m_TexLogo!=null && m_TexLogo.Loaded)
        {
            if (!m_TexLogo.InDevice)
                m_TexLogo.SendTextureToDevice();

            g.glDisable(XGraphics.GL_DEPTH_TEST);
            g.glEnable(XGraphics.GL_TEXTURE_2D);
            g.glBindTexture(XGraphics.GL_TEXTURE_2D, (uint)m_TexLogo.GLTextureID);

            g.glColor(Color.White);
            g.glBegin(XGraphics.GL_QUADS);
            g.glTexCoord2f(0, 1); g.glVertex2d(nxImageView1.Width - 215, nxImageView1.Height - 84);
            g.glTexCoord2f(0, 0); g.glVertex2d(nxImageView1.Width - 215, nxImageView1.Height - 10);
            g.glTexCoord2f(1, 0); g.glVertex2d(nxImageView1.Width - 10, nxImageView1.Height - 10);
            g.glTexCoord2f(1, 1); g.glVertex2d(nxImageView1.Width - 10, nxImageView1.Height - 84);
            g.glEnd();
            g.glEnable(XGraphics.GL_DEPTH_TEST);
            g.glDisable(XGraphics.GL_TEXTURE_2D);
        }

        if (m_TextPrinter!=null)
        {
            g.glDisable(XGraphics.GL_DEPTH_TEST);
            g.glEnable(XGraphics.GL_BLEND);
            g.glBlendFunc(XGraphics.GL_SRC_ALPHA, XGraphics.GL_ONE_MINUS_SRC_ALPHA);
            g.glColor4f(0.0f, 0.7f, 0.0f, 0.0f);
            g.glBegin(XGraphics.GL_QUADS);
            g.glVertex2d(0, nxImageView1.Height - 50);
            g.glColor4f(0.7f, 0.0f, 0.7f, 0.0f);
            g.glVertex2d(nxImageView1.Width, nxImageView1.Height - 50);
            g.glColor4f(0.7f, 0.0f, 0.7f, 0.5f);
            g.glVertex2d(nxImageView1.Width, nxImageView1.Height);
            g.glColor4f(0.0f, 0.7f, 0.0f, 0.5f);
            g.glVertex2d(0, nxImageView1.Height);
            g.glEnd();
            g.glDisable(XGraphics.GL_BLEND);
            g.glEnable(XGraphics.GL_DEPTH_TEST);

            XVertex3d posWorld = new XVertex3d(0, 30, 0);
            XVertex2d posOffset = new XVertex2d(0, 0);
            XVertex2d align = new XVertex2d(0, 0.5);
            m_TextPrinter.Print("hello", posWorld, posOffset, align, Color.Red, true, Color.Yellow);


            XVertex3d posWorld2 = new XVertex3d(nxImageView1.Width / 2.0, nxImageView1.Height / 2, 0);
            XVertex2d posOffset2 = new XVertex2d(0, 0);
            XVertex2d align2 = new XVertex2d(0, 0.5);
            m_TextPrinter2.Print("world", posWorld2, eTextAlign.Align_Right, Color.Red, true, Color.Green);

            posWorld.x = nxImageView1.Width / 2.0;
            align.x = 0.5;
        }
        return default(bool);
    }
}
See Also