Click here to Skip to main content
Click here to Skip to main content

3D Graph ActiveX Control

By , 2 Aug 2003
 
Prize winner in Competition "MFC/C++ May 2003"

NTGraph3D -Sample Image

Introduction

This is an ActiveX control based on the OpenGL library, which allows you to plot three-dimensional data. The control is entirely written on ATL/STL, and does not link to MFC libraries.

The control can perform the following functions:

  • Axis customization, including customizable font, colors, and titles.
  • Plot a large number of points and updating one or more plots on the graph with new data, replacing the old plot with the new plot.
  • Plot the multiple elements with individual properties such as line and point color, line width, and point size.
  • Lighting
  • Plot styles: {0 (Lines); 1 (Points); 2 (LinePoint); 3 (Surface)}
  • By setting the Projection property you should be able to change the viewing to: (0) Perspective (in which objects that are closer appear larger), and (1) Orthographic (in which the sizes and angles between objects are maintained no matter what their distance from the viewer).
  • By setting the TrackMode property you should be able to do: (1) Zooming, (2) Rotation, and (3) Panning at runtime.

About the Code

To use this control, embed it in an application that supports the use of ActiveX controls. Microsoft Visual Basic applications, all MS Office applications, VBScript and JavaScript in the HTA or Internet Explorer applications, and applications created with the Microsoft Developer Studio’s AppWizard can support the use of ActiveX controls.

Before you start, the control must be register as a COM component using Regsvr32.exe. Regsvr32 takes one argument the DLL or control to register and any of several command-line switches, the most notable of which is /u to uninstall a control. By default that is, when run with only a dll or ocx Regsvr32.exe registers the control.

Note: you must do this on every computer that you are going to use the control!

For more information on how to register and how to include the control in a VC Project, refer to my article 2D Graph ActiveX Control.

Bellow are two listings that demonstrates how to use the control to draw a Torus:

C++

//
//
// Plot Torus
//
void CDemoDlg::OnButton1() 
{
   m_Graph3D.SetCaption ("Torus");
   m_Graph3D.ClearGraph(); // Clear all data
   m_Graph3D.AddElement(); // Add an element to element list

   m_Graph3D.SetElementLineColor(0, RGB(255,0,0));
   m_Graph3D.SetElementType(0, 3); // draw surface
   
   double x,y,z,ti,tj;
   
   for (int i = 0; i < 41; i++)
   {
      ti = (i - 20.0)/20.0 * 3.15;
      
      for (int j = 0; j < 41 ; j++) 
      {
	   tj = (j - 20.0)/20.0 * 3.15;
           
	   x = (cos(tj) + 3.0) * cos(ti);
	   y = sin(tj);
	   z = (cos(tj) + 3.0) * sin(ti);

           m_Graph3D.PlotXYZ(x,y,z,0); 
     }
   }

   //m_Graph3D.SetRange (-4, 4, -1, 1, -4, 4);
   m_Graph3D.AutoRange();
}

Visual Basic

'''''''''''''''''''''''''''''' 
' Look at the Demo3D.hta file 
' Double click on file to start the demo
'
' Plot Torus
'
Sub Torus

   With Graph3D
	.ClearGraph
  	.AddElement
        .Caption = "Torus"
	.ElementType(0) = 3 'Draw Surface

   For i = 0 To 41
    ti = (i - 20.0)/20.0 * 3.15

    For j = 0 To 41 
	
	tj = (j - 20.0)/20.0 * 3.15

	x = (cos(tj) + 3.0) * cos(ti)
	y = sin(tj)
	z = (cos(tj) + 3.0) * sin(ti)
	.PlotXYZ x,y,z,0
        
     Next
    Next
    	.Autorange
  End With
End Sub

