Attention: Here be dragons
This is the latest
(unstable) version of this documentation, which may document features
not available in or compatible with released stable versions of Godot.
Checking the stable version of the documentation...
GraphEdit
Hérite de : Control < CanvasItem < Node < Object
Un éditeur pour les structures en graphe, utilisant des GraphNodes.
Description
GraphEdit fournit des outils pour la création, la manipulation et l'affichage de divers graphes. Son objectif principal dans le moteur est d'alimenter les systèmes de programmation visuelle, comme les shaders visuels, mais il est également disponible à l'utilisation dans des projets utilisateur.
GraphEdit en soi n'est qu'un conteneur vide, représentant une grille infinie où des GraphNodes peuvent être placés. Chaque GraphNode représente un nœud dans le graphe, une unité de données unique dans le système connecté. GraphEdit, à son tour, aide à contrôler diverses interactions avec les nœuds et entre les nœuds. Lorsque l'utilisateur tente de connecter, de déconnecter ou de supprimer un GraphNode, un signal est émis dans le GraphEdit, mais aucune action n'est prise par défaut. Il incombe au développeur d'utiliser ce contrôle pour implémenter la logique nécessaire qui détermine comment chaque demande doit être traitée.
Performance : Il est fortement conseillé d'activer le mode de faible utilisation du processeur (voir OS.low_processor_usage_mode) lors de l'utilisation des GraphEdits.
Note : Gardez à l'esprit que Node.get_children() renverra également le nœud de la couche de connexion nommé _connection_layer en raison de limitations techniques. Ce comportement peut changer dans des versions futures.
Propriétés
clip_contents |
|
|
|
||
|
||
|
||
|
||
focus_mode |
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Méthodes
_get_connection_line(from_position: Vector2, to_position: Vector2) virtual const |
|
_is_in_input_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual |
|
_is_in_output_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual |
|
_is_node_hover_valid(from_node: StringName, from_port: int, to_node: StringName, to_port: int) virtual |
|
void |
add_valid_connection_type(from_type: int, to_type: int) |
void |
|
void |
|
void |
|
void |
attach_graph_element_to_frame(element: StringName, frame: StringName) |
void |
|
connect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int, keep_alive: bool = false) |
|
void |
detach_graph_element_from_frame(element: StringName) |
void |
disconnect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int) |
void |
|
get_closest_connection_at_point(point: Vector2, max_distance: float = 4.0) const |
|
get_connection_count(from_node: StringName, from_port: int) |
|
get_connection_line(from_node: Vector2, to_node: Vector2) const |
|
get_connection_list_from_node(node: StringName) const |
|
get_connections_intersecting_with_rect(rect: Rect2) const |
|
get_element_frame(element: StringName) |
|
is_node_connected(from_node: StringName, from_port: int, to_node: StringName, to_port: int) |
|
is_valid_connection_type(from_type: int, to_type: int) const |
|
void |
remove_valid_connection_type(from_type: int, to_type: int) |
void |
|
void |
|
void |
set_connection_activity(from_node: StringName, from_port: int, to_node: StringName, to_port: int, amount: float) |
void |
set_selected(node: Node) |
Propriétés du thème
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Signaux
begin_node_move() 🔗
Émis au début du mouvement d'un GraphElement.
connection_drag_ended() 🔗
Émis à la fin d'un glissement de connexion.
connection_drag_started(from_node: StringName, from_port: int, is_output: bool) 🔗
Émis au début d'un glissement de connexion.
connection_from_empty(to_node: StringName, to_port: int, release_position: Vector2) 🔗
Émis lorsque l'utilisateur fait glisser une connexion d'un port d'entrée vers l'espace vide du graphe.
connection_request(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Émis au GraphEdit lorsque la connexion entre le port from_port du GraphNode from_node et le port to_port du GraphNode to_node est tentée d'être créée.
connection_to_empty(from_node: StringName, from_port: int, release_position: Vector2) 🔗
Émis lorsque l'utilisateur fait glisser une connexion d'un port de sortie vers l'espace vide du graphe.
copy_nodes_request() 🔗
Émis quand ce GraphEdit capture une action ui_copy (Ctrl + C par défaut). En général, ce signal indique que les GraphElements sélectionnés devraient être copiés.
cut_nodes_request() 🔗
Émis quand ce GraphEdit capture une action ui_cut (Ctrl + X par défaut). En général, ce signal indique que les GraphElements sélectionnés devraient être coupés.
delete_nodes_request(nodes: Array[StringName]) 🔗
Émis quand ce GraphEdit capture une action ui_graph_delete (Delete par défaut).
nodes est un tableau de nœuds qui devraient être supprimés. Cela inclut généralement tous les nœuds.
disconnection_request(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Émis au GraphEdit lorsque la connexion entre le port from_port du GraphNode from_node et le port to_port du GraphNode to_node est tentée d'être supprimée.
duplicate_nodes_request() 🔗
Émis quand ce GraphEdit capture une action ui_graph_duplicate (Ctrl + D par défaut). En général, ce signal indique que les GraphElements sélectionnés devraient être dupliqués.
end_node_move() 🔗
Émis à la fin du mouvement d'un GraphElement.
frame_rect_changed(frame: GraphFrame, new_rect: Rect2) 🔗
Émis lorsque le GraphFrame frame est redimensionné à new_rect.
graph_elements_linked_to_frame_request(elements: Array, frame: StringName) 🔗
Émis lorsqu'un ou plusieurs GraphElement sont déposés sur le GraphFrame nommé frame, lorsqu'ils n'étaient pas auparavant attachés à un autre élément.
elements est un tableau de GraphElement à attacher.
Émis lorsque le nœud GraphElement donné est désélectionné.
Émis lorsque le nœud GraphElement donné est sélectionné.
paste_nodes_request() 🔗
Émis quand ce GraphEdit capture une action ui_paste (Ctrl + V par défaut). En général, ce signal indique que les GraphElements sélectionnés devraient être collés.
popup_request(at_position: Vector2) 🔗
Émis lorsqu'une popup est demandée. Arrive lors d'un clic droit dans le GraphEdit. at_position est la position du pointeur de la souris lorsque le signal est envoyé.
scroll_offset_changed(offset: Vector2) 🔗
Émis lorsque le décalage du défilement est modifié par l'utilisateur. Il ne sera pas émis lorsque modifié depuis le code.
Énumérations
enum PanningScheme: 🔗
PanningScheme SCROLL_ZOOMS = 0
Molette souris va zoomer, Ctrl + Molette souris va déplacer la vue.
PanningScheme SCROLL_PANS = 1
Molette souris va déplacer la vue, Ctrl + Molette souris va zoomer.
enum GridPattern: 🔗
GridPattern GRID_PATTERN_LINES = 0
Dessine la grille en utilisant des lignes pleines.
GridPattern GRID_PATTERN_DOTS = 1
Dessine la grille en utilisant des pointillés.
Descriptions des propriétés
bool connection_lines_antialiased = true 🔗
Si true, les lignes entre les nœuds utiliseront l'anticrénleage.
float connection_lines_curvature = 0.5 🔗
La courbure des lignes entre les nœuds. 0 résulte en des lignes droites.
float connection_lines_thickness = 4.0 🔗
L'épaisseur des lignes entre les nœuds.
Array[Dictionary] connections = [] 🔗
void set_connections(value: Array[Dictionary])
Array[Dictionary] get_connection_list()
Les connexions entre des GraphNodes.
Un lien est représenté par un Dictionary sous la forme :
{
from_node: StringName, #nœud de début
from_port: int, #port de début
to_node: StringName, #nœud de fin
to_port: int, #port de fin
keep_alive: bool #garder en vie
}
Les connexions avec keep_alive défini à false peuvent être supprimées automatiquement si elles sont invalides lors d'un redessin.
GridPattern grid_pattern = 0 🔗
void set_grid_pattern(value: GridPattern)
GridPattern get_grid_pattern()
Le motif utilisé pour dessiner la grille.
Si true, la mini-carte est visible.
float minimap_opacity = 0.65 🔗
L'opacité du rectangle de la mini-carte.
Vector2 minimap_size = Vector2(240, 160) 🔗
La taille du rectangle de la mini-carte. La carte elle-même est basée sur la taille de la zone de grille et est mise à l'échelle pour s'adapter à ce rectangle.
PanningScheme panning_scheme = 0 🔗
void set_panning_scheme(value: PanningScheme)
PanningScheme get_panning_scheme()
Définit le schéma de contrôle pour le panorama avec la molette de la souris.
bool right_disconnects = false 🔗
Si true, permet de déconnecter les connexions existantes dans le GraphEdit en faisant glisser l'extrémité droite.
Vector2 scroll_offset = Vector2(0, 0) 🔗
Le décalage du défilement.
bool show_arrange_button = true 🔗
Si true, le bouton pour arranger automatiquement les nœuds du graphe est visible.
Si true, la grille est visible.
bool show_grid_buttons = true 🔗
Si true, les boutons qui permettent de configurer la grille et les options d’aimantation sont visibles.
Si true, la barre d'outils du menu est visible.
bool show_minimap_button = true 🔗
Si true, le bouton pour activer/désactiver la mini-carte est visible.
bool show_zoom_buttons = true 🔗
Si true, les boutons qui permettent de modifier et de réinitialiser le niveau de zoom sont visibles.
bool show_zoom_label = false 🔗
Si true, le libellé avec le niveau de zoom actuel est visible. Le niveau de zoom est affiché en pourcentage.
La distance de magnétisation en pixels, détermine également la distance entre les lignes de la grille.
bool snapping_enabled = true 🔗
Si true, la magnétisation est activée.
Dictionary type_names = {} 🔗
void set_type_names(value: Dictionary)
Dictionary get_type_names()
Dictionary of human-readable port type names.
La valeur de zoom actuelle.
La valeur maximale du zoom.
La valeur minimale du zoom.
Le pas entre chaque niveau de zoom.
Descriptions des méthodes
PackedVector2Array _get_connection_line(from_position: Vector2, to_position: Vector2) virtual const 🔗
Méthode virtuelle qui peut être redéfinie pour personnaliser la façon dont les connexions sont dessinées.
bool _is_in_input_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual 🔗
Renvoie si la position de la souris mouse_position est dans la zone chaude des entrées (hot zone).
Par défaut, une zone chaude est une position Rect2 positionnée telle que son centre est à in_node.GraphNode.get_input_port_position()(in_port) (Pour le cas de la sortie, appelez plutôt GraphNode.get_output_port_position()). La largeur de la zone chaude est deux fois la propriété du Theme port_grab_distance_horizontal, et sa hauteur est deux fois la propriété port_grab_distance_vertical.
Voici un échantillon de code pour démarrer :
func _is_in_input_hotzone(in_node, in_port, mouse_position):
var taille_port = Vector2(get_theme_constant("port_grab_distance_horizontal"), get_theme_constant("port_grab_distance_vertical"))
var position_port = in_node.get_position() + in_node.get_input_port_position(in_port) - taille_port / 2
var rect = Rect2(position_port, taille_port)
return rect.has_point(mouse_position)
bool _is_in_output_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual 🔗
Renvoie si la position de la souris mouse_position est dans la zone chaude des sorties (hot zone). Pour plus d'informations sur les zones chaudes, voir _is_in_input_hotzone().
Voici un échantillon de code pour démarrer :
func _is_in_output_hotzone(in_node, in_port, mouse_position):
var taille_port = Vector2(get_theme_constant("port_grab_distance_horizontal"), get_theme_constant("port_grab_distance_vertical"))
var position_port = in_node.get_position() + in_node.get_output_port_position(in_port) - taille_port / 2
var rect = Rect2(position_port, taille_port)
return rect.has_point(mouse_position)
bool _is_node_hover_valid(from_node: StringName, from_port: int, to_node: StringName, to_port: int) virtual 🔗
Cette méthode virtuelle peut être utilisée pour insérer une détection d'erreur supplémentaire lorsque l'utilisateur fait glisser une connexion sur un port valide.
Renvoie true si la connexion est effectivement valide ou renvoie false si la connexion est impossible. Si la connexion est impossible, aucune magnétisation vers le port et donc aucune demande de connexion à ce port ne se produira.
Dans cet exemple, une connexion au même nœud est supprimée :
func _is_node_hover_valid(from, from_port, to, to_port):
return from != to
public override bool _IsNodeHoverValid(StringName fromNode, int fromPort, StringName toNode, int toPort)
{
return fromNode != toNode;
}
void add_valid_connection_type(from_type: int, to_type: int) 🔗
Autorise la connexion entre deux types de port différents. Le type de port est défini individuellement pour le port gauche et droit de chaque emplacement avec la méthode GraphNode.set_slot().
Voir aussi is_valid_connection_type() et remove_valid_connection_type().
void add_valid_left_disconnect_type(type: int) 🔗
Autorise de déconnecter des nœuds en tirant depuis le port gauche de l'emplacement du GraphNode s'il a le type spécifié. Voir aussi remove_valid_left_disconnect_type().
void add_valid_right_disconnect_type(type: int) 🔗
Autorise de déconnecter des nœuds en tirant depuis le port droit de l'emplacement du GraphNode s'il a le type spécifié. Voir aussi remove_valid_right_disconnect_type().
void arrange_nodes() 🔗
Réarrange les nœuds sélectionnés en une disposition avec des croisement minimaux entre les connexions et un écart horizontal et vertical uniforme entre les nœuds.
void attach_graph_element_to_frame(element: StringName, frame: StringName) 🔗
Attache le GraphElement element au cadre GraphFrame frame.
void clear_connections() 🔗
Supprime toutes les connexions entre les nœuds.
Error connect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int, keep_alive: bool = false) 🔗
Crée une connexion entre le port from_port du GraphNode from_node et le port to_port du GraphNode to_node. Si la connexion existe déjà, aucune connexion n'est créée.
Les connexions avec keep_alive défini à false peuvent être supprimées automatiquement si elles sont invalides lors d'un redessin.
void detach_graph_element_from_frame(element: StringName) 🔗
Détache le GraphElement element du GraphFrame auquel il est actuellement attaché.
void disconnect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Supprime la connexion entre le port from_port du GraphNode from_node et le port to_port du GraphNode to_node. Si la connexion n'existe pas, aucune connexion ne sera supprimée.
void force_connection_drag_end() 🔗
Finit la création de la connexion actuelle. En d'autres termes, si vous faites glisser une connexion, vous pouvez utiliser cette méthode pour avorter le processus et supprimer la ligne qui suivait votre curseur.
Ceci est généralement utilisé avec connection_drag_started et connection_drag_ended pour ajouter du comportement personnalisé comme l'ajout de nœuds par des raccourcis.
Note : Cette méthode supprime tout autre signal de demande de connexion hormis connection_drag_ended.
Array[StringName] get_attached_nodes_of_frame(frame: StringName) 🔗
Renvoie un tableau de noms de nœuds qui sont attachés au GraphFrame avec le nom donné.
Dictionary get_closest_connection_at_point(point: Vector2, max_distance: float = 4.0) const 🔗
Renvoie la connexion la plus proche du point donné dans l'espace écran. Si aucune connexion n'est trouvée avec une portée de max_distance pixels, un Dictionary vide est renvoyé.
Une connexion est représentée comme un Dictionary sous la forme :
{
from_node: StringName, #nœud de début
from_port: int, #port de début
to_node: StringName, #nœud de fin
to_port: int, #port de fin
keep_alive: bool #garder en vie
}
Par exemple, obtenir une connexion à une position donnée de la souris peut être effectué comme ceci :
var connexion = get_closest_connection_at_point(mouse_event.get_position())
int get_connection_count(from_node: StringName, from_port: int) 🔗
Renvoie le nombre de connexions du port from_port du nœud from_node.
PackedVector2Array get_connection_line(from_node: Vector2, to_node: Vector2) const 🔗
Renvoie les points qui constitueraient une connexion entre les nœuds from_node et to_node.
Array[Dictionary] get_connection_list_from_node(node: StringName) const 🔗
Renvoie un Array contenant une liste de toutes les connections pour le nœud node.
Une connexion est représentée par un Dictionary de la forme :
{
from_node: StringName,
from_port: int,
to_node: StringName,
to_port: int,
keep_alive: bool
}
Example : Obtenir toutes les connexions sur un port spécifique :
func obtenir_liste_connexions_du_port(noeud, port):
var connexions = get_connection_list_from_node(noeud)
var resultat = []
for connexion in connexions:
var dict = {}
if connexion["from_node"] == noeud and connexion["from_port"] == port:
dict["node"] = connexion["to_node"]
dict["port"] = connexion["to_port"]
dict["type"] = "left"
resultat.push_back(dict)
elif connexion["to_node"] == noeud and connexion["to_port"] == port:
dict["node"] = connexion["from_node"]
dict["port"] = connexion["from_port"]
dict["type"] = "right"
resultat.push_back(dict)
return resultat
Array[Dictionary] get_connections_intersecting_with_rect(rect: Rect2) const 🔗
Renvoie un Array contenant une liste de toutes les connexions qui intersectent le Rect2 donné.
Une connexion est représentée en tant que Dictionary sous la forme :
{
from_node: StringName, #nœud de début
from_port: int, #port de début
to_node: StringName, #nœud de fin
to_port: int, #port de fin
keep_alive: bool #garder en vie
}
GraphFrame get_element_frame(element: StringName) 🔗
Renvoie le GraphFrame qui contient le GraphElement avec le nom donné.
Obtient le HBoxContainer qui contient les contrôles de zoom et de magnétisation de la grille en haut à gauche du graphe. Vous pouvez utiliser cette méthode pour repositionner la barre d'outils ou pour y ajouter vos propres contrôles personnalisés.
Avertissement : Il s'agit d'un nœud interne requis, l'enlever et le libérer peut causer un plantage. Si vous voulez le cacher lui ou un de ses enfants, utilisez plutôt la propriété CanvasItem.visible.
bool is_node_connected(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Renvoie true si le port from_port du GraphNode from_node est connecté au port to_port du GraphNode to_node.
bool is_valid_connection_type(from_type: int, to_type: int) const 🔗
Renvoie s'il est possible de faire une connexion entre deux types de port différents. Le type de port est défini individuellement pour le port gauche et droit de chaque emplacement avec la méthode GraphNode.set_slot().
Voir aussi add_valid_connection_type() et remove_valid_connection_type().
void remove_valid_connection_type(from_type: int, to_type: int) 🔗
Interdit la connexion entre deux types de ports précédemment autorisés par add_valid_connection_type(). Le type de port est défini individuellement pour le port gauche et le port droit de chaque emplacement avec la méthode GraphNode.set_slot().
Voir aussi is_valid_connection_type().
void remove_valid_left_disconnect_type(type: int) 🔗
Disallows to disconnect nodes when dragging from the left port of the GraphNode's slot if it has the specified type. Use this to disable a disconnection previously allowed with add_valid_left_disconnect_type().
void remove_valid_right_disconnect_type(type: int) 🔗
Disallows to disconnect nodes when dragging from the right port of the GraphNode's slot if it has the specified type. Use this to disable a disconnection previously allowed with add_valid_right_disconnect_type().
void set_connection_activity(from_node: StringName, from_port: int, to_node: StringName, to_port: int, amount: float) 🔗
Définit la coloration de la connexion entre le port from_port du nœud from_node et du port to_port du nœud to_node avec la couleur fournie dans la propriété de thème activity. La couleur est linéairement interpolée entre la couleur de connexion et la couleur d'activité en utilisant amount comme poids.
void set_selected(node: Node) 🔗
Définit le nœud node spécifié comme celui sélectionné.
Descriptions des propriétés du thème
Color activity = Color(1, 1, 1, 1) 🔗
Couleur vers laquelle la ligne de connexion est interpolée en fonction de la valeur d'activité d'une connexion (voir set_connection_activity()).
Color connection_hover_tint_color = Color(0, 0, 0, 0.3) 🔗
Couleur qui est mélangée avec la ligne de connexion lorsque la souris la survole.
Color connection_rim_color = Color(0.1, 0.1, 0.1, 0.6) 🔗
Couleur de la bordure autour de chaque ligne de connexion utilisée pour rendre les lignes d'intersection plus distinguables.
Color connection_valid_target_tint_color = Color(1, 1, 1, 0.4) 🔗
Couleur qui est mélangée avec la ligne de connexion lorsque la connexion actuellement glissée survole un port cible valide.
Color grid_major = Color(1, 1, 1, 0.2) 🔗
Couleur des lignes/points principaux de la grille.
Color grid_minor = Color(1, 1, 1, 0.05) 🔗
Couleur des lignes/points secondaires de la grille.
Color selection_fill = Color(1, 1, 1, 0.3) 🔗
La couleur de remplissage du rectangle de sélection.
Color selection_stroke = Color(1, 1, 1, 0.8) 🔗
La couleur de la bordure du rectangle de sélection.
int connection_hover_thickness = 0 🔗
Widens the line of a connection when the mouse is hovering over it by a percentage factor. A value of 0 disables the highlight. A value of 100 doubles the line width.
int port_hotzone_inner_extent = 22 🔗
La plage horizontale sur laquelle un port peut être saisi (côté intérieur).
int port_hotzone_outer_extent = 26 🔗
La plage horizontale sur laquelle un port peut être saisi (côté extérieur).
L'icône du bouton d'activation de la grille.
L'icône pour le bouton de mise en page pour auto-arranger le graphe.
L'icône du bouton d'activation de la mini-carte.
L'icône du bouton d'activation de la magnétisation.
L'icône pour le bouton du zoom avant.
L'icône pour le bouton du zoom arrière.
L'icône pour le bouton du rétablissement du zoom.
There is currently no description for this theme property. Please help us by contributing one!
L’arrière-plan dessiné sous la grille.
StyleBox utilisée quand le GraphEdit a le focus (lorsqu’utilisé avec des applications d'assistance).