Je travaille sur un éditeur de graphique dynamique, en utilisant yFiles. Cela signifie que l'utilisateur peut choisir de nouveaux nœuds dans un menu et les faire glisser dans la zone du graphique. Cependant, je souhaite que mon graphique ait une taille limitée sur l'axe des x. Autrement dit, le graphique devrait être extensible sans limite verticale, mais en conservant une largeur maximale. Je n'ai absolument aucune idée de la façon de le faire, définissant ainsi une largeur maximale pour le graphique. Je voudrais avoir un effet final comme le rectangle orange dans this demo. Là, un PositionHandler
est utilisé, mais je ne sais pas comment l'intégrer.Définir une surface maximale pour un graphique dans yFiles
Je ne sais pas si cela peut être utile, mais c'est l'extrait dans lequel je définis la partie interactive du graphique.
'createEditorMode': function() {
var /** yfiles.input.GraphSnapContext */ snapContext = new yfiles.input.GraphSnapContext();
snapContext.enabled = false;
snapContext.nodeGridConstraintProvider = new yfiles.input.SimpleGridConstraintProvider /** .<yfiles.graph.INode> */.FromGridInfo(this.gridInfo);
snapContext.bendGridConstraintProvider = new yfiles.input.SimpleGridConstraintProvider /** .<yfiles.graph.IBend> */.FromGridInfo(this.gridInfo);
snapContext.portGridConstraintProvider = new yfiles.input.SimpleGridConstraintProvider /** .<yfiles.graph.IPort> */.FromGridInfo(this.gridInfo);
var graph = this.graphControl.graph;
var /** yfiles.input.GraphEditorInputMode */ mode = new yfiles.input.GraphEditorInputMode();
mode.snapContext = snapContext;
mode.edgeCreationAllowed = false; //only one edge create
mode.marqueeSelectionInputMode.enabled = true; //block selection
mode.nodeCreator = null;
var /** yfiles.input.OrthogonalEdgeEditingContext */ newOrthogonalEdgeEditingContext = new yfiles.input.OrthogonalEdgeEditingContext();
newOrthogonalEdgeEditingContext.orthogonalEdgeEditing = true;
mode.createEdgeInputMode.orthogonalEdgeCreation = true; //Enable edges' creation in orthogonal mode
mode.orthogonalEdgeEditingContext = newOrthogonalEdgeEditingContext;
mode.createBendModePriority = mode.moveModePriority - 1;// add a context// menu
mode.clickSelectableItems = yfiles.graph.GraphItemTypes.NODE | yfiles.graph.GraphItemTypes.EDGE;
mode.labelAddingAllowed = false;
mode.labelEditingAllowed = false;
mode.clipboardOperationsAllowed = false;
mode.undoOperationsAllowed = true;
//mode.undoOperationsAllowed = false;
mode.addItemClickedListener(yfiles.lang.delegate(this.onItemClicked, this));
mode.addItemDoubleClickedListener(yfiles.lang.delegate(this.onItemDoubleClicked, this));
this.contextMenu = new demo.ContextMenu();
mode.contextMenuInputMode.menu = this.contextMenu;
this.contextMenu.install(this.graphControl.div);
this.contextMenu.addOpenedListener(function(/** Object */
sender, /** yfiles.system.EventArgs */
args) {
var /** yfiles.system.CancelEventArgs */ cancelEventArgs = new yfiles.system.CancelEventArgs();
mode.contextMenuInputMode.menuOpening(cancelEventArgs);
if (cancelEventArgs.cancel) {
((/** @type {demo.ContextMenu} */ (sender))).visible = false;
}
}
);
this.contextMenu.addClosedListener(function(/** Object */ sender, /** yfiles.system.EventArgs */ args) {
mode.contextMenuInputMode.menuClosed();
});
mode.contextMenuInputMode.addCloseMenuListener((function(/** Object */ o, /** yfiles.system.EventArgs */ args) {
this.contextMenu.visible = false;
}).bind(this));
mode.contextMenuInputMode.addPopulateContextMenuListener(yfiles.lang.delegate(this.onPopulateContextMenu, this));
return mode;
},
Merci beaucoup pour toutes les informations. –
@Andrea: Juste pour réitérer le point, cependant: Si vous avez un abonnement de support actif ou si vous êtes en train d'évaluer yFiles, vous pouvez simplement contacter notre équipe de support et obtenir une meilleure aide. – Joey
Compris, j'ai utilisé SO parce que je suis plus familier avec ce site, mais je vais considérer les canaux officiels pour yFiles. Merci encore. –