Beispiel #1
0
    it("should select multiple rect on shift-tap", function(): void {
      const testcase = make_testcase()
      const hit_test_stub = sinon.stub(testcase.glyph_view, "hit_test")

      hit_test_stub.returns(create_hit_test_result_from_hits([[1, 0]]))
      let tap_event = make_tap_event(300, 300)
      testcase.draw_tool_view._tap(tap_event)
      hit_test_stub.returns(create_hit_test_result_from_hits([[2, 0]]))
      tap_event = make_tap_event(560, 560, true)
      testcase.draw_tool_view._tap(tap_event)

      expect(testcase.data_source.selected.indices).to.be.deep.equal([2, 1])
    })
Beispiel #2
0
    it("should select vertex on tap", function(): void {
      const testcase = make_testcase();
      const hit_test_stub = sinon.stub(testcase.glyph_view, "hit_test");
      const vertex_hit_test_stub = sinon.stub(testcase.vertex_glyph_view, "hit_test");

      vertex_hit_test_stub.returns(null);
      hit_test_stub.returns(create_hit_test_result_from_hits([[1, 0]]));
      const tap_event = make_tap_event(300, 300);
      testcase.draw_tool_view._doubletap(tap_event);
      // Have to call CDSView.compute_indices manually for testing
      testcase.vertex_renderer.view.compute_indices();
      vertex_hit_test_stub.returns(create_hit_test_result_from_hits([[1, 0]]));
      testcase.draw_tool_view._tap(tap_event);
      expect(testcase.vertex_source.selected.indices).to.be.deep.equal([1]);
    });
Beispiel #3
0
    it("should select multiple patches on shift-tap", function() {
      const testcase = make_testcase();
      const hit_test_stub = sinon.stub(testcase.glyph_view, "hit_test");
      const vertex_hit_test_stub = sinon.stub(testcase.vertex_glyph_view, "hit_test");

      vertex_hit_test_stub.returns(null);
      hit_test_stub.returns(create_hit_test_result_from_hits([[1, 0]]));
      let tap_event = make_tap_event(300, 300);
      testcase.draw_tool_view._tap(tap_event);
      hit_test_stub.returns(create_hit_test_result_from_hits([[0, 0]]));
      tap_event = make_tap_event(560, 560, true);
      testcase.draw_tool_view._tap(tap_event);

      expect(testcase.data_source.selected.indices).to.be.deep.equal([0, 1]);
    });
Beispiel #4
0
    it("should drag previously selected on pan", function(): void {
      const testcase = make_testcase()
      const hit_test_stub = sinon.stub(testcase.glyph_view, "hit_test")

      hit_test_stub.returns(create_hit_test_result_from_hits([[1, 0]]))
      const tap_event = make_tap_event(300, 300)
      testcase.draw_tool_view._tap(tap_event)

      hit_test_stub.returns(null)
      let drag_event = make_gesture_event(300, 300)
      testcase.draw_tool_view._pan_start(drag_event)
      expect(testcase.draw_tool_view._basepoint).to.be.deep.equal([300, 300])

      drag_event = make_gesture_event(200, 200)
      testcase.draw_tool_view._pan(drag_event)
      expect(testcase.draw_tool_view._basepoint).to.be.deep.equal([200, 200])

      drag_event = make_gesture_event(200, 200)
      testcase.draw_tool_view._pan_end(drag_event)
      expect(testcase.draw_tool_view._basepoint).to.be.equal(null)
      expect(testcase.data_source.selected.indices).to.be.deep.equal([])
      expect(testcase.data_source.data.x).to.be.deep.equal([0, 0.14601769911504425, 1])
      expect(testcase.data_source.data.y).to.be.deep.equal([0, 0.8389830508474576, 1])
      expect(testcase.data_source.data.z).to.be.deep.equal([null, null, null])
    })
      it("should return true if hit_test_result is not empty", () => {
        const hit_test_result = create_hit_test_result_from_hits([[0, 0], [1, 0]])
        const policy = new NodesOnly()

        expect(policy.do_selection(hit_test_result, gr, true, false)).to.be.true
        expect(node_source.selected.is_empty()).to.be.false
      })
