Creating a colored contour map with Delphi code

I want to visualize 2D data using a color map type of display.
The data is in a 2-dimensional array with point data and I want to
create a surface display with X and Y on the axes, the value points in
the coordinate points and then put value contours on evenly spaced
value levels. Finally I want to color each range from one value
contour to the next contour in separate colors.
It is like the temperature display on the weather service on TV...

Is there a compact way to do this in Delphi without using a whole lot
of custom components? I like to be able to do it in pure Delphi code.
I am using Delphi 7 Pro from 2002.

TIA

--

Bo Berglund
Developer in Sweden
0
Bo
4/4/2010 8:10:51 PM
embarcadero.delphi.win32 2183 articles. 0 followers. Follow

17 Replies
2185 Views

Similar Articles

[PageSpeed] 45

"Bo Berglund" <bo.berglund@nospam.com> wrote in message 
news:230100@forums.embarcadero.com...
>I want to visualize 2D data using a color map type of display.
> The data is in a 2-dimensional array with point data and I want to
> create a surface display with X and Y on the axes, the value points in
> the coordinate points and then put value contours on evenly spaced
> value levels. Finally I want to color each range from one value
> contour to the next contour in separate colors.
> It is like the temperature display on the weather service on TV...
>
> Is there a compact way to do this in Delphi without using a whole lot
> of custom components? I like to be able to do it in pure Delphi code.
> I am using Delphi 7 Pro from 2002.


If you know the basic logic involved then just paint it yourself on a Delphi 
TBitmap and display it. I'm not sure of the logic myself, but it sounds like 
it should be fun to figure out! :)

-- 
Wayne Niddery (TeamB)
0
Wayne
4/4/2010 10:16:27 PM
On Sun, 4 Apr 2010 15:16:27 -0700, Wayne Niddery
<wniddery@chaffrogers.com> wrote:

>"Bo Berglund" <bo.berglund@nospam.com> wrote in message 
>news:230100@forums.embarcadero.com...
>>I want to visualize 2D data using a color map type of display.
>> The data is in a 2-dimensional array with point data and I want to
>> create a surface display with X and Y on the axes, the value points in
>> the coordinate points and then put value contours on evenly spaced
>> value levels. Finally I want to color each range from one value
>> contour to the next contour in separate colors.
>> It is like the temperature display on the weather service on TV...
>>
>> Is there a compact way to do this in Delphi without using a whole lot
>> of custom components? I like to be able to do it in pure Delphi code.
>> I am using Delphi 7 Pro from 2002.
>
>
>If you know the basic logic involved then just paint it yourself on a Delphi 
>TBitmap and display it. I'm not sure of the logic myself, but it sounds like 
>it should be fun to figure out! :)

Well, there are at least three problems involved here:
1) Given the array of X, Y and V triplets where X and Y are the
locations and V the values, how do I calculate the lines of constant V
values?

2) How do I plot these curved lines on a canvas where the X and Y
dimensions represent the XY direction of the area?

3) How do I color the areas between the lines in a constant color?

I am not very used to graphics or this kind of math, so that is why I
wanted advice. And I definitely want to have the code in a Delphi
unit, not as some kind of handle-all graphics package like GLScene,
VTK or something similar. It would simply be too heavy.
Must be a fairly simple algorithm somewhere.

--

Bo Berglund
Developer in Sweden
0
Bo
4/5/2010 7:11:49 AM
A very old article in Byte magazine (july 1987) described this problem 
for pascal. It should be fairly straighforward to translate this into 
delphi, but fortunately it has already been done.

http://local.wasp.uwa.edu.au/~pbourke/papers/conrec/


Hope this helps.

Willem

Bo Berglund wrote:
> On Sun, 4 Apr 2010 15:16:27 -0700, Wayne Niddery
> <wniddery@chaffrogers.com> wrote:
> 
>> "Bo Berglund" <bo.berglund@nospam.com> wrote in message 
>> news:230100@forums.embarcadero.com...
>>> I want to visualize 2D data using a color map type of display.
>>> The data is in a 2-dimensional array with point data and I want to
>>> create a surface display with X and Y on the axes, the value points in
>>> the coordinate points and then put value contours on evenly spaced
>>> value levels. Finally I want to color each range from one value
>>> contour to the next contour in separate colors.
>>> It is like the temperature display on the weather service on TV...
>>>
>>> Is there a compact way to do this in Delphi without using a whole lot
>>> of custom components? I like to be able to do it in pure Delphi code.
>>> I am using Delphi 7 Pro from 2002.
>>
>> If you know the basic logic involved then just paint it yourself on a Delphi 
>> TBitmap and display it. I'm not sure of the logic myself, but it sounds like 
>> it should be fun to figure out! :)
> 
> Well, there are at least three problems involved here:
> 1) Given the array of X, Y and V triplets where X and Y are the
> locations and V the values, how do I calculate the lines of constant V
> values?
> 
> 2) How do I plot these curved lines on a canvas where the X and Y
> dimensions represent the XY direction of the area?
> 
> 3) How do I color the areas between the lines in a constant color?
> 
> I am not very used to graphics or this kind of math, so that is why I
> wanted advice. And I definitely want to have the code in a Delphi
> unit, not as some kind of handle-all graphics package like GLScene,
> VTK or something similar. It would simply be too heavy.
> Must be a fairly simple algorithm somewhere.
> 
> --
> 
> Bo Berglund
> Developer in Sweden


-- 
Willem van Deursen, The Netherlands
wvandeursen_nospam@nospam_carthago.nl
replace _nospam@nospam_ for @ to get a valid email address
www.carthago.nl
0
Willem
4/5/2010 7:40:52 AM
On Mon, 5 Apr 2010 00:40:52 -0700, Willem van Deursen <xxx@xxx.nl>
wrote:

>A very old article in Byte magazine (july 1987) described this problem 
>for pascal. It should be fairly straighforward to translate this into 
>delphi, but fortunately it has already been done.
>
>http://local.wasp.uwa.edu.au/~pbourke/papers/conrec/
>
>
>Hope this helps.
>
Yes, I think it will help a lot.
On examining the code I found thta the example in Delphi does not call
a line drawing function, instead it calls a writeln where the
coordinates of the line drawing is printed to the console.

I want to modify the code a bit and make a proper ConRec unit
containing the contouring function as is, but I want to draw the
resulting vectors on my own canvas using a function that accepts the 5
parameters that ConRec calculates (level, x1,y1,x2,y2).

To make it more versatile I would like to pass the line drawing
function to ConRec as a parameter.
But now I am stuck again....
When I google the passing of functions in a function call in delphi
all I come up with are hits for using callback functions in DLL:s,
which of course this is not about at all....

