# Copyright (c) 1997-2006
# Ewgenij Gawrilow, Michael Joswig (Technische Universitaet Berlin, Germany)
# http://www.math.tu-berlin.de/polymake, mailto:polymake@math.tu-berlin.de
#
# This program is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 2, or (at your option) any
# later version: http://www.gnu.org/licenses/gpl.txt.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#-----------------------------------------------------------------------------
# $Project: polymake $$Id: VisualUtilities.pm 7540 2006-12-21 21:04:18Z gawrilow $
###############################################################################
#
# Visual::Utilities - a collection of visualization utilities
#
package Visual::Utilities;
sub colors {
my ($P, $items, $color_name, $default_color, $key)=@_;
my @params;
if (defined (my $get_color=$P->$color_name)) {
if (is_code($get_color)) {
my @colors;
if (is_numeric($items)) {
@colors=map { (parse_color($get_color->($_)))[1] || $default_color } 0..($items-1)
} else {
while ($items) {
push @colors, (parse_color($get_color->($items)))[1] || $default_color;
++$items;
}
}
push @params, "${key}s_colors_list" => \@colors;
} elsif (my @color=parse_color($get_color)) {
push @params, "${key}s_color" => $color[1];
}
}
$color_name =~ /Color$/;
my $style_name="$`Style";
my $get_style=$P->$style_name;
if (!is_code($get_style) && $get_style =~ $Visual::hidden_re) {
push @params, "${key}Set_${key}_flag" => "hide";
if ($style_name =~ /^Face/) {
push @params, faceSet_backface_flag => "show";
}
} elsif (!@params && defined($default_color)) {
push @params, "${key}s_color" => $default_color;
}
return @params;
}
sub thicknesses {
my ($P, $items, $style_name, $default_thickness, $key)=@_;
if (defined (my $get_style=$P->$style_name)) {
if (is_code($get_style)) {
my ($seen, @th);
if (is_numeric($items)) {
@th=map { $get_style->($_) =~ $Visual::thickness_re ? do { $seen=1; $1*$default_thickness } : $default_thickness } 0..($items-1);
} else {
while ($items) {
push @th, $get_style->($items) =~ $Visual::thickness_re ? do { $seen=1; $1*$default_thickness } : $default_thickness;
++$items;
}
}
if ($seen) {
return ( "${key}Set_thicknesses_flag" => "show",
"${key}Set_thicknesses_list" => \@th );
}
} elsif ($get_style =~ $Visual::thickness_re) {
return ( "${key}s_thickness" => $1*$default_thickness );
}
}
return ();
}
sub labels {
my ($P, $label_name, $key)=@_;
if (defined (my $labels=$P->$label_name)) {
return ("${key}s_labels_list" => $labels);
}
return ();
}
sub visible {
my ($P)=@_;
return $P->Hidden
? (visibleFlag => "hide")
: ();
}
sub vertex_colors {
if (@_==1) {
push @_, scalar @{$_[0]->Vertices}, "VertexColor";
}
push @_, $Visual::Color::vertices, "point";
&colors;
}
sub vertex_thicknesses {
if (@_==1) {
push @_, scalar @{$_[0]->Vertices}, "VertexStyle";
}
push @_, $JavaView::default::points_thickness, "point";
&thicknesses;
}
sub vertex_labels {
if (@_==1) {
push @_, "VertexLabels";
}
push @_, "point";
&labels;
}
sub edges {
my ($P, $color_name)=@_;
$color_name ||= "EdgeColor";
my @params;
if (defined (my $color=(parse_color($P->$color_name))[1])) {
push @params, edges_color => $color;
}
$color_name =~ /Color$/;
my $style_name="$`Style";
if (defined (my $style=$P->$style_name)) {
if ($style =~ $Visual::hidden_re) {
push @params, faceSet_edge_flag => 'hide';
} elsif ($style =~ $Visual::thickness_re) {
push @params, edges_thickness => $1*$JavaView::default::lines_thickness;
}
}
return @params;
}
sub facet_colors {
if (@_==1) {
push @_, scalar @{$_[0]->Facets}, "FacetColor";
}
push @_, $Visual::Color::facets, "face";
&colors;
}
sub facet_style {
my ($P) = @_;
my @params;
if (defined (my $style=$P->FacetStyle)) {
if ($style =~ $Visual::hidden_re) {
push @params, faceSet_face_flag => "hide",
faceSet_backface_flag => "show";
} elsif ($style =~ $Visual::transparency_re) {
push @params, material_flag => "show",
material_transparency => $1;
}
}
return @params;
}
1
# Local Variables:
# c-basic-offset:3
# End:
syntax highlighted by Code2HTML, v. 0.9.1