From e96d7b1d6a12c7b5797dc4185e5fcbd315e25532 Mon Sep 17 00:00:00 2001 From: Alessandro Ranellucci Date: Sun, 25 Aug 2013 17:26:55 +0200 Subject: [PATCH] Show facets, materials and manifoldness in info panel --- MANIFEST | 1 + lib/Slic3r/GUI/Plater.pm | 48 +++++++++++++++++++++++++++++++++------ var/error.png | Bin 0 -> 666 bytes 3 files changed, 42 insertions(+), 7 deletions(-) create mode 100755 var/error.png diff --git a/MANIFEST b/MANIFEST index 57f9e42e..c3162de9 100644 --- a/MANIFEST +++ b/MANIFEST @@ -118,6 +118,7 @@ var/cog_go.png var/cross.png var/delete.png var/disk.png +var/error.png var/funnel.png var/hourglass.png var/layers.png diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index 8ab6d72f..a7fdc76e 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -249,12 +249,18 @@ sub new { { my $box = Wx::StaticBox->new($self, -1, "Info"); $object_info_sizer = Wx::StaticBoxSizer->new($box, wxVERTICAL); - my $grid_sizer = Wx::FlexGridSizer->new(2, 2, 5, 5); - $object_info_sizer->Add($grid_sizer); + my $grid_sizer = Wx::FlexGridSizer->new(3, 4, 5, 5); + $grid_sizer->SetFlexibleDirection(wxHORIZONTAL); + $grid_sizer->AddGrowableCol(1, 1); + $grid_sizer->AddGrowableCol(3, 1); + $object_info_sizer->Add($grid_sizer, 0, wxEXPAND); my @info = ( - size => "Size", - volume => "Volume", + size => "Size", + volume => "Volume", + facets => "Facets", + materials => "Materials", + manifold => "Manifold", ); while (my $field = shift @info) { my $label = shift @info; @@ -264,7 +270,17 @@ sub new { $self->{"object_info_$field"} = Wx::StaticText->new($self, -1, "", wxDefaultPosition, wxDefaultSize, wxALIGN_LEFT); $self->{"object_info_$field"}->SetFont($Slic3r::GUI::small_font); - $grid_sizer->Add($self->{"object_info_$field"}, 0); + if ($field eq 'manifold') { + $self->{object_info_manifold_warning_icon} = Wx::StaticBitmap->new($self, -1, Wx::Bitmap->new("$Slic3r::var/error.png", wxBITMAP_TYPE_PNG)); + $self->{object_info_manifold_warning_icon}->Hide; + + my $h_sizer = Wx::BoxSizer->new(wxHORIZONTAL); + $h_sizer->Add($self->{object_info_manifold_warning_icon}, 0); + $h_sizer->Add($self->{"object_info_$field"}, 0); + $grid_sizer->Add($h_sizer, 0, wxEXPAND); + } else { + $grid_sizer->Add($self->{"object_info_$field"}, 0); + } } } @@ -1083,14 +1099,32 @@ sub selection_changed { if ($self->{object_info_size}) { # have we already loaded the info pane? if ($have_sel) { my ($obj_idx, $object) = $self->selected_object; - $self->{object_info_size}->SetLabel(sprintf "%.2f x %.2f x %.2f", @{$object->transformed_size}); + $self->{object_info_size}->SetLabel(sprintf("%.2f x %.2f x %.2f", @{$object->transformed_size})); + $self->{object_info_materials}->SetLabel($object->materials); if (my $stats = $object->mesh_stats) { $self->{object_info_volume}->SetLabel(sprintf('%.2f', $stats->{volume} * ($object->scale**3))); + $self->{object_info_facets}->SetLabel(sprintf('%d (%d shells)', $object->facets, $stats->{number_of_parts})); + if (my $errors = sum(@$stats{qw(degenerate_facets edges_fixed facets_removed facets_added facets_reversed backwards_edges)})) { + $self->{object_info_manifold}->SetLabel(sprintf("Auto-repaired (%d errors)", $errors)); + $self->{object_info_manifold_warning_icon}->Show; + + my $message = sprintf '%d degenerate facets, %d edges fixed, %d facets removed, %d facets added, %d facets reversed, %d backwards edges', + @$stats{qw(degenerate_facets edges_fixed facets_removed facets_added facets_reversed backwards_edges)}; + $self->{object_info_manifold}->SetToolTipString($message); + $self->{object_info_manifold_warning_icon}->SetToolTipString($message); + } else { + $self->{object_info_manifold}->SetLabel("Yes"); + } + } else { + $self->{object_info_facets}->SetLabel($object->facets); } } else { - $self->{"object_info_$_"}->SetLabel("") for qw(size volume); + $self->{"object_info_$_"}->SetLabel("") for qw(size volume facets materials manifold); + $self->{object_info_manifold_warning_icon}->Hide; + $self->{object_info_manifold}->SetToolTipString(""); } + $self->Layout; } } diff --git a/var/error.png b/var/error.png new file mode 100755 index 0000000000000000000000000000000000000000..628cf2dae3d419ae220c8928ac71393b480745a3 GIT binary patch literal 666 zcmV;L0%iS)P)eOSYYtbpBV}~vsBnU!_?2tr-P=|^T zED%wc9ezHgW@NMb!^uT_|SvCpFLJylbx zY%bpaTGI8IYXMN$9w<3j9VkA~NYOKEQXsj?6a9_hcwfU$acAhJhB)zb_w@MVUEy@S zX&I>K-R!bhu3?(6bHWIg$HEl7{9g>>&l_qdd+UYb(1~BCo9LptNq&8>!yoJ3Ui(i5 zRJ|XnYBklL!{@$-7=3mJ>P@1c=7Oc79e-V7yf+%lD2!I;Y&nXBZ>=B!5?CB>LvEx6 znI%n)qqi$#X#wKB(U7XP2P=+4{b@j#r%9-K(8UqtSDk>0UKzf*HM9yqMZ1D!$2MdZ zR=`U>0zhOH1XqN?nY@AQqB7)Fp4{v&dKXvb43hZKvnN8;Po;+jY*}~*Z|W9Q0W%{D z^T}Cc<|r(Su=1K=P5>Z4 zg`et&Va}tdzBS-G-ZcO)zCWpJvGQwrHZ`@wpM420ac@bI5~KkTFfGEM3sPWO8co4^fI6lPnA)Y{ef%@{+SnoUk0+dW+*{8WvF8}}l07*qoM6N<$g7cXs A&j0`b literal 0 HcmV?d00001