@@ -28,7 +28,7 @@ use PDL::ImageND;
2828use PDL::Graphics::TriD;
2929use PDL::Graphics::TriD::Objects;
3030use base qw/ PDL::Graphics::TriD::GObject/ ;
31- use fields qw/ PathIndex ContourPathIndexEnd Labels LabelStrings/ ;
31+ use fields qw/ PathIndex ContourPathIndexEnd LabelStart LabelStrings/ ;
3232
3333$PDL::Graphics::TriD::verbose //= 0;
3434
@@ -130,7 +130,7 @@ sub new {
130130 $pcnt += 1; $pval += $thispi_maxval + 1;
131131 }
132132
133- $this -> addlabels($options -> {Labels }) if defined $options -> {Labels };
133+ $this -> addlabels(@{ $options -> {Labels } }) if defined $options -> {Labels };
134134
135135 $this ;
136136}
@@ -166,54 +166,25 @@ $segint defaults to 5, that is every fifth line segment will be labeled.
166166
167167=cut
168168
169- sub addlabels{
170- my ($self ,$labelint , $segint ) = @_ ;
171-
172- $labelint = 1 unless (defined $labelint );
173- $segint = 5 unless (defined $segint );
174-
175- my $cnt =0;
176-
177- my $strlist ;
178- my $lp =pdl-> null;
179-
180- my $pcnt = 0;
181- my $offset = pdl[0.5,0.5,0.5];
182-
183- for (my $i =0; $i <= $# {$self -> {ContourSegCnt }}; $i ++){
184- next unless defined $self -> {ContourSegCnt }[$i ];
185- $cnt = $self -> {ContourSegCnt }[$i ];
186- my $val = $self -> {Options }{ContourVals }-> slice(" ($i )" );
187-
188- my $leg = $self -> {Points }-> slice(" :,$pcnt :$cnt " );
189- $pcnt =$cnt +1;
190-
191- next if ($i % $labelint );
192-
193- for (my $j =0; $j < $leg -> getdim(1); $j +=2){
194- next if (($j /2) % $segint );
195-
196- my $j1 =$j +1;
197-
198- my $lp2 = $leg -> slice(" :,($j )" ) +
199- $offset *($leg -> slice(" :,($j1 )" ) -
200- $leg -> slice(" :,($j )" ));
201-
202-
203- $lp = $lp -> append($lp2 );
204- # need a label string for each point
205- push (@$strlist ,$val );
206-
207- }
208-
169+ sub addlabels {
170+ my ($self , $labelint , $segint ) = @_ ;
171+ $labelint //= 1;
172+ $segint //= 5;
173+ my (@pi_ends , @strlist );
174+ my $lp = PDL-> null;
175+ for (my $i =0; $i <= $# {$self -> {ContourPathIndexEnd }}; $i ++) {
176+ next unless defined $self -> {ContourPathIndexEnd }[$i ];
177+ push @pi_ends , $self -> {PathIndex }-> at($self -> {ContourPathIndexEnd }[$i ]);
178+ next if $i % $labelint ;
179+ my ($start , $end ) = (@pi_ends > 1 ? $pi_ends [-2] : 0, $pi_ends [-1]);
180+ my $lp2 = $self -> {Points }-> slice(" :,$start :$end :$segint " );
181+ push @strlist , ($self -> {Options }{ContourVals }-> slice(" ($i )" )) x $lp2 -> dim(1);
182+ $lp = $lp -> glue(1,$lp2 );
209183 }
210- if ($lp -> nelem>0){
211- $self -> {Points } = $self -> {Points }-> transpose
212- -> append($lp -> reshape(3,$lp -> nelem/3)-> transpose)-> transpose;
213- $self -> {Labels } = [$cnt +1,$cnt +$lp -> nelem/3];
214- $self -> {LabelStrings } = $strlist ;
215- }
216-
184+ return if !$lp -> nelem;
185+ $self -> {Points } = $self -> {Points }-> glue(1,$lp );
186+ $self -> {LabelStart } = $self -> {Points }-> dim(1) - $lp -> dim(1);
187+ $self -> {LabelStrings } = \@strlist ;
217188}
218189
219190=head2 set_colortable($table)
0 commit comments