@twick/2d 0.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/editor/editor/NodeInspectorConfig.d.ts +3 -0
- package/editor/editor/NodeInspectorConfig.d.ts.map +1 -0
- package/editor/editor/PreviewOverlayConfig.d.ts +3 -0
- package/editor/editor/PreviewOverlayConfig.d.ts.map +1 -0
- package/editor/editor/Provider.d.ts +17 -0
- package/editor/editor/Provider.d.ts.map +1 -0
- package/editor/editor/SceneGraphTabConfig.d.ts +3 -0
- package/editor/editor/SceneGraphTabConfig.d.ts.map +1 -0
- package/editor/editor/icons/CircleIcon.d.ts +2 -0
- package/editor/editor/icons/CircleIcon.d.ts.map +1 -0
- package/editor/editor/icons/CodeBlockIcon.d.ts +2 -0
- package/editor/editor/icons/CodeBlockIcon.d.ts.map +1 -0
- package/editor/editor/icons/CurveIcon.d.ts +2 -0
- package/editor/editor/icons/CurveIcon.d.ts.map +1 -0
- package/editor/editor/icons/GridIcon.d.ts +2 -0
- package/editor/editor/icons/GridIcon.d.ts.map +1 -0
- package/editor/editor/icons/IconMap.d.ts +3 -0
- package/editor/editor/icons/IconMap.d.ts.map +1 -0
- package/editor/editor/icons/ImgIcon.d.ts +2 -0
- package/editor/editor/icons/ImgIcon.d.ts.map +1 -0
- package/editor/editor/icons/LayoutIcon.d.ts +2 -0
- package/editor/editor/icons/LayoutIcon.d.ts.map +1 -0
- package/editor/editor/icons/LineIcon.d.ts +2 -0
- package/editor/editor/icons/LineIcon.d.ts.map +1 -0
- package/editor/editor/icons/NodeIcon.d.ts +2 -0
- package/editor/editor/icons/NodeIcon.d.ts.map +1 -0
- package/editor/editor/icons/RayIcon.d.ts +2 -0
- package/editor/editor/icons/RayIcon.d.ts.map +1 -0
- package/editor/editor/icons/RectIcon.d.ts +2 -0
- package/editor/editor/icons/RectIcon.d.ts.map +1 -0
- package/editor/editor/icons/ShapeIcon.d.ts +2 -0
- package/editor/editor/icons/ShapeIcon.d.ts.map +1 -0
- package/editor/editor/icons/TxtIcon.d.ts +2 -0
- package/editor/editor/icons/TxtIcon.d.ts.map +1 -0
- package/editor/editor/icons/VideoIcon.d.ts +2 -0
- package/editor/editor/icons/VideoIcon.d.ts.map +1 -0
- package/editor/editor/icons/View2DIcon.d.ts +2 -0
- package/editor/editor/icons/View2DIcon.d.ts.map +1 -0
- package/editor/editor/index.d.ts +4 -0
- package/editor/editor/index.d.ts.map +1 -0
- package/editor/editor/tree/DetachedRoot.d.ts +2 -0
- package/editor/editor/tree/DetachedRoot.d.ts.map +1 -0
- package/editor/editor/tree/NodeElement.d.ts +8 -0
- package/editor/editor/tree/NodeElement.d.ts.map +1 -0
- package/editor/editor/tree/TreeElement.d.ts +15 -0
- package/editor/editor/tree/TreeElement.d.ts.map +1 -0
- package/editor/editor/tree/TreeRoot.d.ts +3 -0
- package/editor/editor/tree/TreeRoot.d.ts.map +1 -0
- package/editor/editor/tree/ViewRoot.d.ts +2 -0
- package/editor/editor/tree/ViewRoot.d.ts.map +1 -0
- package/editor/editor/tree/index.d.ts +4 -0
- package/editor/editor/tree/index.d.ts.map +1 -0
- package/editor/editor/tsconfig.build.tsbuildinfo +1 -0
- package/editor/index.css +33 -0
- package/editor/index.js +341 -0
- package/editor/index.js.map +1 -0
- package/lib/code/CodeCursor.d.ts +83 -0
- package/lib/code/CodeCursor.d.ts.map +1 -0
- package/lib/code/CodeCursor.js +306 -0
- package/lib/code/CodeDiffer.d.ts +28 -0
- package/lib/code/CodeDiffer.d.ts.map +1 -0
- package/lib/code/CodeDiffer.js +51 -0
- package/lib/code/CodeFragment.d.ts +42 -0
- package/lib/code/CodeFragment.d.ts.map +1 -0
- package/lib/code/CodeFragment.js +72 -0
- package/lib/code/CodeHighlighter.d.ts +71 -0
- package/lib/code/CodeHighlighter.d.ts.map +1 -0
- package/lib/code/CodeHighlighter.js +2 -0
- package/lib/code/CodeMetrics.d.ts +11 -0
- package/lib/code/CodeMetrics.d.ts.map +1 -0
- package/lib/code/CodeMetrics.js +29 -0
- package/lib/code/CodeRange.d.ts +41 -0
- package/lib/code/CodeRange.d.ts.map +1 -0
- package/lib/code/CodeRange.js +179 -0
- package/lib/code/CodeScope.d.ts +16 -0
- package/lib/code/CodeScope.d.ts.map +1 -0
- package/lib/code/CodeScope.js +72 -0
- package/lib/code/CodeSelection.d.ts +6 -0
- package/lib/code/CodeSelection.d.ts.map +1 -0
- package/lib/code/CodeSelection.js +13 -0
- package/lib/code/CodeSignal.d.ts +60 -0
- package/lib/code/CodeSignal.d.ts.map +1 -0
- package/lib/code/CodeSignal.js +194 -0
- package/lib/code/CodeTokenizer.d.ts +8 -0
- package/lib/code/CodeTokenizer.d.ts.map +1 -0
- package/lib/code/CodeTokenizer.js +50 -0
- package/lib/code/DefaultHighlightStyle.d.ts +3 -0
- package/lib/code/DefaultHighlightStyle.d.ts.map +1 -0
- package/lib/code/DefaultHighlightStyle.js +98 -0
- package/lib/code/LezerHighlighter.d.ts +22 -0
- package/lib/code/LezerHighlighter.d.ts.map +1 -0
- package/lib/code/LezerHighlighter.js +89 -0
- package/lib/code/diff.d.ts +31 -0
- package/lib/code/diff.d.ts.map +1 -0
- package/lib/code/diff.js +236 -0
- package/lib/code/extractRange.d.ts +17 -0
- package/lib/code/extractRange.d.ts.map +1 -0
- package/lib/code/extractRange.js +102 -0
- package/lib/code/index.d.ts +14 -0
- package/lib/code/index.d.ts.map +1 -0
- package/lib/code/index.js +14 -0
- package/lib/components/Audio.d.ts +14 -0
- package/lib/components/Audio.d.ts.map +1 -0
- package/lib/components/Audio.js +118 -0
- package/lib/components/Bezier.d.ts +23 -0
- package/lib/components/Bezier.d.ts.map +1 -0
- package/lib/components/Bezier.js +81 -0
- package/lib/components/Circle.d.ts +193 -0
- package/lib/components/Circle.d.ts.map +1 -0
- package/lib/components/Circle.js +178 -0
- package/lib/components/Code.d.ts +231 -0
- package/lib/components/Code.d.ts.map +1 -0
- package/lib/components/Code.js +325 -0
- package/lib/components/CodeBlock.d.ts +133 -0
- package/lib/components/CodeBlock.d.ts.map +1 -0
- package/lib/components/CodeBlock.js +461 -0
- package/lib/components/CubicBezier.d.ts +70 -0
- package/lib/components/CubicBezier.d.ts.map +1 -0
- package/lib/components/CubicBezier.js +81 -0
- package/lib/components/Curve.d.ts +204 -0
- package/lib/components/Curve.d.ts.map +1 -0
- package/lib/components/Curve.js +284 -0
- package/lib/components/Grid.d.ts +76 -0
- package/lib/components/Grid.d.ts.map +1 -0
- package/lib/components/Grid.js +91 -0
- package/lib/components/Icon.d.ts +59 -0
- package/lib/components/Icon.d.ts.map +1 -0
- package/lib/components/Icon.js +58 -0
- package/lib/components/Img.d.ts +118 -0
- package/lib/components/Img.d.ts.map +1 -0
- package/lib/components/Img.js +245 -0
- package/lib/components/Knot.d.ts +90 -0
- package/lib/components/Knot.d.ts.map +1 -0
- package/lib/components/Knot.js +68 -0
- package/lib/components/Latex.d.ts +39 -0
- package/lib/components/Latex.d.ts.map +1 -0
- package/lib/components/Latex.js +101 -0
- package/lib/components/Layout.d.ts +419 -0
- package/lib/components/Layout.d.ts.map +1 -0
- package/lib/components/Layout.js +706 -0
- package/lib/components/Line.d.ts +160 -0
- package/lib/components/Line.d.ts.map +1 -0
- package/lib/components/Line.js +346 -0
- package/lib/components/Media.d.ts +65 -0
- package/lib/components/Media.d.ts.map +1 -0
- package/lib/components/Media.js +303 -0
- package/lib/components/Node.d.ts +836 -0
- package/lib/components/Node.d.ts.map +1 -0
- package/lib/components/Node.js +1317 -0
- package/lib/components/Path.d.ts +20 -0
- package/lib/components/Path.d.ts.map +1 -0
- package/lib/components/Path.js +97 -0
- package/lib/components/Polygon.d.ts +113 -0
- package/lib/components/Polygon.d.ts.map +1 -0
- package/lib/components/Polygon.js +123 -0
- package/lib/components/QuadBezier.d.ts +62 -0
- package/lib/components/QuadBezier.d.ts.map +1 -0
- package/lib/components/QuadBezier.js +76 -0
- package/lib/components/Ray.d.ts +62 -0
- package/lib/components/Ray.d.ts.map +1 -0
- package/lib/components/Ray.js +96 -0
- package/lib/components/Rect.d.ts +114 -0
- package/lib/components/Rect.d.ts.map +1 -0
- package/lib/components/Rect.js +76 -0
- package/lib/components/Rive.d.ts +22 -0
- package/lib/components/Rive.d.ts.map +1 -0
- package/lib/components/Rive.js +117 -0
- package/lib/components/SVG.d.ts +178 -0
- package/lib/components/SVG.d.ts.map +1 -0
- package/lib/components/SVG.js +577 -0
- package/lib/components/Shape.d.ts +40 -0
- package/lib/components/Shape.d.ts.map +1 -0
- package/lib/components/Shape.js +134 -0
- package/lib/components/Spline.d.ts +89 -0
- package/lib/components/Spline.d.ts.map +1 -0
- package/lib/components/Spline.js +256 -0
- package/lib/components/Txt.d.ts +53 -0
- package/lib/components/Txt.d.ts.map +1 -0
- package/lib/components/Txt.js +173 -0
- package/lib/components/TxtLeaf.d.ts +21 -0
- package/lib/components/TxtLeaf.d.ts.map +1 -0
- package/lib/components/TxtLeaf.js +181 -0
- package/lib/components/Video.d.ts +69 -0
- package/lib/components/Video.d.ts.map +1 -0
- package/lib/components/Video.js +283 -0
- package/lib/components/View2D.d.ts +28 -0
- package/lib/components/View2D.d.ts.map +1 -0
- package/lib/components/View2D.js +93 -0
- package/lib/components/index.d.ts +29 -0
- package/lib/components/index.d.ts.map +1 -0
- package/lib/components/index.js +29 -0
- package/lib/components/types.d.ts +17 -0
- package/lib/components/types.d.ts.map +1 -0
- package/lib/components/types.js +2 -0
- package/lib/curves/ArcSegment.d.ts +26 -0
- package/lib/curves/ArcSegment.d.ts.map +1 -0
- package/lib/curves/ArcSegment.js +97 -0
- package/lib/curves/CircleSegment.d.ts +18 -0
- package/lib/curves/CircleSegment.d.ts.map +1 -0
- package/lib/curves/CircleSegment.js +52 -0
- package/lib/curves/CubicBezierSegment.d.ts +18 -0
- package/lib/curves/CubicBezierSegment.d.ts.map +1 -0
- package/lib/curves/CubicBezierSegment.js +55 -0
- package/lib/curves/CurveDrawingInfo.d.ts +11 -0
- package/lib/curves/CurveDrawingInfo.d.ts.map +1 -0
- package/lib/curves/CurveDrawingInfo.js +2 -0
- package/lib/curves/CurvePoint.d.ts +15 -0
- package/lib/curves/CurvePoint.d.ts.map +1 -0
- package/lib/curves/CurvePoint.js +2 -0
- package/lib/curves/CurveProfile.d.ts +7 -0
- package/lib/curves/CurveProfile.d.ts.map +1 -0
- package/lib/curves/CurveProfile.js +2 -0
- package/lib/curves/KnotInfo.d.ts +12 -0
- package/lib/curves/KnotInfo.d.ts.map +1 -0
- package/lib/curves/KnotInfo.js +2 -0
- package/lib/curves/LineSegment.d.ts +16 -0
- package/lib/curves/LineSegment.d.ts.map +1 -0
- package/lib/curves/LineSegment.js +45 -0
- package/lib/curves/Polynomial.d.ts +118 -0
- package/lib/curves/Polynomial.d.ts.map +1 -0
- package/lib/curves/Polynomial.js +259 -0
- package/lib/curves/Polynomial2D.d.ts +22 -0
- package/lib/curves/Polynomial2D.d.ts.map +1 -0
- package/lib/curves/Polynomial2D.js +45 -0
- package/lib/curves/PolynomialSegment.d.ts +39 -0
- package/lib/curves/PolynomialSegment.d.ts.map +1 -0
- package/lib/curves/PolynomialSegment.js +86 -0
- package/lib/curves/QuadBezierSegment.d.ts +17 -0
- package/lib/curves/QuadBezierSegment.d.ts.map +1 -0
- package/lib/curves/QuadBezierSegment.js +49 -0
- package/lib/curves/Segment.d.ts +9 -0
- package/lib/curves/Segment.d.ts.map +1 -0
- package/lib/curves/Segment.js +3 -0
- package/lib/curves/UniformPolynomialCurveSampler.d.ts +43 -0
- package/lib/curves/UniformPolynomialCurveSampler.d.ts.map +1 -0
- package/lib/curves/UniformPolynomialCurveSampler.js +73 -0
- package/lib/curves/createCurveProfileLerp.d.ts +32 -0
- package/lib/curves/createCurveProfileLerp.d.ts.map +1 -0
- package/lib/curves/createCurveProfileLerp.js +351 -0
- package/lib/curves/getBezierSplineProfile.d.ts +12 -0
- package/lib/curves/getBezierSplineProfile.d.ts.map +1 -0
- package/lib/curves/getBezierSplineProfile.js +137 -0
- package/lib/curves/getCircleProfile.d.ts +4 -0
- package/lib/curves/getCircleProfile.d.ts.map +1 -0
- package/lib/curves/getCircleProfile.js +44 -0
- package/lib/curves/getPathProfile.d.ts +3 -0
- package/lib/curves/getPathProfile.d.ts.map +1 -0
- package/lib/curves/getPathProfile.js +128 -0
- package/lib/curves/getPointAtDistance.d.ts +4 -0
- package/lib/curves/getPointAtDistance.d.ts.map +1 -0
- package/lib/curves/getPointAtDistance.js +15 -0
- package/lib/curves/getPolylineProfile.d.ts +4 -0
- package/lib/curves/getPolylineProfile.d.ts.map +1 -0
- package/lib/curves/getPolylineProfile.js +58 -0
- package/lib/curves/getRectProfile.d.ts +4 -0
- package/lib/curves/getRectProfile.d.ts.map +1 -0
- package/lib/curves/getRectProfile.js +57 -0
- package/lib/curves/index.d.ts +17 -0
- package/lib/curves/index.d.ts.map +1 -0
- package/lib/curves/index.js +17 -0
- package/lib/decorators/canvasStyleSignal.d.ts +5 -0
- package/lib/decorators/canvasStyleSignal.d.ts.map +1 -0
- package/lib/decorators/canvasStyleSignal.js +12 -0
- package/lib/decorators/colorSignal.d.ts +2 -0
- package/lib/decorators/colorSignal.d.ts.map +1 -0
- package/lib/decorators/colorSignal.js +9 -0
- package/lib/decorators/compound.d.ts +26 -0
- package/lib/decorators/compound.d.ts.map +1 -0
- package/lib/decorators/compound.js +49 -0
- package/lib/decorators/computed.d.ts +9 -0
- package/lib/decorators/computed.d.ts.map +1 -0
- package/lib/decorators/computed.js +18 -0
- package/lib/decorators/defaultStyle.d.ts +2 -0
- package/lib/decorators/defaultStyle.d.ts.map +1 -0
- package/lib/decorators/defaultStyle.js +14 -0
- package/lib/decorators/filtersSignal.d.ts +13 -0
- package/lib/decorators/filtersSignal.d.ts.map +1 -0
- package/lib/decorators/filtersSignal.js +73 -0
- package/lib/decorators/index.d.ts +11 -0
- package/lib/decorators/index.d.ts.map +1 -0
- package/lib/decorators/index.js +11 -0
- package/lib/decorators/initializers.d.ts +4 -0
- package/lib/decorators/initializers.d.ts.map +1 -0
- package/lib/decorators/initializers.js +27 -0
- package/lib/decorators/nodeName.d.ts +9 -0
- package/lib/decorators/nodeName.d.ts.map +1 -0
- package/lib/decorators/nodeName.js +13 -0
- package/lib/decorators/signal.d.ts +183 -0
- package/lib/decorators/signal.d.ts.map +1 -0
- package/lib/decorators/signal.js +285 -0
- package/lib/decorators/spacingSignal.d.ts +2 -0
- package/lib/decorators/spacingSignal.d.ts.map +1 -0
- package/lib/decorators/spacingSignal.js +15 -0
- package/lib/decorators/vector2Signal.d.ts +9 -0
- package/lib/decorators/vector2Signal.d.ts.map +1 -0
- package/lib/decorators/vector2Signal.js +15 -0
- package/lib/index.d.ts +9 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +9 -0
- package/lib/jsx-dev-runtime.d.ts +3 -0
- package/lib/jsx-dev-runtime.d.ts.map +1 -0
- package/lib/jsx-dev-runtime.js +3 -0
- package/lib/jsx-runtime.d.ts +12 -0
- package/lib/jsx-runtime.d.ts.map +1 -0
- package/lib/jsx-runtime.js +23 -0
- package/lib/partials/Filter.d.ts +82 -0
- package/lib/partials/Filter.d.ts.map +1 -0
- package/lib/partials/Filter.js +135 -0
- package/lib/partials/Gradient.d.ts +31 -0
- package/lib/partials/Gradient.d.ts.map +1 -0
- package/lib/partials/Gradient.js +63 -0
- package/lib/partials/Pattern.d.ts +13 -0
- package/lib/partials/Pattern.d.ts.map +1 -0
- package/lib/partials/Pattern.js +27 -0
- package/lib/partials/ShaderConfig.d.ts +81 -0
- package/lib/partials/ShaderConfig.d.ts.map +1 -0
- package/lib/partials/ShaderConfig.js +25 -0
- package/lib/partials/index.d.ts +5 -0
- package/lib/partials/index.d.ts.map +1 -0
- package/lib/partials/index.js +5 -0
- package/lib/partials/types.d.ts +35 -0
- package/lib/partials/types.d.ts.map +1 -0
- package/lib/partials/types.js +2 -0
- package/lib/scenes/Scene2D.d.ts +29 -0
- package/lib/scenes/Scene2D.d.ts.map +1 -0
- package/lib/scenes/Scene2D.js +180 -0
- package/lib/scenes/index.d.ts +4 -0
- package/lib/scenes/index.d.ts.map +1 -0
- package/lib/scenes/index.js +4 -0
- package/lib/scenes/makeScene2D.d.ts +5 -0
- package/lib/scenes/makeScene2D.d.ts.map +1 -0
- package/lib/scenes/makeScene2D.js +11 -0
- package/lib/scenes/useScene2D.d.ts +3 -0
- package/lib/scenes/useScene2D.d.ts.map +1 -0
- package/lib/scenes/useScene2D.js +5 -0
- package/lib/tsconfig.build.tsbuildinfo +1 -0
- package/lib/utils/CanvasUtils.d.ts +23 -0
- package/lib/utils/CanvasUtils.d.ts.map +1 -0
- package/lib/utils/CanvasUtils.js +138 -0
- package/lib/utils/diff.d.ts +31 -0
- package/lib/utils/diff.d.ts.map +1 -0
- package/lib/utils/diff.js +97 -0
- package/lib/utils/index.d.ts +3 -0
- package/lib/utils/index.d.ts.map +1 -0
- package/lib/utils/index.js +3 -0
- package/lib/utils/is.d.ts +8 -0
- package/lib/utils/is.d.ts.map +1 -0
- package/lib/utils/is.js +10 -0
- package/lib/utils/makeSignalExtensions.d.ts +4 -0
- package/lib/utils/makeSignalExtensions.d.ts.map +1 -0
- package/lib/utils/makeSignalExtensions.js +20 -0
- package/lib/utils/video/ffmpeg-client.d.ts +5 -0
- package/lib/utils/video/ffmpeg-client.d.ts.map +1 -0
- package/lib/utils/video/ffmpeg-client.js +32 -0
- package/lib/utils/video/mp4-parser-manager.d.ts +3 -0
- package/lib/utils/video/mp4-parser-manager.d.ts.map +1 -0
- package/lib/utils/video/mp4-parser-manager.js +55 -0
- package/lib/utils/video/parser/index.d.ts +2 -0
- package/lib/utils/video/parser/index.d.ts.map +1 -0
- package/lib/utils/video/parser/index.js +2 -0
- package/lib/utils/video/parser/parser.d.ts +21 -0
- package/lib/utils/video/parser/parser.d.ts.map +1 -0
- package/lib/utils/video/parser/parser.js +168 -0
- package/lib/utils/video/parser/sampler.d.ts +16 -0
- package/lib/utils/video/parser/sampler.d.ts.map +1 -0
- package/lib/utils/video/parser/sampler.js +56 -0
- package/lib/utils/video/parser/segment.d.ts +48 -0
- package/lib/utils/video/parser/segment.d.ts.map +1 -0
- package/lib/utils/video/parser/segment.js +239 -0
- package/lib/utils/video/parser/sink.d.ts +9 -0
- package/lib/utils/video/parser/sink.d.ts.map +1 -0
- package/lib/utils/video/parser/sink.js +22 -0
- package/lib/utils/video/parser/utils.d.ts +10 -0
- package/lib/utils/video/parser/utils.d.ts.map +1 -0
- package/lib/utils/video/parser/utils.js +22 -0
- package/package.json +53 -0
- package/src/editor/NodeInspectorConfig.tsx +76 -0
- package/src/editor/PreviewOverlayConfig.tsx +67 -0
- package/src/editor/Provider.tsx +93 -0
- package/src/editor/SceneGraphTabConfig.tsx +81 -0
- package/src/editor/icons/CircleIcon.tsx +7 -0
- package/src/editor/icons/CodeBlockIcon.tsx +8 -0
- package/src/editor/icons/CurveIcon.tsx +7 -0
- package/src/editor/icons/GridIcon.tsx +7 -0
- package/src/editor/icons/IconMap.ts +35 -0
- package/src/editor/icons/ImgIcon.tsx +8 -0
- package/src/editor/icons/LayoutIcon.tsx +9 -0
- package/src/editor/icons/LineIcon.tsx +7 -0
- package/src/editor/icons/NodeIcon.tsx +7 -0
- package/src/editor/icons/RayIcon.tsx +7 -0
- package/src/editor/icons/RectIcon.tsx +7 -0
- package/src/editor/icons/ShapeIcon.tsx +7 -0
- package/src/editor/icons/TxtIcon.tsx +8 -0
- package/src/editor/icons/VideoIcon.tsx +7 -0
- package/src/editor/icons/View2DIcon.tsx +10 -0
- package/src/editor/index.css +0 -0
- package/src/editor/index.ts +17 -0
- package/src/editor/tree/DetachedRoot.tsx +23 -0
- package/src/editor/tree/NodeElement.tsx +74 -0
- package/src/editor/tree/TreeElement.tsx +72 -0
- package/src/editor/tree/TreeRoot.tsx +10 -0
- package/src/editor/tree/ViewRoot.tsx +20 -0
- package/src/editor/tree/index.module.scss +38 -0
- package/src/editor/tree/index.ts +3 -0
- package/src/editor/tsconfig.build.json +5 -0
- package/src/editor/tsconfig.json +12 -0
- package/src/editor/tsdoc.json +4 -0
- package/src/editor/vite-env.d.ts +1 -0
- package/src/lib/code/CodeCursor.ts +445 -0
- package/src/lib/code/CodeDiffer.ts +78 -0
- package/src/lib/code/CodeFragment.ts +97 -0
- package/src/lib/code/CodeHighlighter.ts +75 -0
- package/src/lib/code/CodeMetrics.ts +47 -0
- package/src/lib/code/CodeRange.test.ts +74 -0
- package/src/lib/code/CodeRange.ts +216 -0
- package/src/lib/code/CodeScope.ts +101 -0
- package/src/lib/code/CodeSelection.ts +24 -0
- package/src/lib/code/CodeSignal.ts +327 -0
- package/src/lib/code/CodeTokenizer.ts +54 -0
- package/src/lib/code/DefaultHighlightStyle.ts +98 -0
- package/src/lib/code/LezerHighlighter.ts +113 -0
- package/src/lib/code/diff.test.ts +311 -0
- package/src/lib/code/diff.ts +319 -0
- package/src/lib/code/extractRange.ts +126 -0
- package/src/lib/code/index.ts +13 -0
- package/src/lib/components/Audio.ts +131 -0
- package/src/lib/components/Bezier.ts +105 -0
- package/src/lib/components/Circle.ts +266 -0
- package/src/lib/components/Code.ts +526 -0
- package/src/lib/components/CodeBlock.ts +576 -0
- package/src/lib/components/CubicBezier.ts +112 -0
- package/src/lib/components/Curve.ts +455 -0
- package/src/lib/components/Grid.ts +135 -0
- package/src/lib/components/Icon.ts +96 -0
- package/src/lib/components/Img.ts +319 -0
- package/src/lib/components/Knot.ts +157 -0
- package/src/lib/components/Latex.ts +122 -0
- package/src/lib/components/Layout.ts +1092 -0
- package/src/lib/components/Line.ts +429 -0
- package/src/lib/components/Media.ts +379 -0
- package/src/lib/components/Node.ts +1940 -0
- package/src/lib/components/Path.ts +137 -0
- package/src/lib/components/Polygon.ts +171 -0
- package/src/lib/components/QuadBezier.ts +100 -0
- package/src/lib/components/Ray.ts +125 -0
- package/src/lib/components/Rect.ts +187 -0
- package/src/lib/components/Rive.ts +156 -0
- package/src/lib/components/SVG.ts +797 -0
- package/src/lib/components/Shape.ts +143 -0
- package/src/lib/components/Spline.ts +344 -0
- package/src/lib/components/Txt.test.tsx +81 -0
- package/src/lib/components/Txt.ts +203 -0
- package/src/lib/components/TxtLeaf.ts +205 -0
- package/src/lib/components/Video.ts +397 -0
- package/src/lib/components/View2D.ts +98 -0
- package/src/lib/components/__tests__/children.test.tsx +142 -0
- package/src/lib/components/__tests__/clone.test.tsx +126 -0
- package/src/lib/components/__tests__/generatorTest.ts +28 -0
- package/src/lib/components/__tests__/mockScene2D.ts +45 -0
- package/src/lib/components/__tests__/query.test.tsx +122 -0
- package/src/lib/components/__tests__/state.test.tsx +60 -0
- package/src/lib/components/index.ts +28 -0
- package/src/lib/components/types.ts +35 -0
- package/src/lib/curves/ArcSegment.ts +159 -0
- package/src/lib/curves/CircleSegment.ts +77 -0
- package/src/lib/curves/CubicBezierSegment.ts +78 -0
- package/src/lib/curves/CurveDrawingInfo.ts +11 -0
- package/src/lib/curves/CurvePoint.ts +15 -0
- package/src/lib/curves/CurveProfile.ts +7 -0
- package/src/lib/curves/KnotInfo.ts +10 -0
- package/src/lib/curves/LineSegment.ts +62 -0
- package/src/lib/curves/Polynomial.ts +355 -0
- package/src/lib/curves/Polynomial2D.ts +62 -0
- package/src/lib/curves/PolynomialSegment.ts +124 -0
- package/src/lib/curves/QuadBezierSegment.ts +64 -0
- package/src/lib/curves/Segment.ts +17 -0
- package/src/lib/curves/UniformPolynomialCurveSampler.ts +94 -0
- package/src/lib/curves/createCurveProfileLerp.ts +471 -0
- package/src/lib/curves/getBezierSplineProfile.ts +223 -0
- package/src/lib/curves/getCircleProfile.ts +86 -0
- package/src/lib/curves/getPathProfile.ts +178 -0
- package/src/lib/curves/getPointAtDistance.ts +21 -0
- package/src/lib/curves/getPolylineProfile.test.ts +21 -0
- package/src/lib/curves/getPolylineProfile.ts +89 -0
- package/src/lib/curves/getRectProfile.ts +139 -0
- package/src/lib/curves/index.ts +16 -0
- package/src/lib/decorators/canvasStyleSignal.ts +16 -0
- package/src/lib/decorators/colorSignal.ts +9 -0
- package/src/lib/decorators/compound.ts +72 -0
- package/src/lib/decorators/computed.ts +18 -0
- package/src/lib/decorators/defaultStyle.ts +18 -0
- package/src/lib/decorators/filtersSignal.ts +136 -0
- package/src/lib/decorators/index.ts +10 -0
- package/src/lib/decorators/initializers.ts +32 -0
- package/src/lib/decorators/nodeName.ts +13 -0
- package/src/lib/decorators/signal.test.ts +90 -0
- package/src/lib/decorators/signal.ts +345 -0
- package/src/lib/decorators/spacingSignal.ts +15 -0
- package/src/lib/decorators/vector2Signal.ts +30 -0
- package/src/lib/globals.d.ts +2 -0
- package/src/lib/index.ts +8 -0
- package/src/lib/jsx-dev-runtime.ts +2 -0
- package/src/lib/jsx-runtime.ts +46 -0
- package/src/lib/parse-svg-path.d.ts +14 -0
- package/src/lib/partials/Filter.ts +180 -0
- package/src/lib/partials/Gradient.ts +102 -0
- package/src/lib/partials/Pattern.ts +34 -0
- package/src/lib/partials/ShaderConfig.ts +117 -0
- package/src/lib/partials/index.ts +4 -0
- package/src/lib/partials/types.ts +58 -0
- package/src/lib/scenes/Scene2D.ts +242 -0
- package/src/lib/scenes/index.ts +3 -0
- package/src/lib/scenes/makeScene2D.ts +16 -0
- package/src/lib/scenes/useScene2D.ts +6 -0
- package/src/lib/tsconfig.build.json +5 -0
- package/src/lib/tsconfig.json +10 -0
- package/src/lib/tsdoc.json +4 -0
- package/src/lib/utils/CanvasUtils.ts +306 -0
- package/src/lib/utils/diff.test.ts +453 -0
- package/src/lib/utils/diff.ts +148 -0
- package/src/lib/utils/index.ts +2 -0
- package/src/lib/utils/is.ts +11 -0
- package/src/lib/utils/makeSignalExtensions.ts +30 -0
- package/src/lib/utils/video/declarations.d.ts +1 -0
- package/src/lib/utils/video/ffmpeg-client.ts +50 -0
- package/src/lib/utils/video/mp4-parser-manager.ts +72 -0
- package/src/lib/utils/video/parser/index.ts +1 -0
- package/src/lib/utils/video/parser/parser.ts +257 -0
- package/src/lib/utils/video/parser/sampler.ts +72 -0
- package/src/lib/utils/video/parser/segment.ts +302 -0
- package/src/lib/utils/video/parser/sink.ts +29 -0
- package/src/lib/utils/video/parser/utils.ts +31 -0
- package/src/tsconfig.base.json +19 -0
- package/src/tsconfig.build.json +8 -0
- package/src/tsconfig.json +5 -0
- package/tsconfig.project.json +7 -0
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
import { clamp } from '@twick/core';
|
|
2
|
+
/**
|
|
3
|
+
* A polynomial in the form ax^3 + bx^2 + cx + d up to a cubic polynomial.
|
|
4
|
+
*
|
|
5
|
+
* Source code liberally taken from:
|
|
6
|
+
* https://github.com/FreyaHolmer/Mathfs/blob/master/Runtime/Curves/Polynomial.cs
|
|
7
|
+
*/
|
|
8
|
+
export class Polynomial {
|
|
9
|
+
/**
|
|
10
|
+
* Constructs a constant polynomial
|
|
11
|
+
*
|
|
12
|
+
* @param c0 - The constant coefficient
|
|
13
|
+
*/
|
|
14
|
+
static constant(c0) {
|
|
15
|
+
return new Polynomial(c0);
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Constructs a linear polynomial
|
|
19
|
+
*
|
|
20
|
+
* @param c0 - The constant coefficient
|
|
21
|
+
* @param c1 - The linear coefficient
|
|
22
|
+
*/
|
|
23
|
+
static linear(c0, c1) {
|
|
24
|
+
return new Polynomial(c0, c1);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Constructs a quadratic polynomial
|
|
28
|
+
*
|
|
29
|
+
* @param c0 - The constant coefficient
|
|
30
|
+
* @param c1 - The linear coefficient
|
|
31
|
+
* @param c2 - The quadratic coefficient
|
|
32
|
+
*/
|
|
33
|
+
static quadratic(c0, c1, c2) {
|
|
34
|
+
return new Polynomial(c0, c1, c2);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Constructs a cubic polynomial
|
|
38
|
+
*
|
|
39
|
+
* @param c0 - The constant coefficient
|
|
40
|
+
* @param c1 - The linear coefficient
|
|
41
|
+
* @param c2 - The quadratic coefficient
|
|
42
|
+
* @param c3 - The cubic coefficient
|
|
43
|
+
*/
|
|
44
|
+
static cubic(c0, c1, c2, c3) {
|
|
45
|
+
return new Polynomial(c0, c1, c2, c3);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* The degree of the polynomial
|
|
49
|
+
*/
|
|
50
|
+
get degree() {
|
|
51
|
+
if (this.c3 !== 0) {
|
|
52
|
+
return 3;
|
|
53
|
+
}
|
|
54
|
+
else if (this.c2 !== 0) {
|
|
55
|
+
return 2;
|
|
56
|
+
}
|
|
57
|
+
else if (this.c1 !== 0) {
|
|
58
|
+
return 1;
|
|
59
|
+
}
|
|
60
|
+
return 0;
|
|
61
|
+
}
|
|
62
|
+
constructor(c0, c1, c2, c3) {
|
|
63
|
+
this.c0 = c0;
|
|
64
|
+
this.c1 = c1 ?? 0;
|
|
65
|
+
this.c2 = c2 ?? 0;
|
|
66
|
+
this.c3 = c3 ?? 0;
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Return the nth derivative of the polynomial.
|
|
70
|
+
*
|
|
71
|
+
* @param n - The number of times to differentiate the polynomial.
|
|
72
|
+
*/
|
|
73
|
+
differentiate(n = 1) {
|
|
74
|
+
switch (n) {
|
|
75
|
+
case 0:
|
|
76
|
+
return this;
|
|
77
|
+
case 1:
|
|
78
|
+
return new Polynomial(this.c1, 2 * this.c2, 3 * this.c3, 0);
|
|
79
|
+
case 2:
|
|
80
|
+
return new Polynomial(2 * this.c2, 6 * this.c3, 0, 0);
|
|
81
|
+
case 3:
|
|
82
|
+
return new Polynomial(6 * this.c3, 0, 0, 0);
|
|
83
|
+
default:
|
|
84
|
+
throw new Error('Unsupported derivative');
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
eval(t, derivative = 0) {
|
|
88
|
+
if (derivative !== 0) {
|
|
89
|
+
return this.differentiate(derivative).eval(t);
|
|
90
|
+
}
|
|
91
|
+
return this.c3 * (t * t * t) + this.c2 * (t * t) + this.c1 * t + this.c0;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Split the polynomial into two polynomials of the same overall shape.
|
|
95
|
+
*
|
|
96
|
+
* @param u - The point at which to split the polynomial.
|
|
97
|
+
*/
|
|
98
|
+
split(u) {
|
|
99
|
+
const d = 1 - u;
|
|
100
|
+
const pre = new Polynomial(this.c0, this.c1 * u, this.c2 * u * u, this.c3 * u * u * u);
|
|
101
|
+
const post = new Polynomial(this.eval(0), d * this.differentiate(1).eval(u), ((d * d) / 2) * this.differentiate(2).eval(u), ((d * d * d) / 6) * this.differentiate(3).eval(u));
|
|
102
|
+
return [pre, post];
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Calculate the roots (values where this polynomial = 0).
|
|
106
|
+
*
|
|
107
|
+
* @remarks
|
|
108
|
+
* Depending on the degree of the polynomial, returns between 0 and 3 results.
|
|
109
|
+
*/
|
|
110
|
+
roots() {
|
|
111
|
+
switch (this.degree) {
|
|
112
|
+
case 3:
|
|
113
|
+
return this.solveCubicRoots();
|
|
114
|
+
case 2:
|
|
115
|
+
return this.solveQuadraticRoots();
|
|
116
|
+
case 1:
|
|
117
|
+
return this.solveLinearRoot();
|
|
118
|
+
case 0:
|
|
119
|
+
return [];
|
|
120
|
+
default:
|
|
121
|
+
throw new Error(`Unsupported polynomial degree: ${this.degree}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Calculate the local extrema of the polynomial.
|
|
126
|
+
*/
|
|
127
|
+
localExtrema() {
|
|
128
|
+
return this.differentiate().roots();
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Calculate the local extrema of the polynomial in the unit interval.
|
|
132
|
+
*/
|
|
133
|
+
localExtrema01() {
|
|
134
|
+
const all = this.localExtrema();
|
|
135
|
+
const valids = [];
|
|
136
|
+
for (let i = 0; i < all.length; i++) {
|
|
137
|
+
const t = all[i];
|
|
138
|
+
if (t >= 0 && t <= 1) {
|
|
139
|
+
valids.push(all[i]);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return valids;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Return the output value range within the unit interval.
|
|
146
|
+
*/
|
|
147
|
+
outputRange01() {
|
|
148
|
+
let range = [this.eval(0), this.eval(1)];
|
|
149
|
+
// Expands the minimum or maximum value of the range to contain the given
|
|
150
|
+
// value.
|
|
151
|
+
const encapsulate = (value) => {
|
|
152
|
+
if (range[1] > range[0]) {
|
|
153
|
+
range = [Math.min(range[0], value), Math.max(range[1], value)];
|
|
154
|
+
}
|
|
155
|
+
else {
|
|
156
|
+
range = [Math.min(range[1], value), Math.max(range[0], value)];
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
this.localExtrema01().forEach(t => encapsulate(this.eval(t)));
|
|
160
|
+
return range;
|
|
161
|
+
}
|
|
162
|
+
solveCubicRoots() {
|
|
163
|
+
const a = this.c0;
|
|
164
|
+
const b = this.c1;
|
|
165
|
+
const c = this.c2;
|
|
166
|
+
const d = this.c3;
|
|
167
|
+
// First, depress the cubic to make it easier to solve
|
|
168
|
+
const aa = a * a;
|
|
169
|
+
const ac = a * c;
|
|
170
|
+
const bb = b * b;
|
|
171
|
+
const p = (3 * ac - bb) / (3 * aa);
|
|
172
|
+
const q = (2 * bb * b - 9 * ac * b + 27 * aa * d) / (27 * aa * a);
|
|
173
|
+
const dpr = this.solveDepressedCubicRoots(p, q);
|
|
174
|
+
// We now have the roots of the depressed cubic, now convert back to the
|
|
175
|
+
// normal cubic
|
|
176
|
+
const undepressRoot = (r) => r - b / (3 * a);
|
|
177
|
+
switch (dpr.length) {
|
|
178
|
+
case 1:
|
|
179
|
+
return [undepressRoot(dpr[0])];
|
|
180
|
+
case 2:
|
|
181
|
+
return [undepressRoot(dpr[0]), undepressRoot(dpr[1])];
|
|
182
|
+
case 3:
|
|
183
|
+
return [
|
|
184
|
+
undepressRoot(dpr[0]),
|
|
185
|
+
undepressRoot(dpr[1]),
|
|
186
|
+
undepressRoot(dpr[2]),
|
|
187
|
+
];
|
|
188
|
+
default:
|
|
189
|
+
return [];
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
solveDepressedCubicRoots(p, q) {
|
|
193
|
+
// t³+pt+q = 0
|
|
194
|
+
// Triple root - one solution. solve x³+q = 0 => x = cr(-q)
|
|
195
|
+
if (this.almostZero(p)) {
|
|
196
|
+
return [Math.cbrt(-q)];
|
|
197
|
+
}
|
|
198
|
+
const TAU = Math.PI * 2;
|
|
199
|
+
const discriminant = 4 * p * p * p + 27 * q * q;
|
|
200
|
+
if (discriminant < 0.00001) {
|
|
201
|
+
// Two or three roots guaranteed, use trig solution
|
|
202
|
+
const pre = 2 * Math.sqrt(-p / 3);
|
|
203
|
+
const acosInner = ((3 * q) / (2 * p)) * Math.sqrt(-3 / p);
|
|
204
|
+
const getRoot = (k) => pre *
|
|
205
|
+
Math.cos((1 / 3) * Math.acos(clamp(-1, 1, acosInner)) - (TAU / 3) * k);
|
|
206
|
+
// If acos hits 0 or TAU/2, the offsets will have the same value,
|
|
207
|
+
// which means we have a double root plus one regular root on our hands
|
|
208
|
+
if (acosInner >= 0.9999) {
|
|
209
|
+
// two roots - one single and one double root
|
|
210
|
+
return [getRoot(0), getRoot(2)];
|
|
211
|
+
}
|
|
212
|
+
if (acosInner <= -0.9999) {
|
|
213
|
+
// two roots - one single and one double root
|
|
214
|
+
return [getRoot(1), getRoot(2)];
|
|
215
|
+
}
|
|
216
|
+
return [getRoot(0), getRoot(1), getRoot(2)];
|
|
217
|
+
}
|
|
218
|
+
if (discriminant > 0 && p < 0) {
|
|
219
|
+
// one root
|
|
220
|
+
const coshInner = (1 / 3) *
|
|
221
|
+
Math.acosh(((-3 * Math.abs(q)) / (2 * p)) * Math.sqrt(-3 / p));
|
|
222
|
+
const r = -2 * Math.sign(q) * Math.sqrt(-p / 3) * Math.cosh(coshInner);
|
|
223
|
+
return [r];
|
|
224
|
+
}
|
|
225
|
+
if (p > 0) {
|
|
226
|
+
// one root
|
|
227
|
+
const sinhInner = (1 / 3) * Math.asinh(((3 * q) / (2 * p)) * Math.sqrt(3 / p));
|
|
228
|
+
const r = -2 * Math.sqrt(p / 3) * Math.sinh(sinhInner);
|
|
229
|
+
return [r];
|
|
230
|
+
}
|
|
231
|
+
// no roots
|
|
232
|
+
return [];
|
|
233
|
+
}
|
|
234
|
+
solveQuadraticRoots() {
|
|
235
|
+
const a = this.c2;
|
|
236
|
+
const b = this.c1;
|
|
237
|
+
const c = this.c0;
|
|
238
|
+
const rootContent = b * b - 4 * a * c;
|
|
239
|
+
if (this.almostZero(rootContent)) {
|
|
240
|
+
// two equivalent solutions at one point
|
|
241
|
+
return [-b / (2 * a)];
|
|
242
|
+
}
|
|
243
|
+
if (rootContent >= 0) {
|
|
244
|
+
const root = Math.sqrt(rootContent);
|
|
245
|
+
// crosses at two points
|
|
246
|
+
const r0 = (-b - root) / (2 * a);
|
|
247
|
+
const r1 = (-b + root) / (2 * a);
|
|
248
|
+
return [Math.min(r0, r1), Math.max(r0, r1)];
|
|
249
|
+
}
|
|
250
|
+
return [];
|
|
251
|
+
}
|
|
252
|
+
solveLinearRoot() {
|
|
253
|
+
return [-this.c0 / this.c1];
|
|
254
|
+
}
|
|
255
|
+
almostZero(value) {
|
|
256
|
+
return Math.abs(0 - value) <= Number.EPSILON;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seW5vbWlhbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9saWIvY3VydmVzL1BvbHlub21pYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFDLEtBQUssRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUVsQzs7Ozs7R0FLRztBQUNILE1BQU0sT0FBTyxVQUFVO0lBS3JCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQVU7UUFDL0IsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQVUsRUFBRSxFQUFVO1FBQ3pDLE9BQU8sSUFBSSxVQUFVLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2hDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQVUsRUFBRSxFQUFVLEVBQUUsRUFBVTtRQUN4RCxPQUFPLElBQUksVUFBVSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSSxNQUFNLENBQUMsS0FBSyxDQUNqQixFQUFVLEVBQ1YsRUFBVSxFQUNWLEVBQVUsRUFDVixFQUFVO1FBRVYsT0FBTyxJQUFJLFVBQVUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLE1BQU07UUFDZixJQUFJLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbEIsT0FBTyxDQUFDLENBQUM7UUFDWCxDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsRUFBRSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQzthQUFNLElBQUksSUFBSSxD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
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { BBox, Vector2 } from '@twick/core';
|
|
2
|
+
import { Polynomial } from './Polynomial';
|
|
3
|
+
export declare class Polynomial2D {
|
|
4
|
+
readonly c0: Vector2 | Polynomial;
|
|
5
|
+
readonly c1: Vector2 | Polynomial;
|
|
6
|
+
readonly c2?: Vector2 | undefined;
|
|
7
|
+
readonly c3?: Vector2 | undefined;
|
|
8
|
+
readonly x: Polynomial;
|
|
9
|
+
readonly y: Polynomial;
|
|
10
|
+
constructor(c0: Vector2, c1: Vector2, c2: Vector2, c3: Vector2);
|
|
11
|
+
constructor(c0: Vector2, c1: Vector2, c2: Vector2);
|
|
12
|
+
constructor(x: Polynomial, y: Polynomial);
|
|
13
|
+
eval(t: number, derivative?: number): Vector2;
|
|
14
|
+
split(u: number): [Polynomial2D, Polynomial2D];
|
|
15
|
+
differentiate(n?: number): Polynomial2D;
|
|
16
|
+
evalDerivative(t: number): Vector2;
|
|
17
|
+
/**
|
|
18
|
+
* Calculate the tight axis-aligned bounds of the curve in the unit interval.
|
|
19
|
+
*/
|
|
20
|
+
getBounds(): BBox;
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=Polynomial2D.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Polynomial2D.d.ts","sourceRoot":"","sources":["../../src/lib/curves/Polynomial2D.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAE,OAAO,EAAC,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAExC,qBAAa,YAAY;aAQL,EAAE,EAAE,OAAO,GAAG,UAAU;aACxB,EAAE,EAAE,OAAO,GAAG,UAAU;aACxB,EAAE,CAAC,EAAE,OAAO;aACZ,EAAE,CAAC,EAAE,OAAO;IAV9B,SAAgB,CAAC,EAAE,UAAU,CAAC;IAC9B,SAAgB,CAAC,EAAE,UAAU,CAAC;gBAEX,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;gBAClD,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO;gBACrC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU;IAmBxC,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,SAAI,GAAG,OAAO;IAOxC,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;IAM9C,aAAa,CAAC,CAAC,SAAI,GAAG,YAAY;IAIlC,cAAc,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAIzC;;OAEG;IACI,SAAS,IAAI,IAAI;CAQzB"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { BBox, Vector2 } from '@twick/core';
|
|
2
|
+
import { Polynomial } from './Polynomial';
|
|
3
|
+
export class Polynomial2D {
|
|
4
|
+
constructor(c0, c1, c2, c3) {
|
|
5
|
+
this.c0 = c0;
|
|
6
|
+
this.c1 = c1;
|
|
7
|
+
this.c2 = c2;
|
|
8
|
+
this.c3 = c3;
|
|
9
|
+
if (c0 instanceof Polynomial) {
|
|
10
|
+
this.x = c0;
|
|
11
|
+
this.y = c1;
|
|
12
|
+
}
|
|
13
|
+
else if (c3 !== undefined) {
|
|
14
|
+
this.x = new Polynomial(c0.x, c1.x, c2.x, c3.x);
|
|
15
|
+
this.y = new Polynomial(c0.y, c1.y, c2.y, c3.y);
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
this.x = new Polynomial(c0.x, c1.x, c2.x);
|
|
19
|
+
this.y = new Polynomial(c0.y, c1.y, c2.y);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
eval(t, derivative = 0) {
|
|
23
|
+
return new Vector2(this.x.differentiate(derivative).eval(t), this.y.differentiate(derivative).eval(t));
|
|
24
|
+
}
|
|
25
|
+
split(u) {
|
|
26
|
+
const [xPre, xPost] = this.x.split(u);
|
|
27
|
+
const [yPre, yPost] = this.y.split(u);
|
|
28
|
+
return [new Polynomial2D(xPre, yPre), new Polynomial2D(xPost, yPost)];
|
|
29
|
+
}
|
|
30
|
+
differentiate(n = 1) {
|
|
31
|
+
return new Polynomial2D(this.x.differentiate(n), this.y.differentiate(n));
|
|
32
|
+
}
|
|
33
|
+
evalDerivative(t) {
|
|
34
|
+
return this.differentiate().eval(t);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Calculate the tight axis-aligned bounds of the curve in the unit interval.
|
|
38
|
+
*/
|
|
39
|
+
getBounds() {
|
|
40
|
+
const rangeX = this.x.outputRange01();
|
|
41
|
+
const rangeY = this.y.outputRange01();
|
|
42
|
+
return BBox.fromPoints(new Vector2(Math.min(...rangeX), Math.max(...rangeY)), new Vector2(Math.max(...rangeX), Math.min(...rangeY)));
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seW5vbWlhbDJELmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2xpYi9jdXJ2ZXMvUG9seW5vbWlhbDJELnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFDLE1BQU0sYUFBYSxDQUFDO0FBRTFDLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxjQUFjLENBQUM7QUFFeEMsTUFBTSxPQUFPLFlBQVk7SUFPdkIsWUFDa0IsRUFBd0IsRUFDeEIsRUFBd0IsRUFDeEIsRUFBWSxFQUNaLEVBQVk7UUFIWixPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFzQjtRQUN4QixPQUFFLEdBQUYsRUFBRSxDQUFVO1FBQ1osT0FBRSxHQUFGLEVBQUUsQ0FBVTtRQUU1QixJQUFJLEVBQUUsWUFBWSxVQUFVLEVBQUUsQ0FBQztZQUM3QixJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNaLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBZ0IsQ0FBQztRQUM1QixDQUFDO2FBQU0sSUFBSSxFQUFFLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDNUIsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEUsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUcsRUFBYyxDQUFDLENBQUMsRUFBRSxFQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFHLEVBQWMsQ0FBQyxDQUFDLEVBQUUsRUFBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzFELENBQUM7SUFDSCxDQUFDO0lBRU0sSUFBSSxDQUFDLENBQVMsRUFBRSxVQUFVLEdBQUcsQ0FBQztRQUNuQyxPQUFPLElBQUksT0FBTyxDQUNoQixJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQ3hDLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDekMsQ0FBQztJQUNKLENBQUM7SUFFTSxLQUFLLENBQUMsQ0FBUztRQUNwQixNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEMsT0FBTyxDQUFDLElBQUksWUFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxJQUFJLFlBQVksQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQztJQUN4RSxDQUFDO0lBRU0sYUFBYSxDQUFDLENBQUMsR0FBRyxDQUFDO1FBQ3hCLE9BQU8sSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBRU0sY0FBYyxDQUFDLENBQVM7UUFDN0IsT0FBTyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3RDLENBQUM7SUFFRDs7T0FFRztJQUNJLFNBQVM7UUFDZCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3RDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdEMsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUNwQixJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLEVBQ3JELElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FDdEQsQ0FBQztJQUNKLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { type BBox, type Vector2 } from '@twick/core';
|
|
2
|
+
import type { CurvePoint } from './CurvePoint';
|
|
3
|
+
import type { Polynomial2D } from './Polynomial2D';
|
|
4
|
+
import { Segment } from './Segment';
|
|
5
|
+
import { UniformPolynomialCurveSampler } from './UniformPolynomialCurveSampler';
|
|
6
|
+
export declare abstract class PolynomialSegment extends Segment {
|
|
7
|
+
protected readonly curve: Polynomial2D;
|
|
8
|
+
protected readonly length: number;
|
|
9
|
+
protected readonly pointSampler: UniformPolynomialCurveSampler;
|
|
10
|
+
get arcLength(): number;
|
|
11
|
+
abstract get points(): Vector2[];
|
|
12
|
+
protected constructor(curve: Polynomial2D, length: number);
|
|
13
|
+
getBBox(): BBox;
|
|
14
|
+
/**
|
|
15
|
+
* Evaluate the polynomial at the given t value.
|
|
16
|
+
*
|
|
17
|
+
* @param t - The t value at which to evaluate the curve.
|
|
18
|
+
*/
|
|
19
|
+
eval(t: number): CurvePoint;
|
|
20
|
+
/**
|
|
21
|
+
* Split the curve into two separate polynomials at the given t value. The two
|
|
22
|
+
* resulting curves form the same overall shape as the original curve.
|
|
23
|
+
*
|
|
24
|
+
* @param t - The t value at which to split the curve.
|
|
25
|
+
*/
|
|
26
|
+
abstract split(t: number): [PolynomialSegment, PolynomialSegment];
|
|
27
|
+
getPoint(distance: number): CurvePoint;
|
|
28
|
+
transformPoints(matrix: DOMMatrix): Vector2[];
|
|
29
|
+
/**
|
|
30
|
+
* Return the tangent of the point that sits at the provided t value on the
|
|
31
|
+
* curve.
|
|
32
|
+
*
|
|
33
|
+
* @param t - The t value at which to evaluate the curve.
|
|
34
|
+
*/
|
|
35
|
+
tangent(t: number): Vector2;
|
|
36
|
+
draw(context: CanvasRenderingContext2D | Path2D, start?: number, end?: number, move?: boolean): [CurvePoint, CurvePoint];
|
|
37
|
+
protected abstract doDraw(context: CanvasRenderingContext2D | Path2D): void;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=PolynomialSegment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PolynomialSegment.d.ts","sourceRoot":"","sources":["../../src/lib/curves/PolynomialSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyB,KAAK,IAAI,EAAE,KAAK,OAAO,EAAC,MAAM,aAAa,CAAC;AAE5E,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAC;AAClC,OAAO,EAAC,6BAA6B,EAAC,MAAM,iCAAiC,CAAC;AAE9E,8BAAsB,iBAAkB,SAAQ,OAAO;IAUnD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,YAAY;IACtC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,MAAM;IAVnC,SAAS,CAAC,QAAQ,CAAC,YAAY,EAAE,6BAA6B,CAAC;IAE/D,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED,aAA6B,MAAM,IAAI,OAAO,EAAE,CAAC;IAEjD,SAAS,aACY,KAAK,EAAE,YAAY,EACnB,MAAM,EAAE,MAAM;IAM5B,OAAO,IAAI,IAAI;IAItB;;;;OAIG;IACI,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,UAAU;IAUlC;;;;;OAKG;aACa,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAEjE,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAWtC,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,OAAO,EAAE;IAIpD;;;;;OAKG;IACI,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO;IAI3B,IAAI,CACT,OAAO,EAAE,wBAAwB,GAAG,MAAM,EAC1C,KAAK,SAAI,EACT,GAAG,SAAI,EACP,IAAI,UAAO,GACV,CAAC,UAAU,EAAE,UAAU,CAAC;IAyC3B,SAAS,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,GAAG,IAAI;CAC5E"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { transformVectorAsPoint } from '@twick/core';
|
|
2
|
+
import { moveTo } from '../utils';
|
|
3
|
+
import { Segment } from './Segment';
|
|
4
|
+
import { UniformPolynomialCurveSampler } from './UniformPolynomialCurveSampler';
|
|
5
|
+
export class PolynomialSegment extends Segment {
|
|
6
|
+
get arcLength() {
|
|
7
|
+
return this.length;
|
|
8
|
+
}
|
|
9
|
+
constructor(curve, length) {
|
|
10
|
+
super();
|
|
11
|
+
this.curve = curve;
|
|
12
|
+
this.length = length;
|
|
13
|
+
this.pointSampler = new UniformPolynomialCurveSampler(this);
|
|
14
|
+
}
|
|
15
|
+
getBBox() {
|
|
16
|
+
return this.curve.getBounds();
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Evaluate the polynomial at the given t value.
|
|
20
|
+
*
|
|
21
|
+
* @param t - The t value at which to evaluate the curve.
|
|
22
|
+
*/
|
|
23
|
+
eval(t) {
|
|
24
|
+
const tangent = this.tangent(t);
|
|
25
|
+
return {
|
|
26
|
+
position: this.curve.eval(t),
|
|
27
|
+
tangent,
|
|
28
|
+
normal: tangent.perpendicular,
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
getPoint(distance) {
|
|
32
|
+
const closestPoint = this.pointSampler.pointAtDistance(this.arcLength * distance);
|
|
33
|
+
return {
|
|
34
|
+
position: closestPoint.position,
|
|
35
|
+
tangent: closestPoint.tangent,
|
|
36
|
+
normal: closestPoint.tangent.perpendicular,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
transformPoints(matrix) {
|
|
40
|
+
return this.points.map(point => transformVectorAsPoint(point, matrix));
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Return the tangent of the point that sits at the provided t value on the
|
|
44
|
+
* curve.
|
|
45
|
+
*
|
|
46
|
+
* @param t - The t value at which to evaluate the curve.
|
|
47
|
+
*/
|
|
48
|
+
tangent(t) {
|
|
49
|
+
return this.curve.evalDerivative(t).normalized;
|
|
50
|
+
}
|
|
51
|
+
draw(context, start = 0, end = 1, move = true) {
|
|
52
|
+
let curve = null;
|
|
53
|
+
let startT = start;
|
|
54
|
+
let endT = end;
|
|
55
|
+
let points = this.points;
|
|
56
|
+
if (start !== 0 || end !== 1) {
|
|
57
|
+
const startDistance = this.length * start;
|
|
58
|
+
const endDistance = this.length * end;
|
|
59
|
+
startT = this.pointSampler.distanceToT(startDistance);
|
|
60
|
+
endT = this.pointSampler.distanceToT(endDistance);
|
|
61
|
+
const relativeEndT = (endT - startT) / (1 - startT);
|
|
62
|
+
const [, startSegment] = this.split(startT);
|
|
63
|
+
[curve] = startSegment.split(relativeEndT);
|
|
64
|
+
points = curve.points;
|
|
65
|
+
}
|
|
66
|
+
if (move) {
|
|
67
|
+
moveTo(context, points[0]);
|
|
68
|
+
}
|
|
69
|
+
(curve ?? this).doDraw(context);
|
|
70
|
+
const startTangent = this.tangent(startT);
|
|
71
|
+
const endTangent = this.tangent(endT);
|
|
72
|
+
return [
|
|
73
|
+
{
|
|
74
|
+
position: points[0],
|
|
75
|
+
tangent: startTangent,
|
|
76
|
+
normal: startTangent.perpendicular,
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
position: points.at(-1),
|
|
80
|
+
tangent: endTangent,
|
|
81
|
+
normal: endTangent.perpendicular,
|
|
82
|
+
},
|
|
83
|
+
];
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUG9seW5vbWlhbFNlZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2N1cnZlcy9Qb2x5bm9taWFsU2VnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsc0JBQXNCLEVBQTBCLE1BQU0sYUFBYSxDQUFDO0FBQzVFLE9BQU8sRUFBQyxNQUFNLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFHaEMsT0FBTyxFQUFDLE9BQU8sRUFBQyxNQUFNLFdBQVcsQ0FBQztBQUNsQyxPQUFPLEVBQUMsNkJBQTZCLEVBQUMsTUFBTSxpQ0FBaUMsQ0FBQztBQUU5RSxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLE9BQU87SUFHckQsSUFBVyxTQUFTO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBSUQsWUFDcUIsS0FBbUIsRUFDbkIsTUFBYztRQUVqQyxLQUFLLEVBQUUsQ0FBQztRQUhXLFVBQUssR0FBTCxLQUFLLENBQWM7UUFDbkIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUdqQyxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksNkJBQTZCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVNLE9BQU87UUFDWixPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSSxJQUFJLENBQUMsQ0FBUztRQUNuQixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRWhDLE9BQU87WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1lBQzVCLE9BQU87WUFDUCxNQUFNLEVBQUUsT0FBTyxDQUFDLGFBQWE7U0FDOUIsQ0FBQztJQUNKLENBQUM7SUFVTSxRQUFRLENBQUMsUUFBZ0I7UUFDOUIsTUFBTSxZQUFZLEdBQUcsSUFBSSxD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
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Vector2 } from '@twick/core';
|
|
2
|
+
import { PolynomialSegment } from './PolynomialSegment';
|
|
3
|
+
/**
|
|
4
|
+
* A spline segment representing a quadratic Bézier curve.
|
|
5
|
+
*/
|
|
6
|
+
export declare class QuadBezierSegment extends PolynomialSegment {
|
|
7
|
+
readonly p0: Vector2;
|
|
8
|
+
readonly p1: Vector2;
|
|
9
|
+
readonly p2: Vector2;
|
|
10
|
+
private static el;
|
|
11
|
+
get points(): Vector2[];
|
|
12
|
+
constructor(p0: Vector2, p1: Vector2, p2: Vector2);
|
|
13
|
+
split(t: number): [PolynomialSegment, PolynomialSegment];
|
|
14
|
+
protected static getLength(p0: Vector2, p1: Vector2, p2: Vector2): number;
|
|
15
|
+
protected doDraw(context: CanvasRenderingContext2D | Path2D): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=QuadBezierSegment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuadBezierSegment.d.ts","sourceRoot":"","sources":["../../src/lib/curves/QuadBezierSegment.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAO,MAAM,aAAa,CAAC;AAG1C,OAAO,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAEtD;;GAEG;AACH,qBAAa,iBAAkB,SAAQ,iBAAiB;aASpC,EAAE,EAAE,OAAO;aACX,EAAE,EAAE,OAAO;aACX,EAAE,EAAE,OAAO;IAT7B,OAAO,CAAC,MAAM,CAAC,EAAE,CAAiB;IAElC,IAAW,MAAM,IAAI,OAAO,EAAE,CAE7B;gBAGiB,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,OAAO,EACX,EAAE,EAAE,OAAO;IActB,KAAK,CAAC,CAAC,EAAE,MAAM,GAAG,CAAC,iBAAiB,EAAE,iBAAiB,CAAC;IAiB/D,SAAS,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,GAAG,MAAM;cAUtD,MAAM,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM;CAGrE"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { Vector2, lazy } from '@twick/core';
|
|
8
|
+
import { quadraticCurveTo } from '../utils';
|
|
9
|
+
import { Polynomial2D } from './Polynomial2D';
|
|
10
|
+
import { PolynomialSegment } from './PolynomialSegment';
|
|
11
|
+
/**
|
|
12
|
+
* A spline segment representing a quadratic Bézier curve.
|
|
13
|
+
*/
|
|
14
|
+
export class QuadBezierSegment extends PolynomialSegment {
|
|
15
|
+
get points() {
|
|
16
|
+
return [this.p0, this.p1, this.p2];
|
|
17
|
+
}
|
|
18
|
+
constructor(p0, p1, p2) {
|
|
19
|
+
super(new Polynomial2D(p0,
|
|
20
|
+
// 2*(-p0+p1)
|
|
21
|
+
p0.flipped.add(p1).scale(2),
|
|
22
|
+
// p0-2*p1+p2
|
|
23
|
+
p0.sub(p1.scale(2)).add(p2)), QuadBezierSegment.getLength(p0, p1, p2));
|
|
24
|
+
this.p0 = p0;
|
|
25
|
+
this.p1 = p1;
|
|
26
|
+
this.p2 = p2;
|
|
27
|
+
}
|
|
28
|
+
split(t) {
|
|
29
|
+
const a = new Vector2(this.p0.x + (this.p1.x - this.p0.x) * t, this.p0.y + (this.p1.y - this.p0.y) * t);
|
|
30
|
+
const b = new Vector2(this.p1.x + (this.p2.x - this.p1.x) * t, this.p1.y + (this.p2.y - this.p1.y) * t);
|
|
31
|
+
const p = new Vector2(a.x + (b.x - a.x) * t, a.y + (b.y - a.y) * t);
|
|
32
|
+
const left = new QuadBezierSegment(this.p0, a, p);
|
|
33
|
+
const right = new QuadBezierSegment(p, b, this.p2);
|
|
34
|
+
return [left, right];
|
|
35
|
+
}
|
|
36
|
+
static getLength(p0, p1, p2) {
|
|
37
|
+
// Let the browser do the work for us instead of calculating the arclength
|
|
38
|
+
// manually.
|
|
39
|
+
QuadBezierSegment.el.setAttribute('d', `M ${p0.x} ${p0.y} Q ${p1.x} ${p1.y} ${p2.x} ${p2.y}`);
|
|
40
|
+
return QuadBezierSegment.el.getTotalLength();
|
|
41
|
+
}
|
|
42
|
+
doDraw(context) {
|
|
43
|
+
quadraticCurveTo(context, this.p1, this.p2);
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
__decorate([
|
|
47
|
+
lazy(() => document.createElementNS('http://www.w3.org/2000/svg', 'path'))
|
|
48
|
+
], QuadBezierSegment, "el", void 0);
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUXVhZEJlemllclNlZ21lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbGliL2N1cnZlcy9RdWFkQmV6aWVyU2VnbWVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxPQUFPLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUMxQyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUMsTUFBTSxVQUFVLENBQUM7QUFDMUMsT0FBTyxFQUFDLFlBQVksRUFBQyxNQUFNLGdCQUFnQixDQUFDO0FBQzVDLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXREOztHQUVHO0FBQ0gsTUFBTSxPQUFPLGlCQUFrQixTQUFRLGlCQUFpQjtJQUl0RCxJQUFXLE1BQU07UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUNyQyxDQUFDO0lBRUQsWUFDa0IsRUFBVyxFQUNYLEVBQVcsRUFDWCxFQUFXO1FBRTNCLEtBQUssQ0FDSCxJQUFJLFlBQVksQ0FDZCxFQUFFO1FBQ0YsYUFBYTtRQUNiLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDM0IsYUFBYTtRQUNiLEVBQUUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FDNUIsRUFDRCxpQkFBaUIsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FDeEMsQ0FBQztRQWJjLE9BQUUsR0FBRixFQUFFLENBQVM7UUFDWCxPQUFFLEdBQUYsRUFBRSxDQUFTO1FBQ1gsT0FBRSxHQUFGLEVBQUUsQ0FBUztJQVk3QixDQUFDO0lBRU0sS0FBSyxDQUFDLENBQVM7UUFDcEIsTUFBTSxDQUFDLEdBQUcsSUFBSSxPQUFPLENBQ25CLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQ3ZDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQ3hDLENBQUM7UUFDRixNQUFNLENBQUMsR0FBRyxJQUFJLE9BQU8sQ0FDbkIsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFDdkMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FDeEMsQ0FBQztRQUNGLE1BQU0sQ0FBQyxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sSUFBSSxHQUFHLElBQUksaUJBQWlCLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEQsTUFBTSxLQUFLLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUVuRCxPQUFPLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ3ZCLENBQUM7SUFFUyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQVcsRUFBRSxFQUFXLEVBQUUsRUFBVztRQUM5RCwwRUFBMEU7UUFDMUUsWUFBWTtRQUNaLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxZQUFZLENBQy9CLEdBQUcsRUFDSCxLQUFLLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQ3RELENBQUM7UUFDRixPQUFPLGlCQUFpQixDQUFDLEVBQUUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUMvQyxDQUFDO0lBRWtCLE1BQU0sQ0FBQyxPQUEwQztRQUNsRSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBckRnQjtJQURkLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLDRCQUE0QixFQUFFLE1BQU0sQ0FBQyxDQUFDO21DQUN6QyJ9
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Vector2 } from '@twick/core';
|
|
2
|
+
import type { CurvePoint } from './CurvePoint';
|
|
3
|
+
export declare abstract class Segment {
|
|
4
|
+
abstract readonly points: Vector2[];
|
|
5
|
+
abstract draw(context: CanvasRenderingContext2D | Path2D, start: number, end: number, move: boolean): [CurvePoint, CurvePoint];
|
|
6
|
+
abstract getPoint(distance: number): CurvePoint;
|
|
7
|
+
abstract get arcLength(): number;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=Segment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Segment.d.ts","sourceRoot":"","sources":["../../src/lib/curves/Segment.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAE7C,8BAAsB,OAAO;IAC3B,kBAAyB,MAAM,EAAE,OAAO,EAAE,CAAC;aAE3B,IAAI,CAClB,OAAO,EAAE,wBAAwB,GAAG,MAAM,EAC1C,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,OAAO,GACZ,CAAC,UAAU,EAAE,UAAU,CAAC;aAEX,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAEtD,aAAoB,SAAS,IAAI,MAAM,CAAC;CACzC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { CurvePoint } from './CurvePoint';
|
|
2
|
+
import type { PolynomialSegment } from './PolynomialSegment';
|
|
3
|
+
/**
|
|
4
|
+
* Class to uniformly sample points on a given polynomial curve.
|
|
5
|
+
*
|
|
6
|
+
* @remarks
|
|
7
|
+
* In order to uniformly sample points from non-linear curves, this sampler
|
|
8
|
+
* re-parameterizes the curve by arclength.
|
|
9
|
+
*/
|
|
10
|
+
export declare class UniformPolynomialCurveSampler {
|
|
11
|
+
private readonly curve;
|
|
12
|
+
private sampledDistances;
|
|
13
|
+
/**
|
|
14
|
+
* @param curve - The curve to sample
|
|
15
|
+
* @param samples - How many points to sample from the provided curve. The
|
|
16
|
+
* more points get sampled, the higher the resolution–and
|
|
17
|
+
* therefore precision–of the sampler.
|
|
18
|
+
*/
|
|
19
|
+
constructor(curve: PolynomialSegment, samples?: number);
|
|
20
|
+
/**
|
|
21
|
+
* Discard all previously sampled points and resample the provided number of
|
|
22
|
+
* points from the curve.
|
|
23
|
+
*
|
|
24
|
+
* @param samples - The number of points to sample.
|
|
25
|
+
*/
|
|
26
|
+
resample(samples: number): void;
|
|
27
|
+
/**
|
|
28
|
+
* Return the point at the provided distance along the sampled curve's
|
|
29
|
+
* arclength.
|
|
30
|
+
*
|
|
31
|
+
* @param distance - The distance along the curve's arclength for which to
|
|
32
|
+
* retrieve the point.
|
|
33
|
+
*/
|
|
34
|
+
pointAtDistance(distance: number): CurvePoint;
|
|
35
|
+
/**
|
|
36
|
+
* Return the t value for the point at the provided distance along the sampled
|
|
37
|
+
* curve's arc length.
|
|
38
|
+
*
|
|
39
|
+
* @param distance - The distance along the arclength
|
|
40
|
+
*/
|
|
41
|
+
distanceToT(distance: number): number;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=UniformPolynomialCurveSampler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniformPolynomialCurveSampler.d.ts","sourceRoot":"","sources":["../../src/lib/curves/UniformPolynomialCurveSampler.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAC,UAAU,EAAC,MAAM,cAAc,CAAC;AAC7C,OAAO,KAAK,EAAC,iBAAiB,EAAC,MAAM,qBAAqB,CAAC;AAE3D;;;;;;GAMG;AACH,qBAAa,6BAA6B;IAUtC,OAAO,CAAC,QAAQ,CAAC,KAAK;IATxB,OAAO,CAAC,gBAAgB,CAAgB;IAExC;;;;;OAKG;gBAEgB,KAAK,EAAE,iBAAiB,EACzC,OAAO,SAAK;IAKd;;;;;OAKG;IACI,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAsBtC;;;;;;OAMG;IACI,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,UAAU;IAIpD;;;;;OAKG;IACI,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAoB7C"}
|