|
download NTGraph3D demo, extract files and double click on Demo3D.hta to see it run in a browser.
you can open same file and code is nearly identical to VB, so you can simply copy and paste.
of course you need to create new VB application (standard EXE) and add reference (Ctrl+T) to NTGraph after registering ntgraph3d.dll.
this will allow you to drop new NTGraph control onto VB form.
can't post file but here is entire form of VB6 demo version.
VERSION 5.00
Object = "{7A99C13D-22DF-400C-AB37-48C32A897EFB}#1.0#0"; "ntgraph3d.dll"
Begin VB.Form Form1
Caption = "ibyk30 : NTGraph3D demo in VB6"
ClientHeight = 11850
ClientLeft = 60
ClientTop = 345
ClientWidth = 18495
LinkTopic = "Form1"
ScaleHeight = 11850
ScaleWidth = 18495
StartUpPosition = 3 'Windows Default
Begin VB.Frame Frame1
Caption = "Track Mode"
Height = 2415
Left = 17160
TabIndex = 5
Top = 3840
Width = 1215
Begin VB.OptionButton radTrackModeRotate
Caption = "Rotate"
Height = 495
Left = 120
TabIndex = 9
Top = 1200
Width = 975
End
Begin VB.OptionButton radTrackModePan
Caption = "Pan"
Height = 495
Left = 120
TabIndex = 8
Top = 1680
Width = 975
End
Begin VB.OptionButton radTrackModeZoom
Caption = "Zoom"
Height = 375
Left = 120
TabIndex = 7
Top = 840
Width = 855
End
Begin VB.OptionButton radTrackModeLock
Caption = "Lock"
Height = 375
Left = 120
TabIndex = 6
Top = 360
Value = -1 'True
Width = 975
End
End
Begin VB.CommandButton btnKlein
Caption = "Klein Bottle"
Height = 615
Left = 17160
TabIndex = 4
Top = 2280
Width = 1215
End
Begin VB.CommandButton btnSine
Caption = "Sine"
Height = 615
Left = 17160
TabIndex = 3
Top = 1560
Width = 1215
End
Begin VB.CommandButton btnButterfly
Caption = "Butterfly"
Height = 615
Left = 17160
TabIndex = 2
Top = 840
Width = 1215
End
Begin VB.CommandButton btnTorus
Caption = "Torus"
Height = 615
Left = 17160
TabIndex = 1
Top = 120
Width = 1215
End
Begin NTGRAPH3DLibCtl.NTGraph3D NTGraph3D
Height = 11655
Left = 120
OleObjectBlob = "Form1.frx":0000
TabIndex = 0
Top = 120
Width = 16815
End
End
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
Attribute VB_Exposed = False
Option Explicit
Dim i As Integer
Dim j As Integer
Dim ti As Double
Dim tj As Double
Dim x As Double
Dim y As Double
Dim z As Double
Dim csv(800, 1024) As Single
Private Sub btnTorus_Click()
With NTGraph3D
.ClearGraph
.AddElement
.Caption = "Torus"
.ElementType(0) = 3 'Draw Surface
For i = 0 To 40
ti = (i - 20) / 20 * 3.15
For j = 1 To 41
tj = (j - 20) / 20 * 3.15
x = (Cos(tj) + 3) * Cos(ti)
y = Sin(tj)
z = (Cos(tj) + 3) * Sin(ti)
.PlotXYZ x, y, z, 0
Next
Next
.AutoRange
End With
End Sub
Private Sub btnSine_Click()
With NTGraph3D
.ClearGraph
.AddElement
.Caption = "Double Sine"
For i = 0 To 40
x = ((i - 20) / 20) * 3.15
For j = 0 To 40
NTGraph3D.AddElement
z = ((j - 20) / 20) * 3.15
y = Sin(x) * Cos(z) + 2
NTGraph3D.ElementType(j) = 0
NTGraph3D.ElementLineColor(i) = RGB(255, 0, 0)
NTGraph3D.PlotXYZ x, y, z, j
Next
Next
.AutoRange
End With
End Sub
Private Sub btnButterfly_Click()
Dim hold1 As Double
Dim holdm As Double
With NTGraph3D
.Caption = "Butterfly"
.ClearGraph
.AddElement
.ElementType(0) = 3
For i = 0 To 41
ti = (i - 20) / 20 * 3.15
For j = 0 To 41
tj = (j - 20) / 20 * 3.15
hold1 = Sin(tj)
holdm = Cos(ti * 0.5) * hold1 - Sin(ti * 0.5) * Sin(tj * 2)
x = holdm * Cos(ti)
y = holdm * Sin(ti) * 0.5
z = Sin(ti * 0.5) * hold1 + Cos(ti * 0.5) * Sin(tj * 0.5)
.PlotXYZ x, y, z, 0
Next
Next
.AutoRange
End With
End Sub
Private Sub btnKlein_Click()
Dim u As Double
Dim v As Double
Dim rad As Double
Dim Bx As Double
Dim By As Double
Dim Pi As Double
With NTGraph3D
.Caption = "Klein Bottle"
.ClearGraph
.AddElement
.ElementPointColor(0) = RGB(0, 0, 255)
.ElementType(0) = 1
'Generate data to plot
Pi = 3.14
For u = 0 To 2 * Pi Step 0.1
For v = 0 To 2 * Pi Step 0.1
Bx = 6 * Cos(u) * (1 + Sin(u))
By = 16 * Sin(u)
rad = 4 * (1 - Cos(u) / 2)
If Pi < u And u <= 2 * Pi Then
x = Bx + rad * Cos(v + Pi)
Else
x = Bx + rad * Cos(u) * Cos(v)
End If
If Pi < u And u <= 2 * Pi Then
y = By
Else
y = By + rad * Sin(u) * Cos(v)
End If
z = rad * Sin(v)
.PlotXYZ x, y, z, 0
Next
Next
.AutoRange
End With
End Sub
' radio buttons to select tracking mode
Private Sub radTrackModeLock_Click()
NTGraph3D.TrackMode = 0 ' Lock
End Sub
Private Sub radTrackModeZoom_Click()
NTGraph3D.TrackMode = 1 ' Zoom
End Sub
Private Sub radTrackModeRotate_Click()
NTGraph3D.TrackMode = 2 ' Rotate
End Sub
Private Sub radTrackModePan_Click()
NTGraph3D.TrackMode = 3 ' Pan
End Sub
'----------------------------------------------------
If you don't really care about OpenGL and just need to plot something that looks 3D,
here is simple alternative. this code uses just series of lines drawn on a form
or Picturebox to present sort of landscape.
i don't recall where i saw the original code but here is modified version.
it allows simple scale and rotation of the plot.
Option Explicit
' based on some code sample from web, don't recall URL
Const PI = 3.14159265
Dim byaLandscape(800, 255) As Integer ' can be single as well as long as DrawLandscape datasource type is changed too
'Direct draw onto a form or picture box
Private Sub DrawLandscape(disp As Object, datasource() As Integer, PosX As Integer, PosY As Integer, TiltX As Single, TiltY As Single, XYRatio As Single, XYScale As Single)
Dim X As Integer, Y As Integer, Xplot As Integer, Yplot As Integer, yOffset As Single
disp.Cls
disp.AutoRedraw = True
disp.ScaleMode = 3 '3 = Pixels
For Y = UBound(datasource, 2) To LBound(datasource, 2) Step -1
yOffset = Y - 0.5 * UBound(datasource, 2)
For X = LBound(datasource, 1) To UBound(datasource, 1)
Xplot = PosX + CInt(XYScale * (XYRatio * X - TiltX * yOffset))
Yplot = PosY + 0.5 * UBound(datasource, 2) - CInt(XYScale * TiltY * yOffset)
If datasource(X, Y) <> 0 Then
disp.Line (Xplot, Yplot)-(Xplot, Yplot - datasource(X, Y)), RGB(Y * (255 / UBound(datasource, 2)), _
255 - (Y * (255 / UBound(datasource, 2))), _
X * (255 / UBound(datasource, 1)))
End If
Next
Next
End Sub
Private Sub Command1_Click()
' DrawLandscape Picture1, byaLandscape, CInt(Me.Text1.Text), CInt(Me.Text2.Text), Val(Me.Text3.Text), Val(Me.Text4.Text), Val(Me.Text5.Text), Val(Me.Text6.Text)
DrawLandscape Me, byaLandscape, CInt(Me.Text1.Text), CInt(Me.Text2.Text), Val(Me.Text3.Text), Val(Me.Text4.Text), Val(Me.Text5.Text), Val(Me.Text6.Text)
End Sub
Private Sub Form_Load()
'This will create data a sort of wavy landscape
Dim X As Integer, Y As Integer
For X = LBound(byaLandscape, 1) To UBound(byaLandscape, 1)
For Y = LBound(byaLandscape, 2) To UBound(byaLandscape, 2)
byaLandscape(X, Y) = 48 + (Sin((X + Y) * PI / 127) * Sin(Y * PI / 127)) * 32
Next
Next
End Sub
|
|
|
|
|
for the last code sample, just add button and six textboxes.
add label next to each text box and set values as follows:
textNo / label.caption / textbox value
1 / X / 250
2 / Y / 150
3 / dX / 0.5
4 / dY / 0.5
5 / xyRatio / 0.5
6 / xyScale / 1.0
|
|
|
|
|
Hi!
Could you write some examples how to use this library in my С# -project?Thx for help!
|
|
|
|
|
Add NTGraph3D.dll in References. Then add control from COM components in toolbox. And use =)
|
|
|
|
|
does one have to register it with the system first ?
|
|
|
|
|
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.
|
|
|
|
|
please tell me how to change the grid distances of x & y axis in ntgraph activex control.
abhinav bhorkar
|
|
|
|
|
Hi,
I've been using VBA for some time but have never worked with ActiveX controls.
I am trying to use this ActiveX Control in Excel.
I have registered the dll using REGSVR32.
I created an ActiveX control using NTGraph3D class.
I can see the empty x,y,z axis in the control.
I double-clicked on the control to add code.
I have ensured that I've ticked "NTGraph3D 1.0 Type Library" in my project References.
I can see the NTGraph3D objects when I open the object browser.
I have created the following test code:
Sub TstTorus()<br />
<br />
Dim Gr As OLEObject<br />
Dim WS As Worksheet<br />
<br />
Set WS = Worksheets("Sheet1")<br />
WS.OLEObject("NTGraph3D").ClearGraph<br />
End Sub
I keep getting the same compile error:
Object library invalid or contains references to object definitions that could not be found.
Is there some step that I've missed? I would greatly appreciate help!
bd
|
|
|
|
|
I want to use 2d capabilities of Direct3D. I have different bitmaps and need to blit these directly on 'Backbuffer of device'. I created a surface using IDirect3Device::CreateOffScreenPlainSurface() then I blit bitmap on this surfsace using GetDC() function of surface. Then I used IDirect3Device::GetBackBuffer() method to get backbuffer surface and using IDirect3Device::StretchRect(), did blit on backbuffer surfaceBut It did not work. Kindly guide me in this regard.
Raheel
modified on Saturday, September 6, 2008 7:46 AM
|
|
|
|
|
I want to move a point(x,y,z) on straight or curved path in NTGraph3D control. Should I use line drawing function to draw curved path? Can Grid in background be made invisible? I only need 3-Axis in background. Is there anyother free 3D-Graph Drawing Actvx control like NTGraph3D?
Thanks
Raheel
|
|
|
|
|
Anyone got the surface plot and associated properties to work or is it disabled? Any idea on how to get the release version? No valid contact details are available for the author here.
|
|
|
|
|
I can get the surface to draw but it doesn't draw correctly. It seems to create a bunch of spurious points.
were you able to get it to work?
|
|
|
|
|
Hello,
Yes, I got the activex working. Just make sure you set the data points correctly for each axis when you use Graph3D.PlotXYX
If the x,y and z data points do not correspond to the correct axes you will get points plotted that make no sense. I had to swap the y and z axes to get the correct results for a plot, as the activex does not use a proper xyz cartesian coordinate system.
A problem plotting lines though. The 3D line plot always closes the first and last point plotted with a straight line, resulting in a number of straight lines through the plot. OK if you want to draw a shape, but no good for a curved surface. Is this a bug?
I am still having problems with the surface plot elementtype=3. I get a blank canvas when the elementtype is set to 3 (surface). Lines and points work well though. I am using VB. Any ideas why the the surface plot will not plot?
modified on Thursday, March 12, 2009 5:48 PM
|
|
|
|
|
I want to have print option for 3D Graphs plotted using this ActiveX control . Can anyone help me in this.
There is one in 2D ActiveX, but he has not provided in this control - 3D ActiveX.
Thanks in advance.
|
|
|
|
|
I found this 3D Graph ActiveX Control in this website, but I don't konw how to use it?
what is m_Graph3D then? it seems to be a instance of the class.
Any one who has used it, please give me one hint.
thanks.
|
|
|
|
|
did you ever figure out how to use it ?
|
|
|
|
|
Hi
I tryed your code in an MFC DLL and it worked, but very slow.
I have to show every 12Hz new 3D images.
Now i can display 1 Image per second and this will bring the CPU to 100%.
Ok what i have done is calling an function from the Dialog with this code:
<br />
m_Graph3D.AddElement();
m_Graph3D.put_ElementType( 0 , 1);
m_Graph3D.put_ElementPointSize( 0, 10.0);
<br />
for (i = 0; i < height; i++)<br />
{<br />
for (j = 0; j < width; j++) <br />
{<br />
piPixel = *piData++;<br />
m_Graph3D.PlotXYZ(j,i,piPixel, slElementID );<br />
}<br />
}<br />
<br />
m_Graph3D.put_TrackMode( 2 );<br />
m_Graph3D.AutoRange();<br />
But this takes so much times and only every second Image will be shown
Can u help be to make it faster?
|
|
|
|
|
Hi
I registerd this dll and ntgraoh.ocx in win 3000 server but when I want to put it on my prog not only a new form it takes a long time and my prog can not be started my prog is in vc++.net windows form application .
please help me to say what can I do?
|
|
|
|
|
Hi All,
Can anyone tell me what changes required other than registering dll, i have to made while using NTGraph3D dll in Vista system
-- modified at 4:22 Friday 17th August, 2007
NSRS
|
|
|
|
|
I have found in some sites that i have to install some drivers to support OpenGL, Can any one suggest the relevant driver
NSRS
|
|
|
|
|
All you need is a graphics accelerator that supports OpenGL. All modern graphics accelerators do this.
Vista has no problems with OpenGL provided it is supported by the graphics accelerator
|
|
|
|
|
Hey all,
sorry i'm pretty average at this VB business, currently using VB6 though. Downloaded the NTGraph3D binary and registered it using regsvr32 and all went well. However after adding as a component in VB only NTGraph3D's properties show up, the elements (ie ClearGraph, AddElement, ElementType) don't appear in the objects properties box. As such the given code example refuses to work.
Have downloaded, registered and successfully used the 2D version of NTGraph and i'm not entirely sure where i've gone wrong.
Any help much appreciated,
Mike
|
|
|
|
|
Hi, first off, thanks for making this, its been really helpful. i have been having problems plotting an iterative sequence of a lattice like structure using a scatter diagram. while the program is running only the corners of the cube appear then the rest is plotted at the end. yet if the code is run a second time all the points are plotted. is there a way this could be fixed?
manythanks again.
Ollie
|
|
|
|
|
Is anything other than registering NTGraph3D.dll required to get the control to work in Access?
I have it registered adn working with Excel.
Right now Access is a no go though.
Any help will be greatly appreciated
|
|
|
|
|
Good code, I hope to embedded our project,as a preview 3D motion track component, could you tell me how can draw a arc by pssing center plot ,start plot and direct?
anyway, studying your code let me master lots of experiences.
coolman
|
|
|
|
|