ing
This commit is contained in:
		
							parent
							
								
									dc5ad26d73
								
							
						
					
					
						commit
						79885e9a8c
					
				@ -40,6 +40,7 @@ export class HomePageComponent implements OnInit, OnDestroy {
 | 
			
		||||
  private nodes: Node[];
 | 
			
		||||
  private links: Link[];
 | 
			
		||||
  public simulation: d3.Simulation<Node, Link> | undefined;
 | 
			
		||||
  private zoomBehavior: d3.ZoomBehavior<Element, {}>;
 | 
			
		||||
  private discoveryContainerWidth: number;
 | 
			
		||||
  private discoveryContainerHeight: number;
 | 
			
		||||
 | 
			
		||||
@ -265,11 +266,11 @@ export class HomePageComponent implements OnInit, OnDestroy {
 | 
			
		||||
 | 
			
		||||
    const svg = d3.select(this.discoveryTargetRef.nativeElement);
 | 
			
		||||
 | 
			
		||||
    const _zoom = d3.zoom().on('zoom', () => {
 | 
			
		||||
    this.zoomBehavior = d3.zoom().on('zoom', () => {
 | 
			
		||||
      const transform = d3.event.transform;
 | 
			
		||||
      svg.select('g').attr('transform', 'translate(' + transform.x + ',' + transform.y + ') scale(' + transform.k + ')');
 | 
			
		||||
    });
 | 
			
		||||
    svg.call(_zoom);
 | 
			
		||||
    svg.call(this.zoomBehavior);
 | 
			
		||||
 | 
			
		||||
    const __this = this;
 | 
			
		||||
    this.simulation = d3
 | 
			
		||||
@ -385,6 +386,31 @@ export class HomePageComponent implements OnInit, OnDestroy {
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  zoomToFit(paddingPercent, transitionDuration) {
 | 
			
		||||
    const root = d3.select(this.discoveryTargetRef.nativeElement);
 | 
			
		||||
    const bounds = root.node().getBBox();
 | 
			
		||||
    const parent = root.node().parentElement;
 | 
			
		||||
 | 
			
		||||
    const fullWidth = parent.clientWidth;
 | 
			
		||||
    const fullHeight = parent.clientHeight;
 | 
			
		||||
 | 
			
		||||
    const width = bounds.width;
 | 
			
		||||
    const height = bounds.height;
 | 
			
		||||
 | 
			
		||||
    const midX = bounds.x + width / 2;
 | 
			
		||||
    const midY = bounds.y + height / 2;
 | 
			
		||||
 | 
			
		||||
    if (width === 0 || height === 0) { return; } // nothing to fit
 | 
			
		||||
 | 
			
		||||
    const scale = (paddingPercent || 0.75) / Math.max(width / fullWidth, height / fullHeight);
 | 
			
		||||
    const translate = [fullWidth / 2 - scale * midX, fullHeight / 2 - scale * midY];
 | 
			
		||||
 | 
			
		||||
    root
 | 
			
		||||
      .transition()
 | 
			
		||||
      .duration(transitionDuration || 0) // milliseconds
 | 
			
		||||
      .call(this.zoomBehavior.transform, d3.zoomIdentity.translate(translate[0], translate[1]).scale(scale));
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  onTargetClick(node: Node) {
 | 
			
		||||
    console.log(node);
 | 
			
		||||
    this.displaySidebar = true;
 | 
			
		||||
@ -454,6 +480,7 @@ export class HomePageComponent implements OnInit, OnDestroy {
 | 
			
		||||
    console.log('DiscoveryStop', stopDate);
 | 
			
		||||
    this.discoveryConfigService.setStarted(false);
 | 
			
		||||
    this.simulationRestart(true);
 | 
			
		||||
    this.zoomToFit(0.95, 500);
 | 
			
		||||
    // this.simulation.stop();
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user