.\" 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 3" .TH CAD::Drawing::Manipulate 3 "2008-01-04" "perl v5.8.8" "User Contributed Perl Documentation" .SH "NAME" CAD::Drawing::Manipulate \- Manipulate CAD::Drawing objects .SH "Description" .IX Header "Description" Move, Copy, Scale, Mirror, and Rotate methods for single entities and groups of entities. .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 "Group Methods" .IX Header "Group Methods" These methods are called with required values, followed by a hash reference of option values. Note the difference between this and the individual entity manipulation syntax shown below. The absence of an \&\e%options hash reference implies everything in the drawing. .PP For details about each of the group manipulation methods, see the corresponding individual entity manipulation method. .Sh "Options" .IX Subsection "Options" The \f(CW$opts\fR value shown for each of the group manipulation methods is fed directly to \fICAD::Drawing::select_addr()\fR. See the documentation for this function for additional details. .PP One of the most common methods of selection (after the implicit all) may be the explicit list of addresses. This is done by simply passing an array reference rather than a hash reference. .Sh "GroupMove" .IX Subsection "GroupMove" Move selected entities by \f(CW@dist\fR. .PP .Vb 1 \& $drw->GroupMove(\e@dist, $opts); .Ve .Sh "GroupCopy" .IX Subsection "GroupCopy" Returns a list of addresses for newly created entities. .PP .Vb 1 \& @new = $drw->GroupCopy(\e@dist, $opts); .Ve .Sh "GroupClone" .IX Subsection "GroupClone" Returns a list of addresses for newly created entities. .PP .Vb 1 \& @new = $drw->GroupClone($dest, $opts); .Ve .Sh "place" .IX Subsection "place" Clones items from \f(CW$source\fR into \f(CW$drw\fR and moves them to \f(CW@pt\fR. Selects items according to \f(CW%opts\fR and optionally rotates them by \f(CW$opts\fR{ang} (given in radians.) .PP .Vb 1 \& $drw->place($source, \e@pt, \e%opts); .Ve .Sh "GroupMirror" .IX Subsection "GroupMirror" Mirrors the entities specified by \f(CW%options\fR (see \fIselect_addr()\fR) across \&\f(CW@axis\fR. .PP .Vb 1 \& @new = $drw->GroupMirror(\e@axis, \e%options); .Ve .Sh "GroupScale" .IX Subsection "GroupScale" Sorry, \e@pt is required here. .PP .Vb 1 \& $drw->GroupScale($factor, \e@pt, \e%opts); .Ve .Sh "GroupRotate" .IX Subsection "GroupRotate" Rotates specified entities by \f(CW$angle\fR. A center point may be specified via \f(CW$opts\fR{pt} = \e@pt. .PP .Vb 1 \& $drw->GroupRotate($angle, \e%opts); .Ve .SH "Individual Methods" .IX Header "Individual Methods" .Sh "Move" .IX Subsection "Move" Moves entity at \f(CW$addr\fR by \f(CW@dist\fR (@dist may be three\-dimensional.) .PP .Vb 1 \& $drw->Move($addr, \e@dist); .Ve .Sh "Copy" .IX Subsection "Copy" .Vb 1 \& $drw->Copy($addr, \e@dist); .Ve .Sh "Clone" .IX Subsection "Clone" Clones the entity at \f(CW$addr\fR into drawing \f(CW$dest\fR. .PP .Vb 1 \& $drw->Clone($addr, $dest, \e%opts); .Ve .PP %opts may contain: .PP .Vb 1 \& to_layer => $layer_name, # layer to clone into .Ve .Sh "Mirror" .IX Subsection "Mirror" Mirrors entity specified by \f(CW$addr\fR across \f(CW@axis\fR. .PP Returns the address of the manipulated entity. If \f(CW$opts\fR{copy} is true, will clone the entity, otherwise modify in\-place. .PP .Vb 1 \& $drw->Mirror($addr, \e@axis, \e%opts); .Ve .Sh "Scale" .IX Subsection "Scale" .Vb 1 \& $drw->Scale($addr, $factor, \e@pt); .Ve .Sh "Rotate" .IX Subsection "Rotate" Rotates entity specified by \f(CW$addr\fR by \f(CW$angle\fR (+ccw radians) about \f(CW@pt\fR. Angle may be in degrees if \f(CW$angle\fR =~ s/d$// returns a true value (but I hope the \*(L"d\*(R" is the only thing on the end, because I'm not looking for anything beyond that.) \f(CW$angle\fR = \*(L"45\*(R" . \*(L"d\*(R" will get converted, but \&\f(CW$angle\fR = \*(L"45\*(R" . \*(L"bad\*(R" will be called 0. Remember, this is Perl:) .PP .Vb 1 \& $drw->Rotate($addr, $angle, \e@pt); .Ve .SH "Internal Functions" .IX Header "Internal Functions" .Sh "pointrotate" .IX Subsection "pointrotate" Internal use only. .PP .Vb 1 \& ($x, $y) = pointrotate($x, $y, $ang, $xc, $yc); .Ve .Sh "pointmirror" .IX Subsection "pointmirror" .Vb 1 \& @point = pointmirror($axis, $pt); .Ve .Sh "angle_of" .IX Subsection "angle_of" .Vb 1 \& angle_of(\e@segment); .Ve .SH "Polygon Methods" .IX Header "Polygon Methods" These don't do anything yet and need to be moved to another module anyway. .Sh "CutPline" .IX Subsection "CutPline" .Vb 1 \& $drw->CutPline(); .Ve .Sh "IntPline" .IX Subsection "IntPline" .Vb 1 \& $drw->IntPline(); .Ve .Sh "intersect_pgon" .IX Subsection "intersect_pgon" .Vb 1 \& intersect_pgon(); .Ve