Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript NGX图形链接模板-链接中间指针对齐问题 我使用NGX图表“Link模板”在链接(边缘)中间添加圆圈,但是缺少对齐。我使用转换属性来对齐链接中间的圆。强>如何计算精确的坐标以将圆圈(图标)放在链接的中间?< /强> _Javascript_Css_Angular_Typescript_Ngx Graph - Fatal编程技术网

Javascript NGX图形链接模板-链接中间指针对齐问题 我使用NGX图表“Link模板”在链接(边缘)中间添加圆圈,但是缺少对齐。我使用转换属性来对齐链接中间的圆。强>如何计算精确的坐标以将圆圈(图标)放在链接的中间?< /强>

Javascript NGX图形链接模板-链接中间指针对齐问题 我使用NGX图表“Link模板”在链接(边缘)中间添加圆圈,但是缺少对齐。我使用转换属性来对齐链接中间的圆。强>如何计算精确的坐标以将圆圈(图标)放在链接的中间?< /强> ,javascript,css,angular,typescript,ngx-graph,Javascript,Css,Angular,Typescript,Ngx Graph,这里是上面图表的代码 <ngx-graph class="chart-container" [view]="[990, 800]" [curve]="curve" [draggingEnabled]="false" [autoCenter]="true" [links]="links" [nodes]="n

这里是上面图表的代码

<ngx-graph
    class="chart-container"
    [view]="[990, 800]"
    [curve]="curve"
    [draggingEnabled]="false"
    [autoCenter]="true"
    [links]="links"
    [nodes]="nodes">

    <ng-template #defsTemplate>
      <svg:marker id="arrow-yellow" fill="#f49600" viewBox="0 -5 10 10" refX="8" refY="0" markerWidth="6" markerHeight="6" orient="auto">
        <svg:path d="M0,-5L10,0L0,5" class="arrow-head"/>
      </svg:marker>
      <svg:marker id="arrow" fill="#262626" viewBox="0 -5 10 10" refX="8" refY="0" markerWidth="6" markerHeight="6" orient="auto">
        <svg:path d="M0,-5L10,0L0,5" class="arrow-head"/>
      </svg:marker>
    </ng-template>

    <ng-template #nodeTemplate let-node>
      <svg:g class="node">
        <svg:rect
          [attr.width]="node.dimension.width + 5"
          [attr.height]="node.dimension.height - 1"
          [attr.fill]="node.isSelected ? '#FFB716' : '#f6f6f6'"
          [attr.stroke-width]="1"
          [attr.stroke]="node.isSelected ? '#f49600' : '#262626'"/>
        <svg:text alignment-baseline="central" [attr.x]="10" [attr.y]="node.dimension.height / 2" [attr.letter-spacing]="0.5">
          {{node.label}}
        </svg:text>
      </svg:g>
      <svg:g class="assignNode" [attr.transform]="'translate(' + (node.dimension.width - 1) + ',' + 0 + ')'">
        <circle cx="5" cy="5" r="9" [attr.stroke]="node.isSelected ? '#f49600' : '#262626'" stroke-width="1" fill="white" />
        <path id="assign" viewBox="0 0 5 5" d="M9.88.15a.53.53,0,0,0-.67,0h0L8.05,1.32a4,4,0,0,0-5.27.33l-.5.44,0,.06V2.2a.06.06,0,0,0-.06.06l-.5.44A4,4,0,0,0,1.34,8L.17,9.13l-.05.06a.45.45,0,0,0,.05.66.46.46,0,0,0,.67,0L2,8.63A4,4,0,0,0,7.27,8.3l.5-.5.05,0a.06.06,0,0,0,.06-.06l.5-.5a4,4,0,0,0,.33-5.26L9.88.76A.45.45,0,0,0,9.88.15ZM6.6,7.69a2.94,2.94,0,0,1-4.26,0,3.06,3.06,0,0,1-.06-4.32l.17-.17L6.72,7.47ZM7.71,6.58l-.16.17L3.22,2.43l.17-.17a3,3,0,0,1,4.27,0A3.05,3.05,0,0,1,7.71,6.58Z" />
      </svg:g>
    </ng-template>

    <ng-template #linkTemplate let-link>
      <svg:g [attr.class]="link.isLinkActive ? 'active edge': 'notActive edge'">
        <svg:path class="line" *ngIf="!link.isLinkActive" stroke-width="1" marker-end="url(#arrow)"></svg:path>
        <svg:path class="line" *ngIf="link.isLinkActive" stroke-width="1" marker-end="url(#arrow-yellow)"></svg:path>
      </svg:g>
      <svg:g class="deAssignEdge" (click)="onDeAssingEvent(link)" *ngIf="link.midPoint" [attr.transform]="'translate(' + (link.midPoint.x) + ',' + (link.midPoint.y) + ')'">
        <circle cx="5" cy="5" r="9" [attr.stroke]="link.isLinkActive ? '#f49600': '#262626'" stroke-width="1" fill="white" />
        <path d="M6.26,6.89l-.6-.6-2-2-.55-.6-.6-.55a.45.45,0,0,0-.61,0l-.38.44a3.51,3.51,0,0,0-.27,4.61l-1,1h0a.43.43,0,0,0,0,.6.43.43,0,0,0,.61,0l1-1a3.45,3.45,0,0,0,4.61-.27l.43-.44a.42.42,0,0,0,0-.6Zm-.44,1A2.64,2.64,0,0,1,2.09,4.15L2.26,4,6,7.71Z" />
        <path d="M9.83.15a.43.43,0,0,0-.61,0h0l-1,1a3.45,3.45,0,0,0-4.61.27l-.38.44h0a.5.5,0,0,0,0,.55L4.51,3.77l-.39.33.44.43.33-.33L5.71,5l-.27.38.44.44.33-.33L7.47,6.78a.42.42,0,0,0,.6,0l.44-.44a3.44,3.44,0,0,0,.27-4.6l1.05-1A.36.36,0,0,0,9.83.15ZM8,5.8,7.8,6,4.07,2.18,4.23,2A2.62,2.62,0,0,1,8,2,2.69,2.69,0,0,1,8,5.8Z" />
      </svg:g>
    </ng-template>

  </ngx-graph>

public links = [
    {
      id: 'a',
      source: 'first',
      target: 'second',
      label: 'is parent of',
      isLinkActive:  false,
      sourceIndex:1
    },
    {
      id: 'b',
      source: 'first',
      target: 'third',
      label: 'custom label',
      isLinkActive:  false,
      sourceIndex:2
    },
    {
      id: 'c',
      source: 'second',
      target: 'Four',
      label: 'custom label',
      isLinkActive:true,
      sourceIndex:1
    },
    {
      id: 'd',
      source: 'second',
      target: 'Five',
      label: 'custom label',
      isLinkActive:true,
      sourceIndex:2
    },
    {
      id: 'e',
      source: 'second',
      target: 'Six',
      label: 'custom label',
      isLinkActive:true,
      sourceIndex:3
    },
    {
      id: 'f',
      source: 'second',
      target: 'Seven',
      label: 'custom label',
      isLinkActive:true,
      sourceIndex:4
    },
    {
      id: 'g',
      source: 'third',
      target: 'Eight',
      label: 'custom label',
      isLinkActive:  false,
      sourceIndex:1
    },
    {
      id: 'h',
      source: 'third',
      target: 'Nine',
      label: 'custom label',
      isLinkActive:  false,
      sourceIndex:2
    },
    {
      id: 'i',
      source: 'third',
      target: 'Ten',
      label: 'custom label',
      isLinkActive:  false,
      sourceIndex:3
    },
    {
      id: 'j',
      source: 'Four',
      target: 'Ele',
      label: 'custom label',
      isLinkActive:  false,
      sourceIndex:1
    },
    {
      id: '1',
      source: 'Ele',
      target: 'Four',
      label: 'custom label',
      isLinkActive:  false,
      sourceIndex:1
    }
  ];

  public nodes = [
    {
      id: 'first',
      label: 'AAAAAAA',
      isSelected:false,
    },
    {
      id: 'second',
      label: 'BBBBB',
      isSelected:true,
    },
    {
      id: 'third',
      label: 'CCCC',
      isSelected:false
    },
    {
      id: 'Four',
      label: 'DDDD',
      isSelected:false
    },
    {
      id: 'Five',
      label: 'EEEEE',
      isSelected:false
    },
    {
      id: 'Six',
      label: 'FFFF',
      isSelected:false
    },
    {
      id: 'Seven',
      label: 'GGGG',
      isSelected:false
    },
    {
      id: 'Eight',
      label: 'HHH',
      isSelected:false
    },
    {
      id: 'Nine',
      label: 'III',
      isSelected:false
    },
    {
      id: 'Ten',
      label: 'JJJ',
      isSelected:false
    },
    {
      id: 'Ele',
      label: 'KKKKKKK',
      isSelected:false
    }
  ]

