Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Store simulated pressure #12

Closed
adil192 opened this issue Jul 30, 2023 · 0 comments · Fixed by #13
Closed

Store simulated pressure #12

adil192 opened this issue Jul 30, 2023 · 0 comments · Fixed by #13

Comments

@adil192
Copy link
Collaborator

adil192 commented Jul 30, 2023

Motivation

It would be helpful to be able to store the simulated pressure values in order for my project to be able to compress lists of points.

There will often be multiple points very close together which is used for the simulated pressure calculation in perfect_freehand but they're a waste of storage when written to a file.

I also believe I might be able to speed up canvas rendering by reducing the number of points.

(Also the reason that I store the original points and not the resulting stroke is that I want to give users the ability to change strokes' color and thickness retrospectively.)

Proposed usage

final points = [Point(0,0), ...];
final stroke = getStroke(
  points,
  simulatePressure: true,
  // this flag writes the new pressures to the given list of points
  rememberSimulatedPressure: true,
);
print(points.first.p); // e.g. 0.82615167

Alternatives

perfect_freehand could offer to compress a list of points like I mentioned before, e.g.

final points = [Point(0,0), ...];
final compressedPoints = approximateStrokePoints(
  points,
  simulatePressure: true,
  maxDeviation: _someConstant,
);
adil192 added a commit that referenced this issue Feb 6, 2024
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled Exception: 'dart:ui/lerp.dart': Failed assertion: line 19 pos 10: '<optimized out>': Cannot interpolate between finite and non-finite values
#0      _AssertionError._doThrowNew (dart:core-patch/errors_patch.dart:51:61)
#1      _AssertionError._throwNew (dart:core-patch/errors_patch.dart:40:5)
#2      lerpDouble (dart:ui/lerp.dart:19:10)
#3      PointVector.lerp (package:perfect_freehand/src/types/point_vector.dart:54:7)
#4      getStrokeOutlinePoints (package:perfect_freehand/src/get_stroke_outline_points.dart:238:31)
#5      getStroke (package:perfect_freehand/src/get_stroke.dart:19:10)
#6      Stroke._getPolygon (package:saber/components/canvas/_stroke.dart:200:21)
#7      Stroke._updatePolygon (package:saber/components/canvas/_stroke.dart:48:16)
#8      Stroke.polygon (package:saber/components/canvas/_stroke.dart:38:32)
#9      Stroke.toSvgPath (package:saber/components/canvas/_stroke.dart:247:9)
#10     EditorExporter.generatePdf.<anonymous closure>.<anonymous closure> (package:saber/data/editor/editor_exporter.dart:111:52)
#11     CustomPaint.paint (package:pdf/src/widgets/basic.dart:623:25)
#12     SingleChildWidget.paintChild (package:pdf/src/widgets/widget.dart:320:14)
#13     ConstrainedBox.paint (package:pdf/src/widgets/basic.dart:449:5)
#14     StatelessWidget.paint (package:pdf/src/widgets/widget.dart:260:15)
#15     Page.paint (package:pdf/src/widgets/page.dart:246:13)
#16     Page.postProcess (package:pdf/src/widgets/page.dart:179:5)
#17     Document.save (package:pdf/src/widgets/document.dart:130:14)
#18     EditorState.exportAsPdf (package:saber/pages/editor/editor.dart:1213:72)
<asynchronous suspension>
#19     _ExportBarState._onPressed.<anonymous closure>.<anonymous closure> (package:saber/components/toolbar/export_bar.dart:38:29)
<asynchronous suspension>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

1 participant