OpenCPN / OpenCPN

A concise ChartPlotter/Navigator. A cross-platform ship-borne GUI application supporting * GPS/GPDS Postition Input * BSB Raster Chart Display * S57 Vector ENChart Display * AIS Input Decoding * Waypoint Autopilot Navigation
https://opencpn.org/
GNU General Public License v2.0
1.05k stars 500 forks source link

Crash while zooming ENC charts #3295

Closed Hakansv closed 1 year ago

Hakansv commented 1 year ago

Describe the bug Using ENC charts O crash at zoom in to large scale. No crash for o-charts, CM93 or RNC.

In debug brake in s52plib.cpp at: (see also shot below)

TriPrim *p_tp = ppg->tri_prim_head;
    while (p_tp) {
      LLBBox box;
      if (!rzRules->obj->m_chart_context->chart) {  // This is a PlugIn Chart

Desktop:

Screenshots Debug shot: bild

Call stack

>   opencpn.exe!s52plib::RenderToBufferFilledPolygon(_ObjRazRules * rzRules, S57Obj * obj, _S52color * c, render_canvas_parms * pb_spec, render_canvas_parms * pPatt_spec) Line 7854    C++
    opencpn.exe!s52plib::RenderToBufferAC(_ObjRazRules * rzRules, _Rules * rules, render_canvas_parms * pb_spec) Line 9088  C++
    opencpn.exe!s52plib::RenderAreaToDC(wxDC * pdcin, _ObjRazRules * rzRules, render_canvas_parms * pb_spec) Line 9156  C++
    opencpn.exe!s57chart::DCRenderRect(wxMemoryDC & dcinput, const ViewPort & vp, wxRect * rect) Line 2367  C++
    opencpn.exe!s57chart::DoRenderViewOnDC(wxMemoryDC & dc, const ViewPort & VPoint, RenderTypeEnum option, bool force_new_view) Line 2284  C++
    opencpn.exe!s57chart::BuildThumbnail(const wxString & bmpname) Line 3113    C++
    opencpn.exe!s57chart::PostInit(ChartInitFlag flags, ColorScheme cs) Line 2857   C++
    opencpn.exe!s57chart::Init(const wxString & name, ChartInitFlag flags) Line 2631    C++
    opencpn.exe!ChartDB::OpenChartUsingCache(int dbindex, ChartInitFlag init_flag) Line 1290    C++
    opencpn.exe!ChartCanvas::DoZoomCanvas(double factor, bool can_zoom_to_cursor) Line 4502 C++
bdbcat commented 1 year ago

This fault happens when building chart thumbnails, due to some refactoring in https://github.com/OpenCPN/OpenCPN/issues/3291 This is only done during the SENC conversion step, when visiting a new area. However, chart preview thumbnails have not been used since long, probably back to OCPN v4.x. So the simple solution is to now disable all thumbnail creation logic, by #if 0 preprocessor directive.

Hakansv commented 1 year ago

Solved, thanks