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]

Reply via email to