Help us shape the future of Go! Take the 2026 Go Developer Survey

geom

package
v0.1.6 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 27, 2026 License: Apache-2.0 Imports: 3 Imported by: 0

Documentation

Overview

Package geom 提供渲染核心与各后端共用的几何类型及OFD绘制规则。 Path、Matrix、Point、Rect及描边类型是github.com/zc310/canvas的类型别名, 路径变换、裁剪、描边展开均复用该依赖,不在本仓库维护第二套路径引擎。

颜色、画笔和分辨率规则由本包维护:渐变保留OFD的非预乘插值及透明色标, Paint区分未指定颜色与显式透明,MinimumRasterStrokeWidth处理设备线宽下限。 各后端共享几何类型,绘制与字体引擎仍通过drawing接口注册。

Index

Constants

View Source
const (
	MoveToCmd = canvas.MoveToCmd
	LineToCmd = canvas.LineToCmd
	QuadToCmd = canvas.QuadToCmd
	CubeToCmd = canvas.CubeToCmd
	ArcToCmd  = canvas.ArcToCmd
	CloseCmd  = canvas.CloseCmd

	NonZero  = canvas.NonZero
	EvenOdd  = canvas.EvenOdd
	Positive = canvas.Positive
	Negative = canvas.Negative

	// Tolerance 是OFD描边展开显式传入的毫米容差,不修改canvas的全局配置。
	Tolerance         = 0.01
	DefaultResolution = canvas.DefaultResolution
)

Variables

View Source
var (
	Transparent = color.RGBA{}
	Black       = color.RGBA{A: 0xff}
	White       = color.RGBA{R: 0xff, G: 0xff, B: 0xff, A: 0xff}
)

常用颜色(与 canvas 的 Transparent/Black/White 一致)。

View Source
var (
	Identity  = canvas.Identity
	ButtCap   = canvas.ButtCap
	RoundCap  = canvas.RoundCap
	SquareCap = canvas.SquareCap
	BevelJoin = canvas.BevelJoin
	RoundJoin = canvas.RoundJoin
	MiterJoin = canvas.MiterJoin
)

Functions

func Equal

func Equal(a, b float64) bool

func MinimumRasterStrokeWidth added in v0.1.5

func MinimumRasterStrokeWidth(resolution Resolution) float64

MinimumRasterStrokeWidth 返回栅格化时极细正线宽的下限(毫米)。 GB/T 33190—2016 表21以两个像素描述正线宽的设备下限;低分辨率预览 按300 DPI参考设备换算该下限,允许抗锯齿覆盖不足一个输出像素, 避免将字形轮廓扩成两个实心像素后挤住字腔。300 DPI及以上按实际设备计算。

func SolveQuadraticFormula

func SolveQuadraticFormula(a, b, c float64) (float64, float64)

Types

type BevelJoiner

type BevelJoiner = canvas.BevelJoiner

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type ButtCapper

type ButtCapper = canvas.ButtCapper

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type Capper

type Capper = canvas.Capper

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type FillRule

type FillRule = canvas.FillRule

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type Grad

type Grad []Stop

Grad 是按 offset 升序排列的渐变色标集合。

func NewGradient

func NewGradient() Grad

NewGradient 返回空的渐变色标集合。

func (*Grad) Add

func (g *Grad) Add(t float64, c color.RGBA)

Add 插入或替换一个色标,保持升序。

func (Grad) At

func (g Grad) At(t float64) color.RGBA

At 返回位置 t ∈ [0,1] 处的颜色(线性插值,端点外取端点色)。

func (Grad) ToLinear

func (g Grad) ToLinear(start, end Point) *LinearGradient

ToLinear 把色标集合绑定到线性渐变。

func (Grad) ToRadial

func (g Grad) ToRadial(c0 Point, r0 float64, c1 Point, r1 float64) *RadialGradient

ToRadial 把色标集合绑定到径向渐变。

type Gradient

type Gradient interface {
	At(x, y float64) color.RGBA
}

Gradient 是OFD渐变采样接口:返回 (x,y) 处的颜色。 canvas 后端把它包装成 canvas.Gradient;gg 等后端直接用采样画笔消费。

type GradientFunc

type GradientFunc func(x, y float64) color.RGBA

GradientFunc 让普通函数实现 Gradient。

func (GradientFunc) At

func (f GradientFunc) At(x, y float64) color.RGBA

At 实现 Gradient。

type Joiner

type Joiner = canvas.Joiner

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type LinearGradient

type LinearGradient struct {
	Grad

	Start, End Point
	// Extend[0] 控制起点之前是否着色、Extend[1] 控制终点之后是否着色;
	// 为 false 时该区域不着色(透明)。
	Extend [2]bool
	// contains filtered or unexported fields
}

LinearGradient 是 start→end 的线性渐变。

func NewLinearGradient

func NewLinearGradient(start, end Point) *LinearGradient

NewLinearGradient 返回线性渐变,默认两端都延伸。

func (*LinearGradient) At

func (g *LinearGradient) At(x, y float64) color.RGBA

At 返回 (x,y) 处的颜色。

type Matrix

type Matrix = canvas.Matrix

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type MiterJoiner

type MiterJoiner = canvas.MiterJoiner

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type Paint

type Paint struct {
	Color    color.Color
	Gradient Gradient
}

Paint 是填充/描边画笔:纯色或渐变,二者择一。

func GradientPaint

func GradientPaint(g Gradient) Paint

GradientPaint 返回渐变画笔。

func SolidPaint

func SolidPaint(c color.Color) Paint

SolidPaint 返回纯色画笔。

func (Paint) Has

func (p Paint) Has() bool

Has 判断画笔是否可绘制。

func (Paint) IsColor

func (p Paint) IsColor() bool

IsColor 判断画笔是否为纯色。

func (Paint) IsGradient

func (p Paint) IsGradient() bool

IsGradient 判断画笔是否为渐变。

type Path

type Path = canvas.Path

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

func Circle

func Circle(radius float64) *Path

func MustParseSVGPath

func MustParseSVGPath(data string) *Path

func Rectangle

func Rectangle(width, height float64) *Path

func RoundedRectangle

func RoundedRectangle(width, height, radius float64) *Path

type PathReverseScanner

type PathReverseScanner = canvas.PathReverseScanner

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type PathScanner

type PathScanner = canvas.PathScanner

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type Paths

type Paths = canvas.Paths

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type Point

type Point = canvas.Point

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type RadialGradient

type RadialGradient struct {
	Grad

	C0, C1 Point
	R0, R1 float64
	// Extend[0] 控制起始圆之前是否着色、Extend[1] 控制终止圆之后是否着色;
	// 为 false 时该区域不着色(透明)。
	Extend [2]bool
	// contains filtered or unexported fields
}

RadialGradient 是两个圆之间的径向渐变。

func NewRadialGradient

func NewRadialGradient(c0 Point, r0 float64, c1 Point, r1 float64) *RadialGradient

NewRadialGradient 返回径向渐变,默认两端都延伸。

func (*RadialGradient) At

func (g *RadialGradient) At(x, y float64) color.RGBA

At 返回 (x,y) 处的颜色(参考 pixman-radial-gradient 实现)。

func (*RadialGradient) RadialParameter added in v0.1.4

func (g *RadialGradient) RadialParameter(x, y float64, extend int) (float64, bool)

RadialParameter 返回点 (x,y) 在两圆插值族 ((1-t)·C0+t·C1, R0+t·dr) 中的参数 t, 以及该点是否存在可用的解。参数 t 是 PDF/pixman 的同一参数:圆的半径为 R0+t·dr。

一个点可能同时落在两个圆上,两类根分别取较大的 t:轴内根属于扫描本身,轴外根 只有在该方向允许延伸时才算可用(extend 第 0 位允许 t<0 起点侧,第 1 位允许 t>1 终点侧)。半径 R0+t·dr 为负的圆被排除。没有任何可用解时 ok 为 false, 表示该点不在着色范围内(未延伸区域保持透明)。

轴内根优先于轴外根:延伸只负责扫描范围之外的点,不该覆盖扫描已经给出的颜色。 若把两类根放进同一个「取最大 t」的池子,由于任何 t>1 的根都大于任何 t<=1 的根, 终点侧延伸会把终止圆附近整片区域压成终点色——Extend 含终点位时那片区域是纯蓝, 而同一批点在 Extend=0 与 Extend=3 下仍保留渐变,三者自相矛盾。 不同 Extend 组合的差异只出现在扫描覆盖不到的点:例如点只落在 t=1.8 上(轴内无根)时, Extend 含终点位取 1.8(终点色),否则透明。

type Rect

type Rect = canvas.Rect

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

func RectFromSize

func RectFromSize(x, y, width, height float64) Rect

type Resolution

type Resolution = canvas.Resolution

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

func DPI

func DPI(dpi float64) Resolution

func DPMM

func DPMM(dpmm float64) Resolution

type RoundCapper

type RoundCapper = canvas.RoundCapper

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type RoundJoiner

type RoundJoiner = canvas.RoundJoiner

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type SquareCapper

type SquareCapper = canvas.SquareCapper

几何类型直接复用canvas。字体轮廓、OFD变换及各后端消费同一条路径, 不再逐段转换或持有另一份路径缓存。共享轮廓仍须先Copy再修改。

type Stop

type Stop struct {
	Offset float64
	Color  color.RGBA
}

Stop 是渐变色标。

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL