The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

Author: Ken Schumack (c) 2001-2004. All rights reserved. This module is free software. It may be used, redistributed and/or modified under the terms of the Perl Artistic License. (see http://www.perl.com/pub/a/language/misc/Artistic.html) I do ask that you please let me know if you find bugs or have idea for improvements. You can reach me at Schumack@cpan.org Have fun, Ken

NAME

CircuitLayout - circuit layout module

DESCRIPTION

This is CircuitLayout, a module for working with circuit layout items like boundaries, texts, rectangles, and srefs.

Send feedback/suggestions to Schumack@cpan.org

CircuitLayout::pitches

returns string of pitches given a ref to an array of CircuitLayout::Boundary items

CircuitLayout::Text::new

Usage:

## Coord object for CircuitLayout::Text origin coordinate... my $text = new CircuitLayout::Text(-origin=>$coord, -string=>$string); -or-

my @point = (0,0); ## anonymous array or array ref my $edge = new CircuitLayout::Edge(-origin=>\@point, -string=>"VDD");

CircuitLayout::Text::display

draws on a worldCanvas

CircuitLayout::Text::directionExtent

CircuitLayout::Text::printPrecision

returns precision (integer)

CircuitLayout::Text::string

CircuitLayout::Text::layer

CircuitLayout::Text::origin

returns origin as Coord object use -value to change and pass in Coord or x,y array

CircuitLayout::Coord::new

CircuitLayout::Coord::printPrecision

returns precision (integer)

CircuitLayout::Coord::coordSubtract

CircuitLayout::Coord::onGrid

CircuitLayout::Coord::resolution

CircuitLayout::Coord::x

CircuitLayout::Coord::y

CircuitLayout::Coord::scale

CircuitLayout::Coord::snapNum

CircuitLayout::Coord::printableCoords

returns string in "x1,y1" where x and y print precision is controlled by objects printPrecision

Note: returns just one coordinate but method name is plural none the less to be consistant with other methods.

CircuitLayout::Coord::equals

CircuitLayout::Edge::new

Usage:

## CircuitLayout::Coord object for Lower Left Coordinate... my $edge = new CircuitLayout::Edge(-startCoord=>$coord1, -endCoord=>$coord2); -or-

my @startPoint = (0,0); ## anonymous array or array ref my $edge = new CircuitLayout::Edge(-startCoord=>\@startPoint, -endCoord=>[2.3,4.5]);

CircuitLayout::Edge::coords

CircuitLayout::Edge::printPrecision

returns precision (integer)

CircuitLayout::Edge::isLeft

Usage:

my $isLeft = $edge -> isLeft(-coord=>$coord);

Synopsis:

CircuitLayout::Edge::direction

Usage:

my $edgeDirection = $edge -> direction;

Synopsis:

Returns one of 8 compass directions: 'N','NE','E','SE','S','SW','W','NW'

my $edge = new CircuitLayout::Edge(-startCoord=>[0,0],-endCoord=>[5,5]);

print $edge -> direction; ## prints 'NE';

CircuitLayout::Edge::is45multiple

Usage:

my $test = $edge -> is45multiple;

Synopsis:

Returns true or false ( 1 or 0 ) depending on whether edge is a 45 degree multiple

my $edge = new CircuitLayout::Edge(-startCoord=>[0,0],-endCoord=>[5,5]);

print $edge -> is45multiple; ## prints 1;

CircuitLayout::Edge::xIntersection

Returns x value where CircuitLayout::Edge actually crosses x axis or would cross if it was extended.

CircuitLayout::Edge::straddleTouchXray

Returns 0 or 1 depending on whether CircuitLayout::Edge straddles or touches horizontal X ray. Default X ray is X axis (y value==0)

$edge -> straddleTouchXray; -or- $edge -> straddleTouchXray(-yValue=>4.3);

CircuitLayout::Edge::printableCoords

Returns CircuitLayout::Edge as 'x1,y1;x2,y2' string.

print $edge -> printableCoords;

CircuitLayout::Edge::startCoord

Returns 1st edge coordinate as a Coord.

CircuitLayout::Edge::endCoord

Returns last edge coordinate as a Coord.

CircuitLayout::Coord::directionExtent CircuitLayout::Edge::directionExtent CircuitLayout::Boundary::directionExtent

Usage:

my $edgeExtent = $edge -> directionExtent;

Synopsis:

Returns position (real number) of edge in one of 4 magor compass directions: 'N','E','S','W'

my $edge = new CircuitLayout::Edge(-startCoord=>[0,0],-endCoord=>[0,5]);

print $edge -> directionExtent(-direction=>'N'); ## prints 5;

CircuitLayout::Edge::length CircuitLayout::Boundary::length

Usage:

my $edgeLength = $edge -> length;

Synopsis:

Returns length of edge

my $edge = new CircuitLayout::Edge(-startCoord=>[0,1],-endCoord=>[0,5]);

print $edge -> length(); ## prints 4;

CircuitLayout::Edge::lengthAtExtent CircuitLayout::Boundary::lengthAtExtent

Usage:

my $edgeExtentLength = $edge -> lengthAtExtent;

Synopsis:

Returns position (real number) of edge length at maximum point in one of 4 magor compass directions: 'N','E','S','W'

my $edge = new CircuitLayout::Edge(-startCoord=>[0,1],-endCoord=>[0,5]);

print $edge -> lengthAtExtent(-direction=>'N'); ## prints 4;

CircuitLayout::Edge::inside

Usage:

print 'inside == true' if ($edge -> inside(-coord => $coord);

Synopsis:

Returns 0 | 1 depending on whether coord is inside of edge

CircuitLayout::Path::new

Usage:

## CircuitLayout::Coord object for Lower Left Coordinate... my $path = new CircuitLayout::Path(

CircuitLayout::Path::display

draws on a worldCanvas

CircuitLayout::Rectangle::new

Usage:

## CircuitLayout::Coord object for Lower Left Coordinate... my $rect = new CircuitLayout::Rectangle(-llCoord=>$coord1, -urCoord=>$coord2); -or-

my @llPoint = (0,0); ## anonymous array or array ref my $rect = new CircuitLayout::Rectangle(-llCoord=>\@llPoint, -urCoord=>[2.3,4.5]);

CircuitLayout::Rectangle::center

CircuitLayout::Rectangle::edges

CircuitLayout::Rectangle::printPrecision

returns precision (integer)

CircuitLayout::Rectangle::printableCoords

returns string in "x1,y1;x2,y2" where x and y print precision is controlled by objects printPrecision

Note: x1,y1 is lower left

CircuitLayout::Rectangle::add

CircuitLayout::Rectangle::extent

CircuitLayout::Rectangle::inside

usage: my $rect = new CircuitLayout::Rectangle(...);

print "is (4,6) inside ? ... ",$rect -> inside(-coord=>[4,6]);

CircuitLayout::Rectangle::interiorTo

usage: my $rect = new CircuitLayout::Rectangle(...);

print "is (4,6) interiorTo ? ... ",$rect -> interiorTo(-coord=>[4,6]);

CircuitLayout::new - create new CircuitLayout::Boundary

  usage:
  my $boundary  = new CircuitLayout::Boundary(-xy=>\@xyArray)  -or-
  my $boundary  = new CircuitLayout::Boundary(-coords=>\$coords) 

CircuitLayout::Boundary::display

draws on a worldCanvas

CircuitLayout::Boundary::printPrecision

returns precision (integer)

CircuitLayout::Boundary::isRectangle

CircuitLayout::Boundary::extent

CircuitLayout::Boundary::layer

CircuitLayout::Boundary::dataType

CircuitLayout::Boundary::property

CircuitLayout::Boundary::node

CircuitLayout::Boundary::net

CircuitLayout::Boundary::group

CircuitLayout::Boundary::nextCoord

CircuitLayout::Boundary::printableCoords

returns string in "x1,y1;x2,y2;x...." where x and y print precision is controlled by objects printPrecision

CircuitLayout::Boundary::nextEdge

CircuitLayout::Boundary::append

CircuitLayout::Boundary::numCoords

CircuitLayout::Boundary::xys

CircuitLayout::Boundary::coords

CircuitLayout::Boundary::edges

CircuitLayout::Boundary::boundaryOutline

returns self (already a Boundary)

CircuitLayout::Boundary::inside

usage: my @xys=(0,0, 10,0, 10,10, 0,10);

my $boundary = new CircuitLayout::Boundary(-xy=>\@xys);

print "is (4,6) inside ? ... ",$boundary -> inside(-coord=>[4,6]);

CircuitLayout::Boundary::inside

usage: my @xys=(0,0, 10,0, 10,10, 0,10);

my $boundary = new CircuitLayout::Boundary(-xy=>\@xys);

print "is (4,6) inside ? ... ",$boundary -> inside(-coord=>[4,6]);

CircuitLayout::Boundary::interiorTo

usage: my @xys=(0,0, 10,0, 10,10, 0,10);

my $boundary = new CircuitLayout::Boundary(-xy=>\@xys);

print "is (4,6) interiorTo ? ... ",$boundary -> interiorTo(-coord=>[4,6]);

CircuitLayout::Rectangle::ll

CircuitLayout::Rectangle::ur

CircuitLayout::Rectangle::layer

CircuitLayout::Rectangle::boundaryOutline

returns Boundary representation of 2 point rectangle

CircuitLayout::Rectangle::equals

CircuitLayout::new - create new CircuitLayout::Sref

  usage:
  my $sref  = new CircuitLayout::Sref(-xy=>\@xyArray)  -or-
  my $sref  = new CircuitLayout::Sref(-coords=>\$coords) 

CircuitLayout::Sref::name

returns name as "string" use -value to change and pass in string

CircuitLayout::Sref::origin

returns origin as Coord object use -value to change and pass in Coord or x,y array

CircuitLayout::printPrecision

returns precision (integer)

CircuitLayout::Sref::printableCoords

returns string in "x1,y1" where x and y print precision is controlled by objects printPrecision

Note: returns origin (which is just one coordinate) but method name is plural none the less to be consistant with other methods.

CircuitLayout::version

CircuitLayout::revision

Examples

example using GDS2 to read in binary GDS2 stream file.

  #!/usr/local/bin/perl -w
  use strict;
  $|++;
  use lib '.';
  use CircuitLayout;
  use GDS2;
  $\="\n";
  
  my $streamFileName = $ARGV[0];
  my $gds2File = new GDS2(-fileName => $streamFileName);
  my $inBoundary=0;
  my $layerNum;
  my @layerIndexCnt;
  my %boundaries;
  while (my $record = $gds2File -> readGds2Record)
  {
    $inBoundary=1 if($gds2File -> isBoundary);
    $inBoundary=0 if($gds2File -> isEndel);
    if ($inBoundary)
    {
      $layerNum = $gds2File -> returnLayer if($gds2File -> isLayer);
      if($gds2File -> isXy)
      {
        if (! defined $layerIndexCnt[$layerNum]) { $layerIndexCnt[$layerNum] = 0; }
        my $layerIndex = $layerIndexCnt[$layerNum];
        ## Use "my @xys" here to get unique memory location
        my @xys = $gds2File ->  returnXyAsArray(-withClosure=>0,-asInteger=>0);
        my $boundary = new CircuitLayout::Boundary(-xy=>\@xys,-layer=>$layerNum);
        $boundaries{$layerNum}{$layerIndex} = \$boundary;
        $layerIndexCnt[$layerNum]++;
      }
    }
  }
  my $boundary;
  foreach my $layer (sort {$a <=> $b} keys %boundaries)
  {
    foreach my $x (keys %{$boundaries{$layer}})
    {
      $boundary = ${$boundaries{$layer}{$x}};
      print $boundary -> layer,':',$boundary -> printableCoords;
    }
  }
  ################################################################################

1 POD Error

The following errors were encountered while parsing the POD:

Around line 21:

=pod directives shouldn't be over one line long! Ignoring all 2 lines of content