Page 1 of 1

Aspect Ratio of Chart

Posted: Wed Mar 18, 2009 10:30 am
by 13045625
I am using a surface series chart. Even when I have 100 x, and 100 z points the chart appears as a rectangle, not a square. How can I fix the aspect ratio of the chart so that it appears as a square.

Thanks in advance for any help.

Posted: Wed Mar 18, 2009 11:18 am
by yeray
Hi jenb,

If your chart axes are longer for X values than in Y values (or reverse), the axis is auto-scaled to fit you series values. I you want the axis "proportional", you could do something similar than the demo at Welcome !\Axes\Isometric axes

Posted: Fri Mar 20, 2009 9:12 am
by 13045625
Dear Yeray

Your suggested solution does work for initial display of the chart, but how do I deal with the OnRotate event?

It would be nice if there were some options in the chart that could scale the two axis according to their min and max values.

Regards

jenb

Posted: Fri Mar 20, 2009 10:15 am
by yeray
Hi jenb,

Some time ago I've made an example for a customer that asked for something similar, if I understand well. Here it is the topic. Note that this was made for VB6 and TeeChart ActiveX. If you find problems translating it, feel free to ask here and we'll try to help you.

Posted: Thu Apr 02, 2009 1:33 pm
by 13045625
Yeray

I looked at your example, but I can't use the code from it, quoted below, as HandleDC is no longer supported.
XYScreen = (GetDeviceCaps(.Canvas.HandleDC, HORZSIZE) / Screen.Width) / (GetDeviceCaps(.Canvas.HandleDC, VERTSIZE) / Screen.Height)
I am using the following code
Screen screen = Screen.FromControl(this);
Graphics g = Graphics.FromHwnd(this.Handle);
IntPtr hptr = g.GetHdc();

double xyscreen = GetDeviceCaps(hptr, HORZSIZE) * screen.Bounds.Height;
xyscreen /= (double)GetDeviceCaps(hptr, VERTSIZE) * screen.Bounds.Width;
Which is from your example in the features gallery. I am using a 3D surface chart but I only require the bottom and depth axis (x and z to be the same length). Actually they have the same min and max values, maybe I just need to set the axes to Automatic?

Regards

jenb

Posted: Mon Apr 06, 2009 10:52 am
by yeray
Hi jenb,

1. Yes, you have to calculate xyscreen relation as you are doing. That's one of the differences in the process in VB6 and VS.

2. So, if I understand well, you would like to see the bottom and the depth axis with the same length in pixels. But it's necessary they have the same angle with the horizontal or not?

Posted: Mon Apr 06, 2009 12:51 pm
by 13045625
Hi Yeray

I managed to get both axis equal by multiplying xyscreen by constant 1.7 (see below)
double xyscreen = GetDeviceCaps(hptr, HORZSIZE) * screen.Bounds.Height*1.7;
xyscreen /= (double)GetDeviceCaps(hptr, VERTSIZE) * screen.Bounds.Width;
I want both axis to look the same regardless of the rotation. I call the function in the OnMouseUp event and it works ok, but I have the problem of the chart "shrinking" as mentioned by the user in the example below.

http://www.teechart.net/support/viewtopic.php?t=7885

I posted an example screen shot "Sn 552 Peak Energy Only.jpg" on your upload site. Does the drawThebox function in your solution in the above URL get over the "shrinking" problem. I found it quite hard to translate this function and I haven't included it so far in my code.

Regards

jenb

Posted: Tue Apr 07, 2009 7:46 am
by yeray
Hi jenb,

Ok. Having a chart with an elevation like in the picture, I think I understand the meaning of rotating the chart. I'll try to make an example that will consider the elevation and the rotation in order to calculate and draw the isometric axis.

Regarding the shrinking problem, I think that this was due to rounding calculations but it was skipped by forcing the chart to be repainted one or maybe two times more.

The drawTheBox method was very particular for this customer. He had 3D points in a box... The last code I posted there resulted in this:

Image