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/command.dart'; 4 : import 'package:vector_math/vector_math_64.dart'; 5 : 6 : class LineToCommand extends Command { 7 5 : @override 8 : String get absoluteCommandName => 'L'; 9 : 10 4 : @override 11 : String get relativeCommandName => 'l'; 12 : 13 5 : LineToCommand({ 14 : String? command, 15 : bool? isRelative, 16 : required CoordinatePairSequence commandArguments, 17 5 : }) : super( 18 : command: command, 19 : isRelative: isRelative, 20 : commandArguments: commandArguments, 21 : ); 22 : 23 2 : @override 24 : List<Command> applyTransformation( 25 : Matrix3 transform, 26 : CoordinatePair startPoint, 27 : ) { 28 2 : final Matrix3 transformationMatrix = isAbsolute 29 : ? transform 30 3 : : (transform.clone()..setColumn(2, Vector3(0.0, 0.0, 1.0))); 31 : final CoordinatePairSequence transformedCommandArguments = 32 2 : CoordinatePairSequence( 33 2 : coordinatePairs: (commandArguments as CoordinatePairSequence) 34 2 : .coordinatePairs 35 4 : .map((cp) { 36 : final Vector3 transformedCoordinates = 37 8 : transformationMatrix.transform(Vector3(cp.x, cp.y, 1.0)); 38 2 : return CoordinatePair( 39 2 : x: transformedCoordinates.x, 40 2 : y: transformedCoordinates.y, 41 : ); 42 2 : }).toList(), 43 : ); 44 2 : return [ 45 2 : LineToCommand( 46 2 : command: command, 47 : commandArguments: transformedCommandArguments, 48 : ), 49 : ]; 50 : } 51 : 52 2 : @override 53 : CoordinatePair getLastPoint(CoordinatePair startPoint) { 54 2 : if (isAbsolute) { 55 6 : return (commandArguments as CoordinatePairSequence).coordinatePairs.last; 56 : } 57 1 : double x = startPoint.x; 58 1 : double y = startPoint.y; 59 : for (final CoordinatePair cp 60 3 : in (commandArguments as CoordinatePairSequence).coordinatePairs) { 61 2 : x += cp.x; 62 2 : y += cp.y; 63 : } 64 1 : return CoordinatePair( 65 : x: x, 66 : y: y, 67 : ); 68 : } 69 : 70 5 : @override 71 : bool operator ==(Object other) { 72 5 : if (other is! LineToCommand) { 73 : return false; 74 : } 75 15 : return command == other.command && 76 10 : commandArguments as CoordinatePairSequence == 77 5 : other.commandArguments as CoordinatePairSequence; 78 : } 79 : 80 1 : @override 81 3 : int get hashCode => Object.hash(command, commandArguments); 82 : }