Get free trial Login   Contact us
Atomicus Chart
WPF chart
WinForms chart
Features
News
Support
Pricing
About
Still
    Atomicus Chart
    WPF chart
    WinForms chart
    Features
    News
    Support
    Pricing
    About
    Still
      Atomicus Chart
      • WPF chart
      • WinForms chart
      • Features
        • Back
        • Features
        • Large data arrays
        • Common statistical graphs
        • Series & Series 4D: display of 2D curves in 3D space like wires
        • Surface Data Types
        • Volume rendering
        • Data scaling
        • High resolution export
        • Points
        • Size in pixels
        • Order-independent transparency, MSAA+SSAA
        • Labels
        • Data Visualization Views
        • Demo and Code Examples
      • News
      • Support
        • Back
        • Support
        • Support Tickets
      • Pricing
        • Back
        • Pricing
        • AtomicusChart Academic
        • AtomicusChart Basic
        • AtomicusChart Advanced
        • AtomicusChart Ultimate
        • AtomicusChart Ultimate + Source Code
        • AtomicusChart Customized
        • AtomicusChart WinForms
      • About
        • Back
        • About
        • Contacts
        • License agreement
        • Data protection information for users in EU
        • Testimonials

      Size in pixels

      • Home
      • Features
      • Size in pixels
      sphere markerConcept normal markersExamples marker exampleUse cases

      Size in Pixels With AtomicusChart®

      Visualizing data can be problematic when you’re required to draw items related to the pixel size and not to the scene itself. This can be especially useful when you need to draw some additional information around a point or enable item interaction with your mouse or touchscreen. It’s convenient when the size of such items (in pixels) is constant, independent of zoom, projection, perspective distortion, and other factors.

      AtomicusChart® offers a very simple solution to this problem with markers. Users only have to wrap the data into a marker type. Below is a basic example of marker usage:

      //Generate marker positions
      var positions = new[]
      {
      	new Vector3F(0, 0, 0.5f), new Vector3F(0, 0.5f, 0), new Vector3F(0.5f, 0, 0),
      	new Vector3F(0, 0, -0.5f), new Vector3F(0, -0.5f, 0), new Vector3F(-0.5f, 0, 0)
      };
       
      //Convert positions to markers
      var markers = positions.Select(p =>
      	new Marker(new Sphere { Color = Colors.DarkBlue })
      	{
      		Transform = Matrix4F.Translation(p),
      		PixelSize = 50
      	});
       
      //simple sphere to compare sizes
      var sphere = new Sphere();
       
      var data = new List<RenderData>();
      data.Add(sphere);
      data.AddRange(markers);
       
      ChartControl.DataSource = data;
      

      This is the result of using different zoom options:

      sphere Marker zoom 1 sphere Marker zoom 2 sphere Marker zoom 3

      Examples of the Size in Pixels Feature

      When users need to display specified points of measurement on the surface, they can do so in the following way:

      const int size = 10;
      var data = new List<RenderData>();
      var positions = DemoHelper.GenerateSinPoints(size);
      			
      //Convert positions to markers
      var markers = positions.Select(p =>
      	new Marker(new Sphere { Color = Colors.DarkBlue })
      	{
      		Transform = Matrix4F.Translation(p),
      		PixelSize = 10
      	});
       
      // Data presentation in the form of surfaces.
      var surface = new ValueSurface
      {
      	// Data reader approach is used to improve performance for big data sets and their updates.
      	Reader = new StructuredValueSurfaceDataReader(
      		positions, // Surface positions.
      		DemoHelper.ExtractZValues(positions, out OneAxisBounds valueBounds),
      		size, // Width and height are required for triangulation of structured grid.
      		size,
      		valueBounds), //Bounds of value axes.
      						// Set presentation option.
      	PresentationType = ValueSurfacePresentationType.SolidAndWireframe,
      	// Set name.
      	Name = "Surface"
      };
       
      data.Add(surface);
      data.AddRange(markers);
      ChartControl.DataSource = data;
      

      sphere marker on surface zoom 1 sphere marker on surface zoom 2 sphere marker on surface zoom 3

      Additionally, AtomicusChart® allows users to easily display normal orientations for each vertex:

      const int size = 10;
      var data = new List<RenderData>();
      var positions = DemoHelper.GenerateSinPoints(size);
       
      var normals = NormalProcessor.GetSmoothNormals(positions, GridHelper.GetStructuredTriangleListIndices(0, size, size, 1));
      for (int i = 0; i < positions.Length; i++)
      {
      	data.Add(
      		new Marker(new Arrow
      		{
      			Color = Colors.DarkBlue,
      			Direction = normals[i],
      			Radius = 0.2f
      		})
      		{
      			Transform = Matrix4F.Translation(positions[i]),
      			PixelSize = 20
      		});
      }
      // Data presentation in the form of surfaces.
      var surface = new ValueSurface
      {
      	// Data reader approach is used to improve performance for big data sets and their updates.
      	Reader = new StructuredValueSurfaceDataReader(
      		positions, // Surface positions.
      		DemoHelper.ExtractZValues(positions, out OneAxisBounds valueBounds),
      		size, // Width and height are required for triangulation of structured grid.
      		size,
      		valueBounds), //Bounds of value axes.
      	// Set presentation option.
      	PresentationType = ValueSurfacePresentationType.SolidAndWireframe,
      	// Set name.
      	Name = "Surface"
      };
       
      data.Add(surface);
      ChartControl.DataSource = data;
      

      normal marker on surface zoom 1 normal marker on surface zoom 2 normal marker on surface zoom 3

      AtomicusChart® can display anything as a marker object. In the example below, the data itself is displayed as marker objects:

      const int size = 20;
      var data = new List<RenderData>();
      var positions = DemoHelper.GenerateSinPoints(size);
      // Data presentation in the form of surfaces.
      var surface = new ValueSurface
      {
      	// Data reader approach is used to improve performance for big data sets and their updates.
      	Reader = new StructuredValueSurfaceDataReader(
      		positions, // Surface positions.
      		DemoHelper.ExtractZValues(positions, out OneAxisBounds valueBounds),
      		size, // Width and height are required for triangulation of structured grid.
      		size,
      		valueBounds), //Bounds of value axes.
      	// Set presentation option.
      	PresentationType = ValueSurfacePresentationType.Solid,
      	// Set name.
      	Name = "Surface"
      };
       
      var markers = positions.Select(p =>
      	new Marker(surface)
      	{
      		Transform = Matrix4F.Translation(p),
      		PixelSize = 10
      	});
       
       
      data.Add(surface);
      data.AddRange(markers);
       
      ChartControl.DataSource = data;
      

      surface marker on surface

      Uses

      Different interactive AtomicusChart® tools are based on the markers data type. The markers do not override the data when users zoom in or out, and they’re always large enough for users to interact with them using a mouse or touchpad.


      marker example

      More Features

      Surface Data Types
      Data Visualization Views
      Volume rendering
      Order-independent transparency, MSAA+SSAA
      Demo and Code Examples
      Large data arrays



      We know how to help you
      with big data visualization.
      Free trial

      Free trial
      Why do we ask for this information? The resources we provide on our website contain AtomicusChart® intellectual property related to our products and research. In an effort to protect this IP, we ask for your basic contact details to help us validate your identity before we open access to these resources.

      Share
      Back to the list
      Free trial
      Why do we ask for this information? The resources we provide on our website contain AtomicusChart® intellectual property related to our products and research. In an effort to protect this IP, we ask for your basic contact details to help us validate your identity before we open access to these resources.

      Company
      Contacts
      License agreement
      Data protection information for users in EU
      Testimonials
      Features
      Large data arrays
      Common statistical graphs
      Series & Series 4D: display of 2D curves in 3D space like wires
      Surface Data Types
      Features
      Volume rendering
      Data scaling
      High resolution export
      Points
      Pricing / Licensing
      Academic
      Basic
      Ultimate
      Contact us
      info@atomicuschart.com

      Sitemap

      Ask a question
      • facebook
      • linkedin
      • youtube
      © 2025 All rights reserved. Copying of materials without a hyperlink to the source is prohibited. AtomicusChart®

      By clicking “Accept All Cookies”, you agree to the storing of cookies on your device to enhance site navigation, analyze site usage, and assist in our marketing efforts. Cookie Notice

      Accept All Cookies
      Free trial
      Why do we ask for this information? The resources we provide on our website contain AtomicusChart® intellectual property related to our products and research. In an effort to protect this IP, we ask for your basic contact details to help us validate your identity before we open access to these resources.