So my next question is how to put a line drawing procedure call as a
parameter into the call to ConRec?

Something like:

{code: delphi}
type
  TPlotProc = procedure(Z, X1, Y1, X2, Y2: Double);

procedure ConRec(
   D: TMatrix ;        // 2D - Data field
   ilb,iub,            // west - east   ilb lower bound
                       //               iub upper bound
   jlb,jub : Integer;  // north - south jlb lower bound
                       //               jub upper bound
   x : TVector;        // coord. vector west - east
   y : TVector;        // coord. vector north - south
   nc: Integer;        // nc number of cut levels
   z : TVector;        // values of cut levels
   Plot: TPlotProc;);  // line drawing procedure
begin
   ....
   Plot(z[k],x1,y1,x2,y2);
   ....
end;
{code: delphi}

Is this something that could work?
--

Bo Berglund
Developer in Sweden
0
Bo
4/5/2010 9:35:21 AM
"Bo Berglund" <bo.berglund@nospam.com> schreef in bericht 
news:230200@forums.embarcadero.com...
> {code: delphi}
> type
>  TPlotProc = procedure(Z, X1, Y1, X2, Y2: Double);
>
> procedure ConRec(
>   D: TMatrix ;        // 2D - Data field
>   ilb,iub,            // west - east   ilb lower bound
>                       //               iub upper bound
>   jlb,jub : Integer;  // north - south jlb lower bound
>                       //               jub upper bound
>   x : TVector;        // coord. vector west - east
>   y : TVector;        // coord. vector north - south
>   nc: Integer;        // nc number of cut levels
>   z : TVector;        // values of cut levels
>   Plot: TPlotProc;);  // line drawing procedure
> begin
>   ....
>   Plot(z[k],x1,y1,x2,y2);
>   ....
> end;
> {code: delphi}
>
> Is this something that could work?

Yes. The alternative would be to make ConRec into a class and the plotProc a 
virtual method of it, which you then override in subclasses that are 
specific for the output medium.
Tom
0
Tom
4/5/2010 11:35:08 AM
If I have understood you correctly, you have a list of points Pi having plan coordinates (xi, yi). At each of these points you have the value ti of some variable t, and you wish to draw a contour plot of t in the plane X-Y.

How to go about this depends on whether or not the points Pi lie on a rectangular grid. In the more general case where they do not, the basic method is as follows:
1. Determine the convex hull containing all the points. This is the smallest convex polygon that contains all the points Pi. 
2. Construct a triangular tesselation of the input points. This is a subdivision of the interior of the complex hull into a mesh of triangular elements each having 3 points Pi at their vertices. This is a closes point problem (covered by Voronoi tesselation algorithms). Once this has been done you have a triangular grid with points Pi at the vertices and no points anywhere else.
3. Determine the minimum and maximum values of the variable to be contoured t over all the points, and hence the contour levels, i.e. values of t at each contour
3. For each triangle in the grid, determine a) which contours intersect the triangle, and b) the (x,y) coordinates of the intersection points of the contour segments with the edges of the triangle. At the end of this you will have contructed an array of contour line segments indexed by triangle and by contour level.
4. Plot each contour line segment in the colour that you have assigned the particular contour, after transforming the coordinates from your problem coordinates to the pixel coordinates of the plot output device.
5. For each triangular element, construct a list of contour plot patches falling within the element. To this end, for each patch bounded by two successive contour lines make a list of the contour intersection points surrounding the patch, and put them into an array for subsequent plotting as a polygon. 
6. For each triangle and each patch, plot the patch fill by setting the canvas brush colour to the appropriate colour for the contour interval, then call the Canvas.Polygon method.

The above will result in contour lines which are piecewise straight within single triangles. If a smoother set of curves is required there are 2 options:
a) Subdivide the original traingular mesh into a finer mesh, for example by subdividing each triangle into 4 smaller triangles. Then continue as above.
b) Instead of working at the level of traingular elements, assemble contour segments of the same contour level into strings of segments along the complete contour curve, then use something like splines or Bezier curves to give a smooth curve passing through the contour intersection points along the contour curve.

The method is a little more involved than one might think, but it's fast!

A much simpler method that is however much, much slower is to work at the pixel level. Here we iterate over each pixel of the plot, and convert the pixel coordinates to world coordinates (x,y). From these coordinates we compute the value of the variable t at that pixel. From the value of t we determine the colour, and then set the colour of that pixel to the calculated colour.

I hope that helps.

EM

> {quote:title=Bo Berglund wrote:}{quote}
> I want to visualize 2D data using a color map type of display.
> The data is in a 2-dimensional array with point data and I want to
> create a surface display with X and Y on the axes, the value points in
> the coordinate points and then put value contours on evenly spaced
> value levels. Finally I want to color each range from one value
> contour to the next contour in separate colors.
> It is like the temperature display on the weather service on TV...
> 
> Is there a compact way to do this in Delphi without using a whole lot
> of custom components? I like to be able to do it in pure Delphi code.
> I am using Delphi 7 Pro from 2002.
> 
> TIA
> 
> --
> 
> Bo Berglund
> Developer in Sweden
0
Enquiring
4/5/2010 12:36:11 PM
Maybe it is easier to pass the canvas to the routine, thus creating a 
function

procedure ConRec(
     D: TMatrix ;        // 2D - Data field
     ilb,iub,            // west - east   ilb lower bound
                         //               iub upper bound
     jlb,jub : Integer;  // north - south jlb lower bound
                         //               jub upper bound
     x : TVector;        // coord. vector west - east
     y : TVector;        // coord. vector north - south
     nc: Integer;        // nc number of cut levels
     z : TVector;        // values of cut levels
     MyCanvas: TCanvas);  // line drawing procedure
begin
   ...
   MyCanvas.MoveTo(x1,y1);
   MyCanvas.LineTo(x2,y2);
   ...
end;

but your approach is definitely also something that would work.

Willem


Bo Berglund wrote:
> On Mon, 5 Apr 2010 00:40:52 -0700, Willem van Deursen <xxx@xxx.nl>
> wrote:
> 
>> A very old article in Byte magazine (july 1987) described this problem 
>> for pascal. It should be fairly straighforward to translate this into 
>> delphi, but fortunately it has already been done.
>>
>> http://local.wasp.uwa.edu.au/~pbourke/papers/conrec/
>>
>>
>> Hope this helps.
>>
> Yes, I think it will help a lot.
> On examining the code I found thta the example in Delphi does not call
> a line drawing function, instead it calls a writeln where the
> coordinates of the line drawing is printed to the console.
> 
> I want to modify the code a bit and make a proper ConRec unit
> containing the contouring function as is, but I want to draw the
> resulting vectors on my own canvas using a function that accepts the 5
> parameters that ConRec calculates (level, x1,y1,x2,y2).
> 
> To make it more versatile I would like to pass the line drawing
> function to ConRec as a parameter.
> But now I am stuck again....
> When I google the passing of functions in a function call in delphi
> all I come up with are hits for using callback functions in DLL:s,
> which of course this is not about at all....
> 
> So my next question is how to put a line drawing procedure call as a
> parameter into the call to ConRec?
> 
> Something like:
> 
> {code: delphi}
> type
>   TPlotProc = procedure(Z, X1, Y1, X2, Y2: Double);
> 
> procedure ConRec(
>    D: TMatrix ;        // 2D - Data field
>    ilb,iub,            // west - east   ilb lower bound
>                        //               iub upper bound
>    jlb,jub : Integer;  // north - south jlb lower bound
>                        //               jub upper bound
>    x : TVector;        // coord. vector west - east
>    y : TVector;        // coord. vector north - south
>    nc: Integer;        // nc number of cut levels
>    z : TVector;        // values of cut levels
>    Plot: TPlotProc;);  // line drawing procedure
> begin
>    ....
>    Plot(z[k],x1,y1,x2,y2);
>    ....
> end;
> {code: delphi}
> 
> Is this something that could work?
> --
> 
> Bo Berglund
> Developer in Sweden


-- 
Willem van Deursen, The Netherlands
wvandeursen_nospam@nospam_carthago.nl
replace _nospam@nospam_ for @ to get a valid email address
www.carthago.nl
0
Willem
4/5/2010 2:09:42 PM
On Mon, 5 Apr 2010 07:09:42 -0700, Willem van Deursen <xxx@xxx.nl>
wrote:

>Maybe it is easier to pass the canvas to the routine, thus creating a 
>function
>
>procedure ConRec(
>     D: TMatrix ;        // 2D - Data field
>     ilb,iub,            // west - east   ilb lower bound
>                         //               iub upper bound
>     jlb,jub : Integer;  // north - south jlb lower bound
>                         //               jub upper bound
>     x : TVector;        // coord. vector west - east
>     y : TVector;        // coord. vector north - south
>     nc: Integer;        // nc number of cut levels
>     z : TVector;        // values of cut levels
>     MyCanvas: TCanvas);  // line drawing procedure
>begin
>   ...
>   MyCanvas.MoveTo(x1,y1);
>   MyCanvas.LineTo(x2,y2);
>   ...
>end;
>
>but your approach is definitely also something that would work.
>
>Willem

I dug up an old class I wrote many years ago to plot data on a
sipplied image canvas. Almost forgot thta I had done it before....
That class has functions to draw lines and output text based on float
coordinates set up during initialization, so it would weor for most of
my needs.
However, I have another little issue:
Imagine a rectangular region with say 200 regularly spaced value
points. The ConRec function will be able to contour between these
regions quite nicely so giving the appearance of a topographic map
with elevation lines.
Now I want to color the area between the different "elevation" lines
with a separate color for each "height" range.
In a paint program I would use the bucket of color to flood-fill the
area around the mouse click coordinate.

TCanvas.FloodFill seems to do what is needed except if the contour
lines are closed on different areas with the same "height" then I
would have to manually in code locate each closed such area in order
to flood-fill it...
Imagine two or three "hills" in a map each with a height of 200 m and
therefore a number of closed contours around each hill on the same
level.
Here one would have to find find a point on each such hill to be able
to direct a floodfill there.

I want to do it in code, so is there an algorithm that can be used in
this case, you think?

--

Bo Berglund
Developer in Sweden
0
Bo
4/5/2010 4:16:57 PM
On Mon, 5 Apr 2010 05:36:11 -0700, Enquiring Mind <> wrote:

>If I have understood you correctly, you have a list of points Pi having plan coordinates (xi, yi). At each of these points you have the value ti of some variable t, and you wish to draw a contour plot of t in the plane X-Y.
>
>How to go about this depends on whether or not the points Pi lie on a rectangular grid. In the more general case where they do not, the basic method is as follows:
>1. Determine the convex hull containing all the points. This is the smallest convex polygon that contains all the points Pi. 
>2. Construct a triangular tesselation of the input points. This is a subdivision of the interior of the complex hull into a mesh of triangular elements each having 3 points Pi at their vertices. This is a closes point problem (covered by Voronoi tesselation algorithms). Once this has been done you have a triangular grid with points Pi at the vertices and no points anywhere else.
>3. Determine the minimum and maximum values of the variable to be contoured t over all the points, and hence the contour levels, i.e. values of t at each contour
>3. For each triangle in the grid, determine a) which contours intersect the triangle, and b) the (x,y) coordinates of the intersection points of the contour segments with the edges of the triangle. At the end of this you will have contructed an array of contour line segments indexed by triangle and by contour level.
>4. Plot each contour line segment in the colour that you have assigned the particular contour, after transforming the coordinates from your problem coordinates to the pixel coordinates of the plot output device.
>5. For each triangular element, construct a list of contour plot patches falling within the element. To this end, for each patch bounded by two successive contour lines make a list of the contour intersection points surrounding the patch, and put them into an array for subsequent plotting as a polygon. 
>6. For each triangle and each patch, plot the patch fill by setting the canvas brush colour to the appropriate colour for the contour interval, then call the Canvas.Polygon method.
>
>The above will result in contour lines which are piecewise straight within single triangles. If a smoother set of curves is required there are 2 options:
>a) Subdivide the original traingular mesh into a finer mesh, for example by subdividing each triangle into 4 smaller triangles. Then continue as above.
>b) Instead of working at the level of traingular elements, assemble contour segments of the same contour level into strings of segments along the complete contour curve, then use something like splines or Bezier curves to give a smooth curve passing through the contour intersection points along the contour curve.
>
>The method is a little more involved than one might think, but it's fast!
>
>A much simpler method that is however much, much slower is to work at the pixel level. Here we iterate over each pixel of the plot, and convert the pixel coordinates to world coordinates (x,y). From these coordinates we compute the value of the variable t at that pixel. From the value of t we determine the colour, and then set the colour of that pixel to the calculated colour.
>
>I hope that helps.
>
I think I can follow most of what you write, butb there is one thing
that is not possible:
I cannot "compute" values at any point. Each value is a measured data
point taken at the exact location (X,Y) and in between these points we
have to assume some kind of linear behaviour, albeit unknown...

I have looked at ConRec, which was found on the web and I am trying to
adapt that function to my plotting needs now.
I have not yet solved the color fill, though....
Never used the Canvas.Polygon method before so I will have a look at
it to possibly speed up things. But would I not have to call it just
on single closed loop polygons rather than after assembling all points
in the chart from the same level?

