unitrongroup-ir opened a new issue, #21780:
URL: https://github.com/apache/echarts/issues/21780
### What problem does this feature solve?
The pixel rectangle of a grid (the plot, where the axes are drawn) is known
only after ECharts has laid the chart out, and there is no public way to read
it. Apps that draw HTML or SVG over a chart (hover labels, a crosshair line,
markers, annotations) need it to put the overlay exactly on the plot.
This has been asked before (#16898, #16480) and answered with the private
`chart.getModel().getComponent('grid').coordinateSystem.getRect()`; #16479 says
`getModel` is private and may change. Everything public falls short:
- `chart.getOption().grid[0]` holds the configured values (`left`, `right`,
`outerBoundsMode`, ...), not the result of the layout, so it is wrong as soon
as `containLabel` or `outerBoundsMode: 'auto'` shrink the plot.
- `chart.convertToPixel({ xAxisIndex: 0 }, extreme)` needs the axis extent.
After a dataZoom, or with `scale` / automatic ranges, only the model knows it
(#17919); `getOption().xAxis[0].min/max` still holds the configured values
after a zoom.
- `chart.containPixel('grid', [x, y])` can find the edges by probing, but
that is about `log2(size)` calls per edge on every layout change.
- `chart.getOption()` deep-clones the whole option, data included, on every
call, so it cannot be used on every mouse move.
Our case: a pointer drawn in HTML over several synced charts with a few
thousand points each (labels at the points nearest to the mouse, a line across
the plot and the time under it). It needs the plot's rectangle on every mouse
move, so the read has to be cheap, and today it depends on a private method.
### What does the proposed API look like?
A getter that mirrors the finders of `containPixel` and `convertToPixel`:
```ts
chart.getRect({ gridIndex: 0 });
// -> { x: 70, y: 32, width: 460, height: 204 } in chart pixels, or null
when the chart has no such grid or is not laid out yet
```
Or `chart.getGridRect(gridIndex?)`; the name is open. What matters is that
it is documented and stable, and that it gives the result of the layout
(including `outerBoundsMode` and `containLabel`), which is what `getRect()` of
the grid coordinate system holds today.
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]