package shape
import (
"math"
"oss.terrastruct.com/d2/lib/geo"
"oss.terrastruct.com/d2/lib/svg"
"oss.terrastruct.com/util-go/go2"
)
type shapeDocument struct {
*baseShape
}
const (
docPathHeight = 18.925
docPathInnerBottom = 14
docPathBottom = 16.3
)
func NewDocument (box *geo .Box ) Shape {
shape := shapeDocument {
baseShape : &baseShape {
Type : DOCUMENT_TYPE ,
Box : box ,
},
}
shape .FullShape = go2 .Pointer (Shape (shape ))
return shape
}
func (s shapeDocument ) GetInnerBox () *geo .Box {
height := s .Box .Height * docPathInnerBottom / docPathHeight
return geo .NewBox (s .Box .TopLeft .Copy (), s .Box .Width , height )
}
func documentPath(box *geo .Box ) *svg .SvgPathContext {
pc := svg .NewSVGPathContext (box .TopLeft , box .Width , box .Height )
pc .StartAt (pc .Absolute (0 , docPathBottom /docPathHeight ))
pc .L (false , 0 , 0 )
pc .L (false , 1 , 0 )
pc .L (false , 1 , docPathBottom /docPathHeight )
pc .C (false , 5 /6.0 , 12.8 /docPathHeight , 2 /3.0 , 12.8 /docPathHeight , 1 /2.0 , docPathBottom /docPathHeight )
pc .C (false , 1 /3.0 , 19.8 /docPathHeight , 1 /6.0 , 19.8 /docPathHeight , 0 , docPathBottom /docPathHeight )
pc .Z ()
return pc
}
func (s shapeDocument ) Perimeter () []geo .Intersectable {
return documentPath (s .Box ).Path
}
func (s shapeDocument ) GetSVGPathData () []string {
return []string {
documentPath (s .Box ).PathData (),
}
}
func (s shapeDocument ) GetDimensionsToFit (width , height , paddingX , paddingY float64 ) (float64 , float64 ) {
baseHeight := (height + paddingY ) * docPathHeight / docPathInnerBottom
return math .Ceil (width + paddingX ), math .Ceil (baseHeight )
}
func (s shapeDocument ) GetDefaultPadding () (paddingX , paddingY float64 ) {
return defaultPadding , defaultPadding * docPathInnerBottom / docPathHeight
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .