Announcement

Collapse

Looking for a User App or Add-On built by the NinjaTrader community?

Visit NinjaTrader EcoSystem and our free User App Share!

Have a question for the NinjaScript developer community? Open a new thread in our NinjaScript File Sharing Discussion Forum!
See more
See less

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 alifarahani, Today, 09:40 AM
            6 responses
            31 views
            0 likes
            Last Post alifarahani  
            Started by Waxavi, Today, 02:10 AM
            1 response
            17 views
            0 likes
            Last Post NinjaTrader_LuisH  
            Started by Kaledus, Today, 01:29 PM
            5 responses
            13 views
            0 likes
            Last Post NinjaTrader_Jesse  
            Started by Waxavi, Today, 02:00 AM
            1 response
            12 views
            0 likes
            Last Post NinjaTrader_LuisH  
            Started by gentlebenthebear, Today, 01:30 AM
            3 responses
            17 views
            0 likes
            Last Post NinjaTrader_Jesse  
            Working...
            X