2013-12-15 12 views
19

C'è un modo per selezionare esplicitamente tutti gli oggetti presenti in una particolare istanza di tempo. Questo può essere fatto facilmente usando il mouse per selezionare tutto. Esiste una soluzione di codice come un pulsante denominato Select All in modo che facendo clic su di esso vengano selezionati tutti gli oggetti del tipo di tessuto e quindi potrei applicare le modifiche all'intero di tale Gruppo attivo utilizzando canvas.getActiveGroup(); e iterando su.Seleziona tutti gli oggetti su tela utilizzando Fabric.js

risposta

29

Buona domanda.

Non c'è alcun metodo incorporato per questo, ma si avrebbe bisogno di fare qualcosa in questo senso:

var objs = canvas.getObjects().map(function(o) { 
    return o.set('active', true); 
}); 

var group = new fabric.Group(objs, { 
    originX: 'center', 
    originY: 'center' 
}); 

canvas._activeObject = null; 

canvas.setActiveGroup(group.setCoords()).renderAll(); 

Il codice dovrebbe essere auto-esplicativo, ed è più o meno quello che sta succedendo sotto il cofano quando si utilizzare il mouse, shift + click, ecc

+2

Ancora una soluzione di lavoro perfetta. Grazie mille @kangax! – softvar

+4

Questo codice determina la posizione di salto degli oggetti se esiste già un gruppo. Funziona se chiami 'canvas.deactivateAll();' prima di questo codice (e prendi la riga 'canvas._activeObject = null;' perché non è più necessario). – miyasudokoro

+0

Ciao! C'è un modo per sovrascrivere lo Shift + Fare clic per Ctrl + Clic? –

0

Questa è una forma più compatta:

canvas.setActiveGroup(new fabric.Group(canvas.getObjects())).renderAll(); 
+0

Questo fa saltare le posizioni dei miei oggetti. – miyasudokoro

0
selectAllObjects() { 
    this.canvas.discardActiveObject(); 
    this.canvas.discardActiveGroup(); 

    let objects: Fabric.Object[] = this.canvas.getObjects().map(function (object: Fabric.Object) { 
     return object.set('active', true); 
    }); 

    if (objects.length === 1) { 
     this.canvas.setActiveObject(objects[0]); 
    } else if (objects.length > 1) { 
     let group: Fabric.Group = new Fabric.Group(objects.reverse(), { 
      canvas: this.canvas 
     } as any); 
     group.addWithUpdate(null); 
     this.canvas.setActiveGroup(group); 
     group.saveCoords(); 
     this.canvas.trigger("selection:created", { 
      target: group 
     }); 
    } 

    this.canvas.renderAll(); 
} 
0

"canvas.setActiveGroup" non è più un'opzione. E 'stato cancellato come una funzione nella versione 2.0

Problemi correlati