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

feat: cropping picks smaller viewbox in gallery and editor #1518

Merged
merged 2 commits into from Jun 29, 2023

Conversation

rjainrjain
Copy link
Contributor

@rjainrjain rjainrjain commented Jun 29, 2023

Description

This PR resolves the problem of diagram previews being cropped to the tightest bounding box even when the intended view box is zoomed in on a portion of the total shapes, which makes some previews look wholly unlike the actual diagrams in the gallery and the editor.

We introduce a check to compare the areas of (1) the existing view box and (2) the tightest bounding box of all shapes, and set the SVG viewBox to the smaller of the two.

Implementation strategy and design decisions

Since this is done after the SVGs have been produced, we parse the widths and heights of the viewBox and croppedViewBox strings from these SVGs to calculate the area. We only set the viewBox to the values in croppedViewBox if the area of the latter is smaller than the former.

Examples with steps to reproduce them

Here is a screenshot of the previously badly cropped diagram in the gallery (Brownian Motion Absorbed at Boundary), which is now fixed:
Screen Shot 2023-06-29 at 10 34 54 AM
And here it is in the editor:
Screen Shot 2023-06-29 at 10 35 11 AM

Checklist

  • I have commented my code, particularly in hard-to-understand areas
  • I have reviewed any generated registry diagram changes

@rjainrjain rjainrjain requested a review from wodeni June 29, 2023 14:45
@github-actions
Copy link

github-actions bot commented Jun 29, 2023

± Registry diff

📊 Performance

Key

Note that each bar component rounds up to the nearest 100ms, so each full bar is an overestimate by up to 400ms.

     0s   1s   2s   3s   4s   5s   6s   7s   8s
     |    |    |    |    |    |    |    |    |
name ▝▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▞▀▀▀▀▀▀▀▀▀▀▚▄▄▄▄▄▄▄▄▄▖
      compiling labeling optimizing rendering

If a row has only one bar instead of four, that means it's not a trio and the bar just shows the total time spent for that example, again rounded up to the nearest 100ms.

Data

                                                          0s   1s   2s   3s   4s   5s   6s
                                                          |    |    |    |    |    |    |
