GraphElement
Базовый элемент интерфейса GraphEdit с координатами графа, выделением и запросами редактирования.
Добавляйте элемент непосредственным ребёнком GraphEdit. GraphElement — базовый контейнер интерфейса, а не исполняемая сущность игрового мира или готовая система визуального программирования. Хранение модели, выполнение графа, связи предметной области и undo/redo реализует приложение.
Позицию сохраняйте в PositionOffset — координатах графа до zoom/scroll. GraphEdit рассчитывает экранную локальную Position как PositionOffset × Zoom − ScrollOffset и управляет Scale. Не сохраняйте Position как координату модели и не умножайте PositionOffset на zoom заранее. PositionOffsetChanged приходит и при присваивании из кода; Dragged относится к завершению drag, а не каждому setter.
Selected меняется только при Selectable = true. Программное выделение испускает NodeSelected/NodeDeselected при переходе; повтор того же значения ничего не делает. Отключение Selectable снимает текущее выделение. Draggable запрещает пользовательское перемещение, но не setter PositionOffset. Это независимые флаги, не общий режим read-only.
Resizable включает обработку ручки, но сам GraphElement не применяет новый размер внутри своего обработчика. При штатном родителе GraphEdit подписывается на ResizeRequest и применяет размер с ограничениями/привязкой. Не добавляйте второй конкурирующий обработчик изменения Size без необходимости. ResizeEnd сообщает итоговый Size; сохраняйте итог после ограничений, а не только запрошенный newSize.
Базовый контейнер раскладывает подходящих дочерних Control в один прямоугольник: несколько прямых детей могут перекрыться. Добавьте один VBoxContainer/HBoxContainer для своей формы. Для портов и строк используйте специализированный GraphNode. ScalingMenus управляет масштабированием дочерних локальных popup при zoom; это не масштаб всего графа.
DeleteRequest и RaiseRequest — запросы, не удаление вашей модели и не запись undo. Перед освобождением элемента обновите модель и связи. Для динамического графа используйте устойчивые ключи в модели; индексы детей не являются ID.
Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.
Конструкторы1
GraphElementКонструктор
public GraphElement();Создаёт базовый контейнер: PositionOffset = (0,0), Draggable/Selectable = true, Selected/Resizable/ScalingMenus = false.
Свойства6
DraggableСвойство
public bool Draggable { get; set; }Разрешает пользовательское перетаскивание в GraphEdit, true по умолчанию. Не блокирует программный PositionOffset и не снимает выделение.
PositionOffsetСвойство
public Vector2 PositionOffset { get; set; }Позиция в координатах графа до zoom/scroll. Изменение, включая setter из кода, испускает PositionOffsetChanged; равное значение пропускается.
ResizableСвойство
public bool Resizable { get; set; }Разрешает ручку изменения размера, false по умолчанию. Элемент испускает запрос; штатный GraphEdit применяет его с ограничениями. Для GraphFrame ручка доступна при выключенном AutoshrinkEnabled.
ScalingMenusСвойство
public bool ScalingMenus { get; set; }Разрешает учитывать zoom GraphEdit при подготовке дочерних локальных popup, false по умолчанию. Не меняет PositionOffset или zoom самого графа.
SelectableСвойство
public bool Selectable { get; set; }Разрешает изменение Selected, true по умолчанию. Установка false сначала снимает выделение и может испустить NodeDeselected.
SelectedСвойство
public bool Selected { get; set; }Текущее выделение. Setter игнорируется при Selectable = false; переход испускает NodeSelected/NodeDeselected даже из кода, повтор того же значения — нет.
Методы12
GetPositionOffsetVector2
public Vector2 GetPositionOffset();Позиция в координатах графа до zoom/scroll. Изменение, включая setter из кода, испускает PositionOffsetChanged; равное значение пропускается.
Vector2Позиция в координатах графа до zoom/scroll. Изменение, включая setter из кода, испускает PositionOffsetChanged; равное значение пропускается.
IsDraggablebool
public bool IsDraggable();Разрешает пользовательское перетаскивание в GraphEdit, true по умолчанию. Не блокирует программный PositionOffset и не снимает выделение.
boolРазрешает пользовательское перетаскивание в GraphEdit, true по умолчанию. Не блокирует программный PositionOffset и не снимает выделение.
IsResizablebool
public bool IsResizable();Разрешает ручку изменения размера, false по умолчанию. Элемент испускает запрос; штатный GraphEdit применяет его с ограничениями. Для GraphFrame ручка доступна при выключенном AutoshrinkEnabled.
boolРазрешает ручку изменения размера, false по умолчанию. Элемент испускает запрос; штатный GraphEdit применяет его с ограничениями. Для GraphFrame ручка доступна при выключенном AutoshrinkEnabled.
IsScalingMenusbool
public bool IsScalingMenus();Разрешает учитывать zoom GraphEdit при подготовке дочерних локальных popup, false по умолчанию. Не меняет PositionOffset или zoom самого графа.
boolРазрешает учитывать zoom GraphEdit при подготовке дочерних локальных popup, false по умолчанию. Не меняет PositionOffset или zoom самого графа.
IsSelectablebool
public bool IsSelectable();Разрешает изменение Selected, true по умолчанию. Установка false сначала снимает выделение и может испустить NodeDeselected.
boolРазрешает изменение Selected, true по умолчанию. Установка false сначала снимает выделение и может испустить NodeDeselected.
IsSelectedbool
public bool IsSelected();Текущее выделение. Setter игнорируется при Selectable = false; переход испускает NodeSelected/NodeDeselected даже из кода, повтор того же значения — нет.
boolТекущее выделение. Setter игнорируется при Selectable = false; переход испускает NodeSelected/NodeDeselected даже из кода, повтор того же значения — нет.
SetDraggablevoid
public void SetDraggable(bool draggable);Разрешает пользовательское перетаскивание в GraphEdit, true по умолчанию. Не блокирует программный PositionOffset и не снимает выделение.
| Имя | Тип | По умолчанию |
|---|---|---|
draggable | bool | — |
draggableРазрешает пользовательское перетаскивание в GraphEdit, true по умолчанию. Не блокирует программный PositionOffset и не снимает выделение.
SetPositionOffsetvoid
public void SetPositionOffset(Vector2 offset);Позиция в координатах графа до zoom/scroll. Изменение, включая setter из кода, испускает PositionOffsetChanged; равное значение пропускается.
| Имя | Тип | По умолчанию |
|---|---|---|
offset | Vector2 | — |
offsetПозиция в координатах графа до zoom/scroll, не экранная Position.
SetResizablevoid
public void SetResizable(bool resizable);Разрешает ручку изменения размера, false по умолчанию. Элемент испускает запрос; штатный GraphEdit применяет его с ограничениями. Для GraphFrame ручка доступна при выключенном AutoshrinkEnabled.
| Имя | Тип | По умолчанию |
|---|---|---|
resizable | bool | — |
resizableРазрешает ручку изменения размера, false по умолчанию. Элемент испускает запрос; штатный GraphEdit применяет его с ограничениями. Для GraphFrame ручка доступна при выключенном AutoshrinkEnabled.
SetScalingMenusvoid
public void SetScalingMenus(bool scalingMenus);Разрешает учитывать zoom GraphEdit при подготовке дочерних локальных popup, false по умолчанию. Не меняет PositionOffset или zoom самого графа.
| Имя | Тип | По умолчанию |
|---|---|---|
scalingMenus | bool | — |
scalingMenusРазрешает учитывать zoom GraphEdit при подготовке дочерних локальных popup, false по умолчанию. Не меняет PositionOffset или zoom самого графа.
SetSelectablevoid
public void SetSelectable(bool selectable);Разрешает изменение Selected, true по умолчанию. Установка false сначала снимает выделение и может испустить NodeDeselected.
| Имя | Тип | По умолчанию |
|---|---|---|
selectable | bool | — |
selectableРазрешает изменение Selected, true по умолчанию. Установка false сначала снимает выделение и может испустить NodeDeselected.
SetSelectedvoid
public void SetSelected(bool selected);Текущее выделение. Setter игнорируется при Selectable = false; переход испускает NodeSelected/NodeDeselected даже из кода, повтор того же значения — нет.
| Имя | Тип | По умолчанию |
|---|---|---|
selected | bool | — |
selectedТекущее выделение. Setter игнорируется при Selectable = false; переход испускает NodeSelected/NodeDeselected даже из кода, повтор того же значения — нет.
Сигналы и события8
DeleteRequestСобытие
public event Action DeleteRequest;Объявленный запрос удаления, не автоматический Free. Штатный ui_graph_delete в GraphEdit испускает GraphEdit.DeleteNodesRequest со списком имён, а не этот сигнал каждого элемента. Обработайте модель и связи, затем освобождайте объекты.
DraggedСобытие
public event GraphElement.DraggedEventHandler Dragged;Завершение drag с начальным и конечным PositionOffset, удобно для одной записи undo. Обычный setter PositionOffset сигнал не испускает.
| Имя | Тип | По умолчанию |
|---|---|---|
from | Vector2 | — |
to | Vector2 | — |
fromПозиция в координатах графа до zoom/scroll, не экранная Position.
toПозиция в координатах графа до zoom/scroll, не экранная Position.
NodeDeselectedСобытие
public event Action NodeDeselected;Выделение снято, в том числе при Selectable = false или setter Selected.
NodeSelectedСобытие
public event Action NodeSelected;Элемент перешёл в Selected = true; может прийти от setter из кода. Это не выполнение узла графа.
PositionOffsetChangedСобытие
public event Action PositionOffsetChanged;PositionOffset изменился, в том числе программно. Сигнал без аргументов: прочитайте свойство. Не означает завершённый drag.
RaiseRequestСобытие
public event Action RaiseRequest;Запрос поднять элемент в порядке отображения. GraphEdit обрабатывает порядок; это не изменение ID или структуры вашей модели.
ResizeEndСобытие
public event GraphElement.ResizeEndEventHandler ResizeEnd;Завершение изменения ручкой с фактическим текущим Size. Сохраняйте итог с учётом ограничений; не заменяет каждое промежуточное ResizeRequest.
| Имя | Тип | По умолчанию |
|---|---|---|
newSize | Vector2 | — |
newSizeЛокальный размер элемента; ResizeRequest — запрос, ResizeEnd — текущий итоговый Size.
ResizeRequestСобытие
public event GraphElement.ResizeRequestEventHandler ResizeRequest;Запрашиваемый размер в локальных единицах элемента. GraphEdit применяет запрос с привязкой/ограничениями, поэтому итоговый Size может отличаться. Сам сигнал не является завершением жеста.
| Имя | Тип | По умолчанию |
|---|---|---|
newSize | Vector2 | — |
newSizeЛокальный размер элемента; ResizeRequest — запрос, ResizeEnd — текущий итоговый Size.
Свойства темы
Это ключи ресурсов Theme, а не свойства C# класса. Используйте методы GetTheme…() и AddTheme…Override() у Control с соответствующим типом значения.
| Ключ и тип | Описание |
|---|---|
resizerTexture2D | Значок, используемый для изменения размера, виден, когда включен параметр |