§11 · Reference

Полный справочник ключей и публичного API. Используется как чек-лист при настройке стиля и сцены. Для узконаправленных объяснений — ссылки на соответствующие главы.

JSON: style.*

ПутьТипDefault→ GeoStyle attrКомментарий
point_size.mainfloat6size_pxразмер точки, px
point_size.boldfloat——опц. именован., import.point_size
point_size.auxfloat——то же
line_width.mainfloat1.5stroke_width_pxтолщина, px
line_width.bold / auxfloat——именованные варианты
defaults.angle.stroke_width_pxfloat0.75stroke_width_pxтолщина дуги, px
defaults.angle.arc_size_pxfloat17arc_size_pxрадиус дуги, px
defaults.angle.arc_shift_pxfloat1.5arc_shift_pxрасстояние между дугами, px
defaults.angle.right_angle_size_pxfloat17right_angle_size_pxразмер метки прямого угла, px
tick.main.tick_width_pxfloat1.5tick_width_pxтолщина штриха, px
tick.main.tick_length_pxfloat9tick_length_pxдлина штриха, px
tick.main.tick_shift_pxfloat2tick_shift_pxрасстояние между штрихами, px
arrow.main.arrow_width_pxfloat7.5arrow_width_pxширина наконечника, px
arrow.main.arrow_length_pxfloat11arrow_length_pxдлина наконечника, px
color.mainhex#000000colосновной цвет
color.lighthex#cccccccol_lightсветлый вариант
color.accenthex#d05456col_accentакцентный
color.accent_lighthex#f6e0dbcol_accent_lightсветлый акцент
color.black/white/auxhex——доп. именованные цвета
font_size.mainfloat14font_size_pxразмер шрифта, px

JSON: rendering

КлючТипDefaultЭффект
line_capenumbuttокончания линий: butt / round / square
right_angle_jointenumautoauto / bevel / miter / round
polygon_boundary_layerenumnulltop = контур поверх заливки (z_index=10)
dash_period_pxfloat10период пунктира (штрих + промежуток) в px стиля; перекрывается stroke_dash_period_px
points_displayenumautoauto / only_labels / only_points
label_anchorenumBCсценовый дефолт: TL..BR
scale_exportfloat1legacy-множитель px_size; для нового экспорта используйте export_size/export_fit

overlay.angle_radius и overlay.label_placement — automation-слой, а не rendering; см. следующие таблицы.

overlay.label_placement

КлючТипDefaultЭффект
enabledboolfalseавтовызов autoPlaceLabels() в loadGGB
distance_pxint6базовое anchor→центр подписи
padding_pxint2зазор вокруг bbox при проверке перекрытий
angle_gap_arc_pxint3зазор внешняя дуга → bbox подписи
angle_gap_sides_pxint3зазор стороны угла → bbox (narrow-angle clamp)
angle_gap_pxint3legacy fallback для обоих split-ключей
w_anchorfloat1.0штраф за направление
w_labelfloat10.0штраф label×label
w_geomfloat8.0штраф label×geometry
dynamic_anglesboolfalseper-frame пересчёт биссектрис нужен keyframes/tracker
keyframe_snapshotsboolfalseраскладка на каждом keyframe + интерполяция
canonicalize_anchorboolfalseперевести в MC ломает snapshots
interpolationenumlinearlinear / smooth
ema_alphafloat0.2вес свежего решателя (tracker)
anchor_flip_framesint6кадров подряд перед сменой якоря
solver_every_n_framesint2throttle решателя

overlay.angle_radius

Авто-подбор радиуса дуги для узких углов: scale = (pivot_rad / angle) ** exp, затем clamp в [min_px, max_arm_fraction × arm_length × ptUnit].

КлючТипDefaultЭффект
enabledboolfalseopt-in; меняет визуал всех углов
expfloat0.25показатель; 0 = без скейлинга
pivot_radfloatπ/2угол, при котором scale = 1.0
min_pxfloat12нижний порог радиуса, px
max_arm_fractionfloat0.65верхний порог как доля от длины короткой стороны
apply_to_rightboolfalseприменять ли clamps к метке прямого угла

Per-element escape: elem.style['auto_radius'] = False — фиксирует arc_size_px для конкретного угла, даже если глобальный флаг включён.

JSON: import

КлючТипСинонимыЭффект
import.enabledbool—false: загрузить геометрию и сохранить ggb_raw, но взять visual baseline из defaults и пропустить остальные правила import
import.colorsdict "#hex [opacity]" → "color_name|#hex [opacity]"—маппинг GGB-цветов на именованные / hex; цвет пишется как #rrggbb, target-opacity применяется отдельно и только если задана
import.line_widthdictline_widthмаппинг GGB-толщины на именованную категорию
import.point_sizedictdot_sizeмаппинг GGB-размера точек
import.policydict—декларативная политика импорта, см. §4

import.policy

См. §4 · ImportPolicy для деталей.

КлючТипGGB-источникelem.ggb_style target
presetenum—faithful / style_only
size_pxscalar / DSL<pointSize>size_px
stroke_width_pxscalar / DSL<lineStyle thickness>stroke_width_px
arc_size_pxscalar / DSL<arcSize>arc_size_px
label_offset_pxlist / DSL<labelOffset>label_offset_px
label_colorhex / DSLobj_color.hexlabel_color
label_visiblebool / DSL<show label>label_visible
visiblebool / DSL<show object>visible
label_textstr / DSL<caption>label_text
label_modeenum / DSL<labelMode>label_mode
label_value_precisionint / DSLliterallabel_value_precision
label_angle_unitenum / DSLliterallabel_angle_unit
angle_rangeenum / DSL<angleStyle>angle_range
tick_countint / DSL<decoration type>tick_count
font_size_pxscalar / DSL<gui><font size>font_size_px
strokehex / DSLobj_color.hexstroke
fillhex / DSLobj_color.hexfill
fill_opacityfloat / DSLobj_color.opacityfill_opacity
point_shapestr / DSL<pointStyle>point_shape
stroke_opacityfloat / DSL<lineStyle opacity>stroke_opacity
stroke_dash_ratiofloat / DSL<lineStyle type>stroke_dash_ratio
stroke_dash_period_pxfloat / DSL—stroke_dash_period_px
stroke_linecapstr / DSL—stroke_linecap

DSL-строки политики

"const:3"фиксированное значение
"scale:1.5"умножить raw на 1.5
"quantize:[1,2,4]"snap к ближайшему
"remap:{'#f00':'#c00'}"lookup, miss → raw
"match_element"sentinel
"auto"sentinel

Per-element elem.style

Видимость

КлючТипDefaultЭффект
elem.visible (атрибут)boolTrueполностью скрывает mobject
visibleboolTrueresolver-key для elem.visible; это состояние построения, не visual style
label_visibleboolзависитотрисовать подпись

Stroke

strokehexstyle.strongцвет контура
stroke_width_pxfloat (px)defaults.<type>.stroke_width_pxтолщина; рендер: × 100 / ptUnit
stroke_opacity0..11прозрачность
stroke_dash_ratio0..1 / nullnullдоля штриха в периоде (≤ 0 или ≥ 1 — сплошная)
stroke_dash_period_pxfloat (px)rendering.dash_period_pxпериод пунктира: штрих + промежуток
stroke_linecapenumrendering.line_capbutt/round/square

Fill

fillhexstyle.backgroundцвет заливки
fill_opacity0..11прозрачность заливки

Точки

size_pxfloat (px)defaults.point.size_pxдиаметр = size_px / 2 / ptUnit
point_shapeenumcirclecircle, square, diamond, cross, plus, треугольники

Углы

arc_size_pxfloat (px)—базовый радиус; масштабируется overlay.angle_radius при включении
arc_shift_pxfloat (px)defaults.angle.arc_shift_pxрасстояние между кратными дугами
auto_radiusbooltrueescape: False — отключить overlay.angle_radius для этого угла
angle_rangeminor / reflexminorвидимый диапазон угла
right_angle_markerbool / nullавтоквадратная метка
tick_countint1число кратных дуг / меток равенства углов

Сегменты / векторы

tick_countint0число штрихов на середине
tick_styleline / wavelinewave = волнистая метка
tick_radius_pxfloat0.45 × tick_shift_pxрадиус скругления wave-углов

Подписи

label_textTeX-строка"$name$"текст подписи
label_modelabel/value/label_valuelabelрежим текста подписи
label_colorhexstyle.strongцвет текста
label_anchorenumrendering.label_anchor/BLTL..BR
label_offset_px[x, y] (px)[0, 0]смещение после позиционирования
font_size_pxfloatdefaults.<type>.font_size_pxper-element размер
label_radial_offset_pxfloatdefaults.angle.label_radial_offset_pxрадиальный отступ (углы)
label_placement_lockedboolfalseзащита от автораскладки

Z-index

z_indexfloatпо типу элементаперекрывает автоматику
z_index_fillfloatZ_FILLтолько для CircleSector

Кривые (Conic / Function / ImplicitCurve)

Рендер читает те же ключи, что у линий, но с ограничениями — см. §7.

КлючТипDefaultПрименим к
strokehexstyle.strongвсе
stroke_width_pxfloat (px)defaults.<type>.stroke_width_pxвсе
stroke_opacity0..11все
stroke_linecapenumrendering.line_capвсе
stroke_dash_ratio0..1Noneвсе
stroke_dash_period_pxfloat (px)rendering.dash_period_pxвсе
fillhexstyle.backgroundтолько Conic(CIRCLE|ELLIPSE)
fill_opacity0..11только Conic(CIRCLE|ELLIPSE)
z_indexfloatZ_LINE = 4все

Константы сэмплирования (hard-coded, geo/curve_sampling.py)

ПараметрЗначениеПрименяется в
segment_mu3.0 / ptUnitConic (parabola/hyperbola), Function
initial_samples32sample_parametric
max_samples500sample_parametric — жёсткий cap
grid_n128marching_squares (ImplicitCurve)
viewport_pad0.1 MULiang–Barsky clipping

GGB Graphics View

showAxesbool<evSettings axes>; включает фоновые оси
showGridbool<evSettings grid>; включает фоновую сетку
gridIsBoldbool<evSettings gridIsBold>; чуть плотнее линии сетки
gridTypeint<evSettings gridType>; сохраняется, сейчас рендерится декартова сетка
axesColor / gridColorhex<axesColor> / <gridColor>
gridDistX / gridDistYfloat<grid distX distY>; шаг сетки
axes.x / axes.ydict<axis id="0|1">: show, showNumbers, tickDistance, axisCross, positiveAxis

Конструкторы и DSL

Conic(matrix)3×3 ndarray
Conic.from_coeffs(a, b, c, d, e, f)общее уравнение 2-й степени
Conic.from_ggb_matrix(A0..A5)GGB XML совместимо
Conic("eq") / .from_string(eq)строковый парсинг через sympy
Function("y = ...") / .from_string(eq)строковая форма
Function(expr, var, domain=(a, b))Python-only, с ограничением x-диапазона
f(x) = expr (DSL-сугар)preprocessor → f = Function("y = expr")
ImplicitCurve("F(x, y) = 0")нормализуется к LHS − RHS = 0

scene.style.export

КлючТипDefaultЭффект
ptUnitfloat1пикселей на manim-единицу (текущая сцена)
ptUnit_stylefloatptUnitreference-масштаб для визуальных *_px значений
ptUnit_ggbfloat—оригинал ptUnit из .ggb
ptWidthintconfig.pixel_widthширина холста, px
ptHeightintconfig.pixel_heightвысота
ptXZerofloat0origin от левого края, px
ptYZerofloat0origin от верхнего края
fontSizeint—GGB gui.font size, px
referenceWidth/referenceHeightfloat—эталонный холст нового export-layout
contentScalefloat—ptUnit / ptUnit_style, масштаб reference-холста в export-холст

Scaling constants (animageo/constants.py)

КонстантаЗначениеИспользование
STYLE_TO_INTERNAL0.02JSON style unit → internal
LINE_WIDTH_SCALE2JSON line width → manim stroke
FONT_SIZE_RATIO50 / 25.9JSON font size → manim font
STROKE_WIDTH_SCALE100stroke_width_px → manim (/ active style scale: ptUnit legacy или ptUnit_style)
GGB_FONT_SCALE100.0GGB font px → manim font_size (/ active style scale)

Z-index constants

КонстантаЗначениеИспользование
Z_FILL_INNER0.001зарезервированный нижний fill-слой
Z_FILL0.01заливки полигонов / секторов
Z_FILL_LABEL0.1подписи на fill-уровне
Z_ANGLE3дуги углов
Z_LINE4линии, окружности (без fill)
Z_STROKE5сегменты, окружности (stroke), дуги
Z_POINT50точки
Z_LABEL50подписи на stroke-уровне

GeoStyle attributes

АтрибутJSON-источникDefaultЭффект
dot_sizepoint_size.main6совместимый scene-атрибут; renderer читает size_px
line_widthline_width.main1.5совместимый scene-атрибут; renderer читает stroke_width_px
ang_widthdefaults.angle.stroke_width_px0.75толщина дуги
ang_rdefaultdefaults.angle.arc_size_px17совместимый scene-атрибут; renderer читает arc_size_px
ang_rshiftdefaults.angle.arc_shift_px1.5шаг между кратными дугами
ang_rightdefaults.angle.right_angle_size_px17размер метки прямого угла
strich_widthtick.main.tick_width_px1.5
strich_lentick.main.tick_length_px9
strich_rshifttick.main.tick_shift_px2
arrow_heightarrow.main.arrow_length_px11длина наконечника
arrow_widtharrow.main.arrow_width_px7.5ширина
label_r_offsetlabel_radial_offset_pxlegacy input aliasмигрируется в px
background / strong—WHITE / BLACKфон сцены / основной foreground
col / col_light / col_accent / col_accent_lightcolor.*палитра
col_shade—#eeeeeeцвет ghosted-элементов (Shade/Restore)
renderingrendering{}dict с флагами
ggbimport{}GGB-маппинги
export—см. вышеcanvas / scale

AnimaGeoScene — публичное API

Загрузка

loadGGB(filepath, style_file=None, px_size=None, import_policy=None, debug=False, generate_stubs=True, strict=False, reference_size=None, export_size=None, export_fit='contain', export_source_rect='ggb_view', export_scale=None, export_anchor='center', export_offset=None, export_bounds_padding=0, export_infinite_policy='ignore')загрузить .ggb; px_size — legacy размер холста, reference_size/export_size разделяют эталонный стиль-холст и физический export-холст; export_source_rect: ggb_view или rendered_bounds
loadCode(filepath, debug=False, show=True)загрузить Python-DSL из файла (exec-движок)
putCode(code, debug=False, show=True)исполнить строку DSL (exec-движок; циклы, def, kwargs, .field access)
applyStyle(style_file=None, px_size=None, import_policy=None, reference_size=None, export_size=None, export_fit='contain', export_source_rect='ggb_view', export_scale=None, export_anchor='center', export_offset=None, export_bounds_padding=0, export_infinite_policy='ignore')применить style.json и настроить viewport/export-layout; если export_size не передан в split-режиме, px_size используется только как fallback physical size; rendered_bounds измеряет видимые mobject-ы до финального fit
reloadPolicy(import_policy)пересобрать с другой политикой без повторного парсинга

Переменные и анимация

addVar(name, value)создать NamedValueTracker
addUpdater(tracker)привязать live-обновление
clearUpdater(tracker)отвязать
animating(tracker)context manager
play_keyframes(keyframes_data)воспроизвести keyframe-анимацию
get_independent_elements()список animatable-элементов (для UI)

Видимость

Show / playShow(names, mode='Fade'|'Create')показать
Hide / playHide(names)скрыть
Update / playUpdate(names)FadeOut → recreate → FadeIn
Shade / playShade(names)затенить
Restore / playRestore(names)восстановить
ShowCreate(name)смешанный режим по типу
HideAll / ShowAll / UpdateAllмассовые варианты

Стили

setElementStyle(names, **props)массовая установка свойств
setVisible(names, visible)массовая видимость
element(name)получить Element
mobject(name)получить Manim Mobject

Подписи

autoPlaceLabels(dynamic=False)расставить подписи (one-shot / tracker)
clearLabelTracker()снять tracker

Экспорт / утилиты

МетодФорматОписание
exportSVG(filepath)SVGвекторный SVG через Cairo (без manim-рендерера)
exportPDF(filepath, dpi=96)PDFвекторный PDF (тот же Cairo-обход); dpi задаёт физический размер страницы
exportEPS(filepath, dpi=96)EPSEncapsulated PostScript; предупреждает при полупрозрачности (EPS её не поддерживает)
exportTikZ(filepath, *, options=None, standalone=False, **kwargs)TikZсемантический native TikZ для LaTeX; standalone=True — компилируемый документ
exportJSXGraph(filepath, *, options=None, **kwargs)HTML/JS/specинтерактивная JSXGraph-доска; output ∈ html/js/spec/json/moodle
exportStylePromptSummary(filepath=None)JSONкомпактная сводка конструкции для AI-генерации стиля
addGrid(x_range, y_range)—ручная координатная сетка
addCoordinateBackground()—фоновая сетка/оси из импортированного GGB euclidianView
waitCut(msg)—пауза для видеомонтажа с меткой

Внутренние (полезно знать)

_get_scene_bounds(padding=0.1)границы камеры (used by Line/Ray clipping)
CreateMObject(elem, z_auto=False)создать manim VGroup из Element
updateGeoElements(updates=None)перерисовать элементы (full или подмножество)
updateVar(tracker)обновить переменную и пересобрать зависимости

Construction — публичное API

element(name) / var(name) / objectByName(name)поиск по имени
add(obj)добавить Element, Var или Command
update(name, data)обновить data элемента
rebuild(debug=False, full=False)пересчитать (full=True — все команды)
rename(old_name, new_name)переименовать + обновить ссылки в commands/state
add_and_build(cmd)инкрементально добавить команду и построить только её узел (eager для DSL)
update_tparam(name, tparam)обновить curve/locus-параметр constrained-точки
get_independents()dict independent-элементов (для keyframe UI)

DSL-модуль — entry points

dsl.run(constr, code, debug=False, show=True)прямой запуск exec-DSL без сцены
with dsl.scope(constr): ...ContextVar для direct factory use (файл-mode с IDE-подсказками)
from animageo.dsl import *super-module: все 74 фабрики + proxy-типы (Point, Circle, …) для IDE

Export options — TikZOptions / JSXGraphOptions

TikZOptions (animageo.exporters.tikz.TikZOptions)

ПолеПо умолчаниюСмысл
standaloneFalseобернуть в компилируемый \documentclass{standalone} (иначе сниппет для \input{})
dpi96px → pt: единица картинки x=/y= повторяет физический размер SVG
clipTrueобрезать по рамке viewport
backgroundNoneцвет фона \fill или None
emit_font_sizeTrueвыставлять размер шрифта подписей в pt
precision3число знаков после запятой в координатах

JSXGraphOptions (animageo.exporters.jsxgraph.JSXGraphOptions)

ПолеПо умолчаниюСмысл
output"html"html (самодостаточная страница) · js (фрагмент) · spec (декларативный animageo-board/v1, без JS-строк) · json (legacy) · moodle
boundingboxNone(left, top, right, bottom) в math-units; None — из viewport сцены
keepaspectratioNoneкруги остаются круглыми; None зеркалит GGB-сцену
axis / gridNoneоси/сетка; None зеркалит сцену (GGB-дефолты)
backgroundNoneцвет фона доски; "" — прозрачный (фон страницы)
mathjaxTrueподписи как LaTeX через MathJax
shownavigationTrueнавигационная панель JSXGraph
jsxgraph_version"1.10.1"версия CDN для пина
div_id"agbox"id контейнера <div>
fallback"static"что делать с неживыми командами: static (заморозить) или skip
coordinate_precision4знаков после запятой в координатах

animageo-board/v1 — board spec

Декларативный, eval-free контракт между Python (exportJSXGraph(output="spec")) и фреймворк-агностичным JS-рантаймом. JSON-схема: animageo/exporters/jsxgraph/board.schema.json (поставляется в wheel, доступна через animageo.exporters.jsxgraph.load_schema()).

КлючСмысл
formatвсегда "animageo-board/v1"
boundingbox[left, top, right, bottom] в math-units
size[width, height] контейнера в px
chromeоси/сетка/фон/keep-aspect (импорт из GGB-вида)
inputs[]интерактивные входы: {name, kind, value/x/y, min/max/step, on, t}; kind ∈ point/number/angle/boolean/glider
elements[]элементы в топопорядке: {name, role, kind, engine, parents[], attrs, tracksDrag}; role ∈ input/live/static
coverage[]отчёт live-vs-static по каждому элементу

Структурированные формы parents[]: {"ref": name} · число · [x, y] · [[xs],[ys]] (sampled polyline) · {"fn": body} (живая функция-координата) · {"js": expr} (escape-hatch).

BoardHandle (JS, @animageo/runtime)

APIЧто
createBoard(spec, container, opts)построить доску, вернуть handle
on(signal, cb)сигналы: ready · change (драг) · commit (конец драга) · viewchange · error
getState() / setState(partial)прочитать / задать состояние входов
getValue/setValue/getElement/reset/setVisible/setStyleточечные действия
destroy()снять слушатели, освободить доску

CLI (python -m animageo)

ФлагСмысл
-o FILEвыходной файл; формат выводится из расширения (.svg/.pdf/.eps/.tex/.html/.json/.png/.gif/.mp4/.webm/.mov)
-f / --format FMTявный формат: svg pdf eps tikz jsxgraph png gif mp4 webm mov
--standaloneTikZ: компилируемый документ вместо сниппета
--dpi NPDF/EPS/TikZ: физический размер страницы (по умолчанию 96)
--keyframes FILErender-дорожка: keyframe-последовательность (иначе один кадр)
--quality {l,m,h,p,k}пресет разрешения/fps render-дорожки
--fps N / --transparentпроброс в manim (GIF/WebM/MOV)
-v/--verbose · -q/--quiet · --log-level LVL · --strictлогирование и строгий режим (unsupported → ошибка)

Источники истины: animageo/style/schema.py, animageo/constants.py, animageo/animageo.py, animageo/geo/lib_conic.py, animageo/geo/lib_function.py, animageo/geo/lib_implicit.py, animageo/geo/curve_sampling.py, animageo/parsers/dsl/. Актуально на 2026-05-30. Экспортёры: animageo/exporters/tikz/, animageo/exporters/jsxgraph/ (+ board.schema.json); CLI — animageo/__main__.py; Полный список имён полей — docs/field_names.md, подробности про DSL — docs/python_dsl.md.