--

Bo Berglund
Developer in Sweden
0
Bo
4/5/2010 4:27:16 PM
Hello Bo,

if your matrix is regularly spaced (which it is, assuming your earlier 
descriptions), it is fairly straightforward to establish a 'computed 
height value' for each individual pixel in your canvas. You just have to 
apply linear interpolation between the four points that surround the 
pixel under consideration. Once you know the height value, you can 
convert that to a color value, and thus coloring the whole image pixel 
by pixel. Use a memory bitmap to do these calculations, not an on-screen 
one (speed!) and use scanlines instead of direct access to the pixels. 
This approach avoids the pitfalls of the floodfill. Floodfill is 
definitely faster, but more complex to do it the right way.

Willem

Bo Berglund wrote:
> On Mon, 5 Apr 2010 07:09:42 -0700, Willem van Deursen <xxx@xxx.nl>
> wrote:
> 
>> Maybe it is easier to pass the canvas to the routine, thus creating a 
>> function
>>
>> procedure ConRec(
>>     D: TMatrix ;        // 2D - Data field
>>     ilb,iub,            // west - east   ilb lower bound
>>                         //               iub upper bound
>>     jlb,jub : Integer;  // north - south jlb lower bound
>>                         //               jub upper bound
>>     x : TVector;        // coord. vector west - east
>>     y : TVector;        // coord. vector north - south
>>     nc: Integer;        // nc number of cut levels
>>     z : TVector;        // values of cut levels
>>     MyCanvas: TCanvas);  // line drawing procedure
>> begin
>>   ...
>>   MyCanvas.MoveTo(x1,y1);
>>   MyCanvas.LineTo(x2,y2);
>>   ...
>> end;
>>
>> but your approach is definitely also something that would work.
>>
>> Willem
> 
> I dug up an old class I wrote many years ago to plot data on a
> sipplied image canvas. Almost forgot thta I had done it before....
> That class has functions to draw lines and output text based on float
> coordinates set up during initialization, so it would weor for most of
> my needs.
> However, I have another little issue:
> Imagine a rectangular region with say 200 regularly spaced value
> points. The ConRec function will be able to contour between these
> regions quite nicely so giving the appearance of a topographic map
> with elevation lines.
> Now I want to color the area between the different "elevation" lines
> with a separate color for each "height" range.
> In a paint program I would use the bucket of color to flood-fill the
> area around the mouse click coordinate.
> 
> TCanvas.FloodFill seems to do what is needed except if the contour
> lines are closed on different areas with the same "height" then I
> would have to manually in code locate each closed such area in order
> to flood-fill it...
> Imagine two or three "hills" in a map each with a height of 200 m and
> therefore a number of closed contours around each hill on the same
> level.
> Here one would have to find find a point on each such hill to be able
> to direct a floodfill there.
> 
> I want to do it in code, so is there an algorithm that can be used in
> this case, you think?
> 
> --
> 
> Bo Berglund
> Developer in Sweden


-- 
Willem van Deursen, The Netherlands
wvandeursen_nospam@nospam_carthago.nl
replace _nospam@nospam_ for @ to get a valid email address
www.carthago.nl
0
Willem
4/5/2010 4:52:28 PM
"Bo Berglund" <bo.berglund@nospam.com> schreef in bericht 
news:230280@forums.embarcadero.com...
> On Mon, 5 Apr 2010 07:09:42 -0700, Willem van Deursen <xxx@xxx.nl>
> wrote:
>
>>Maybe it is easier to pass the canvas to the routine, thus creating a
>>function
>>
>>procedure ConRec(
>>     D: TMatrix ;        // 2D - Data field
>>     ilb,iub,            // west - east   ilb lower bound
>>                         //               iub upper bound
>>     jlb,jub : Integer;  // north - south jlb lower bound
>>                         //               jub upper bound
>>     x : TVector;        // coord. vector west - east
>>     y : TVector;        // coord. vector north - south
>>     nc: Integer;        // nc number of cut levels
>>     z : TVector;        // values of cut levels
>>     MyCanvas: TCanvas);  // line drawing procedure
>>begin
>>   ...
>>   MyCanvas.MoveTo(x1,y1);
>>   MyCanvas.LineTo(x2,y2);
>>   ...
>>end;
>>
>>but your approach is definitely also something that would work.
>>
>>Willem
>
> I dug up an old class I wrote many years ago to plot data on a
> sipplied image canvas. Almost forgot thta I had done it before....
> That class has functions to draw lines and output text based on float
> coordinates set up during initialization, so it would weor for most of
> my needs.
> However, I have another little issue:
> Imagine a rectangular region with say 200 regularly spaced value
> points. The ConRec function will be able to contour between these
> regions quite nicely so giving the appearance of a topographic map
> with elevation lines.
> Now I want to color the area between the different "elevation" lines
> with a separate color for each "height" range.
> In a paint program I would use the bucket of color to flood-fill the
> area around the mouse click coordinate.
>
> TCanvas.FloodFill seems to do what is needed except if the contour
> lines are closed on different areas with the same "height" then I
> would have to manually in code locate each closed such area in order
> to flood-fill it...
> Imagine two or three "hills" in a map each with a height of 200 m and
> therefore a number of closed contours around each hill on the same
> level.
> Here one would have to find find a point on each such hill to be able
> to direct a floodfill there.
>
> I want to do it in code, so is there an algorithm that can be used in
> this case, you think?
>
Floodfill may not do the job when your contour lines have open ends near the 
border of the canvas.
But if it does work, use it. For each gridline, find the intersection of a 
contour line and check the pixels next to it. If it is still white, start 
floodfill from there. This should cover all areas.
Tom
0
Tom
4/5/2010 5:15:43 PM
> {quote:title=Bo Berglund wrote:}{quote}
> On Mon, 5 Apr 2010 05:36:11 -0700, Enquiring Mind <> wrote:
> 
> >If I have understood you correctly, you have a list of points Pi having plan coordinates (xi, yi). At each of these points you have the value ti of some variable t, and you wish to draw a contour plot of t in the plane X-Y.
> >
> >How to go about this depends on whether or not the points Pi lie on a rectangular grid. In the more general case where they do not, the basic method is as follows:
> >1. Determine the convex hull containing all the points. This is the smallest convex polygon that contains all the points Pi. 
> >2. Construct a triangular tesselation of the input points. This is a subdivision of the interior of the complex hull into a mesh of triangular elements each having 3 points Pi at their vertices. This is a closes point problem (covered by Voronoi tesselation algorithms). Once this has been done you have a triangular grid with points Pi at the vertices and no points anywhere else.
> >3. Determine the minimum and maximum values of the variable to be contoured t over all the points, and hence the contour levels, i.e. values of t at each contour
> >3. For each triangle in the grid, determine a) which contours intersect the triangle, and b) the (x,y) coordinates of the intersection points of the contour segments with the edges of the triangle. At the end of this you will have contructed an array of contour line segments indexed by triangle and by contour level.
> >4. Plot each contour line segment in the colour that you have assigned the particular contour, after transforming the coordinates from your problem coordinates to the pixel coordinates of the plot output device.
> >5. For each triangular element, construct a list of contour plot patches falling within the element. To this end, for each patch bounded by two successive contour lines make a list of the contour intersection points surrounding the patch, and put them into an array for subsequent plotting as a polygon. 
> >6. For each triangle and each patch, plot the patch fill by setting the canvas brush colour to the appropriate colour for the contour interval, then call the Canvas.Polygon method.
> >
> >The above will result in contour lines which are piecewise straight within single triangles. If a smoother set of curves is required there are 2 options:
> >a) Subdivide the original traingular mesh into a finer mesh, for example by subdividing each triangle into 4 smaller triangles. Then continue as above.
> >b) Instead of working at the level of traingular elements, assemble contour segments of the same contour level into strings of segments along the complete contour curve, then use something like splines or Bezier curves to give a smooth curve passing through the contour intersection points along the contour curve.
> >
> >The method is a little more involved than one might think, but it's fast!
> >
> >A much simpler method that is however much, much slower is to work at the pixel level. Here we iterate over each pixel of the plot, and convert the pixel coordinates to world coordinates (x,y). From these coordinates we compute the value of the variable t at that pixel. From the value of t we determine the colour, and then set the colour of that pixel to the calculated colour.
> >
> >I hope that helps.
> >
> I think I can follow most of what you write, butb there is one thing
> that is not possible:
> I cannot "compute" values at any point. Each value is a measured data
> point taken at the exact location (X,Y) and in between these points we
> have to assume some kind of linear behaviour, albeit unknown...
> 
> I have looked at ConRec, which was found on the web and I am trying to
> adapt that function to my plotting needs now.
> I have not yet solved the color fill, though....
> Never used the Canvas.Polygon method before so I will have a look at
> it to possibly speed up things. But would I not have to call it just
> on single closed loop polygons rather than after assembling all points
> in the chart from the same level?
> 
In simple terms the basis of the method that I described is to take an irregular and possibly complex region defined by a collection of randomly positioned nodes, and break it down into a series of simple triangular regions having one node at each vertex. The value of the dependent variable t is known at each node/vertex. So the value of t at any internal point of the triangular can be calculated by linear interpolation, assuming that the surface defined by t approximates to a planar facet over the triang
ular region. So you're right - in order to use the pixel-based approach, it's still necessary to identify triangular regions, so that the value of t can be calculated by interpolation. Therefore there's not much point in working at the pixel level, except to test the speed of your computer!

Regarding the TCanvas.Polygon method, it works with a polygon having any number of sides. So you can fill the whole of an area between two successive contours with a single Polygon call if you first assemble the sequence of points along the polygon boundary or boundaries. This approach is not recommended, though, because in some cases it can be difficult to identify the polygon boundaries. Some contour lines are closed loops, others terminate at the contour plot boundaries, some contour regions have a sin
gle boundary, others have multiple boundaries - the cases to be treated are many. It is easier to draw the contour map for each triangular region independently. The contour fill patches in individual triangles will automatically combine in the bitmap to form the complete contour fill areas. Only when the painting of the complete bitmap has been completed in memory is the bitmap copied from memory to the final output device (e.g. printer).

When using TCanvas.Polygon to fill the area inside a polygon, you need to set the properties of the Canvas.Brush object (Style= bsSolid, Color= Function(Contour level). If you do not want the polygon edges to be rendered because you are only filling the contour plot, then you must also set the properties of TCanvas.Pen (Style= psClear). If you want the plot to include contour lines as well as fill. it's better to draw them after painting the fill, so that they overwrite the fill, rather than vice versa, a
s would happen if the sequence of operations suggested in my previous post is followed.

In my opinion, there's no need to use TCanvas.FloodFill, if you know the geometry of the boundaries of the area you wish to fill, which is the case here. 

Regards,

EM
0
Enquiring
4/6/2010 7:20:59 AM
Hello,

You should take a look to this site:

http://www.efg2.com/Lab/index.html

For many years this is a very good Delphi graphics
programming site with many examples and algorithms..

Greets.
0
Robert
4/6/2010 8:43:42 AM
>> Is this something that could work?
> 
> Yes. The alternative would be to make ConRec into a class and the plotProc a 
> virtual method of it, which you then override in subclasses that are 
> specific for the output medium.

Or define some interface containing a plot procedure, which can be passed to the 
function. If you are using D2009+ you can also use a method reference.


-- 
Jens Gruschel
http://www.pegtop.net
0
Jens
4/6/2010 6:54:48 PM
On Mon, 5 Apr 2010 09:52:28 -0700, Willem van Deursen <xxx@xxx.nl>
wrote:

>Hello Bo,
>
>if your matrix is regularly spaced (which it is, assuming your earlier 
>descriptions), it is fairly straightforward to establish a 'computed 
>height value' for each individual pixel in your canvas. You just have to 
>apply linear interpolation between the four points that surround the 
>pixel under consideration. Once you know the height value, you can 
>convert that to a color value, and thus coloring the whole image pixel 
>by pixel. Use a memory bitmap to do these calculations, not an on-screen 
>one (speed!) and use scanlines instead of direct access to the pixels. 
>This approach avoids the pitfalls of the floodfill. Floodfill is 
>definitely faster, but more complex to do it the right way.
>
>Willem
>
Might work on smaller displays where the image is not so big
pixel-wise. My application is such a case.
But then I have to convert between real world coordinates and pixels
many times to find the pixel coordinates. Well, maybe working in
double and just calculating the difference between two pixels and then
adding that for each new iterstion will be accurate enough...
In any case this suggestion surely look like something that I can use.
It is kind of a brute force method of course.

What do you mean by using scanlines rather than pixels?

Calculation of the interpolated value of a point in an area bounded by
3-4 points is not so straightforward as I thought at first, though.
Any ideas on how it should be done?
If the values for 3 corners are the same but the 4th corner deviates a
lot it seems likely that there is a "fold" on the surface along a
diagonal, so how do I interpolate then????

And by the way my data are not spaced regularly, rather they are in a
triangular area in XY-coordinates and the spacing between points is
not even....
But for any given point I have an associated XY coordinate as well as
the height value.

--

Bo Berglund
Developer in Sweden
0
Bo
4/9/2010 10:49:38 PM
Bo Berglund wrote:
> On Mon, 5 Apr 2010 09:52:28 -0700, Willem van Deursen <xxx@xxx.nl>
> wrote:
> 
>> Hello Bo,
>>
>> if your matrix is regularly spaced (which it is, assuming your earlier 
>> descriptions), it is fairly straightforward to establish a 'computed 
>> height value' for each individual pixel in your canvas. You just have to 
>> apply linear interpolation between the four points that surround the 
>> pixel under consideration. Once you know the height value, you can 
>> convert that to a color value, and thus coloring the whole image pixel 
>> by pixel. Use a memory bitmap to do these calculations, not an on-screen 
>> one (speed!) and use scanlines instead of direct access to the pixels. 
>> This approach avoids the pitfalls of the floodfill. Floodfill is 
>> definitely faster, but more complex to do it the right way.
>>
>> Willem
>>
> Might work on smaller displays where the image is not so big
> pixel-wise. My application is such a case.
> But then I have to convert between real world coordinates and pixels
> many times to find the pixel coordinates. Well, maybe working in
> double and just calculating the difference between two pixels and then
> adding that for each new iterstion will be accurate enough...
> In any case this suggestion surely look like something that I can use.
> It is kind of a brute force method of course.
> 
> What do you mean by using scanlines rather than pixels?
In a canvas you can access pixels by Canvas.Pixels[x,y], but thats 
relatively slow. You can also access the individual pixels by obtaining 
a scanline (essentially one row of pixels) and access individual pixels 
on the scanline. Google for "Delphi scanline canvas" or something and 
you would surely find enough explanation.
> 
> Calculation of the interpolated value of a point in an area bounded by
> 3-4 points is not so straightforward as I thought at first, though.
> Any ideas on how it should be done?
> If the values for 3 corners are the same but the 4th corner deviates a
> lot it seems likely that there is a "fold" on the surface along a
> diagonal, so how do I interpolate then????
> 
> And by the way my data are not spaced regularly, rather they are in a
> triangular area in XY-coordinates and the spacing between points is
> not even....

Triangulated points are indeed not very suitable for the approach I 
described above. Were you able to draw your contour lines? If so, maybe 
then you want to scan your image/canvas with the contour lines for the 
first non-colored pixel. This one is definitely not on a contour line 
(otherwise it would have been colored). Calculate the color value for 
that pixel. Now do a floodfill: all pixels connected to this one by the 
floodfill routine should be bounded by the same contour lines and should 
  obtain the same color. Now, find the next uncolored pixel: one that 
has not yet been flood-filled. Calculate color value and floodfill again.

Your map (and contour lines) should cover your entire canvas, otherwise 
you have to implement some scheme for inside-outisde of the mapped area. 
Your floodfill approach will fail otherwise.

Willem
> But for any given point I have an associated XY coordinate as well as
> the height value.
> 
> --
> 
> Bo Berglund
> Developer in Sweden


-- 
Willem van Deursen, The Netherlands
wvandeursen_nospam@nospam_carthago.nl
replace _nospam@nospam_ for @ to get a valid email address
www.carthago.nl
0
Willem
4/10/2010 7:09:05 AM
On 04/04/2010 4:10 PM, Bo Berglund wrote:
> I want to visualize 2D data using a color map type of display.
> The data is in a 2-dimensional array with point data and I want to
> create a surface display with X and Y on the axes, the value points in
> the coordinate points and then put value contours on evenly spaced
> value levels. Finally I want to color each range from one value
> contour to the next contour in separate colors.
> It is like the temperature display on the weather service on TV...
>
> Is there a compact way to do this in Delphi without using a whole lot
> of custom components? I like to be able to do it in pure Delphi code.
> I am using Delphi 7 Pro from 2002.
>
> TIA

TeeChart Professional has contour plots (along with a *ton* of
other stuff and 3d for it all). It's expensive but once you use
more than a handful of the plots it more than makes up for it
in saving time spent coding them yourself.

For an example of a contour plot:
 From this download page select the TeeChart compiled demo.
http://www.teechart.com/download/vcl
Once downloaded run the Tee9New.exe demo. When running
select New In Series, Contour, Filled.

Brian
0
Brian
4/10/2010 8:10:03 PM
Reply:

Similar Artilces:

SEPA components for Delphi with Source Code (Delphi 5
Hi all, in the european union change next year the Bankingformat to the SEPA Format. All peoples and companies must change the bankingssoftware and the costumer data form acountnummers in the new IBAN and BIC numbers. See: http://www.arma-it.de/shop/artikelueber.php?wgruppeid=211&wgruppe_offen=211 Functions: - generate SEPA XML'S - Calc IBAN - BIC Database (DE,AT and CH) Questions: vertrieb@arma-it.de PS: Bankinssoftware for Develpoers (Germany only) http://www.arma-it.de/shop/artikelueber.php?wgruppeid=212&wgruppe_offen=212 El 26/10/13 21:38, A...

delphi 2006 code in delphi 2010
hello, is there any option to make delphi 2006 code work in delphi 2010? something like in java IDEs where you can define the code level you like to use? the problem is, that i made a project with 2006 and sent it to my customer. they got 2010 and it compiles fine, but it just doesn't work. it deals with en-/decryption of text, we assumed, that it has something to do with ansi vs. unicode strings... but we cant find the exact position where the error occurs. i am a bit dissapointed, because everywhere i read that the new IDE will always be downwards compatible and so on.. but in ...

converting delphi code to delphi .NET
Hi,I'm looking at converting quite a bit of old delphi code to delphi .NET .  I'm wondering can it be converted to VB.NET for certain ?  Or perhaps there are some unsupported functions etc in delphi and I should keep the code delphi ?  There are about 10,000 lines of code.   Anyone brave enough to take an estimate on how long it would take to convert 10,000 lines ?is going from delphi to delphi.NET smooth ?   Would going to another language cause complications ?Thanks! mike123   Mike123,   Sorry I can not help, however, I have the s...

Transferring Delphi 5 BDE code to Delphi 2006 Nexus Embedded server code
In an application where I have used BDE in Delphi 5 I would like to transfer the whole project to Nexus Embedded server that in general implies mostly exchanging tTable with tnxTable etc. But, in a procedure I regenerate indexes using dbiRegenIndexes(basehandler). This function seems not to be supported anymore, so I just wonder if such a call is needed at all in Nexus Embedded Server, and if needed, what is now the correct syntax ?? I don't know the answer to your question but if you can't find answers here you may like to know that nexus db have there own free newsgr...

Migrate from Delphi 2007 for Win32 to Delphi XE
we use Delphi 2007 for Win32 to support legacy (32Bit) OWL-based pascal applications (yes i know it was a mistake not to switch to VCL 15 years ago). could our applications still be opened and compiled with Delphi XE? The existing projects are all plain Pascal-Code, coming back from the times of Turbo Pascal for Windows and later on Borland Pascal. Are there any improvements we could profit from (i.e IDE, Debugger)? Thanks Andrej > {quote:title=Andrej Dimic wrote:}{quote} > could our applications still be opened and compiled with Delphi XE? I'm not sure, but I guess ...

Code Porting
Hi people, Basically, I am moving an app from Delphi 5 to Delphi 2009 which is all great (yeah right!) and I am having a couple of issues with some thirdparty components that we have the source code for. Being that I wanted to make the task as easy as possible, I was able to download the component in Delphi 2007 format. I have now managed to port that to 2009 so it compiles only with warnings and no errors. So all is good at this moment. Now I am trying to install the component into the IDE by using the install menu option from the project manager. This is where I run into errors. ...

Delphi.NET loading Delphi.Win32 Driver
Hi, What I'm trying to do is marshal an array of cardinal (or integer) back into managed memory from a win32 dll. I know how to pass managed memory into a win32 dll {code} var aa : array of Integer; Buffer : IntPtr; begin SetLength(aa,2); aa[0] := 1; aa[1] := 80; if not Supports(ExtractFilePath(Application.ExeName)+'Win32_Library\SDK_Driver.Win32.io', TypeOf(IMyFunctions), MyFunctions) then Exit; //loads the driver into memory. MyFunctions contains the method names found in the SDK_Driver. Buffer := Marshal.AllocHGlobal(2 * {Marshal.SystemDefaultC...

Converting Delphi for Win32 to Delphi .Net(Prism)
Hi, I am currently migrating a project from Delphi for Win32 to Delphi.net. Part of my code currently goes into a directory and pulls out a random file from this directory and loads the contents of the file for me. This code doesn't seem to work in Delphi.Net. It uses PString and a number of functions in SysUtils that don't seem to be present in Delphi.net's SysUtils file. If anyone can help me please, it would be greatly appreciated! Many thanks, Jonathan Mackey Jonathan Mackey a écrit : > I am currently migrating a project from Delphi for Win32 to &...

delphi Win32 using delphi .NET dll
Hi, I'm trying to use a delphi.NET dll in delphi.WIN32. I am currently using CodeGear Delphi 2007 with version2(base version) of .NET I can get the dll to import into the WIN32 application the only problem is when i include things such as: "using Classes,DateUtils, SysUtils" in the .NET dll the win32 application will instantly hang when any of the dll functions are called. Any help would be great thanks. Also I have tried this example and it also crashes for me? http://cc.embarcadero.com/Item/22688 -Braden I also found this.. "The problem is that, wehn you instal...

Delphi 7.0 code convert to delphi XE ...
Hello All, I create an application using Web Server Application then CGI stand alone... In WebModule I add ModuleController component and IWPageProcedure... Below is my code in Delphi 7.0, this is how to call another units in webmodule... .... .... procedure TWebModule1.proMainGetForm(ASender: TIWPageProducer; AWebApplication: TIWApplication; var VForm: TIWPageForm); begin VForm := TfrmMain.Create(AWebApplication); end; procedure TWebModule1.proLogInGetForm(ASender: TIWPageProducer; AWebApplication: TIWApplication; var VForm: TIWPageForm); begin VForm := TfrmLogIn.Create(AWebA...

Is it worth to move my code from Delphi 2009 to Delphi 2010?
Hi guys, we are working on Delphi 2009 till this day because we do not have the time to upgrade our code to the newest version. There is always something more important (features, bugs...) and our code has 2+ million lines. I thought that instead of moving from D2009 to XE7 I could atleast move code to D2010 because it is more or less backward compatible and it shouldn't take me that much of a work. I wanted to ask you about your opinion. Is it a good version to move to? Regards. Dimitrij wrote: > I thought that instead of moving from D2009 to XE7 I could atleast > move ...

Delphi 6 to Delphi 2010 character codes conversion
I an converting a unit from Delphi 6 to Delphi 2010. Everything works except for a couple of character codes, the decimal values are(224 and 227). As far as I can tell when data is loaded from the socket into a buffer, the codes are ok. When they are written to another buffer these 2 codes use the upper case version of the characters(192 and 224). I don' t see it on any other of the codes. I set the code page in the compiler options to 1252, but that did not work. Any other options I can set in Delp hi 2010 to correct this? TIA Jan B wrote: > I an converting a unit from D...

Code works in Delphi 7 but not in Delphi 2010 [Edit]
hello, i have a procedure that open's a file by passing the file name as the parameter to the executable. something like this {code} C : \ P r o g r a m F i l e s \ Da c k e r \ D r a c k e r . e x e " G : \ D E l p h i 7 \ D e l p h i 7 A p p _ l o g . t " {code} The source code is {code} procedure OpenFileWithExe var hReg: HKEY; Ret: Longint; RegDataType, RegDataSize: DWORD; CmdLine: array [0..560] of Char; Len: Integer; SInfo: TStartupInfo; PInfo: TProcessInformation; begin Ret := windows.RegOpenKeyEx(HKEY_CURRENT_USER, ...

Win32 program: Delphi 7 vs Delphi XE5
How is a D7 Win32 program compared to a Delphi XE5 one in terms of stability and performance? Is Delphi XE5 good enough for a big ERP project with several DLL's and hundreds of units and forms? Thanks in advance Am 26.12.2013 15:02, schrieb lior ilan: > How is a D7 Win32 program compared to a Delphi XE5 one in terms of stability > and performance? > Is Delphi XE5 good enough for a big ERP project with several DLL's and > hundreds of units and forms? > Thanks in advance > Hello, XE5 has increased functionality. Stability seems to be ok for most ...

Delphi and Delphi for .Net
It seems that Delphi for .Net is slower than Delphi Win32 native applicaiton. I would like to know is it true all .Net application is slower than Win32 native applicaiton or it is Delphi for .Net only. Your information is great appreciated, Inung On 2011-06-21 18:20:17 +0100, Inung Huang said: > It seems that Delphi for .Net is slower than Delphi Win32 native applicaiton. > I would like to know is it true all .Net application is slower than > Win32 native applicaiton or it is Delphi for .Net only. If you are only running the code in the application once then, yes, yo...

converting delphi 2007 code to delphi XE2 -- emptyparam problem
Hi, I am trying to convert my applicantion code from delphi 2007 to delphi XE2 and i got stuck in this error "[DCC Error] ADODB_TLB.pas(4888): E2033 Types of actual and formal var parameters must be identical". This happens when we use emptyparam as an argument in a function that wants an olevariant. Example: function TAcadDatabase.CopyObjects(Objects: OleVariant): OleVariant; begin Result := DefaultInterface.CopyObjects(Objects, EmptyParam, EmptyParam); //this is where we get the ERROR end; The coyobjects function as this signature: " function CopyObjects(Object...

Attempting to compile Delphi 5 code in Delphi XE5 is failing
Greetings All, If I'm not in the correct formum please tell me which one I should be in. Just upgraded to Delphi XE5 and am attempting to compile one of my Delphi 5 projects. I used Interbase Express I use either TDataSource -> TCDSProvider -> TDataSetProvider -> TIBQuery or TDataSource -> TClientDataSet -> TDataSetProvider -> TIBQuery Also used TIBDatabase, TIBTransaction, and TIBStoredProc I open the smallest project I have and click compile and almost immediately I receive this error Checking project dependencies... Compiling CITranEngine.dproj...

Win32 Delphi language features introduced since Delphi 7
Hi, Am I right in thinking that the language features introduced since Delphi 7 fall into the categories: a) language features dictated by .Net compatibility. e.g. Namespaces, Inlining, records with methods, operator overloading, pure interfaces, generics, extended RTTI and reflection; b) Unicode strings and supporting procedures? c) 64-bit support What other language features, if any, have been introduced since D7? Had most of the post-D7 languages features, except for generics, Unicode strings, and 64-bit support, been introduced in or before Delphi 2005? How bug-free were ...

.NET color selector for Delphi Win32
I'd like to color selector for Delphi Win32 that the color set is the ..NET named color set, (AliceBlue, AnticWhite, etc.) Anybody knows of one like that? I'm thinking a drop-down combo. Paul, Much of this information is already part of DotNet4Delphi. It includes the .Net Color type, including all color constants (like Color.AliceBlue). All names are also included, however only in lowercase. If you want, I can add the capitalized names as well so that you can make the conversion from name to color and vice versa. Please contact me at my private email if you're ...

IOS Setup in Delphi help
This message is in MIME format. Since your mail reader does not understand this format, some or all of this message may not be legible. --JivePart=_8d526.zeB8CwDOH5aMJzMl Content-Type: text/plain; charset="Utf-8" --JivePart=_8d526.zeB8CwDOH5aMJzMl Content-Type: application/msword; name="Create Profile for Delphi.doc" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="Create Profile for Delphi.doc" 0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAAFAAAAbwIAAAAAAAAA EAAAcQIAAAEAAAD+////AAAAAGoCAABrAgAAbAIAAG...

IOS Setup in Delphi help
Could someone check this document for me, since I cannot get my Delphi to talk properly anymore with my Mac and compile for my Test, adhoc and App Store. Had to reinstall my laptop, and forgot those settings, and I am at a loss. I added some screens in it, so you know what I all did. Could someone take a look at it, and tell me what's wrong / missing etc? Thank you ...

IOS Setup in Delphi help
Could someone check this document for me, since I cannot get my Delphi to talk properly anymore with my Mac and compile for my Test, adhoc and App Store. Had to reinstall my laptop, and forgot those settings, and I am at a loss. I added some screens in it, so you know what I all did. Could someone take a look at it, and tell me what's wrong / missing etc? Thank you ...

How to fix get IP-MAC pairs code below from Delphi 7 to Delphi 2009 ?
How to get All IP - MAC address pairs on local PC by Delphi 2009 ? The Code below can get correct answer on Delphi 7, but get error answer on Delphi 2009. How to fix ? or Are there the better method ? // Delphi 7 (Delphi 2009 failed) // // Get Alll IP-MAC address pairs on local PC // unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; function GetIPMAC: String; const ANY_SIZE = 1; MAX_ADAPTER_ADDRESS_LENGTH = 8; // arb. MAX_INTERFACE_NAME_LEN = 256; { mrapi.h } MAXL...

Best practice when code should still compile with elder versions of Delphi but also Delphi 2009
When tryung to compile Turbopower Orpheus and other Turbopower products which I still use in my applications and therefor need to convert to Delphi 2009, I get lots of warnings even though others has made it possible to get Orpheus compiled. The problem is checking a char in a set which gives a type cast warning and suggests using a new function instead. [DCC Warning] ovcdbnum.pas(401): W1050 WideChar reduced to byte char in set expressions. Consider using 'CharInSet' function in 'SysUtils' unit. So what would be the best practice here eg. correcting this ro...

Web resources about - Creating a colored contour map with Delphi code - embarcadero.delphi.win32

Londonistan: How Britain is Creating a Terror State Within - Wikipedia, the free encyclopedia
The book encompasses a critique of multiculturalism , alleged weak policing, cultural relativism , and what Phillips calls a 'victim culture'. ...

Facebook’s Matt Kelly Describes Process Of Creating Plugin For WordPress
The plugin for WordPress launched by Facebook in June has been downloaded more than 180,000 times, and Engineer, Developer Relations Matt Kelly ...

Creating Online Ads that Drive Brand Awareness
New research shows how the creative elements of online ads impact brand awareness.

Bug - Creating a Video.Watches Action stopped working - Facebook-Entwickler
Since today executing a POST on a me/video.wacthes endpoints no longer works, it was working around 10 hours ago since then the call always returns ...

Facebook Creating Fourth-Party Privacy Rules for Facebook Connect Widget & Plugin Developers
In a recently-written post on the Facebook Developers Wiki, Facebook had added new rules for information sharing between websites that have implemented ...

The Obama campaign won by creating their own Facebook, with unique features for political campaigns.
... seen as too dangerous to nominate someone who is so thoroughly narcissistic, arrogant and dishonest. The Obama campaign won basically by creating ...

Creating A Great Startup Culture
... with any Bay Area startup these days (ping pong, beer on tap, catered lunches and Macbook Airs) – though these things are, of course, Creating ...

WIRED Creating the Nebula for iPad on the iTunes App Store
Get WIRED Creating the Nebula on the App Store. See screenshots and ratings, and read customer reviews.

Nets of freedom creating mesh networks 03.07.2013 - Flickr - Photo Sharing!
Explore Strelka Institute photo's photos on Flickr. Strelka Institute photo has uploaded 14526 photos to Flickr.

Creating the incorrigible Cartman - YouTube
"South Park" creators Trey Parker and Matt Stone were big fans of "All in the Family," a 1970s CBS sitcom. Perhaps this is why their most incorrigible ...

Resources last updated: 2/16/2016 7:31:47 PM