{{node.label}
公共链接=[
{
id:'a',
资料来源:“第一”,
目标:"第二",,
标签:“是”,
isLinkActive:false,
来源索引:1
},
{
id:'b',
资料来源:“第一”,
目标:"第三",,
标签:“自定义标签”,
isLinkActive:false,
资料来源索引:2
},
{
id:'c',
资料来源:'第二',
目标:"四",,
标签:“自定义标签”,
是的,
来源索引:1
},
{
id:'d',
资料来源:'第二',
目标:"五",,
标签:“自定义标签”,
是的,
资料来源索引:2
},
{
id:'e',
资料来源:'第二',
目标:"六",,
标签:“自定义标签”,
是的,
资料来源索引:3
},
{
id:'f',
资料来源:'第二',
目标:"七",,
标签:“自定义标签”,
是的,
资料来源索引:4
},
{
id:'g',
资料来源:“第三次”,
目标:"八",,
标签:“自定义标签”,
isLinkActive:false,
来源索引:1
},
{
id:'h',
资料来源:“第三次”,
目标:"九",,
标签:“自定义标签”,
isLinkActive:false,
资料来源索引:2
},
{
id:'我',
资料来源:“第三次”,
目标:"十",,
标签:“自定义标签”,
isLinkActive:false,
资料来源索引:3
},
{
id:'j',
资料来源:“四”,
目标:'Ele',
标签:“自定义标签”,
isLinkActive:false,
来源索引:1
},
{
id:'1',
资料来源:“Ele”,
目标:"四",,
标签:“自定义标签”,
isLinkActive:false,
来源索引:1
}
];
公共节点=[
{
id:'第一',
标签:“AAAAA”,
选:错,
},
{
id:'第二',
标签:“BBBBB”,
是的,
},
{
id:'第三',
标签:'中交',
结果:错
},
{
id:'四',
标签:“DDDD”,
结果:错
},
{
id:'五',
标签:“EEEEE”,
结果:错
},
{
id:'六',
标签:“FFFF”,
结果:错
},
{
id:'七',
标签:“GGGG”,
结果:错
},
{
id:'八',
标签:“HHH”,
结果:错
},
{
id:'九',
标签:"III",,
结果:错
},
{
id:'十',
标签:“JJJ”,
结果:错
},
{
id:'Ele',
标签:“KKKKK”,
结果:错
}
]

基于此,您可以调用一个方法,该方法通过创建一个svg元素来返回路径的中点,该元素的路径与链接(
link.line
)中的路径相同,并获得路径的中点,如下所示:

  getXYForCenteredLinkCircle(link: Edge): [number, number] {
    var myPath = document.createElementNS("http://www.w3.org/2000/svg", "path");
    myPath.setAttributeNS(null, "d", link.line);
    var length = myPath.getTotalLength();
    let p = myPath.getPointAtLength(length / 2);
    return [p.x - 5, p.y - 5]; // Consider the center coordinates of the circle 
  }
在模板中:

<svg:g [attr.transform]="'translate(' + getXYForCenteredLinkCircle(link)[0] + ',' + getXYForCenteredLinkCircle(link)[1] + ')'">

它将如下所示: