Skip to content

Instantly share code, notes, and snippets.

@innermond
Last active March 19, 2020 17:22
Show Gist options
  • Save innermond/75b81db10d605ad11664dd30a4b551c6 to your computer and use it in GitHub Desktop.
Save innermond/75b81db10d605ad11664dd30a4b551c6 to your computer and use it in GitHub Desktop.
flipxy svg
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta name="author" content="">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<style>
#src {
border: 1px solid silver;
width: max-content;
display: flex;
}
image, rect, path, circle, tspan {cursor: pointer;}
</style>
</head>
<body>
<div id="src">
<?php include('t0.svg') ?>
</div>
<script>
let
$svg = document.querySelector('svg'),
$g = document.querySelector('g'),
$r = document.querySelector('#rect')
let rbb = $r.getBBox()
let cx = rbb.x+rbb.width*0.5
let cy = rbb.y+rbb.height*0.5
$g.appendChild($r.cloneNode(true))
let u = 30
let gbase = $g.transform.baseVal
gbase.initialize($svg.createSVGTransformFromMatrix($g.getCTM().translate(10,-100)))
let $rtx = $r.getCTM().inverse().multiply($g.getCTM())
let rx = $rtx.translate(cx,cy).rotate(u).translate(-cx, -cy)
rx = rx.flipX().translate(-2*rbb.x-rbb.width, 0).translate(cx, cy).rotate(180+2*u).translate(-cx, -cy)
$r.transform.baseVal.initialize($svg.createSVGTransformFromMatrix(rx))
//rx = rx.flipY().translate(0, -rbb.y-rbb.height)
/*let $o = $r.cloneNode(true)
$g.appendChild($o)
let obb = $o.getBBox()
let ox = obb.x+obb.width*0.5
let oy = obb.y+obb.height*0.5
let $otx = $o.getCTM().inverse().multiply($g.getCTM())
let xo = $otx.translate(ox,oy).rotate(180+2*u).translate(-ox, -oy)
//xo = xo.translate(-2*obb.x-obb.width, 0)
$o.transform.baseVal.initialize($svg.createSVGTransformFromMatrix(xo))
*/
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment