gpt4 book ai didi

mxGraph 单元格大小调整和图形布局

转载 作者:行者123 更新时间:2023-12-02 01:02:58 26 4
gpt4 key购买 nike

我在调整单元格大小和内置 mxGraph 布局时遇到问题。如果我将一个单元格放在 Canvas 上,然后尝试调整它的大小,即使是一个像素,它也会变得很大,大约 50000px x 30000px,因此它会拉伸(stretch)我的整个 Canvas ,当然它无法使用。如果我从数据库的 xml 文件加载图表,我可以毫无问题地调整单元格大小。

内置布局也会发生类似的情况。我想使用紧凑的树布局(我喜欢它的原因是因为它与我的整个水平对齐)。当我绘制图表并尝试使用该布局时,我的图表变得疯狂,也拉伸(stretch)到 50000 像素 x 30000 像素(示例尺寸,但滚动很小,我几乎无法用鼠标瞄准它)。如果我从数据库中的 xml 加载图表,紧凑的树形布局效果非常好。但是,一旦我在其中添加另一个单元格,并尝试再次使用紧凑的树布局,它就会再次变得疯狂。

我对容纳 Canvas 的 div 使用绝对定位,与此处的示例相同 ( http://jgraph.github.io/mxgraph/javascript/examples/editors/workfloweditor.html )

这是我的 css 和 html :

<head>
<style type="text/css">

#graphContainer {
background: url('../../resources/jgraph/src/images/grid.gif');
left: 20px;
right: 20px;
top: 65px;
bottom: 20px;
position: absolute;
border: 1px solid #F2F2F2;
white-space: nowrap;
font-family: Arial;
font-size: 8pt;
display: block;
}

</style>
</head>
<body>

<div id="graphContainer"></div>

<script>
$(document).ready(function(){
mc.init(document.getElementById('graphContainer'));
});
</script>
</body>
</html>

这是我用于图形初始化的 javascript(以及几个事件,因为我不确定它们是否是问题所在):

mxConnectionHandler.prototype.connectImage = new mxImage('../../resources/jgraph/src/images/connector.gif', 14, 14);

if (!mxClient.isBrowserSupported()) {
mxUtils.error('Browser is not supported!', 200, false);
} else {


var root = new mxCell();
root.insert(new mxCell());
var model = new mxGraphModel(root);

if (mxClient.IS_QUIRKS)
{
document.body.style.overflow = 'hidden';
new mxDivResizer(graphContainer);
}

var editor = new mxEditor();
editor.setGraphContainer(graphContainer);
editor.readGraphModel(model);
var graph = editor.graph;
graph.setConnectable(true);
new mxRubberband(graph);

/* CODE FOR ADDING THE TOOLBAR, excluded from example */


//code for writing out the node name
graph.convertValueToString = function(cell)
{
if (mxUtils.isNode(cell.value))
{
var outValue = cell.value.getAttribute('nodeName');
if (outValue != null && outValue.length > 0)
{
return outValue;
}
return '';
}
return '';
};

//defining on select event
graph.getSelectionModel().addListener(mxEvent.CHANGE, function(sender, evt)
{
events.cellSelectionChanged(graph, graph.getSelectionCell());
});

//triggering the on select event
events.cellSelectionChanged(graph);

//cells added event
graph.addListener(mxEvent.CELLS_ADDED, function(sender, evt) {

var vertex = evt.getProperties().cells[0];
if(vertex.isVertex()){

var decoder = new mxCodec();
var nodeModel = decoder.decode(vertex.value);

if(nodeModel.type=='node' || nodeModel.type=='branch'){
utils.changeCellAttribute(vertex, 'nodeName', 'Node_' + vertex.id);
}else if(nodeModel.type=='start'){
utils.changeCellAttribute(vertex, 'nodeName', 'START');
}else if(nodeModel.type=='end'){
utils.changeCellAttribute(vertex, 'nodeName', 'END');
}else if(nodeModel.type=='form'){
utils.changeCellAttribute(vertex, 'nodeName', 'Form');
}

}
});

//on connect event
graph.connectionHandler.addListener(mxEvent.CONNECT, function(sender, evt){
var model = graph.getModel();
var edge = evt.getProperty('cell');
var source = model.getTerminal(edge, true);
var target = model.getTerminal(edge, false);
});

}

有什么想法可能是什么问题吗?

最佳答案

解决方案:

从数据库加载完整的图形和单元格配置(在本示例中),包括单元格的宽度和高度。

问题是为某些单元格类型添加工具栏项目,更精确的是,删除单元格默认宽度和高度。正如我所说,我们正在从数据库加载配置,它完全是字符串化的,宽度和高度也是如此。

它们都必须转换为 JavaScript Number 对象才能调整大小和布局才能正常运行。

关于mxGraph 单元格大小调整和图形布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16084381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com