<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
</head>
<body class='hmmessage'>


<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 10pt;
font-family:Tahoma
}
--></style>
Thank you for your email. The code I provided is just a sample. I need to show<br>connections between a number of coordinates; so, in the real scenario the output file<br>should display various lines.<br><br>The stroke() invoked on every 1000000th line produces the pdf file (otherwise, only one<br>stroke at the end will not produce the pdf file). I know this because the size of the output <br>file is around 100MB (otherwise, around 400kb). Clearly, I have problems displaying this<br>file.<br><br>As the way to get around this problem was to output PNG file, with the same strategy of<br>invoking stroke() on every 1000000th line. The code I sent (for PNG files) spends *very*<br>long time on each stroke() invoked.<br><br>Therefore, I wonder whether there is a way to get the png output with this large number of connections.<br>I tried to use similar strategy as with pdf files, but it is very time consuming.<br>Perhaps you could try to invoke the code; <br><br>#include &lt;cairo.h&gt;<br>#include &lt;cairo-pdf.h&gt;<br>#include 
&lt;sstream&gt;<br>#include &lt;cmath&gt;&nbsp; <br>#include &lt;vector&gt;&nbsp;&nbsp;
 <br>#include &lt;limits.h&gt;<br>#include &lt;queue&gt;<br>#include 
&lt;algorithm&gt;<br>#include &lt;numeric&gt;<br>#include 
&lt;iostream&gt;<br>int main() {<br>&nbsp; cairo_surface_t *surface;<br>&nbsp; 
cairo_t *cr;<br><br>&nbsp; std::stringstream myOut; int k=1;<br>&nbsp; 
//myOut&lt;&lt;"forGallery"&lt;&lt;k&lt;&lt; ".pdf";<br>&nbsp; //surface =
 cairo_pdf_surface_create(myOut.str().c_str(), 1432, 1606);<br>&nbsp; surface
 = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 1432, 1606);<br>&nbsp; 
//surface = cairo_image_surface_create(CAIRO_FORMAT_RGB24, 1432, 1606);<br>&nbsp;
 //surface = cairo_image_surface_create(CAIRO_FORMAT_A8, 1432, 1606);<br>&nbsp;
 //surface = cairo_image_surface_create(CAIRO_FORMAT_A1, 1432, 1606);<br>&nbsp;
 cr = cairo_create(surface);<br>&nbsp; <br>&nbsp; //cairo_set_source_rgb(cr, 1, 1,
 1);<br>&nbsp; //cairo_paint(cr);<br>&nbsp; //cairo_set_source_rgb(cr, 0, 0, 0);<br>&nbsp;
 <br>&nbsp; cairo_translate (cr, -229770, 26573.7); // -40, 50: for margin 
-37, 53<br><br>&nbsp; unsigned int t=0; unsigned int ITER_NO=20000000;<br>&nbsp; 
while(t&lt;ITER_NO) {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cairo_move_to (cr, 229770, -26573.7);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 cairo_line_to (cr, 231202, -24967.3);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(t%1000000==0 || 
t==ITER_NO-1) {<br>&nbsp;&nbsp;&nbsp; cairo_stroke(cr);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
std::cout&lt;&lt;"Drawn so 
far:"&lt;&lt;((double)t/(double)ITER_NO)*100&lt;&lt;"%"&lt;&lt;std::endl;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
 ++t;<br>&nbsp; }<br>&nbsp; <br>&nbsp; //cairo_show_page(cr); // for PDF<br>&nbsp; 
cairo_surface_write_to_png(surface, "image.png");&nbsp; // for PNG<br>&nbsp; 
cairo_surface_destroy(surface);<br>&nbsp; cairo_destroy(cr);<br><br>&nbsp; return 
0;<br><br>}<br><br>Thanks<br><br>&gt; Date: Mon, 30 Aug 2010 18:35:44 +0200<br>&gt; Subject: Re: [cairo] Very large number of lines<br>&gt; From: ranma42@gmail.com<br>&gt; To: opustenom@hotmail.com<br>&gt; CC: a.g.nienhuis@gmail.com; cairo@cairographics.org<br>&gt; <br>&gt; On Mon, Aug 30, 2010 at 2:08 PM, necko necko &lt;opustenom@hotmail.com&gt; wrote:<br>&gt; &gt; Thank you for your email. I applied your approach of stoke() every Nth line<br>&gt; &gt; (but I take N=1000000 instead of 1000;<br>&gt; &gt; if you think it would be better to use smaller stride (N=1000), please let<br>&gt; &gt; me know).<br>&gt; &gt; This approach outputs the pdf file of size 1.5 MB, but the machine is still<br>&gt; &gt; trying to display it. I hope it will display<br>&gt; &gt; that single line. Did Evince display the pdf file properly at your machine?<br>&gt; Please notice that you are testing a *very* degenerate case (all your<br>&gt; segments overlap<br>&gt; exactly) that triggers a slow path in cairo rasterizer. Please use<br>&gt; real segment data.<br>&gt; You might probably also want to check if all those strokes are actually needed.<br>&gt; What are you trying to render?<br>&gt; Andrea<br>                                               </body>
</html>