Click here to Skip to main content
Licence BSD
First Posted 12 May 2006
Views 37,403
Downloads 526
Bookmarked 27 times

Scalar Data Visualization Part 2

This article will describe the line contouring section in more detail
Sample Image - ScoOterVisualizationPart2.png

Sample screenshot

Introduction

I'm back again but I hope this time is better. In this article, I'll discuss the line contouring part of the application. Contour line is a curve connecting points where the function has the same particular value. You can find more about line contouring in Wikipedia.

Background

A previous knowledge of simple scalar data visualization techniques and DirectX9.

Using the Code

To get a contour line that represents certain values, you need to search between 2 consecutive pairs of points in a given face to see if the value you are looking for lies between them:

private bool ValueWithin(double Val1, double Val2)
{
    return (Value >= Val1 && Value <= Val2) || (Value >= Val2 && Value <= Val1);
}

I used linear interpolation to determine the position of the new point using the following equation:

t = P – P<sub>1</sub> / P<sub>2</sub> – P<sub>1</sub>

Using this equation on the data dimension being visualized to get the "t" and then the "t" is used to get the new x, y, z coordinates of this point.

This function just does this stuff and adds the new point to the list of points in the contourLine class, as they will be needed later for rendering:

private void GetContourPoint(int Vertex1, int Vertex2)
{
    double diff = (Parent.Points[Vertex2].Data[Parent.VariableIndex] - 
		Parent.Points[Vertex1].Data[Parent.VariableIndex]);

    double t = 0.0;
    if(diff != 0)
           t = (Value - Parent.Points[Vertex1].Data[Parent.VariableIndex]) / diff;
    Point p = new Point(13);
    double DeltaX = (Parent.Points[Vertex2].Data[0] - Parent.Points[Vertex1].Data[0]);
. 
.
.
    p.Data.Add(Parent.Points[Vertex1].Data[0] + t * DeltaX);
.
.
    points.Add(p);
}

So, to create a contour line, you need to do the above stuff for each point in each face on the surface. This will get you the contour line over the whole surface.

public bool CreateLine()
{    
    foreach (TriangulatedPolygon t in Parent.Faces)
    {
        if (ValueWithin(Parent.Points[t.Vertex1Index].Data[Parent.VariableIndex],
		Parent.Points[t.Vertex2Index].Data[Parent.VariableIndex]))

            GetContourPoint(t.Vertex1Index, t.Vertex2Index);
       .
       .
       .
   }
    return SetVertexBuffer();
}

Now, we have our contour line ready for rendering. If you are familiar with DirectX, you don't need to bother yourself with this part. For those who don't know about VertexBuffers in DirectX, please check this link first.

I create a vertex buffer of PositionNormalColored vertices, where normal is mainly needed for lighting, and the color is responsible for representing the value the contour line defines.

This is not everything yet. This was just a description of the logic of the ContourLine class. It's mainly controlled by a contour manager – which manages all the contouring stuff, but let's concentrate on line contouring for now. This manager is responsible for holding the list of contour lines, rendering them, defining each line's color and also data value – as they might be input from the user or auto generated according to a given number.

private void CreateLines()
{
    double transtion = (MaxVal - MinVal) / (LinesCount + 1);
    Lines = new List<ContourLine>();
    for (int i = 1; i <= LinesCount; i++)
    {        
        double val = MinVal + i*transtion;
        ContourLine c = new ContourLine(this, ScoOteRColorPalet.GetColor(val), val);
        if(c.CreateLine())
            Lines.Add(c);
    }
}

And finally, this is how the user can deal with line contouring:

Sample screenshot

Now you can proceed to the next part, the flooded contouring technique.

License

This article, along with any associated source code and files, is licensed under The BSD License

About the Author

I_gO_tO_schoOl_by_scoOter

Other

Egypt Egypt

Member

Nvidia Registered game developer.
Teaching Assistant,
Faculty of computer and information sciences,
Ain Shams University.
SmartLabZ QT Developer.
Have an experience of more than 2 years in c++(QT/MFC/ATL/Win32),c#, GDI,DirectX

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
You must Sign In to use this message board. (secure sign-in)
 
Search this forum  
 FAQ
    Noise  Layout  Per page   
  Refresh
Generalimplementation of Kriging Algorithm Pinmemberdadamamad20:35 24 Aug '09  
GeneralRe: implementation of Kriging Algorithm PinmemberI_gO_tO_schoOl_by_scoOter21:10 24 Aug '09  
GeneralUse of point Pinmembervafa_hhh0:46 5 Jul '09  
GeneralRe: Use of point PinmemberI_gO_tO_schoOl_by_scoOter3:04 6 Jul '09  
Generalkriging Pinmemberprabhakarsangisetty20:18 2 Apr '09  
GeneralRe: kriging PinmemberI_gO_tO_schoOl_by_scoOter1:43 3 Apr '09  
GeneralRegarding Contour Lines Pinmemberprabhakarsangisetty20:17 2 Apr '09  
GeneralRe: Regarding Contour Lines PinmemberI_gO_tO_schoOl_by_scoOter1:39 3 Apr '09  
GeneralRe: Regarding Contour Lines Pinmemberprabhakarsangisetty18:03 6 Apr '09  
GeneralRe: Regarding Contour Lines PinmemberI_gO_tO_schoOl_by_scoOter7:05 8 Apr '09  
GeneralRe: Regarding Contour Lines Pinmemberagelospanagiotakis2:49 26 Oct '11  
QuestionRending Issues Pinmembercyber-drugs22:52 6 Jun '07  
AnswerRe: Rending Issues PinmemberI_gO_tO_schoOl_by_scoOter16:04 3 Jul '07  
QuestionAre you using directx? Pinmemberzhvickie3:55 3 Apr '07  
AnswerRe: Are you using directx? PinmemberI_gO_tO_schoOl_by_scoOter4:49 3 Apr '07  
QuestionContour offset of a polygon PinmemberMember #174515920:27 4 Jan '07  
AnswerRe: Contour offset of a polygon PinmemberI_gO_tO_schoOl_by_scoOter2:48 5 Jan '07  
GeneralRe: Contour offset of a polygon PinmemberDLG00116:29 7 Jan '07  
GeneralRe: Contour offset of a polygon PinmemberI_gO_tO_schoOl_by_scoOter10:17 8 Jan '07  
GeneralRe: Contour offset of a polygon PinmemberDLG00121:00 7 Jan '07  
QuestionContour offset of a polygon PinmemberMember #174515920:26 4 Jan '07  
GeneralTexture mapping method is more efficient [modified] PinmemberFrank W. Wu10:14 18 Aug '06  
GeneralRe: Texture mapping method is more efficient [modified] PinmemberI_gO_tO_schoOl_by_scoOter10:39 18 Aug '06  
QuestionExplanation Pinmembersahiljain226:39 1 Aug '06  
AnswerRe: Explanation PinmemberI_gO_tO_schoOl_by_scoOter7:55 1 Aug '06  

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.

Permalink | Advertise | Privacy | Mobile
Web01 | 2.5.120517.1 | Last Updated 5 Jan 2007
Article Copyright 2006 by I_gO_tO_schoOl_by_scoOter
Everything else Copyright © CodeProject, 1999-2012
Terms of Use
Layout: fixed | fluid