javascript - 即使距离和重量设置为零,获得直边线的问题
问题描述
在 cytoscape.js 下,段距离和段权重都设置为 0 的边缘线看起来不是直的,而是以不连贯的锯齿形(或滑行)方式。
边缘从节点的特定区域绘制到特定区域(通过使用源端点和目标端点)。边缘构造奇怪(而不是笔直)。如果没有为源端点和目标端点指定任何值,则边缘线按预期是直的,但我的代码需要使用源端点和目标端点。
如果我设置'segment-weights':0.5,那么线条会更好,但边缘仍然出现额外的点,这再次看起来不一致,因为'segment-distances'设置为0。请注意,我的代码使用曲线样式作为'segments'以及段距离和段权重,所以我必须设置这些特定值。
如果将段权重更改为 0.5,那么我得到了输出。为什么距离为0:
我的代码有误吗?
为了使边缘线看起来笔直,我需要做些什么改变?
我的代码如下所示:
<!DOCTYPE html>
<html lang="en">
<head>
<title>Tool</title>
<meta charset=utf-8 />
<script src="cytoscape.min.js"></script>
<style>
body {
font: 14px helvetica neue, helvetica, arial, sans-serif;
}
#cy {
height: 90%;
width: 65%;
position: absolute;
left: 0;
top: 1;
background-color: WHITESMOKE;
border: 5px solid #ddd;
overflow: auto !important;
border-radius: 1.25em;
}
</style>
</head>
<body>
<div id="cy"></div>
<script>
var dataOpticalMap =
{
"nodes": [
{
"data": {"id":"44", "name":"C"},
"position": {"x":729, "y":-25}
},
{
"data": {"id":"84", "name":"A"},
"position": {"x":729, "y":75}
},
],
"edges": [
{
"data": {"id":"96", "source":"84", "target":"44" },
},
]
}
var cy = cytoscape({
container: document.getElementById('cy'),
style: cytoscape.stylesheet()
.selector('node') //Generic style applied for each node irrespective of their type
.css({
'content': 'data(name)',
'text-valign': 'center',
'width': 80,
'height': 30,
'shape': 'barrel',
})
.selector('edge') //Generic style applied for each edge
.css({
'curve-style': 'segments',
'edge-distances': 'node-position',
'segment-distances' : 0,
'segment-weights': 0,
'source-endpoint' : "25% -50%",
'target-endpoint': "25% 50%",
}),
elements: {
nodes:dataOpticalMap.nodes,
edges:dataOpticalMap.edges
},
autolock:false,
layout: {
name: 'preset',
directed: true,
fit: true
}
});
</script>
</body>
</html>
解决方案
我阅读了 maxkfranz 的评论,但找不到适合我的问题的合乎逻辑的答案。
在我的示例中,源端点和目标端点都以百分比定义,并且对应于节点内的一个位置。我在下图中指出了一些位置坐标的例子:
在我上面的代码中,源点的位置(即“25% -50%”)位于节点顶线上的第一个红点。目标点的逻辑相同。
如果将源点设置为 ("0% -50%") 并将目标点设置为 ("0% 50%") 并保持 : 'segment-distances' : 0, 'segment-weights': 0 则系统绘制完全符合预期的垂直直线:
但是在为段距离和段权重操作源点和目标点(即分别为(“50% -50%”)和(“50% -50%”)和“0”时,线不再是直的 :
现在如果删除段距离和段权重的属性,那么线会出现偏差,见下文。它实际上应该画一条垂直的直线。
推荐阅读
- javascript - 试图找到数组的元素,其中数组左侧的总和等于 JavaScript 中数组右侧的总和
- flutter - 如何在颤动中最小化正在运行的页面
- python - 在python中使用另一个多维数组从多维数组中采样的最简单方法
- c# - 如何在c#中将telerik按钮添加到winform
- android - 使用递归字符串路径将对象列表组织到嵌套数组
- powershell - 如何从powershell中的两个文本文件创建组合文件?
- java - 通配符与类型参数
- python - 冒泡排序字典
- python - 使用内置方法 TypeError 进行训练:“NoneType”对象不可调用
- c++ - 有人可以帮我弄清楚为什么它不起作用吗?