sub Agujerear($) { say "\t\tAgujerear" if DEBUG; my $valor = shift; # Recorrer todos los polígonos y contruir el hash %Contornos #---------------------------------------------------------------------------- # Para cada polígono BORDE de la capa $valor # Creamos contorno a partir de ese polígono # Para cada polígono AGUJERO de la capa $valor # Si el agujero está dentro, asociarlo # Para todos los puntos del agujero # Si un sólo vértice está dentro del polígono, es un agujero suyo # Lo asociamos guardándolo en su contorno #---------------------------------------------------------------------------- foreach my $poligono ( @{ $Poligonos{$valor}[BORDE] } ) { my $contorno = Math::Geometry::Planar->new; $contorno->polygons( [ $poligono->points ] ); foreach my $agujero ( @{ $Poligonos{$valor}[AGUJERO] } ) { my $vertices = @{ $agujero->points }; foreach my $vertice ( @{ $agujero->points } ) { next unless $poligono->isinside($vertice); $vertices--; } $contorno->add_polygons( $agujero->points ) if $vertices < 2; } push @{ $Contornos{$valor} }, $contorno; } say if DEBUG; }