Click or drag to resize
XDL

NXImageLayerGPU Class

사용자가 OpenGL을 이용하여 객체를 도시할 수 있도록 하는 컨트롤을 나타낸다.
Inheritance Hierarchy
SystemObject
  SystemMarshalByRefObject
    System.ComponentModelComponent
      System.Windows.FormsControl
        System.Windows.FormsScrollableControl
          System.Windows.FormsContainerControl
            System.Windows.FormsUserControl
              Pixoneer.NXDL.NXImageNXImageLayer
                Pixoneer.NXDL.NXImageNXImageLayerGPU

Namespace: Pixoneer.NXDL.NXImage
Assembly: NXImage (in NXImage.dll) Version: 2.0.3.38
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
Example
예제 #1:
C#
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