我工作的動態圖形編輯器,使用yFiles圖。這意味着用戶可以從菜單中選擇新節點並將它們拖入圖形區域。 但是,我希望我的圖表在x軸上具有有限的大小。也就是說,圖形應該可以縱向擴展而沒有限制,但保持最大寬度。 我完全不知道這樣做的方式,所以定義了圖形的最大寬度。定義一個最大面積爲yFiles
我想有像this demo橙色矩形的最終效果。在那裏,使用PositionHandler
,但我不知道如何整合它。
不知道它可以是任何幫助,但是這是我在其中定義了圖表的互動部分的片段。
'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;
},
非常感謝您提供的所有信息。 –
@Andrea:只是重申一點:如果你有一個積極的支持訂閱,或者正在評估yFiles,你可以聯繫我們的支持團隊,並獲得更好的幫助。 – Joey
我明白了,我使用SO是因爲我對這個網站更加熟悉,但是我會考慮yFiles的官方渠道。再次感謝你。 –