---
name: "Math::Polygon::Surface"
section: "3pm"
platform: "linux"
package: "libmath-polygon-perl"
version: "1.11-1"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::Polygon::Surface"
---

# Math::Polygon::Surface(3pm)

Polygon with exclusions

## NAME

Math::Polygon::Surface - Polygon with exclusions

## SYNOPSIS

```
 my $outer   = Math::Polygon->new( [1,2], [2,4], [5,7], [1,2] );
 my $surface = Math::Polygon::Surface->new($outer);
```

## DESCRIPTION

A surface is one polygon which represents the outer bounds of an array, plus optionally a list of polygons which represent exclusions from that outer polygon.

## METHODS

### Constructors

- $obj-\>**new**( \[%options\], \[@polygons\], %options )

  - Math::Polygon::Surface-\>**new**( \[%options\], \[@polygons\], %options )

  You may merge `%options` with `@polygons`.  You may also use the "outer" and "inner" options.

  Each polygon is a references to an ARRAY of points, each an ARRAY of X and Y, but better pass Math::Polygon objects.

  ```
   -Option--Default
    inner   []
    outer   undef
  ```

  - inner =\> \\@polygons

    The inner polygons, zero or more Math::Polygon objects.

  - outer =\> $polygon

    The outer polygon, a Math::Polygon.

### Attributes

- $obj-\>**inner**()

  Returns a list (often empty) of inner polygons.

- $obj-\>**outer**()

  Returns the outer polygon.

### Simple calculations

- **area**()

  Returns the area enclosed by the outer polygon, minus the areas of the inner polygons. See method **Math::Polygon::area()**.

- $obj-\>**bbox**()

  Returns a list with four elements: (xmin, ymin, xmax, ymax), which describe the bounding box of the surface, which is the bbox of the outer polygon. See method **Math::Polygon::bbox()**.

- $obj-\>**perimeter**()

  The length of the border: sums outer and inner perimeters. See method **Math::Polygon::perimeter()**.

### Clipping

- $obj-\>**fillClip1**($box)

  Clipping a polygon into rectangles can be done in various ways. With this algorithm, the parts of the polygon which are outside the `$box` are mapped on the borders.

  All polygons are treated separately.

- $obj-\>**lineClip**($box)

  Returned is a list of ARRAYS-OF-POINTS containing line pieces from the input surface.  Lines from outer and inner polygons are undistinguishable. See method **Math::Polygon::lineClip()**.

- $obj-\>**string**()

  Translate the surface structure into some string.  Use Geo::WKT if you need a standardized format.

  Returned is a single string possibly containing multiple lines.  The first line is the outer, the other lines represent the inner polygons.

## DIAGNOSTICS

- Error: surface requires outer polygon

  ## SEE ALSO

This module is part of Math-Polygon distribution version 1.11, built on May 02, 2025. Website: *http://perl.overmeer.net/CPAN/*

## LICENSE

Copyrights 2004-2025 by \[Mark Overmeer \<markov@cpan.org\>\]. For other contributors see ChangeLog.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. See *http://dev.perl.org/licenses/*