set-theory-domain/tree-venn                               ▝▀▞▖
set-theory-domain/tree-tree                               ▝▚▚
group-theory/quaternion-multiplication-table              ▝▀▀▄▚▄
walk-on-spheres/SignedAngleOutside                        ▝▀▀▚▚▖
spectral-graphs/examples/hypercube                        ▝▀▚▚
group-theory/quaternion-cayley-graph                      ▝▀▞▄
set-theory-domain/tree-venn-3d                            ▝▚▚▖
atoms-and-bonds/one-water-molecule                        ▝▞▖
structural-formula/molecules/caffeine                     ▝▀▀▀▄▀▀▀▀▄▖
walk-on-spheres/walk-on-stars                             ▝▀▀▀▚▚▄▄
set-theory-domain/continuousmap                           ▝▞▖
mobius/mobius                                             ▝▞▖
linear-algebra-domain/two-vectors-perp                    ▝▞▖
tutorials/tutorial1                                       ▝▞▖
tutorials/tutorial2                                       ▝▞▖
tutorials/tutorial3                                       ▝▞▖
molecules/nitricacid-lewis                                ▝▀▚▀▖
exterior-algebra/vector-wedge                             ▝▞▖
shape-spec/all-shapes                                     ▝▞▄▖
shape-spec/arrowheads                                     ▝▞▖
graph-domain/textbook/sec1/fig1                           ▝▀▀▞▀▖
graph-domain/textbook/sec1/fig2                           ▝▀▀▚▀▀▖
graph-domain/textbook/sec1/fig3                           ▝▀▀▀▚▀▀▖
graph-domain/textbook/sec1/fig4                           ▝▀▀▚▀▀▖
spectral-graphs/examples/hexagonal-lattice                ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚▀▀▄▄
graph-domain/textbook/sec1/fig5                           ▝▀▀▀▚▀▀▀▖
graph-domain/textbook/sec1/fig6                           ▝▀▀▀▀▀▀▀▀▀▚▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▖
graph-domain/textbook/sec1/fig7                           ▝▀▞▖
graph-domain/textbook/sec1/fig8a                          ▝▀▀▀▚▀▀▚
graph-domain/textbook/sec1/fig8b                          ▝▀▀▀▞▀▀▖
graph-domain/textbook/sec1/fig9                           ▝▀▀▞▚▖
graph-domain/textbook/sec1/fig10                          ▝▀▚▚▖
graph-domain/textbook/sec1/fig11                          ▝▀▀▚▀▄
graph-domain/textbook/sec1/fig12                          ▝▀▀▀▚▀▀▖
graph-domain/textbook/sec1/fig13                          ▝▀▀▀▞▀▚
graph-domain/textbook/sec2/fig3                           ▝▀▀▀▀▚▀▀▀▀▖
graph-domain/textbook/sec2/fig4                           ▝▀▀▀▚▀▀▚
graph-domain/textbook/sec2/fig5                           ▝▀▀▀▀▀▀▚▀▀▀▀▖
graph-domain/textbook/sec2/fig6                           ▝▀▀▀▀▀▚▀▀▀▚▖
graph-domain/textbook/sec2/fig9                           ▝▀▀▀▀▀▀▀▀▞▀▀▀▀▀▚
graph-domain/textbook/sec2/fig10a                         ▝▀▀▞▀▖
graph-domain/textbook/sec2/fig10b                         ▝▀▀▚▀▖
graph-domain/textbook/sec2/fig11a                         ▝▀▞▖
graph-domain/textbook/sec2/fig11b                         ▝▚▚
graph-domain/textbook/sec2/fig11c                         ▝▀▞▖
graph-domain/textbook/sec2/fig12                          ▝▀▞▖
graph-domain/textbook/sec2/fig13                          ▝▀▀▀▀▀▀▀▀▀▚▀▀▀▀▀▀▀▀▀▀▀▀▖
graph-domain/textbook/sec2/fig14                          ▝▀▀▞▄
graph-domain/textbook/sec2/fig16b                         ▝▀▞▄
geometry-domain/textbook_problems/c05p13                  ▝▀▞▖
geometry-domain/textbook_problems/c01p01                  ▝▀▞▖
geometry-domain/textbook_problems/c03p01                  ▝▀▞▖
geometry-domain/textbook_problems/c05p01                  ▝▀▞▖
geometry-domain/textbook_problems/ex                      ▝▀▀▞▚
triangle-mesh-3d/two-triangles                            ▝▚▚
random-sampling/test                                      ▝▀▀▚▚
geometry-domain/textbook_problems/c11p12                  ▝▀▚▚
curve-examples/catmull-rom/catmull-rom                    ▝▞▖
word-cloud/example                                        ▝▀▚▀▚
geometry-domain/siggraph-teaser                           ▝▀▚▚
minkowski-tests/maze/non-convex                           ▝▚▚
lagrange-bases/lagrange-bases                             ▝▚▚
hypergraph/hypergraph                                     ▝▀▀▀▞▀▀▀▀▀▀▀▀▀▀▀▀▚
persistent-homology/persistent-homology                   ▝▀▚▀▀▀▀▀▄
walk-on-spheres/laplace-estimator                         ▝▀▚▚
walk-on-spheres/poisson-estimator                         ▝▀▀▚▚
walk-on-spheres/nested-estimator                          ▝▀▀▞▖
walk-on-spheres/offcenter-estimator                       ▝▀▚▚
shape-distance/points-around-star                         ▝▀▀▞▖
shape-distance/points-around-polyline                     ▝▀▞▖
shape-distance/points-around-line                         ▝▀▞▖
shape-distance/lines-around-rect                          ▝▚▚
fake-3d-linear-algebra/projection                         ▝▞▖
animation/center-shrink-circle                            ▝▞▖
graph-domain/other-examples/hamiltonian-cycle             ▝▀▀▚▀▚
structural-formula/reactions/methane-combustion           ▝▀▀▚▀▀▀▀▀▖
molecules/glutamine                                       ▝▀▞▖
matrix-ops/tests/matrix-matrix-addition                   ▝▚▚
matrix-ops/tests/matrix-matrix-division-elementwise       ▝▚▚
matrix-ops/tests/matrix-matrix-multiplication-elementwise ▝▚▚
matrix-ops/tests/matrix-matrix-multiplication             ▝▚▚
matrix-ops/tests/matrix-matrix-subtraction                ▝▚▚
matrix-ops/tests/matrix-transpose                         ▝▚▚
matrix-ops/tests/matrix-vector-left-multiplication        ▝▚▚
matrix-ops/tests/matrix-vector-right-multiplication       ▝▚▚
matrix-ops/tests/scalar-vector-division                   ▝▚▚
matrix-ops/tests/scalar-vector-left-multiplication        ▝▚▚
matrix-ops/tests/scalar-vector-right-multiplication       ▝▚▚
matrix-ops/tests/vector-vector-addition                   ▝▚▚
matrix-ops/tests/vector-vector-division-elementwise       ▝▚▚
matrix-ops/tests/vector-vector-multiplication-elementwise ▝▚▚
matrix-ops/tests/vector-vector-outerproduct               ▝▚▚
matrix-ops/tests/vector-vector-subtraction                ▝▚▚
logic-circuit-domain/half-adder                           ▝▚▚
curve-examples/cubic-bezier                               ▝▚▀▀▖
triangle-mesh-2d/diagrams/cotan-formula                   ▝▀▞▖
triangle-mesh-2d/diagrams/concyclic-pair                  ▝▀▞▚
triangle-mesh-2d/diagrams/halfedge-mesh                   ▝▀▞▖
triangle-mesh-2d/diagrams/relative-orientation            ▝▚▚
triangle-mesh-2d/diagrams/triangle-centers                ▝▚▚
triangle-mesh-2d/diagrams/angle-equivalence               ▝▀▀▞▀▚
timeline/penrose                                          ▝▀▀▚▀▖
graph-domain/textbook/sec5/ex32                           ▝▀▀▀▀▀▀▀▞▀▀▀▀▀▀▀▀▖
curve-examples/open-elastic-curve                         ▝▀▞▚
curve-examples/closed-elastic-curve                       ▝▀▞▀▖
graph-domain/other-examples/arpanet                       ▝▀▀▀▀▀▀▚▀▀▀▀▀▀▀▀▀▀▀▀▀▖
graph-domain/other-examples/nyc-subway                    ▝▀▀▀▀▀▀▀▀▚▀▀▀▀▀▀▚
fancy-text/fancy-text                                     ▝▀▞▚
curve-examples/blobs                                      ▝▀▀▀▀▀▚▀▀▀▀▀▀▀▀▀▀▀▀▀▀▚
curve-examples/space-curves                               ▝▀▀▀▀▞▀▀▚
geometric-queries/ray-intersect/test-group                ▝▀▀▀▀▀▀▚▚▖
ray-tracing/path-trace                                    ▝▀▚▚
ray-tracing/bidirectional                                 ▝▀▞▖
ray-tracing/next-event-estimation                         ▝▀▚▚
geometric-queries/test                                    ▝▚▚
geometric-queries/closest-point/test-group                ▝▚▚
geometric-queries/closest-point/test                      ▝▚▚
geometric-queries/closest-silhouette-point/test           ▝▞▖
geometric-queries/ray-intersect/test                      ▝▀▀▀▀▀▚▚▄
box-arrow-diagram/computer-architecture                   ▝▀▀▀▀▀▀▀▀▀▞▀▀▀▀▀▀▀▀▀▀▀▀▀▚
stochastic-process/stochastic-process                     ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▞▄▄▄
stochastic-process/epsilon-shell/AbsorbingBoundary        ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▞▄▄▄▄▄▄▖
solid/eigenspace                                          ▐█
solid/triangles                                           ▐█
solid/vectors                                             ▐▌
tsne/tsne                                                 ▝▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▞▀▀▀▀▀▀▄▖
spectral-graphs/examples/4x4-sudoku-graph                 ▝▀▀▚▚▖
spectral-graphs/examples/dodecahedral-graph               ▝▀▞▖
atoms-and-bonds/wet-floor                                 ▝▚▀▖

@cloudflare-pages
Copy link

cloudflare-pages bot commented Jun 29, 2023

Deploying with  Cloudflare Pages  Cloudflare Pages

Latest commit: a8cdf0a
Status: ✅  Deploy successful!
Preview URL: https://2778a9e4.penrose-72l.pages.dev
Branch Preview URL: https://rijul-crop-by-area.penrose-72l.pages.dev

View logs

Copy link
Member

@wodeni wodeni left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great! BTW I'm removing some redundant calls to cropSVG in #1515 soon.

@wodeni wodeni merged commit b59854a into main Jun 29, 2023
10 checks passed
@wodeni wodeni deleted the rijul/crop-by-area branch June 29, 2023 19:22
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 this pull request may close these issues.

None yet

2 participants