Click here to Skip to main content
11,634,815 members (67,746 online)
Click here to Skip to main content

A 2D Graph Component With Zoom Capability

, 21 Dec 2004 CPOL 209.8K 18.2K 162
Rate this:
Please Sign up or sign in to vote.
A 2D graph component with zoom capability.

Sample Image - SmartGraph2.png

Update (2004-December-21):

  1. In SmartGraph, there was a problem in labeling X and Y axes, now it has been solved.
  2. Selection problem in demo project solved.
  3. Name of output file changed to SmartGraph rather than Graph.

Introduction

In my recent projects, I needed to show some data in a 2D graph. This graph must have capability of zoom in, zoom out, and colorization. At first, I wrote some code directly in my VC project and the result was satisfactory, but I had to do it for any new project and it was time consuming. So, I thought of doing it as an ATL component so that it does all the things I need. This SmartGraph is what I want.

SmartGraph is written in VC++ .NET 2003 using ATL and has several good methods, events and properties that makes it something easy to use.

This SmartGraph is an ActiveX, so it can be used in any visual language that supports ActiveX, such as Visual C++, Visual Basic, C#, Delphi, ... It can resample its data more quickly by using SetData(.,.,.,true). It also can be viewed as Regular graph, Dot graph, or Bar graph by using SetPlotType(.).

Bar Graph

How to use SmartGraph?

To use SmartGraph, you must do these steps:

  1. Register SmartGraph using this command at command prompt: "regsvr32 <PATH>\Graph.dll", or only compile "Graph.sln".

    Note: if you don’t have VC++ .NET, you can’t register Graph.dll unless you copy "msvcr71.dll" to your Windows directory. (This file is attached to this article.)

  2. In your project, press right-click on your ToolBox and then "Add/Remove Item", then select "SmartGraph" from "COM Components" tab, now it must appear in your toolbox.
  3. Now, only click on it and drag it to your dialog, now create a variable and use it:
    m_Graph.SetParentWnd(this->m_hWnd);
    /*SetParentWnd : Sets Parent Window because this component 
                     is WindowLess, it needs a handle for 
                     some painting operation.*/
    m_Graph.SetPlotType(0);// Regular Graph
    m_Graph.put_xLable("Time");
    m_Graph.put_yLable("Amplitude");
    m_Graph.put_Title("Graph Test");

    and when your data is ready, use:

    m_Graph.SetData(xdata,ydata,nLen,true);
    m_Graph.UpdateGraph();

SmartGraph Properties:

  • Back Color: use it to change background color of the graph (put_BackColor and get_BackColor).
  • BorderColor
  • ForeColor
  • Title: title of graph.
  • Columns and Rows: number of columns and rows to be drawn if grid is on (ShowGrid(true)).
  • xLable and yLable: Labels appearing in X and Y axes.
  • MarginTop, MarginLeft, MarginRight, MarginBottom: Margins for labels, title and …

SmartGraph Methods:

  • SetData and SetData2: use SetData if you don’t want to set maximum and minimum of X and Y axis. Use SetData2 if you want to specify max and min of data.
  • ShowGrid
  • UpdateGraph
  • SetPlotType: 0 - Regular, 1 - Dot Graph, 2 - Bar Graph.
  • ZoomIn, ZoomInByPercent: Zoom in (x axes) from sample/percent "FromSample"/"FromPercent" to sample/percent "ToSample"/"ToPercent".
  • ZoomOut: returns graph to previous view.
  • Reset: returns graph to original view.
  • GetDisplayedRange: returns range of samples that already are shown.
  • SetLegendText

SmartGraph Events:

  • LButtonDown
  • LButtonUp
  • MouseMove

Sample application provided is a good demonstration of this SmartGraph.

Use, enjoy and guide me for future improvements.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)

Share

About the Author

Hossein Khosravi
Software Developer (Senior) FarsiOCR.ir
Iran (Islamic Republic Of) Iran (Islamic Republic Of)
Currently I'm working at Dept. of Electrical Engineering in University of Shahrood.
Pattern Recognition (specially OCR), Neural Networks, Image Processing and Machine Vision are my interests. However I'm a PROGRAMMER as well.
BSc: Sharif University of technology @ 2002
MSc. and PhD: Tarbiat Modarres University @ 2006 & 2010 respectively

Personal Blog: Andisheh Online

Religious Blogs: Shia Muslims , Ashura , Islamic Quotes

Commercial Site: Farsi OCR

You may also be interested in...

Comments and Discussions

 
GeneralMy vote of 5 Pin
Member 967370511-Dec-12 12:32
memberMember 967370511-Dec-12 12:32 
QuestionCan you update it to WindowsXP-64-bit or windows server 2003 - 64bit? Pin
rockcracks23-Jun-08 23:50
memberrockcracks23-Jun-08 23:50 
AnswerRe: Can you update it to WindowsXP-64-bit or windows server 2003 - 64bit? Pin
Hossein Khosravi24-Jun-08 20:36
memberHossein Khosravi24-Jun-08 20:36 
GeneralRe: Can you update it to WindowsXP-64-bit or windows server 2003 - 64bit? Pin
Saroj Acharya7-Dec-11 8:26
memberSaroj Acharya7-Dec-11 8:26 
GeneralC# Implementation Pin
worked on mine9-Oct-07 4:15
memberworked on mine9-Oct-07 4:15 
GeneralHelp me.. Pin
Choi Sung Dae18-Sep-07 20:28
memberChoi Sung Dae18-Sep-07 20:28 
GeneralRe: Help me.. Pin
Hossein Khosravi18-Sep-07 21:50
memberHossein Khosravi18-Sep-07 21:50 
GeneralRe: Help me.. Pin
Choi Sung Dae20-Sep-07 15:08
memberChoi Sung Dae20-Sep-07 15:08 
GeneralRe: Help me.. Pin
Choi Sung Dae20-Sep-07 21:34
memberChoi Sung Dae20-Sep-07 21:34 
GeneralVisual studio 2005 Pin
kspalj13-Sep-07 23:14
memberkspalj13-Sep-07 23:14 
GeneralRe: Visual studio 2005 Pin
Hossein Khosravi14-Sep-07 21:07
memberHossein Khosravi14-Sep-07 21:07 
GeneralTruely Nice Work! Pin
OxfoX31-Jul-07 3:32
memberOxfoX31-Jul-07 3:32 
GeneralUsing the SmartGraph control in a property page Pin
pkam19-Jul-07 6:50
memberpkam19-Jul-07 6:50 
GeneralRe: Using the SmartGraph control in a property page Pin
Hossein Khosravi21-Jul-07 0:33
memberHossein Khosravi21-Jul-07 0:33 
GeneralRe: Using the SmartGraph control in a property page Pin
pkam22-Jul-07 23:22
memberpkam22-Jul-07 23:22 
GeneralRe: Using the SmartGraph control in a property page Pin
pkam24-Jul-07 6:39
memberpkam24-Jul-07 6:39 
GeneralRe: Using the SmartGraph control in a property page Pin
Hossein Khosravi24-Jul-07 18:42
memberHossein Khosravi24-Jul-07 18:42 
QuestionactiveX registrartion Pin
mickael_biardeau20-Jun-07 2:32
membermickael_biardeau20-Jun-07 2:32 
AnswerRe: activeX registrartion Pin
Hossein Khosravi20-Jun-07 3:12
memberHossein Khosravi20-Jun-07 3:12 
General'double %' Pin
SnowstarTeam17-May-07 13:01
memberSnowstarTeam17-May-07 13:01 
GeneralRe: 'double %' Pin
Hossein Khosravi17-May-07 21:12
memberHossein Khosravi17-May-07 21:12 
GeneralRe: 'double %' Pin
SnowstarTeam18-May-07 10:05
memberSnowstarTeam18-May-07 10:05 
GeneralRe: 'double %' Pin
jcnhal15-Oct-07 19:57
memberjcnhal15-Oct-07 19:57 
Questionwhy do you not give the project file(.dsw) int demo? Pin
yejianhui1686-Apr-07 4:29
memberyejianhui1686-Apr-07 4:29 
AnswerRe: why do you not give the project file(.dsw) int demo? Pin
Hossein Khosravi6-Apr-07 5:25
memberHossein Khosravi6-Apr-07 5:25 
GeneralRe: why do you not give the project file(.dsw) int demo? Pin
yejianhui1688-Apr-07 2:12
memberyejianhui1688-Apr-07 2:12 
QuestionHow can i update the graph? Pin
mah_gh18-Dec-06 1:24
membermah_gh18-Dec-06 1:24 
AnswerRe: How can i update the graph? Pin
Hossein Khosravi18-Dec-06 21:23
memberHossein Khosravi18-Dec-06 21:23 
GeneralRe: How can i update the graph? Pin
mah_gh21-Dec-06 0:42
membermah_gh21-Dec-06 0:42 
QuestionHow can i update the graph? Pin
mah_gh18-Dec-06 1:23
membermah_gh18-Dec-06 1:23 
QuestionDoesn`t WORK VC++ NET 2005..can u pls hlp Pin
EngAbdALLA13-Dec-06 7:37
memberEngAbdALLA13-Dec-06 7:37 
AnswerRe: Doesn`t WORK VC++ NET 2005..can u pls hlp Pin
Hossein Khosravi15-Dec-06 19:02
memberHossein Khosravi15-Dec-06 19:02 
QuestionHow to include SmartGraph.dll in my VC++ 6 project? Pin
Liu xiaoyan1-Dec-06 7:17
memberLiu xiaoyan1-Dec-06 7:17 
AnswerRe: How to include SmartGraph.dll in my VC++ 6 project? Pin
Hossein Khosravi2-Dec-06 1:59
memberHossein Khosravi2-Dec-06 1:59 
GeneralRe: How to include SmartGraph.dll in my VC++ 6 project? Pin
Liu xiaoyan4-Dec-06 7:37
memberLiu xiaoyan4-Dec-06 7:37 
GeneralRe: How to include SmartGraph.dll in my VC++ 6 project? Pin
Hossein Khosravi4-Dec-06 18:25
memberHossein Khosravi4-Dec-06 18:25 
GeneralRe: How to include SmartGraph.dll in my VC++ 6 project? Pin
Liu xiaoyan5-Dec-06 11:48
memberLiu xiaoyan5-Dec-06 11:48 
QuestionHow to install and use it in Visual C++? Pin
Zeus 198126-Oct-06 13:15
memberZeus 198126-Oct-06 13:15 
AnswerRe: How to install and use it in Visual C++? Pin
Hossein Khosravi27-Oct-06 21:12
memberHossein Khosravi27-Oct-06 21:12 
GeneralRe: How to install and use it in Visual C++? Pin
Zeus 198130-Oct-06 0:59
memberZeus 198130-Oct-06 0:59 
GeneralRe: How to install and use it in Visual C++? Pin
Hossein Khosravi30-Oct-06 17:43
memberHossein Khosravi30-Oct-06 17:43 
GeneralThanks! Pin
warrenblackwell1-Sep-05 12:11
memberwarrenblackwell1-Sep-05 12:11 
AnswerRe: Thanks! Pin
Hossein Khosravi2-Sep-05 20:28
memberHossein Khosravi2-Sep-05 20:28 
GeneralRe: Thanks! Pin
man2815-Jun-06 1:16
memberman2815-Jun-06 1:16 
GeneralUsing in C# Pin
DuongNguyen18-Apr-05 7:17
memberDuongNguyen18-Apr-05 7:17 
GeneralQuery regarding using SmartGraph Pin
krihtika7413-Jan-05 18:50
memberkrihtika7413-Jan-05 18:50 
QuestionHow to use it (zooming in/out) in VB? Pin
hyxkona@yahoo.com4-Jan-05 11:56
memberhyxkona@yahoo.com4-Jan-05 11:56 
AnswerRe: How to use it (zooming in/out) in VB? Pin
anonymous17-Jan-05 0:01
memberanonymous17-Jan-05 0:01 
GeneralCheers Pin
nice_boy24730-Dec-04 5:38
membernice_boy24730-Dec-04 5:38 
GeneralHI Pin
MohammadAmiry22-Dec-04 2:41
memberMohammadAmiry22-Dec-04 2:41 

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.

| Advertise | Privacy | Terms of Use | Mobile
Web02 | 2.8.150728.1 | Last Updated 22 Dec 2004
Article Copyright 2004 by Hossein Khosravi
Everything else Copyright © CodeProject, 1999-2015
Layout: fixed | fluid