Condividi tramite


Sintassi dei comandi di spostamento e disegno

Scopri i comandi di spostamento e disegno (un mini-linguaggio) che puoi usare per specificare geometrie di percorso come valore dell'attributo XAML. I comandi di spostamento e disegno vengono usati da molti strumenti di progettazione e grafica che possono restituire un elemento grafico vettoriale o una forma, come formato di serializzazione e interscambio.

Proprietà che utilizzano stringhe di comando per il movimento e il disegno

La sintassi dei comandi di spostamento e disegno è supportata da un convertitore di tipi interno per XAML, che analizza i comandi e produce una rappresentazione grafica in fase di esecuzione. Questa rappresentazione è fondamentalmente un set finito di vettori pronti per la presentazione. I vettori stessi non completano i dettagli della presentazione; sarà comunque necessario impostare altri valori sugli elementi. Per un oggetto Path sono necessari anche valori per Fill, Stroke e altre proprietà e quindi che Path deve essere connesso in qualche modo all'albero visuale. Per un oggetto PathIcon , impostare la proprietà Foreground .

In Windows Runtime sono disponibili due proprietà che possono usare una stringa che rappresenta i comandi di spostamento e disegno: Path.Data e PathIcon.Data. Se imposti una di queste proprietà specificando i comandi di spostamento e disegno, in genere la imposti come valore dell'attributo XAML insieme ad altri attributi obbligatori di tale elemento. Senza entrare nelle specifiche, ecco l'aspetto seguente:

<Path x:Name="Arrow" Fill="White" Height="11" Width="9.67"
  Data="M4.12,0 L9.67,5.47 L4.12,10.94 L0,10.88 L5.56,5.47 L0,0.06" />

Uso di comandi di spostamento e disegno rispetto all'uso di pathGeometry

Per XAML di Windows Runtime, i comandi di spostamento e disegno producono un PathGeometry con un singolo oggetto PathFigure con un valore della proprietà Figures . Ogni comando di disegno produce una classe derivata PathSegment nella raccolta di Segmenti di quel singolo PathFigure, il comando di spostamento modifica StartPoint e l'esistenza di un comando di chiusura imposta IsClosed su true. È possibile esplorare questa struttura come modello a oggetti se si esaminano i valori dei dati in fase di esecuzione.

Sintassi di base

La sintassi per i comandi di spostamento e disegno può essere riepilogata nel modo seguente:

  1. Iniziare con una regola di riempimento facoltativa. In genere si specifica questa opzione solo se non si vuole impostare l'impostazione predefinita EvenOdd . Altre informazioni su EvenOdd più avanti.
  2. Specificare esattamente un comando di spostamento.
  3. Specificare uno o più comandi di disegno.
  4. Specificare un comando di chiusura. È possibile omettere un comando di chiusura, ma questo lascerebbe la figura aperta (cosa inusuale).

Le regole generali di questa sintassi sono:

  • Ogni comando è rappresentato da una sola lettera.
  • Tale lettera può essere maiuscola o minuscola. In caso di problemi, come verrà descritto.
  • Ogni comando, ad eccezione del comando close, è in genere seguito da uno o più numeri.
  • Se più di un numero per un comando, separare con una virgola o uno spazio.

[fillRule]moveCommanddrawCommand[drawCommand*][closeCommand]

Molti dei comandi di disegno usano punti, dove si specifica un valore x,y . Ogni volta che viene visualizzato un segnaposto *points , è possibile presupporre che si assegnano due valori decimali per il valore x,y di un punto.

Lo spazio vuoto può essere spesso omesso quando il risultato non è ambiguo. È infatti possibile omettere tutti gli spazi vuoti se si usano virgole come separatore per tutti i set di numeri (punti e dimensioni). Ad esempio, questo utilizzo è legale: F1M0,58L2,56L6,60L13,51L15,53L6,64z. Ma è più tipico includere spazi vuoti tra i comandi per maggiore chiarezza.

Non usare virgole come separatore decimale per i numeri decimali; la stringa di comando viene interpretata da XAML e non tiene conto delle convenzioni di formattazione dei numeri cultura-specifiche che divergono da quelle utilizzate nelle impostazioni locali en-us.

Specifiche della sintassi

Regola di riempimento

Esistono due valori possibili per la regola di riempimento facoltativa: F0 o F1. (F è sempre maiuscolo. F0 è il valore predefinito; produce il comportamento di riempimento EvenOdd, quindi in genere non viene specificato. Usare F1 per ottenere il comportamento di riempimento diverso da zero . Questi valori di riempimento sono allineati ai valori dell'enumerazione FillRule .

Comando Sposta

Specifica il punto iniziale di una nuova figura.

Sintassi
M startPoint
o
m startPoint
Termine Description
startPoint Punto
Il punto di partenza di una nuova figura.

Un M maiuscolo indica che startPoint è una coordinata assoluta; un valore m minuscolo indica che startPoint è un offset rispetto al punto precedente oppure (0,0) se non è presente alcun punto precedente.

Nota È possibile specificare più punti dopo il comando di spostamento. Una riga viene disegnata in questi punti come se fosse stato specificato il comando della riga. Tuttavia questo non è uno stile consigliato; usare invece il comando della riga dedicata.

Comandi di disegno

Un comando di disegno può essere costituito da diversi comandi di forma: linea, linea orizzontale, linea verticale, curva di Bézier cubica, curva quadratica di Bézier, curva di Bézier cubica liscia, curva quadratica di Bézier uniforme e arco ellittico.

Per tutti i comandi di disegno, la distinzione tra maiuscole e minuscole è importante. Le lettere maiuscole indicano coordinate assolute e lettere minuscole indicano le coordinate relative al comando precedente.

I punti di controllo per un segmento sono relativi al punto finale del segmento precedente. Quando si immette in sequenza più comandi dello stesso tipo, è possibile omettere la voce di comando duplicata. Ad esempio, L 100,200 300,400 equivale a L 100,200 L 300,400.

Comando da riga

Crea una linea retta tra il punto corrente e il punto finale specificato. l 20 30 e L 20,30 sono esempi di comandi da riga validi. Definisce l'equivalente di un oggetto LineGeometry .

Sintassi
L Endpoint
o
l Endpoint
Termine Description
Endpoint Punto
Punto finale della linea.

Comando della riga orizzontale

Crea una linea orizzontale tra il punto corrente e la coordinata x specificata. H 90 è un esempio di un comando della riga orizzontale valido.

Sintassi
H x
-o-
h x
Termine Description
x Doppio
Coordinata x del punto finale della linea.

Comando linea verticale

Crea una linea verticale tra il punto corrente e la coordinata y specificata. v 90 è un esempio di comando della riga verticale valido.

Sintassi
V y
-o-
v y
Termine Description
y Double
Coordinata y del punto finale della linea.

Comando curva bézier cubica

Crea una curva di Bézier cubica tra il punto corrente e il punto finale specificato utilizzando i due punti di controllo specificati (controlPoint1 e controlPoint2). C 100,200 200,400 300,200 è un esempio di un comando di curva valido. Definisce l'equivalente di un oggetto PathGeometry con un oggetto BezierSegment .

Sintassi
C controlPoint1controlPoint2endPoint
-o-
c controlPoint1controlPoint2endPoint
Termine Description
controlPoint1 Punto
Primo punto di controllo della curva, che determina la tangente iniziale della curva.
controlPoint2 Punto
Secondo punto di controllo della curva, che determina la tangente finale della curva.
endpoint Punto
Punto a cui viene disegnata la curva.

Comando curva quadratica bézier

Crea una curva quadratica di Bézier tra il punto corrente e il punto finale specificato utilizzando il punto di controllo specificato (controlPoint). q 100,200 300,200 è un esempio di un comando di curva di Bézier quadratico valido. Definisce l'equivalente di un PathGeometry con QuadraticBezierSegment.

Sintassi
Q controlPoint endPoint
-o-
q controlPoint endPoint
Termine Description
controlPoint Punto
Punto di controllo della curva, che determina le tangenti iniziali e finali della curva.
endpoint Punto
Punto a cui viene disegnata la curva.

Comando curva di Bézier cubica uniforme

Crea una curva di Bézier cubica tra il punto corrente e il punto finale specificato. È ipotizzato che il primo punto di controllo sia la riflessione del secondo punto di controllo del comando precedente rispetto al punto corrente. Se non è presente alcun comando precedente o se il comando precedente non era un comando di curva di Bézier cubica o un comando di curva di Bézier cubica uniforme, si supponga che il primo punto di controllo sia coincidente con il punto corrente. Il secondo punto di controllo, ovvero il punto di controllo per la fine della curva, è specificato da controlPoint2. Ad esempio, S 100,200 200,300 è un comando valido per una curva di Bézier cubica. Questo comando definisce l'equivalente di pathGeometry con un bezierSegment in cui era presente un segmento di curva precedente.

Sintassi
S controlPoint2endPoint
-o-
s controlPoint2 endPoint
Termine Description
controlPoint2 Punto
Punto di controllo della curva, che determina la tangente finale della curva.
endpoint Punto
Punto a cui viene disegnata la curva.

Comando curva di Bézier quadratica uniforme

Crea una curva quadratica di Bézier tra il punto corrente e il punto finale specificato. Si presume che il punto di controllo sia il riflesso del punto di controllo del comando precedente rispetto al punto corrente. Se non è presente alcun comando precedente o se il comando precedente non era un comando di curva di Bézier quadratica o un comando di curva di Bézier quadratica uniforme, il punto di controllo coincide con il punto corrente. Questo comando definisce l'equivalente di un PathGeometry con un QuadraticBezierSegment, dove era presente un segmento di curva precedente.

Sintassi
T controlPointendPoint
-o-
t controlPointendPoint
Termine Description
controlPoint Punto
Punto di controllo della curva, che determina l'inizio e la tangente della curva.
endpoint Punto
Punto a cui viene disegnata la curva.

Comando arco ellittico

Crea un arco ellittico tra il punto corrente e il punto finale specificato. Definisce l'equivalente di un oggetto PathGeometry con un oggetto ArcSegment.

Sintassi
A sizerotationAngleisLargeArcFlagsweepDirectionFlagendPoint
-o-
a sizerotationAngleisLargeArcFlagsweepDirectionFlagendPoint
Termine Description
dimensione Dimensione
Raggio x e raggio y dell'arco.
rotationAngle Doppio
Rotazione dell'ellisse, espressa in gradi.
isLargeArcFlag Impostare su 1 se l'angolo dell'arco deve essere di 180 gradi o superiore; in caso contrario, impostare su 0.
sweepDirectionFlag Impostare su 1 se l'arco viene disegnato in direzione dell'angolo positivo; in caso contrario, impostare su 0.
endpoint Punto
Punto a cui viene disegnato l'arco.

Comando Chiudi

Termina la figura corrente e crea una linea che collega il punto corrente al punto iniziale della figura. Questo comando crea una giunzione di linea tra l'ultimo segmento e il primo segmento della figura.

Sintassi
Z
-o-
z

Sintassi di punto

Descrive la coordinata x e la coordinata y di un punto. Vedi anche Point.

Sintassi
x,y
-o-
xy
Termine Description
x Doppio
Coordinata x del punto.
y Doppio
Coordinata y del punto.

Note aggiuntive

Anziché un valore numerico standard, è anche possibile usare i valori speciali seguenti. Questi valori sono sensibili alle maiuscole e minuscole.

  • Infinity: rappresenta PositiveInfinity.
  • -Infinity: rappresenta NegativeInfinity.
  • NaN: rappresenta NaN.

Anziché usare decimali o numeri interi, è possibile usare la notazione scientifica. Ad esempio, +1.e17 è un valore valido.

Strumenti di progettazione che producono comandi di spostamento e disegno

L'uso dello strumento Penna e di altri strumenti di disegno in Blend per Microsoft Visual Studio 2015 genererà un oggetto Path , con comandi di spostamento e disegno.

È possibile che vengano visualizzati i dati dei comandi di spostamento e disegno esistenti in alcune delle parti di controllo definite nei modelli predefiniti XAML di Windows Runtime per i controlli. Ad esempio, alcuni controlli usano un Oggetto PathIcon con i dati definiti come comandi di spostamento e disegno.

Sono disponibili utilità di esportazione o plug-in per altri strumenti di progettazione di grafica vettoriale di uso comune che possono restituire il vettore in formato XAML. Questi in genere creano oggetti Path in un contenitore di layout, con comandi di spostamento e disegno per Path.Data. Nel codice XAML possono essere presenti più elementi Path in modo che sia possibile applicare pennelli diversi. Molti di questi strumenti di esportazione o plug-in sono stati originariamente scritti per XAML di Windows Presentation Foundation (WPF) o Silverlight, ma la sintassi del percorso XAML è identica a XAML di Windows Runtime. In genere, puoi usare blocchi di XAML da un utilità di esportazione e incollarli direttamente in una pagina XAML di Windows Runtime. Tuttavia, non sarai in grado di usare radialGradientBrush, se faceva parte del codice XAML convertito, perché XAML di Windows Runtime non supporta tale pennello.