J'ai créé une sorte de "sélecteur de polygone" ou "fabricant de polygone" à l'aide de tissu.js. Chaque clic crée un coin du polygone, qui peut être sélectionné, déplacé, etc ... double cliquant sur le point d'origine "ferme" le polygone. À ce stade, je prends tous les cercles / lignes qui composent les polygones et les regrouper. Jusqu'à présent, si bon.
Lorsqu'un tel groupe est double-cliqué, je voudrais ingraisser et revenir à des nœuds mobiles (c'est-à-dire déplacer les cercles remodèle le polygone, etc.); Mais il y a une certaine étrangeté à partir - Vérifiez ce qui se passe lorsque vous déplacez les cercles, certaines lignes semblent «non rejointes» aux cercles ... P>
J'ai déjà passé en revue tous les groupes / ingravage associé tissu.js fil (ici / là / partout). Aucun ne semble couvrir le type d'objets "connectés" que j'ai ici. P>
Le violon Je mets ensemble pour montrer le problème le dit mieux que je ne le peux: http://jsfiddle.net/bhilleli/4v8mkw6q/ p>
Le bit de code brisé est @: p>
//dbl clicked a group so lets ungroup it!
items = p._objects; // grab the items from the group you want to
// translate the group-relative coordinates to canvas relative ones
p._restoreObjectsState();
// remove the original group and add all items back to the canvas
canvas.remove(p);
for (var i = items.length - 1; i >= 0; i--) {
canvas.add(items[i]);
}
canvas.renderAll();
3 Réponses :
Vous pouvez utiliser l'outil de regroupement de tissu
Vous pouvez regrouper et ingraisser des objets ensemble et les manipuler à la même temps p> blockquote>
par exemple p>
xxx pré> Veuillez vérifier le lien suivant p>
http://jsfiddle.net/softvar/nue78/1/ p> p>
Si getactivegroup () n'est pas disponible, vous pouvez l'utiliser pour grouper (après la sélection de la souris de plusieurs objets):
togroup () n'est disponible que si plusieurs objets sont sélectionnés P>
P>
var activeObj = canvas.getActiveObject();
var activegroup = activeObj.toGroup();
var objectsInGroup = activegroup.getObjects();
activegroup.clone(function(newgroup) {
canvas.remove(activegroup);
objectsInGroup.forEach(function(object) {
canvas.remove(object);
});
canvas.add(newgroup);
}); if (!canvas.getActiveObject()) {
return;
}
if (canvas.getActiveObject().type !== 'group') {
return;
}
canvas.getActiveObject().toActiveSelection();
canvas.requestRenderAll();
From : http://fabricjs.com/manage-selection