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