LCOV - code coverage report
Current view: top level - path_parser/model/commands - vertical_line_to_command.dart (source / functions) Hit Total Coverage
Test: lcov.info Lines: 47 47 100.0 %
Date: 2022-02-22 16:00:34 Functions: 0 0 -

          Line data    Source code
       1             : import 'package:mrx_icon_font_gen/parser/path/model/arguments/coordinate_pair.dart';
       2             : import 'package:mrx_icon_font_gen/parser/path/model/arguments/coordinate_pair_sequence.dart';
       3             : import 'package:mrx_icon_font_gen/parser/path/model/arguments/coordinate_sequence.dart';
       4             : import 'package:mrx_icon_font_gen/parser/path/model/command.dart';
       5             : import 'package:mrx_icon_font_gen/parser/path/model/commands/line_to_command.dart';
       6             : import 'package:vector_math/vector_math_64.dart';
       7             : 
       8             : class VerticalLineToCommand extends Command {
       9           2 :   @override
      10             :   String get absoluteCommandName => 'V';
      11             : 
      12           2 :   @override
      13             :   String get relativeCommandName => 'v';
      14             : 
      15           2 :   VerticalLineToCommand({
      16             :     String? command,
      17             :     bool? isRelative,
      18             :     required CoordinateSequence commandArguments,
      19           2 :   }) : super(
      20             :           command: command,
      21             :           isRelative: isRelative,
      22             :           commandArguments: commandArguments,
      23             :         );
      24             : 
      25           1 :   @override
      26             :   List<Command> applyTransformation(
      27             :     Matrix3 transform,
      28             :     CoordinatePair startPoint,
      29             :   ) {
      30           1 :     return isAbsolute
      31           1 :         ? _absoluteLineTo(transform, startPoint)
      32           1 :         : _relativeLineTo(transform, startPoint);
      33             :   }
      34             : 
      35           1 :   List<Command> _relativeLineTo(Matrix3 transform, CoordinatePair startPoint) {
      36           1 :     final Matrix3 transformationMatrix = transform.clone()
      37           2 :       ..setColumn(2, Vector3(0.0, 0.0, 1.0));
      38             :     final CoordinatePairSequence transformedCommandArguments =
      39           1 :         CoordinatePairSequence(
      40             :       coordinatePairs:
      41           4 :           (commandArguments as CoordinateSequence).coordinates.map((c) {
      42             :         final Vector3 transformed =
      43           2 :             transformationMatrix.transform(Vector3(0.0, c, 1.0));
      44           1 :         return CoordinatePair(
      45           1 :           x: transformed.x,
      46           1 :           y: transformed.y,
      47             :         );
      48           1 :       }).toList(),
      49             :     );
      50           1 :     return [
      51           1 :       LineToCommand(
      52             :         isRelative: true,
      53             :         commandArguments: transformedCommandArguments,
      54             :       ),
      55             :     ];
      56             :   }
      57             : 
      58           1 :   List<Command> _absoluteLineTo(Matrix3 transform, CoordinatePair startPoint) {
      59             :     final CoordinatePairSequence transformedCommandArguments =
      60           1 :         CoordinatePairSequence(
      61             :       coordinatePairs:
      62           4 :           (commandArguments as CoordinateSequence).coordinates.map((c) {
      63             :         final Vector3 transformed =
      64           3 :             transform.transform(Vector3(startPoint.x, c, 1.0));
      65           1 :         return CoordinatePair(
      66           1 :           x: transformed.x,
      67           1 :           y: transformed.y,
      68             :         );
      69           1 :       }).toList(),
      70             :     );
      71           1 :     return [
      72           1 :       LineToCommand(
      73             :         isRelative: false,
      74             :         commandArguments: transformedCommandArguments,
      75             :       ),
      76             :     ];
      77             :   }
      78             : 
      79           1 :   @override
      80             :   CoordinatePair getLastPoint(CoordinatePair startPoint) {
      81           1 :     if (isAbsolute) {
      82             :       final double y =
      83           3 :           (commandArguments as CoordinateSequence).coordinates.last;
      84           1 :       return CoordinatePair(
      85           1 :         x: startPoint.x,
      86             :         y: y,
      87             :       );
      88             :     }
      89           1 :     double y = startPoint.y;
      90             :     for (final double dy
      91           3 :         in (commandArguments as CoordinateSequence).coordinates) {
      92           1 :       y += dy;
      93             :     }
      94           1 :     return CoordinatePair(
      95           1 :       x: startPoint.x,
      96             :       y: y,
      97             :     );
      98             :   }
      99             : 
     100           2 :   @override
     101             :   bool operator ==(Object other) {
     102           2 :     if (other is! VerticalLineToCommand) {
     103             :       return false;
     104             :     }
     105           6 :     return command == other.command &&
     106           4 :         commandArguments as CoordinateSequence ==
     107           2 :             other.commandArguments as CoordinateSequence;
     108             :   }
     109             : 
     110           1 :   @override
     111           3 :   int get hashCode => Object.hash(command, commandArguments);
     112             : }

Generated by: LCOV version 1.15