Announcement

Collapse
No announcement yet.

Partner 728x90

Collapse

NT8 - Best way to draw a Triangle

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

    NT8 - Best way to draw a Triangle

    I am looking for a way to draw a Triangle by using onRender.
    In NT7 i used a Polygon and would like to know if there is a similar method for SharpDX.

    Thank you and best regards

    #2
    Hello mk77ch, and thank you for your question.

    You will want to first review the excellent documentation on working with pixel coordinates on this page, which includes some SharpDX drawing examples.



    Here is some publicly available Direct2d1 API documentation on all the drawing objects available,



    Here is some publicly available MSDN documentation on triangles, specifically,



    Finally, in order to adapt the code sample in the NT8 help guide to work with triangles, it is important to fully understand how it already works with ellipses. So I am including some specific publicly available MSDN help for ellipses as well.



    Modifying our code may then look like this :

    Code:
    [FONT=Courier New][COLOR=Black]protected override void OnRender(ChartControl chartControl, ChartScale chartScale)
    {
      // get the point the user clicked, (which returns application pixel)
      Point clickPoint = chartControl.MouseDownPoint;
     
      // Convert the clickPoint X and Y coordinates to device independent pixels (DIP)
      // This will ensure that the MouseDownPoint will work across all screen displays
      clickPoint.X = ChartingExtensions.ConvertToHorizontalPixels(clickPoint.X, chartControl.PresentationSource);
      clickPoint.Y = ChartingExtensions.ConvertToVerticalPixels(clickPoint.Y, chartControl.PresentationSource);
     
      // set the location (vector) from the user clickPoint
      SharpDX.Vector2 vectorForTriangle1 = clickPoint.ToVector2();
      SharpDX.Vector2 vectorForTriangle2 = clickPoint.ToVector2();
      SharpDX.Vector2 vectorForTriangle3 = clickPoint.ToVector2();
    
      // modify 3 vector points around click point equally
      float del_z = 10;
      float del_x = (float) (del_z * Math.Cos(Math.PI / 6));
      float del_y = (float) (del_z * Math.Sin(Math.PI / 6));
      vectorForTriangle1.X += 0.0f;
      vectorForTriangle1.Y += del_z;
      vectorForTriangle2.X -= del_x;
      vectorForTriangle2.Y -= del_y;
      vectorForTriangle3.X += del_x;
      vectorForTriangle3.Y -= del_y;
     
      // create the shape (triangle), and color (brush) for our object to render
      SharpDX.Direct2D1.Triangle triangle = new SharpDX.Direct2D1.Triangle();
      triangle.Point1 = vectorForTriangle1;
      triangle.Point2 = vectorForTriangle2;
      triangle.Point3 = vectorForTriangle3;
      SharpDX.Direct2D1.Brush triangleBrushDX = Brushes.Blue.ToDxBrush(RenderTarget);
      SharpDX.Direct2D1.Mesh triangleMesh = new SharpDX.Direct2D1.Mesh(RenderTarget, new SharpDX.Direct2D1.Triangle[] {triangle});
     
      // finally, render a triangle at the exact point the user clicked
      RenderTarget.FillMesh(triangleMesh, triangleBrushDX);
    }[/COLOR][/FONT]
    Please let us know if there are any other ways we can help.
    Last edited by NinjaTrader_JessicaP; 10-21-2016, 09:21 AM.
    Jessica P.NinjaTrader Customer Service

    Comment


      #3
      Hey Jessica,

      Perfect, thank you very much!

      Best regards,
      Mike

      Comment


        #4
        When I try to access the first link, I am taken to a page that says it requires authorized access. Is this a bad link, or what do I need to do to gain access?


        Originally posted by NinjaTrader_JessicaP View Post
        Hello mk77ch, and thank you for your question.

        You will want to first review the excellent documentation on working with pixel coordinates on this page, which includes some SharpDX drawing examples.



        Here is some publicly available Direct2d1 API documentation on all the drawing objects available,



        Here is some publicly available MSDN documentation on triangles, specifically,



        Finally, in order to adapt the code sample in the NT8 help guide to work with triangles, it is important to fully understand how it already works with ellipses. So I am including some specific publicly available MSDN help for ellipses as well.



        Modifying our code may then look like this :

        Code:
        [FONT=Courier New][COLOR=Black]protected override void OnRender(ChartControl chartControl, ChartScale chartScale)
        {
          // get the point the user clicked, (which returns application pixel)
          Point clickPoint = chartControl.MouseDownPoint;
         
          // Convert the clickPoint X and Y coordinates to device independent pixels (DIP)
          // This will ensure that the MouseDownPoint will work across all screen displays
          clickPoint.X = ChartingExtensions.ConvertToHorizontalPixels(clickPoint.X, chartControl.PresentationSource);
          clickPoint.Y = ChartingExtensions.ConvertToVerticalPixels(clickPoint.Y, chartControl.PresentationSource);
         
          // set the location (vector) from the user clickPoint
          SharpDX.Vector2 vectorForTriangle1 = clickPoint.ToVector2();
          SharpDX.Vector2 vectorForTriangle2 = clickPoint.ToVector2();
          SharpDX.Vector2 vectorForTriangle3 = clickPoint.ToVector2();
        
          // modify 3 vector points around click point equally
          float del_z = 10;
          float del_x = (float) (del_z * Math.Cos(Math.PI / 6));
          float del_y = (float) (del_z * Math.Sin(Math.PI / 6));
          vectorForTriangle1.X += 0.0f;
          vectorForTriangle1.Y += del_z;
          vectorForTriangle2.X -= del_x;
          vectorForTriangle2.Y -= del_y;
          vectorForTriangle3.X += del_x;
          vectorForTriangle3.Y -= del_y;
         
          // create the shape (triangle), and color (brush) for our object to render
          SharpDX.Direct2D1.Triangle triangle = new SharpDX.Direct2D1.Triangle();
          triangle.Point1 = vectorForTriangle1;
          triangle.Point2 = vectorForTriangle2;
          triangle.Point3 = vectorForTriangle3;
          SharpDX.Direct2D1.Brush triangleBrushDX = Brushes.Blue.ToDxBrush(RenderTarget);
          SharpDX.Direct2D1.Mesh triangleMesh = new SharpDX.Direct2D1.Mesh(RenderTarget, new SharpDX.Direct2D1.Triangle[] {triangle});
         
          // finally, render a triangle at the exact point the user clicked
          RenderTarget.FillMesh(triangleMesh, triangleBrushDX);
        }[/COLOR][/FONT]
        Please let us know if there are any other ways we can help.

        Comment


          #5
          Hello Antny,

          Thank you for your post.

          The documentation is now available in the NinjaTrader 8 Help Guide: https://ninjatrader.com/support/help..._reference.htm

          Please let me know if you have any questions.

          Comment


            #6
            In case anyone tries this and is having problems("Chart Rendering failed..."):


            FillMesh has a limitation: Anti-aliasing can’t be enabled when FillMesh is called. Precede FillMesh with a call to SetAntialiasMode.

            Code:
            SharpDX.Direct2D1.AntialiasMode om = RenderTarget.AntialiasMode;
            RenderTarget.AntialiasMode = SharpDX.Direct2D1.AntialiasMode.Aliased;
            RenderTarget.FillMesh(triangleMesh, Label2ColorDX);
            RenderTarget.AntialiasMode = om;

            Comment

            Latest Posts

            Collapse

            Topics Statistics Last Post
            Started by CarlTrading, 03-31-2026, 09:41 PM
            1 response
            153 views
            1 like
            Last Post NinjaTrader_ChelseaB  
            Started by CarlTrading, 04-01-2026, 02:41 AM
            0 responses
            89 views
            1 like
            Last Post CarlTrading  
            Started by CaptainJack, 03-31-2026, 11:44 PM
            0 responses
            133 views
            2 likes
            Last Post CaptainJack  
            Started by CarlTrading, 03-30-2026, 11:51 AM
            0 responses
            128 views
            1 like
            Last Post CarlTrading  
            Started by CarlTrading, 03-30-2026, 11:48 AM
            0 responses
            107 views
            0 likes
            Last Post CarlTrading  
            Working...
            X