Beispiel #6
0
  protected _hit_point(geometry: PointGeometry): Selection {
    const {sx, sy} = geometry
    const x = this.renderer.xscale.invert(sx)
    const x0 = x - this.max_outer_radius
    const x1 = x + this.max_outer_radius

    const y = this.renderer.yscale.invert(sy)
    const y0 = y - this.max_outer_radius
    const y1 = y + this.max_outer_radius

    const hits: [number, number][] = []

    const bbox = hittest.validate_bbox_coords([x0, x1], [y0, y1])
    for (const i of this.index.indices(bbox)) {
      const or2 = Math.pow(this.souter_radius[i], 2)
      const ir2 = Math.pow(this.sinner_radius[i], 2)
      const [sx0, sx1] = this.renderer.xscale.r_compute(x, this._x[i])
      const [sy0, sy1] = this.renderer.yscale.r_compute(y, this._y[i])
      const dist = Math.pow(sx0 - sx1, 2) + Math.pow(sy0 - sy1, 2)
      if (dist <= or2 && dist >= ir2)
        hits.push([i, dist])
    }

    return hittest.create_hit_test_result_from_hits(hits)
  }
Beispiel #7
0
    it("should drag selected on pan", function(): void {
      const testcase = make_testcase();
      const hit_test_stub = sinon.stub(testcase.glyph_view, "hit_test");

      hit_test_stub.returns(create_hit_test_result_from_hits([[1, 0]]));
      const tap_event = make_tap_event(300, 300);
      testcase.draw_tool_view._tap(tap_event);

      let drag_event = make_gesture_event(300, 300);
      testcase.draw_tool_view._pan_start(drag_event);
      expect(testcase.draw_tool_view._basepoint).to.be.deep.equal([300, 300]);

      drag_event = make_gesture_event(200, 200);
      testcase.draw_tool_view._pan(drag_event);
      expect(testcase.draw_tool_view._basepoint).to.be.deep.equal([200, 200]);

      drag_event = make_gesture_event(200, 200);
      testcase.draw_tool_view._pan_end(drag_event);
      expect(testcase.draw_tool_view._basepoint).to.be.equal(null);
      expect(testcase.data_source.data['x']).to.be.deep.equal([0, 0.14601769911504425, 1]);
      expect(testcase.data_source.data['y']).to.be.deep.equal([0, 0.8389830508474576, 1]);
      expect(testcase.data_source.data['width']).to.be.deep.equal([0.1, 0.2, 0.3]);
      expect(testcase.data_source.data['height']).to.be.deep.equal([0.3, 0.2, 0.1]);
      expect(testcase.data_source.data['z']).to.be.deep.equal([null, null, null]);
    })
Beispiel #8
0
    it("should return true and set source inspected if hit_test result is not empty", function() {
      this.glyph_stub.returns(create_hit_test_result_from_hits([[1, 2]]))
      const source = this.renderer_view.model.data_source

      const did_hit = source.selection_manager.inspect(this.renderer_view, "geometry")
      expect(did_hit).to.be.true
      expect(source.inspected.indices).to.be.deep.equal([1])
    })
      it("should return true if hit_test_result is not empty", () => {
        const hit_test_result = create_hit_test_result_from_hits([[0, 0], [1, 0]])
        const policy = new NodesOnly()

        const did_hit = policy.do_inspection(hit_test_result, {type: "point", sx: 0, sy: 0}, gv, true, false)
        expect(did_hit).to.be.true
        expect(node_source.inspected.is_empty()).to.be.false
      })
Beispiel #10
0
      it("should select linked edges if hit_test_result is not empty", () => {
        const hit_test_result = create_hit_test_result_from_hits([[0, 0]])
        const policy = new NodesAndLinkedEdges()
        const did_hit = policy.do_inspection(hit_test_result, {type: "point", sx: 0, sy: 0}, gv, true, false)

        expect(did_hit).to.be.true
        expect(edge_source.inspected['2d'].indices).to.be.deep.equal({ 0: [ 0 ], 1: [ 0 ] })
      })