.\" Automatically generated by Pod::Man v1.37, Pod::Parser v1.32 .\" .\" Standard preamble: .\" ======================================================================== .de Sh \" Subsection heading .br .if t .Sp .ne 5 .PP \fB\\$1\fR .PP .. .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. | will give a .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used to .\" do unbreakable dashes and therefore won't be available. \*(C` and \*(C' .\" expand to `' in nroff, nothing in troff, for use with C<>. .tr \(*W-|\(bv\*(Tr .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' 'br\} .\" .\" If the F register is turned on, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . nr % 0 . rr F .\} .\" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .hy 0 .if n .na .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "CAD::Drawing::Manipulate::Graphics 3" .TH CAD::Drawing::Manipulate::Graphics 3 "2008-01-04" "perl v5.8.8" "User Contributed Perl Documentation" .SH "Name" .IX Header "Name" CAD::Drawing::Manipulate::Graphics \- Gimp meets \s-1CAD\s0? .SH "AUTHOR" .IX Header "AUTHOR" Eric L. Wilhelm .PP http://scratchcomputing.com .SH "COPYRIGHT" .IX Header "COPYRIGHT" This module is copyright (C) 2004\-2006 by Eric L. Wilhelm. Portions copyright (C) 2003 by Eric L. Wilhelm and A. Zahner Co. .SH "LICENSE" .IX Header "LICENSE" This module is distributed under the same terms as Perl. See the Perl source package for details. .PP You may use this software under one of the following licenses: .PP .Vb 4 \& (1) GNU General Public License \& (found at http://www.gnu.org/copyleft/gpl.html) \& (2) Artistic License \& (found at http://www.perl.com/pub/language/misc/Artistic.html) .Ve .SH "NO WARRANTY" .IX Header "NO WARRANTY" This software is distributed with \s-1ABSOLUTELY\s0 \s-1NO\s0 \s-1WARRANTY\s0. The author, his former employer, and any other contributors will in no way be held liable for any loss or damages resulting from its use. .SH "Modifications" .IX Header "Modifications" The source code of this module is made freely available and distributable under the \s-1GPL\s0 or Artistic License. Modifications to and use of this software must adhere to one of these licenses. Changes to the code should be noted as such and this notification (as well as the above copyright information) must remain intact on all copies of the code. .PP Additionally, while the author is actively developing this code, notification of any intended changes or extensions would be most helpful in avoiding repeated work for all parties involved. Please contact the author with any such development plans. .SH "Methods" .IX Header "Methods" All of these are CAD::Drawing methods (I force my own inheritance:) .Sh "image_init" .IX Subsection "image_init" Initialize the image at \f(CW$addr\fR based on the value at the fullpath key. This establishes the contained Image::Magick object and loads the image into memory in the image_handle key. .PP .Vb 1 \& $drw->image_init($addr); .Ve .Sh "image_crop" .IX Subsection "image_crop" Crops an image and its definition (actually, changes its insert point) according to the points given by \f(CW@crop_points\fR (which maybe had better be within the object (but I don't really sweat that.)) .PP @crop_points should be in world coordinates as follows: .PP .Vb 6 \& @crop_points = ( \& [$lower_left_x , $lower_left_y ], \& [$upper_right_x, $upper_right_y], \& ); \& # note that you can get these as \& # ($drw->getExtentsRec($something))[0,2] .Ve .PP .Vb 1 \& $drw->image_crop($addr, \e@crop_points); .Ve .Sh "image_scale" .IX Subsection "image_scale" Scales both the image and the definition by \f(CW$scale\fR, starting at \&\f(CW@base_point\fR. .PP .Vb 1 \& $drw->image_scale($addr, $scale, \e@base_point); .Ve .Sh "image_rotate" .IX Subsection "image_rotate" This leaves the definition orthoganal, expands the underlying image object, and resets the insert point and size properties accordingly. .PP .Vb 1 \& $drw->image_rotate($addr, $angle, \e@point); .Ve .PP The current implementation does not handle the change to the image clipping boundary. .Sh "image_swap_context" .IX Subsection "image_swap_context" This involves a scaling of the image (the contexts should be aligned over each other at this point or everything will go to hell.) Do your own move / rotate / crop before calling this, because all this does is to scale the underlying image object such that the vec property of the image definition at \f(CW$dest_addr\fR can be used correctly. .PP Note that this does not \*(L"swap\*(R" the image to \f(CW$dest_addr\fR, rather it uses the image definition of \f(CW$dest_addr\fR to change the image object and definition at \f(CW$source_addr\fR. .PP Also note that the image must fit completely inside (I think) of the destination in order for the composite to work correctly. .PP .Vb 1 \& $drw->image_swap_context($source_addr, $dest_addr); .Ve