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
Eredita: Control < CanvasItem < Node < Object
Un editor per strutture simili a grafici, che utilizza GraphNode.
Descrizione
GraphEdit fornisce strumenti per la creazione, la manipolazione e la visualizzazione di vari grafici. Il suo scopo principale nel motore è quello di alimentare i sistemi di programmazione visuale, come gli shader visuali, ma è anche disponibile per l'uso nei progetti utente.
GraphEdit di per sé è solo un contenitore vuoto, che rappresenta una griglia infinita in cui si possono posizionare i GraphNode. Ogni GraphNode rappresenta un nodo nel grafico, una singola unità di dati nello schema collegato. GraphEdit, a sua volta, aiuta a controllare varie interazioni con i nodi e tra i nodi. Quando l'utente tenta di collegare, scollegare o eliminare un GraphNode, un segnale viene emesso nel GraphEdit, ma non viene intrapresa alcuna azione predefinita. È la responsabilità del programmatore che utilizza questo controllo di implementare la logica necessaria per gestire ciascuna richiesta.
Prestazioni: Si consiglia vivamente di abilitare la modalità di utilizzo a basso consumo (vedi OS.low_processor_usage_mode) quando si utilizzano i GraphEdit.
Nota: Tieni presente che Node.get_children() restituirà anche il nodo del livello di collegamento denominato _connection_layer a causa di limitazioni tecniche. Questo comportamento potrebbe cambiare nelle versioni future.
Proprietà
clip_contents |
|
|
|
||
|
||
|
||
|
||
focus_mode |
|
|
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
Metodi
_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) |
Proprietà del tema
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
Segnali
begin_node_move() 🔗
Emesso all'inizio del movimento di un GraphElement.
connection_drag_ended() 🔗
Emesso alla fine di un trascinamento di collegamento.
connection_drag_started(from_node: StringName, from_port: int, is_output: bool) 🔗
Emesso all'inizio di un trascinamento di collegamento.
connection_from_empty(to_node: StringName, to_port: int, release_position: Vector2) 🔗
Emesso quando l'utente trascina un collegamento da una porta di ingresso nello spazio vuoto del grafico.
connection_request(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Emesso al GraphEdit quando si tenta di creare il collegamento tra la porta from_port del nodo GraphNode from_node e la porta to_port del nodo GraphNode to_node.
connection_to_empty(from_node: StringName, from_port: int, release_position: Vector2) 🔗
Emesso quando l'utente trascina un collegamento da una porta di uscita nello spazio vuoto del grafico.
copy_nodes_request() 🔗
Emesso quando questo GraphEdit cattura un'azione ui_copy (Ctrl + C per impostazione predefinita). In generale, questo segnale indica che i GraphElement selezionati devono essere copiati.
cut_nodes_request() 🔗
Emesso quando questo GraphEdit cattura un'azione ui_cut (Ctrl + X per impostazione predefinita). In generale, questo segnale indica che i GraphElement selezionati devono essere tagliati.
delete_nodes_request(nodes: Array[StringName]) 🔗
Emesso quando questo GraphEdit cattura un'azione ui_graph_delete (Delete per impostazione predefinita).
nodes è un array di nomi di nodi che dovrebbero essere rimossi. Questi solitamente includono tutti i nodi selezionati.
disconnection_request(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Emesso al GraphEdit quando si tenta di rimuovere il collegamento tra la porta from_port del nodo GraphNode from_node e la porta to_port del nodo GraphNode to_node.
duplicate_nodes_request() 🔗
Emesso quando questo GraphEdit cattura un'azione ui_graph_duplicate (Ctrl + D per impostazione predefinita). In generale, questo segnale indica che i GraphElement selezionati devono essere duplicati.
end_node_move() 🔗
Emesso alla fine del movimento di un GraphElement.
frame_rect_changed(frame: GraphFrame, new_rect: Rect2) 🔗
Emesso quando il GraphFrame frame è ridimensionato a new_rect.
graph_elements_linked_to_frame_request(elements: Array, frame: StringName) 🔗
Emesso quando uno o più GraphElement vengono rilasciati sul GraphFrame denominato frame, quando non erano stati precedentemente collegati a nessun altro.
elements è un array di GraphElement da collegare.
Emesso quando il nodo GraphElement fornito viene deselezionato.
Emesso quando il nodo GraphElement fornito viene selezionato.
paste_nodes_request() 🔗
Emesso quando questo GraphEdit cattura un'azione ui_paste (Ctrl + V per impostazione predefinita). In generale, questo segnale indica che i GraphElement copiati in precedenza devono essere incollati.
popup_request(at_position: Vector2) 🔗
Emesso quando viene richiesto un popup. Avviene quando si clicca con il pulsante destro del mouse in GraphEdit. at_position è la posizione del puntatore del mouse quando viene inviato il segnale.
scroll_offset_changed(offset: Vector2) 🔗
Emesso quando l'offset di scorrimento viene modificato dall'utente. Non verrà emesso quando viene modificato in codice.
Enumerazioni
enum PanningScheme: 🔗
PanningScheme SCROLL_ZOOMS = 0
Rotellina del mouse per eseguire lo zoom, Ctrl + Rotellina del mouse per spostare la vista.
PanningScheme SCROLL_PANS = 1
Rotellina del mouse per spostare la vista, Ctrl + Rotellina del mouse per eseguire lo zoom.
enum GridPattern: 🔗
GridPattern GRID_PATTERN_LINES = 0
Disegna la griglia utilizzando linee continue.
GridPattern GRID_PATTERN_DOTS = 1
Disegna la griglia utilizzando puntini.
Descrizioni delle proprietà
bool connection_lines_antialiased = true 🔗
Se true, le linee tra i nodi useranno l'antialiasing.
float connection_lines_curvature = 0.5 🔗
La curvatura delle linee tra i nodi. 0 produce linee rette.
float connection_lines_thickness = 4.0 🔗
Lo spessore delle linee tra i nodi.
Array[Dictionary] connections = [] 🔗
void set_connections(value: Array[Dictionary])
Array[Dictionary] get_connection_list()
I collegamenti tra i GraphNode.
Un collegamento è rappresentato come Dictionary nel formato:
{
from_node: StringName,
from_port: int,
to_node: StringName,
to_port: int,
keep_alive: bool
}
I collegamenti con keep_alive impostato su false potrebbero essere eliminati automaticamente se non validi durante un ridisegno.
GridPattern grid_pattern = 0 🔗
void set_grid_pattern(value: GridPattern)
GridPattern get_grid_pattern()
Il motivo utilizzato per disegnare la griglia.
Se true, la minimappa è visibile.
float minimap_opacity = 0.65 🔗
L'opacità del rettangolo della minimappa.
Vector2 minimap_size = Vector2(240, 160) 🔗
Le dimensioni del rettangolo della minimappa. La mappa stessa si basa sulle dimensioni dell'area della griglia ed è ridimensionata per adattarsi a questo rettangolo.
PanningScheme panning_scheme = 0 🔗
void set_panning_scheme(value: PanningScheme)
PanningScheme get_panning_scheme()
Definisce lo schema di controllo per la panoramica con la rotellina del mouse.
bool right_disconnects = false 🔗
Se true, abilita lo scollegamento dei collegamenti esistenti nel GraphEdit trascinando l'estremità destra.
Vector2 scroll_offset = Vector2(0, 0) 🔗
Lo scostamento di scorrimento.
bool show_arrange_button = true 🔗
Se true, il pulsante per organizzare automaticamente i nodi nel grafico è visibile.
Se true, la griglia è visibile.
bool show_grid_buttons = true 🔗
Se true, i pulsanti che permettono di configurare la griglia e le opzioni di scatto sono visibili.
Se true, la barra degli strumenti del menu è visibile.
bool show_minimap_button = true 🔗
Se true, il pulsante per commutare la minimappa è visibile.
bool show_zoom_buttons = true 🔗
Se true, i pulsanti che permettono di cambiare e ripristinare il livello di zoom sono visibili.
bool show_zoom_label = false 🔗
Se true, l'etichetta con il livello di zoom attuale è visibile. Il livello di zoom viene visualizzato in percentuale.
La distanza d'aggancio in pixel, determina anche la distanza delle linee nella griglia.
bool snapping_enabled = true 🔗
Se true, l'aggancio è abilitato.
Dictionary type_names = {} 🔗
void set_type_names(value: Dictionary)
Dictionary get_type_names()
Dictionary of human-readable port type names.
Il valore di zoom attuale.
Il limite superiore dello zoom.
Il limite inferiore dello zoom.
La differenza per ogni livello di zoom.
Descrizioni dei metodi
PackedVector2Array _get_connection_line(from_position: Vector2, to_position: Vector2) virtual const 🔗
Metodo virtuale che può essere sovrascritto per personalizzare il modo in cui sono disegnati i collegamenti.
bool _is_in_input_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual 🔗
Restituisce se la posizione del mouse mouse_position si trova nella zona calda d'ingresso.
Per impostazione predefinita, una zona calda è un Rect2 posizionato in modo tale che il suo centro sia in in_node.GraphNode.get_input_port_position()(in_port) (per il caso dell'uscita, chiama invece GraphNode.get_output_port_position()). La larghezza della zona calda è il doppio della proprietà del tema port_grab_distance_horizontal e la sua altezza è il doppio di port_grab_distance_vertical.
Di seguito è riportato un codice di esempio per cominciare:
func _is_in_input_hotzone(in_node, in_port, mouse_position):
var port_size = Vector2(get_theme_constant("port_grab_distance_horizontal"), get_theme_constant("port_grab_distance_vertical"))
var port_pos = in_node.get_position() + in_node.get_input_port_position(in_port) - port_size / 2
var rect = Rect2(port_pos, port_size)
return rect.has_point(mouse_position)
bool _is_in_output_hotzone(in_node: Object, in_port: int, mouse_position: Vector2) virtual 🔗
Restituisce se la posizione del mouse mouse_position si trova nella zona calda d'uscita. Per maggiori informazioni sulle zone calde, vedi _is_in_input_hotzone().
Di seguito è riportato un codice di esempio per iniziare:
func _is_in_output_hotzone(in_node, in_port, mouse_position):
var port_size = Vector2(get_theme_constant("port_grab_distance_horizontal"), get_theme_constant("port_grab_distance_vertical"))
var port_pos = in_node.get_position() + in_node.get_output_port_position(in_port) - port_size / 2
var rect = Rect2(port_pos, port_size)
return rect.has_point(mouse_position)
bool _is_node_hover_valid(from_node: StringName, from_port: int, to_node: StringName, to_port: int) virtual 🔗
Questo metodo virtuale si può utilizzare per inserire un ulteriore rilevamento di errori mentre l'utente trascina un collegamento su una porta valida.
Restituisci true se il collegamento è effettivamente valido o restituisci false se il collegamento è impossibile. Se il collegamento è impossibile, non ci sarà aggancio alla porta e quindi nessuna richiesta di collegamento sarà effettuata a tale porta.
In questo esempio, un collegamento allo stesso nodo viene soppresso:
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) 🔗
Permette il collegamento tra due diversi tipi di porta. Il tipo di porta è definito individualmente per la porta sinistra e quella destra di ogni slot con il metodo GraphNode.set_slot().
Vedi anche is_valid_connection_type() e remove_valid_connection_type().
void add_valid_left_disconnect_type(type: int) 🔗
Consente di disconnettere i nodi quando si trascina dalla porta sinistra dello slot del GraphNode se ha il tipo specificato. Vedi anche remove_valid_left_disconnect_type().
void add_valid_right_disconnect_type(type: int) 🔗
Consente di disconnettere i nodi quando si trascina dalla porta destra dello slot del GraphNode se ha il tipo specificato. Vedi anche remove_valid_right_disconnect_type().
void arrange_nodes() 🔗
Riorganizza i nodi selezionati in una disposizione con incroci minimi tra i collegamenti e spazi orizzontali e verticali uniformi tra i nodi.
void attach_graph_element_to_frame(element: StringName, frame: StringName) 🔗
Attacca l'elemento GraphElement element alla cornice GraphFrame frame.
void clear_connections() 🔗
Rimuove tutti i collegamenti tra i nodi.
Error connect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int, keep_alive: bool = false) 🔗
Crea un collegamento tra la porta from_port del nodo GraphNode from_node e la porta to_port del GraphNode to_node. Se il collegamento esiste già, nessun collegamento viene creato.
I collegamenti con keep_alive impostato su false potrebbero essere eliminati automaticamente se non validi durante un ridisegno.
void detach_graph_element_from_frame(element: StringName) 🔗
Stacca l'elemento GraphElement element dal GraphFrame a cui è attualmente attaccato.
void disconnect_node(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Rimuove un collegamento tra la porta from_port del nodo GraphNode from_node e la porta to_port del GraphNode to_node. Se il collegamento non esiste, nessun collegamento viene rimosso.
void force_connection_drag_end() 🔗
Termina la creazione del collegamento attuale. In altre parole, se si sta trascinando un collegamento è possibile usare questo metodo per interrompere il processo e rimuovere la linea che seguiva il cursore.
È meglio usarlo insieme a connection_drag_started e connection_drag_ended per implementare un comportamento personalizzato come l'aggiunta di nodi attraverso scorciatoie.
Nota: Questo metodo sopprime qualsiasi altro segnale di richiesta di collegamento tranne connection_drag_ended.
Array[StringName] get_attached_nodes_of_frame(frame: StringName) 🔗
Restituisce un array di nomi dei nodi associati al GraphFrame con il nome specificato.
Dictionary get_closest_connection_at_point(point: Vector2, max_distance: float = 4.0) const 🔗
Restituisce il collegamento più vicino al punto specificato nello spazio dello schermo. Se nessun collegamento viene trovato entro max_distance pixel, viene restituito un Dictionary vuoto.
Un collegamento è rappresentato come Dictionary nel formato:
{
from_node: StringName,
from_port: int,
to_node: StringName,
to_port: int,
keep_alive: bool
}
Ad esempio, è possibile ottenere un collegamento a una determinata posizione del mouse in questo modo:
var connection = get_closest_connection_at_point(mouse_event.get_position())
int get_connection_count(from_node: StringName, from_port: int) 🔗
Restituisce il numero di collegamenti dalla porta from_port del nodo from_node.
PackedVector2Array get_connection_line(from_node: Vector2, to_node: Vector2) const 🔗
Restituisce i punti che comporrebbero un collegamento tra il nodo from_node e il nodo to_node.
Array[Dictionary] get_connection_list_from_node(node: StringName) const 🔗
Restituisce un Array contenente un elenco di tutti collegamenti per node.
Un collegamento è rappresentata come un Dictionary nel formato:
{
from_node: StringName,
from_port: int,
to_node: StringName,
to_port: int,
keep_alive: bool
}
Esempio: Ottieni tutti i collegamenti su una porta specifica:
func get_connection_list_from_port(node, port):
var connections = get_connection_list_from_node(node)
var result = []
for connection in connections:
var dict = {}
if connection["from_node"] == node and connection["from_port"] == port:
dict["node"] = connection["to_node"]
dict["port"] = connection["to_port"]
dict["type"] = "left"
result.push_back(dict)
elif connection["to_node"] == node and connection["to_port"] == port:
dict["node"] = connection["from_node"]
dict["port"] = connection["from_port"]
dict["type"] = "right"
result.push_back(dict)
return result
Array[Dictionary] get_connections_intersecting_with_rect(rect: Rect2) const 🔗
Restituisce un Array contenente la lista dei collegamenti che intersecano il Rect2 fornito.
Un collegamento è rappresentato come Dictionary nel formato:
{
from_node: StringName,
from_port: int,
to_node: StringName,
to_port: int,
keep_alive: bool
}
GraphFrame get_element_frame(element: StringName) 🔗
Restituisce il GraphFrame che contiene il GraphElement con il nome fornito.
Ottiene il HBoxContainer che contiene i controlli di zoom e di scatto alla griglia in alto a sinistra del grafico. Puoi usare questo metodo per riposizionare la barra degli strumenti o per aggiungervi i tuoi controlli personalizzati.
Attenzione: Questo è un nodo interno obbligatorio, rimuoverlo e liberarlo potrebbe causare un crash. Se desideri nasconderlo o nascondere uno dei suoi figli, usa la loro proprietà CanvasItem.visible.
bool is_node_connected(from_node: StringName, from_port: int, to_node: StringName, to_port: int) 🔗
Restituisce true se la porta from_port del nodo GraphNode from_node è connesso alla porta to_port del nodo GraphNode to_node.
bool is_valid_connection_type(from_type: int, to_type: int) const 🔗
Restituisce se è possibile stabilire un collegamento tra due diversi tipi di porta. Il tipo di porta è definito individualmente per la porta sinistra e quella destra di ogni slot con il metodo GraphNode.set_slot().
Vedi anche add_valid_connection_type() e remove_valid_connection_type().
void remove_valid_connection_type(from_type: int, to_type: int) 🔗
Impedisce il collegamento tra due diversi tipi di porta consentiti in precedenza da add_valid_connection_type(). Il tipo di porta è definito individualmente per la porta sinistra e quella destra di ogni slot con il metodo GraphNode.set_slot().
Vedi anche 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) 🔗
Imposta la colorazione del collegamento tra la porta from_port del nodo from_node e la porta to_port del nodo to_node con il colore fornito nella proprietà del tema activity. Il colore è linearmente interpolato tra il colore del collegamento e il colore di attività usando amount come peso.
void set_selected(node: Node) 🔗
Imposta il nodo node come quello selezionato.
Descrizioni delle proprietà del tema
Color activity = Color(1, 1, 1, 1) 🔗
Il colore della linea di collegamento che è interpolato in base al valore di attività di un collegamento (vedi set_connection_activity()).
Color connection_hover_tint_color = Color(0, 0, 0, 0.3) 🔗
Colore che si fonde con la linea di collegamento quando si passa il mouse sopra di essa.
Color connection_rim_color = Color(0.1, 0.1, 0.1, 0.6) 🔗
Colore del bordo attorno a ciascuna linea di collegamento utilizzato per rendere più distinguibili le linee che si intersecano.
Color connection_valid_target_tint_color = Color(1, 1, 1, 0.4) 🔗
Colore che si fonde con la linea di collegamento quando il collegamento attualmente trascinato passa sopra una porta di destinazione valida.
Color grid_major = Color(1, 1, 1, 0.2) 🔗
Colore delle linee/puntini principali della griglia.
Color grid_minor = Color(1, 1, 1, 0.05) 🔗
Colore delle linee/puntini secondari della griglia.
Color selection_fill = Color(1, 1, 1, 0.3) 🔗
Il colore di riempimento del rettangolo di selezione.
Color selection_stroke = Color(1, 1, 1, 0.8) 🔗
Il colore del contorno del rettangolo di selezione.
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 portata orizzontale entro il quale è possibile afferrare una porta (lato interno).
int port_hotzone_outer_extent = 26 🔗
La portata orizzontale entro il quale è possibile afferrare una porta (lato esterno).
L'icona per il pulsante di commutazione della griglia.
L'icona del pulsante di layout per la disposizione automatica del grafico.
L'icona per il pulsante di commutazione della minimappa.
L'icona per il pulsante di commutazione dell'aggancio.
L'icona per il pulsante di ingrandimento dello zoom.
L'icona per il pulsante di rimpicciolimento dello zoom.
L'icona per il pulsante di ripristino dello zoom.
There is currently no description for this theme property. Please help us by contributing one!
Lo sfondo disegnato sotto la griglia.
StyleBox utilizzato quando il GraphEdit è focalizzato (se utilizzato tramite applicazioni assistive).