Re: rounded rectangles - deformed!
"Steve Kleiman" <steve-/[email protected]> Sat, 05 Jul 2008 16:56:11 -0000
| Newsgroups | gmane.comp.lang.perl.modules.pdfapi2 |
|---|---|
| Message-ID | <[email protected]> |
check out: http://tech.groups.yahoo.com/group/perl-text-pdf-modules/message/2922 regrettably a patch was submitted for this in March 06 but has never been applied to PDF::API2 - i use Niko Tyni's patch and it works 100% --- In [email protected], Alan Fry <ajf@...> wrote: > > I agree with you -- 'rrrect' fails. > > If you alter to top right arc to: > > > # Top right > > $gfx->arc( $x + $w - $r, $y + $h - $r, $r, $r, 0, 360, 0 ); > > the nature of the fault shows up even more clearly. > > Something is wrong with 'arc' or 'arctocurve' -- but I cannot for the > moment see what it is. > > You can get around the problem by drawing 'hline' or 'vline' segments > between the rounded corners, but that's at best a very nasty hack. > > Alan Fry > > On 5 Jul 2008, at 02:07, Rick Measham wrote: > > > Why does my rrect fail? Run the script below (or > > http://rick.measham.id.au/paste/rrect.txt) and notice that the > > resulting > > shape is rather deformed. It was even worse when I did it with bogens > > rather than arcs. > > > > Cheers! > > Rick Measham > > > > #!/usr/bin/perl > > > > # rrect for PDF::API2 > > > > use strict; > > use warnings; > > use constant mm => 25.4 / 72; > > > > use PDF::API2; > > > > my $pdf = PDF::API2->new( -file => "$0.pdf" ); > > my $page = $pdf->page; > > $page->mediabox(297/mm, 210/mm); > > > > my $gfx = $page->gfx; > > > > $gfx->strokecolor('black'); > > $gfx->rrect( 10/mm, 10/mm, 277/mm, 190/mm, 50/mm ); > > $gfx->stroke; > > > > $pdf->save; > > > > =item $gfx->rrect $x, $y, $w, $h, $r > > > > will draw a rounded rectangle with a corner radius of $r > > > > =cut > > > > sub PDF::API2::Content::rrect { > > my ($gfx, $x, $y, $w, $h, $r) = @_; > > > > # Top left > > $gfx->arc( $x + $r, $y + $h - $r, $r, $r, 180, 90, 1 ); > > > > # Top right > > $gfx->arc( $x + $w - $r, $y + $h - $r, $r, $r, 90, 0, 0 ); > > > > # Bottom right > > $gfx->arc( $x + $w - $r, $y + $r, $r, $r, 360, 270, 0 ); > > > > # Bottom left > > $gfx->arc( $x + $r, $y + $r, $r, $r, 270, 180, 0 ); > > > > $gfx->close; > > > > return $gfx; > > } > > -- > > Message protected for iSite by MailGuard: e-mail anti-virus, anti- > > spam and content filtering. > > http://www.mailguard.com.au > > > > > > >