List of Control Properties:

    Graph

  •  short Appearance
  •  long BorderStyle
  •  VARIANT_BOOL BorderVisible
  •  BSTR Caption
  •  IFontDisp* Font
  •  OLE_COLOR BackColor
  •  OLE_COLOR CaptionColor
  •  short TrackMode
  •  short Projection
  •  BSTR XLabel
  •  BSTR YLabel
  •  BSTR ZLabel
  •  short XGridNumber
  •  short YGridNumber
  •  short ZGridNumber
  •  OLE_COLOR XGridColor
  •  OLE_COLOR YGridColor
  •  OLE_COLOR ZGridColor

    Elements

  •  OLE_COLOR ElementLineColor(long ElementID, OLE_COLOR newVal)
  •  OLE_COLOR ElementPointColor(long ElementID, OLE_COLOR newVal)
  •  float ElementLineWidth(long ElementID, float newVal)
  •  float ElementPointSize(long ElementID, float newVal)
  •  short ElementType(long ElementID)
  •  BOOL ElementShow(long ElementID)
  •  BOOL ElementSurfaceFill(long ElementID)
  •  BOOL ElementSurfaceFlat(long ElementID)
  •  BOOL ElementLight(long ElementID
  •  short ElementLightingAmbient(long ElementID)
  •  short ElementLightingDiffuse(long ElementID)
  •  short ElementLightingSpecular(long ElementID)
  •  short ElementMaterialAmbient(long ElementID)
  •  short ElementMaterialDiffuse(long ElementID)
  •  short ElementMaterialSpecular(long ElementID)
  •  short ElementMaterialShinines(long ElementID)
  •  short ElementMaterialShinines(long ElementID)
  •  short ElementMaterialEmission(long ElementID)

List of Control Methods:

    Graph

  •  void SetRange(double xmin, double xmax, double ymin, double ymax, double zmin, double zmax)
  •  void AutoRange()
  •  void ShowPropertyPages()

    Elements

  •  void AddElement()
  •  void DeleteElement(long ElementID)
  •  void ClearGraph()
  •  void PlotXYZ(double x, double y, double z, long ElementID)
  •  void SetLightCoordinates(long ElementID, float x, float y, float z)

Cost: One bottle wine. :-)

Enjoy!

Note: I am not expert on OpenGL, therefore all good suggestions, code and help for imporving the control are welcome!

Send mail to nteofilov@yahoo.de with questions or comments about this article.

History

16 Jun 2003 - v1.0 Initial release

22 Jun 2003 - v2.0

  • Thanks to Alexander Chernosvitov for the Excellent article Function graphics in 3D.
  • Lot’s of new properties (see property list and demo files)
  • ElementType = {0 (Lines); 1 (Points); 2 (LinePoint); 3 (Surface)}
  • Added new demo file that demonstrate the new features
  • New Property BOOL ElementShow(long ElementID)
29 Jul 2003 - v2.1
  • Some drawing fixes
  • Added CopyToClipboard (Works only with release versions of the control! )
  • Added Klein Bottle
  • Changes to the Demo Projects

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here

About the Author

Nikolai Teofilov
Researcher
Germany Germany
Member
No Biography provided

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

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
QuestionLline color rainbowmembermahcyp27 Nov '11 - 7:07 
AnswerRe: Lline color rainbowmemberzhaojianzhong12 Aug '12 - 22:55 
GeneralMy vote of 2memberibyk3015 Jun '11 - 14:25 
GeneralRe: My vote of 2memberxrg_soft@163.com28 Jun '11 - 23:28 
GeneralRe: My vote of 2memberelha5818 Oct '11 - 22:18 
Questionsetting element colormemberibyk3030 May '11 - 7:02 
GeneralMy vote of 5memberRedDK15 Apr '11 - 8:39 
Questionvisual studio 2010 ?memberroboticEDAR29 Mar '11 - 10:45 
QuestionIs the src project is supposed to generate an ActiveX control ?memberMichael B Pliam31 Jan '11 - 11:47 
AnswerRe: Is the src project is supposed to generate an ActiveX control ?memberMichael B Pliam26 Feb '11 - 9:01 
QuestionWould be nice if this were NOT an ActiveX Control ?memberMichael B Pliam30 Jan '11 - 20:34 
AnswerRe: Would be nice if this were NOT an ActiveX Control ?membernguyenvanhauk510 Jul '12 - 20:41 
GeneralUsing this library in C++memberVi_Ter5 Oct '09 - 4:40 
Generalgetting errors for data types(error: C2664)memberhituhoney16 Jul '09 - 2:16 
GeneralRe: getting errors for data types(error: C2664)memberMember 389846914 Nov '09 - 4:52 
GeneralOpen GLmemberMyron Langer16 Apr '09 - 6:32 
GeneralRe: Open GLmemberibyk301 Jun '11 - 5:05 
GeneralRe: Open GLmemberibyk301 Jun '11 - 5:26 
GeneralUsing this library in С#membergetbraine20 Feb '09 - 23:42 
GeneralRe: Using this library in С#membermaslbl425 Aug '10 - 4:51 
GeneralRe: Using this library in С#memberroboticEDAR29 Mar '11 - 10:34 
GeneralNTGraph3D in Accessmembermbojanks27 Oct '08 - 2:43 
Have you checked the exact name of the control in Access? If yes, have you then tried writing NTGraph3D0.Object instead of just NTGraph3D0 (or whatever your control`s name was) in the With line of the Torus example? Torus example with this .Object modification works fine in Access for me.
Generalntgraphmemberabhinav bhorkar16 Oct '08 - 3:51 
GeneralCompile Error in ExcelmemberBonnie Douglas14 Oct '08 - 20:42 
GeneralDirect3D [modified]memberRaheel Anwar3 Sep '08 - 7:38 
Question3D-Graph DrawingmemberRaheel Anwar12 Jul '08 - 9:51 
GeneralSurface Plot Not Workingmemberrob10011 Jul '08 - 23:41 
GeneralRe: Surface Plot Not WorkingmemberLarsLiden17 Feb '09 - 15:00 
GeneralRe: Surface Plot Not Working [modified]memberrob100111 Mar '09 - 17:39 
Generalprintingmemberdanandu21 Apr '08 - 2:48 
QuestionHow to use NTGraph3D in c#?memberxiachunmin28 Nov '07 - 2:32 
AnswerRe: How to use NTGraph3D in c#?memberroboticEDAR29 Mar '11 - 10:34 
Questionupdate surface fastermemberOlaf Petersen25 Oct '07 - 3:36 
Generalplease help me soonmemberkian_beh16 Oct '07 - 1:56 
QuestionDoes any changes needed to use NTGraph3D in VISTA [modified]memberSai Ravi16 Jul '07 - 23:00 
QuestionRe: Does any changes needed to use NTGraph3D in VISTAmemberSai Ravi15 Aug '07 - 19:01 
AnswerRe: Does any changes needed to use NTGraph3D in VISTAmemberrob100111 Mar '09 - 17:45 
GeneralElements not appearingmembergrandmasterphat1 Apr '07 - 16:49 
Generalonly plotting cornersmemberop46645 Mar '07 - 13:36 
GeneralNTGraph3D in Accessmemberbakerjw2 Jan '07 - 9:14 
Generalneed draw arc member functionmemberhoward200625 Aug '06 - 7:42 
QuestionUsing this Code to Draw Surface DrawingmemberNMGajjar16 Jul '06 - 19:53 
QuestionCANNOT compile using VSNET2003!memberRedDK26 Jun '06 - 18:39 
AnswerRe: CANNOT compile using VSNET2003!memberhytleung21 May '07 - 22:25 
GeneralRe: CANNOT compile using VSNET2003! ... dereferencing ... coolmemberRedDK15 Apr '11 - 8:25 
QuestionThis control in C#memberbuzzy845 Jun '06 - 22:29 
AnswerRe: This control in C#memberLarsLiden17 Feb '09 - 15:02 
GeneralRe: This control in C#membervakulsr22 Apr '09 - 3:55 
GeneralProperty PagesmemberJairo Alonso12 Mar '06 - 21:51 
GeneralI want to create a 3D gamemembervikas amin15 Sep '05 - 0:47 

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

Permalink | Advertise | Privacy | Mobile
Web02 | 2.6.130516.1 | Last Updated 3 Aug 2003
Article Copyright 2003 by Nikolai Teofilov
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid