From 6dde42a6c43c242a1b797b5400a7f88b84980962 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:01:21 +0000 Subject: [PATCH 1/3] Initial plan From fc735d6817c2b73361b70ceb2495dc83961acf1a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:24:51 +0000 Subject: [PATCH 2/3] Add [[path]] prefix to progress reports for clickable tree item navigation Prepend the config item path (via resultHolder.GetBackRefStr()) to progress reports in Connect, impedance_matrix (Dijkstra), BoostPolygon, and BoostGeometry operators. This makes progress messages in the event log clickable, navigating to the corresponding tree item. Affects operators: connect, connect_info, impedance_matrix, polygon union/split/inflate/deflate/filter, buffer, polygon_connectivity. Agent-Logs-Url: https://github.com/ObjectVision/GeoDMS/sessions/106cc8e3-7ed2-46aa-b400-a1cc3fa1b2b2 Co-authored-by: MaartenHilferink <2284361+MaartenHilferink@users.noreply.github.com> --- geo/dll/src/BoostGeometry.cpp | 23 ++++++----- geo/dll/src/BoostPolygon.cpp | 72 +++++++++++++++++++---------------- geo/dll/src/Connect.cpp | 22 +++++++---- geo/dll/src/Dijkstra.cpp | 8 +++- 4 files changed, 72 insertions(+), 53 deletions(-) diff --git a/geo/dll/src/BoostGeometry.cpp b/geo/dll/src/BoostGeometry.cpp index bba50209c..a1da756aa 100644 --- a/geo/dll/src/BoostGeometry.cpp +++ b/geo/dll/src/BoostGeometry.cpp @@ -666,6 +666,7 @@ class AbstrBufferOperator : public TernaryOperator DataReadLock arg3Lock(arg3A); Timer processTimer; + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); Float64 bufferDistance = e2IsVoid ? const_array_cast(arg2A)->GetLockedDataRead()[0] : 0; UInt8 nrPointsInCircle = e3IsVoid ? const_array_cast(arg3A)->GetLockedDataRead()[0] : 0; @@ -673,12 +674,12 @@ class AbstrBufferOperator : public TernaryOperator auto resItem = AsDataItem(resultHolder.GetNew()); DataWriteLock resLock(resItem, dms_rw_mode::write_only_mustzero); - parallel_tileloop(domain1Unit->GetNrTiles(), [=, this, resObj = resLock.get(), &processTimer](tile_id t)->void + parallel_tileloop(domain1Unit->GetNrTiles(), [=, this, resObj = resLock.get(), &processTimer, itemRefPtr = itemRef.c_str()](tile_id t)->void { this->Calculate(resObj, arg1A , e2IsVoid, arg2A, bufferDistance , e3IsVoid, arg3A, nrPointsInCircle - , t, processTimer); + , t, processTimer, itemRefPtr); } ); @@ -690,7 +691,7 @@ class AbstrBufferOperator : public TernaryOperator , const AbstrDataItem* polyItem , bool e2IsVoid, const AbstrDataItem* bufDistItem, Float64 bufferDistance , bool e3IsVoid, const AbstrDataItem* ppcItem, UInt8 pointsPerCircle - , tile_id t, Timer& processTimer) const = 0; + , tile_id t, Timer& processTimer, CharPtr itemRef = "") const = 0; }; template @@ -728,7 +729,7 @@ struct BufferPointOperator : public AbstrBufferOperator void Calculate(AbstrDataObject* resObj, const AbstrDataItem* pointItem , bool e2IsVoid, const AbstrDataItem* bufDistItem, Float64 bufferDistance , bool e3IsVoid, const AbstrDataItem* ppcItem, UInt8 pointsPerCircle - , tile_id t, Timer& processTimer) const override + , tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { auto pointData = const_array_cast(pointItem)->GetTile(t); auto bufDistData = e2IsVoid ? DataArray::locked_cseq_t{} : const_array_cast(bufDistItem)->GetTile(t); @@ -844,7 +845,7 @@ struct BufferMultiPointOperator : public AbstrBufferOperator void Calculate(AbstrDataObject* resObj, const AbstrDataItem* polyItem , bool e2IsVoid, const AbstrDataItem* bufDistItem, Float64 bufferDistance , bool e3IsVoid, const AbstrDataItem* ppcItem, UInt8 pointsPerCircle - , tile_id t, Timer& processTimer) const override + , tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { auto polyData = const_array_cast(polyItem)->GetTile(t); auto bufDistData = e2IsVoid ? DataArray::locked_cseq_t{} : const_array_cast(bufDistItem)->GetTile(t); @@ -997,7 +998,7 @@ struct BufferLineStringOperator : public AbstrBufferOperator void Calculate(AbstrDataObject* resItem, const AbstrDataItem* lineStringItem , bool e2IsVoid, const AbstrDataItem* bufDistItem, Float64 bufferDistance , bool e3IsVoid, const AbstrDataItem* ppcItem, UInt8 pointsPerCircle - , tile_id t, Timer& processTimer) const override + , tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { assert(lineStringItem->GetValueComposition() == ValueComposition::Sequence); @@ -1132,7 +1133,7 @@ struct BufferMultiPolygonOperator : public AbstrBufferOperator void Calculate(AbstrDataObject* resItem, const AbstrDataItem* polyItem , bool e2IsVoid, const AbstrDataItem* bufDistItem, Float64 bufferDistance , bool e3IsVoid, const AbstrDataItem* ppcItem, UInt8 pointsPerCircle - , tile_id t, Timer& processTimer) const override + , tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { auto polyData = const_array_cast(polyItem)->GetTile(t); auto bufDistData = e2IsVoid ? DataArray::locked_cseq_t{} : const_array_cast(bufDistItem)->GetTile(t); @@ -1180,7 +1181,8 @@ struct BufferMultiPolygonOperator : public AbstrBufferOperator if (processTimer.PassedSecs()) { - reportF(SeverityTypeID::ST_MajorTrace, "%s: processed %s / %s sequences of tile %s / %s" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s: processed %s / %s sequences of tile %s / %s" + , itemRef , GetGroup()->GetNameStr() , AsString(i), AsString(n) , AsString(t), AsString(resItem->GetTiledRangeData()->GetNrTiles()) @@ -1201,7 +1203,8 @@ struct BufferMultiPolygonOperator : public AbstrBufferOperator } if (processTimer.PassedSecs()) { - reportF(SeverityTypeID::ST_MajorTrace, "%s: processed %s / %s sequences of tile %s / %s" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s: processed %s / %s sequences of tile %s / %s" + , itemRef , GetGroup()->GetNameStr() , AsString(i), AsString(n) , AsString(t), AsString(resItem->GetTiledRangeData()->GetNrTiles()) @@ -1228,7 +1231,7 @@ struct BufferSinglePolygonOperator : public AbstrBufferOperator void Calculate(AbstrDataObject* resObj, const AbstrDataItem* polyItem , bool e2IsVoid, const AbstrDataItem* bufDistItem, Float64 bufferDistance , bool e3IsVoid, const AbstrDataItem* ppcItem, UInt8 pointsPerCircle - , tile_id t, Timer& processTimer) const override + , tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { auto polyData = const_array_cast(polyItem)->GetTile(t); auto bufDistData = e2IsVoid ? DataArray::locked_cseq_t{} : const_array_cast(bufDistItem)->GetTile(t); diff --git a/geo/dll/src/BoostPolygon.cpp b/geo/dll/src/BoostPolygon.cpp index 710643b48..b78f5556c 100644 --- a/geo/dll/src/BoostPolygon.cpp +++ b/geo/dll/src/BoostPolygon.cpp @@ -652,7 +652,7 @@ void dms_assign(bp::polygon_set_data& lvalue, const GT2& rvalue) } template -void UnionPolygon(ResourceArrayHandle& r, SizeT n, const AbstrDataItem* polyDataA, const AbstrDataItem* permDataA, tile_id t, const AbstrOperGroup* whosCalling, Timer& processTimer) +void UnionPolygon(ResourceArrayHandle& r, SizeT n, const AbstrDataItem* polyDataA, const AbstrDataItem* permDataA, tile_id t, const AbstrOperGroup* whosCalling, Timer& processTimer, CharPtr itemRef = "") { auto polyData = const_array_cast(polyDataA); assert(polyData); @@ -704,7 +704,8 @@ void UnionPolygon(ResourceArrayHandle& r, SizeT n, const AbstrDataItem* polyData if (processTimer.PassedSecs()) { - reportF(SeverityTypeID::ST_MajorTrace, "%s: processed %s / %s sequences of tile %s / %s" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s: processed %s / %s sequences of tile %s / %s" + , itemRef , whosCalling->GetNameStr() , AsString(pi - pb), AsString(pe - pb) , AsString(t), AsString(polyDataA->GetAbstrDomainUnit()->GetNrTiles()) @@ -839,6 +840,7 @@ struct AbstrPolygonOperator : public VariadicOperator DataReadLock arg4Lock(argNum2); Timer processTimer; + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); if (DoDelayStore()) { @@ -849,17 +851,17 @@ struct AbstrPolygonOperator : public VariadicOperator ReadableTileLock readArg1Lock (argPoly->GetCurrRefObj().get(), t); ReadableTileLock readArg2Lock (argPart ? argPart->GetCurrRefObj().get() : nullptr, t); - Calculate(r, domainCount, argPoly, argPart, t, processTimer); + Calculate(r, domainCount, argPoly, argPart, t, processTimer, itemRef.c_str()); } DataWriteLock resGeometryHandle; // will be assigned after establishing the count of resUnit - Store(resUnit, resGeometry, resGeometryHandle, resNrOrgEntity, no_tile, 1, r, argNum1, argNum2, processTimer); + Store(resUnit, resGeometry, resGeometryHandle, resNrOrgEntity, no_tile, 1, r, argNum1, argNum2, processTimer, itemRef.c_str()); resGeometryHandle.Commit(); } else { DataWriteLock resGeometryHandle(resGeometry); auto tn = domain1Unit->GetNrTiles(); - parallel_tileloop(tn, [this, &resultHolder, resUnit, resDomain, &resGeometryHandle, resNrOrgEntity, argPoly, argPart, argNum1, argNum2, tn, &processTimer](tile_id t) + parallel_tileloop(tn, [this, &resultHolder, resUnit, resDomain, &resGeometryHandle, resNrOrgEntity, argPoly, argPart, argNum1, argNum2, tn, &processTimer, itemRefPtr = itemRef.c_str()](tile_id t) { if (resultHolder.WasFailed(FailType::Data)) resultHolder.ThrowFail(); @@ -867,8 +869,8 @@ struct AbstrPolygonOperator : public VariadicOperator ReadableTileLock readArg1Lock (argPoly->GetCurrRefObj().get(), t); ReadableTileLock readArg2Lock (argPart ? argPart->GetCurrRefObj().get() : nullptr, t); - Calculate(r, resDomain->GetTileCount(t), argPoly, argPart, t, processTimer); - Store(resUnit, nullptr, resGeometryHandle, resNrOrgEntity, t, tn, r, argNum1, argNum2, processTimer); + Calculate(r, resDomain->GetTileCount(t), argPoly, argPart, t, processTimer, itemRefPtr); + Store(resUnit, nullptr, resGeometryHandle, resNrOrgEntity, t, tn, r, argNum1, argNum2, processTimer, itemRefPtr); }); resGeometryHandle.Commit(); } @@ -879,7 +881,7 @@ struct AbstrPolygonOperator : public VariadicOperator { return m_Flags & (PolygonFlags::F_DoSplit | PolygonFlags::F_DoUnion); } - void ProcessNumOper( ResourceArrayHandle& r, const AbstrDataItem* argNum, tile_id t, tile_id tn, PolygonFlags f, Timer& processTimer) const + void ProcessNumOper( ResourceArrayHandle& r, const AbstrDataItem* argNum, tile_id t, tile_id tn, PolygonFlags f, Timer& processTimer, CharPtr itemRef = "") const { if (f == PolygonFlags::none) return; @@ -891,37 +893,37 @@ struct AbstrPolygonOperator : public VariadicOperator switch (f) { case PolygonFlags::F_Inflate1: - reportF(SeverityTypeID::ST_MajorTrace, "%s.Inflate tile %d", GetGroup()->GetNameStr(), t); + reportF(SeverityTypeID::ST_MajorTrace, "%s%s.Inflate tile %d", itemRef, GetGroup()->GetNameStr(), t); break; case PolygonFlags::F_Deflate1: - reportF(SeverityTypeID::ST_MajorTrace, "%s.Deflate tile %d", GetGroup()->GetNameStr(), t); + reportF(SeverityTypeID::ST_MajorTrace, "%s%s.Deflate tile %d", itemRef, GetGroup()->GetNameStr(), t); break; case PolygonFlags::F_Filter1: - reportF(SeverityTypeID::ST_MajorTrace, "%s.Filter tile %d", GetGroup()->GetNameStr(), t); + reportF(SeverityTypeID::ST_MajorTrace, "%s%s.Filter tile %d", itemRef, GetGroup()->GetNameStr(), t); break; default: - reportF(SeverityTypeID::ST_MajorTrace, "%s.Operation %d tile %d", GetGroup()->GetNameStr(), int(f) / int(PolygonFlags::F_Inflate1), t); // DEBUG + reportF(SeverityTypeID::ST_MajorTrace, "%s%s.Operation %d tile %d", itemRef, GetGroup()->GetNameStr(), int(f) / int(PolygonFlags::F_Inflate1), t); // DEBUG break; } - ProcessNumOperImpl(r, argNum, t, tn, f, processTimer); + ProcessNumOperImpl(r, argNum, t, tn, f, processTimer, itemRef); } - void Store (AbstrUnit* resUnit, AbstrDataItem* resGeometry, DataWriteHandle& resGeometryHandle, AbstrDataItem* resNrOrgEntity, tile_id t, tile_id tn, ResourceArrayHandle& r, const AbstrDataItem* argNum1, const AbstrDataItem* argNum2, Timer& processTimer) const + void Store (AbstrUnit* resUnit, AbstrDataItem* resGeometry, DataWriteHandle& resGeometryHandle, AbstrDataItem* resNrOrgEntity, tile_id t, tile_id tn, ResourceArrayHandle& r, const AbstrDataItem* argNum1, const AbstrDataItem* argNum2, Timer& processTimer, CharPtr itemRef = "") const { if (r) { constexpr int mask_ratio = int(PolygonFlags::F_Mask2) / int(PolygonFlags::F_Mask1); - ProcessNumOper(r, argNum1, t, tn, PolygonFlags( int(m_Flags) & int(PolygonFlags::F_Mask1)), processTimer); - ProcessNumOper(r, argNum2, t, tn, PolygonFlags((int(m_Flags) & int(PolygonFlags::F_Mask2)) / mask_ratio), processTimer); + ProcessNumOper(r, argNum1, t, tn, PolygonFlags( int(m_Flags) & int(PolygonFlags::F_Mask1)), processTimer, itemRef); + ProcessNumOper(r, argNum2, t, tn, PolygonFlags((int(m_Flags) & int(PolygonFlags::F_Mask2)) / mask_ratio), processTimer, itemRef); } #if defined(MG_DEBUG_POLYGON) reportF(ST_MajorTrace, "UnionPolygon.Store %d", t); #endif //defined(MG_DEBUG_POLYGON) StoreImpl(resUnit, resGeometry, resGeometryHandle, resNrOrgEntity, t, r); } - virtual void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer) const=0; + virtual void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer, CharPtr itemRef = "") const=0; virtual void StoreImpl(AbstrUnit* resUnit, AbstrDataItem* resGeometry, DataWriteHandle& resLock, AbstrDataItem* resNrOrgEntity, tile_id t, ResourceArrayHandle& r) const=0; - virtual void ProcessNumOperImpl(ResourceArrayHandle& r, const AbstrDataItem* argNum, tile_id numT, tile_id tn, PolygonFlags f, Timer& processTimer) const {} + virtual void ProcessNumOperImpl(ResourceArrayHandle& r, const AbstrDataItem* argNum, tile_id numT, tile_id tn, PolygonFlags f, Timer& processTimer, CharPtr itemRef = "") const {} }; template @@ -1087,12 +1089,12 @@ class BpPolygonOperator : public AbstrPolygonOperator : AbstrPolygonOperator(aog, ArgPolyType::GetStaticClass(), ArgNumType::GetStaticClass(), flags) {} - void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer) const override + void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { - UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer); + UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer, itemRef); } - void ProcessNumOperImpl(ResourceArrayHandle& r, const AbstrDataItem* argNum, tile_id t, tile_id tn, PolygonFlags flag, Timer& processTimer) const override + void ProcessNumOperImpl(ResourceArrayHandle& r, const AbstrDataItem* argNum, tile_id t, tile_id tn, PolygonFlags flag, Timer& processTimer, CharPtr itemRef = "") const override { assert(r); assert(argNum); @@ -1184,7 +1186,8 @@ class BpPolygonOperator : public AbstrPolygonOperator if (processTimer.PassedSecs()) { - reportF(SeverityTypeID::ST_MajorTrace, "%s: processed %s / %s sequences of tile %s / %s" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s: processed %s / %s sequences of tile %s / %s" + , itemRef , GetGroup()->GetName() , AsString(i), AsString(domainCount) , AsString(t), AsString(tn) @@ -1335,9 +1338,9 @@ class BgPolygonOperator : public AbstrPolygonOperator : AbstrPolygonOperator(aog, ArgPolyType::GetStaticClass(), ArgNumType::GetStaticClass(), flags) {} - void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer) const override + void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { - UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer); + UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer, itemRef); } void StoreImpl(AbstrUnit* resUnit, AbstrDataItem* resGeometry, DataWriteHandle& resGeometryLock, AbstrDataItem* resNrOrgEntity, tile_id t, ResourceArrayHandle& r) const override @@ -1444,9 +1447,9 @@ class CGAL_PolygonOperator : public AbstrPolygonOperator : AbstrPolygonOperator(aog, ArgPolyType::GetStaticClass(), ArgNumType::GetStaticClass(), flags) {} - void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer) const override + void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { - UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer); + UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer, itemRef); } void StoreImpl(AbstrUnit* resUnit, AbstrDataItem* resGeometry, DataWriteHandle& resGeometryLock, AbstrDataItem* resNrOrgEntity, tile_id t, ResourceArrayHandle& r) const override @@ -1553,7 +1556,7 @@ class GEOS_PolygonOperator : public AbstrPolygonOperator } } - void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer) const override + void Calculate(ResourceArrayHandle& r, SizeT domainCount, const AbstrDataItem* polyDataA, const AbstrDataItem* partitionDataA, tile_id t, Timer& processTimer, CharPtr itemRef = "") const override { if constexpr (!std::is_floating_point_v > || sizeof(scalar_of_t

) < 8) { @@ -1561,7 +1564,7 @@ class GEOS_PolygonOperator : public AbstrPolygonOperator throwDmsErrF("GEOS_PolygonOperator", "GEOS-based polygon operation %s are no longer supported for non-double-precision point types", this->GetGroup()->GetNameStr()); reportF(SeverityTypeID::ST_Warning, "GEOS-based polygon operation %s are no longer supported for non-double-precision point types", this->GetGroup()->GetNameStr()); } - UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer); + UnionPolygon(r, domainCount, polyDataA, partitionDataA, t, GetGroup(), processTimer, itemRef); } void StoreImpl(AbstrUnit* resUnit, AbstrDataItem* resGeometry, DataWriteHandle& resGeometryLock, AbstrDataItem* resNrOrgEntity, tile_id t, ResourceArrayHandle& r) const override @@ -1670,13 +1673,14 @@ class AbstrPolygonConnectivityOperator : public UnaryOperator if (mustCalc) { DataReadLock arg1Lock(arg1A); + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); - Calculate(res.get(), resF1, resF2, arg1A); + Calculate(res.get(), resF1, resF2, arg1A, itemRef.c_str()); } resultHolder = res.release(); return true; } - virtual void Calculate(AbstrUnit* res, AbstrDataItem* resF1, AbstrDataItem* resF2, const AbstrDataItem*arg1A) const=0; + virtual void Calculate(AbstrUnit* res, AbstrDataItem* resF1, AbstrDataItem* resF2, const AbstrDataItem*arg1A, CharPtr itemRef = "") const=0; }; template @@ -1692,7 +1696,7 @@ class PolygonConnectivityOperator : public AbstrPolygonConnectivityOperator PolygonConnectivityOperator() : AbstrPolygonConnectivityOperator(&cogPC, Arg1Type::GetStaticClass()) {} - void Calculate(AbstrUnit* res, AbstrDataItem* resF1, AbstrDataItem* resF2, const AbstrDataItem* arg1A) const override + void Calculate(AbstrUnit* res, AbstrDataItem* resF1, AbstrDataItem* resF2, const AbstrDataItem* arg1A, CharPtr itemRef = "") const override { Timer processTimer; @@ -1719,7 +1723,8 @@ class PolygonConnectivityOperator : public AbstrPolygonConnectivityOperator domain_rel.emplace_back(i); } if (processTimer.PassedSecs()) - reportF(SeverityTypeID::ST_MajorTrace, "%s: inserted %s / %s sequences" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s: inserted %s / %s sequences" + , itemRef , GetGroup()->GetNameStr() , AsString(i), AsString(nrVertices) ); @@ -1758,7 +1763,8 @@ class PolygonConnectivityOperator : public AbstrPolygonConnectivityOperator ++e; } if (processTimer.PassedSecs()) - reportF(SeverityTypeID::ST_MajorTrace, "%s: extracted %s / %s sequences" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s: extracted %s / %s sequences" + , itemRef , GetGroup()->GetNameStr() , AsString(gi - graph.begin()), AsString(graph.size()) ); diff --git a/geo/dll/src/Connect.cpp b/geo/dll/src/Connect.cpp index b1b30a6d4..ac2540e52 100644 --- a/geo/dll/src/Connect.cpp +++ b/geo/dll/src/Connect.cpp @@ -296,8 +296,9 @@ struct AbstrConnectPointOperator : VariadicOperator auto arg1DataHolder = CreateIndex(arg1A, spi); std::unique_ptr weights1Getter(arg1W ? WeightGetterCreator::Create(arg1W) : nullptr); + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); - parallel_tileloop(point2Entity->GetNrTiles(), [res, resObj = resLock.get(), arg2A, arg2W, &spi, &weights1Getter, this](tile_id t)->void + parallel_tileloop(point2Entity->GetNrTiles(), [res, resObj = resLock.get(), arg2A, arg2W, &spi, &weights1Getter, &itemRef, this](tile_id t)->void { SizeT tileSize = resObj->GetTiledRangeData()->GetTileSize(t); if (!tileSize) @@ -311,7 +312,7 @@ struct AbstrConnectPointOperator : VariadicOperator else { std::unique_ptr weights2Getter(arg2W ? WeightGetterCreator::Create(arg2W, t) : nullptr); - Calculate(spi, indexAssigner.m_Indices, tileSize, weights1Getter.get(), arg2A, t, weights2Getter.get()); + Calculate(spi, indexAssigner.m_Indices, tileSize, weights1Getter.get(), arg2A, t, weights2Getter.get(), itemRef.c_str()); } indexAssigner.Store(); @@ -323,7 +324,7 @@ struct AbstrConnectPointOperator : VariadicOperator } virtual std::any CreateIndex(const AbstrDataItem* arg1, ResourceHandle& spi) const=0; - virtual void Calculate(ResourceHandle& spi, UInt32* resBuffer, SizeT resSize, const WeightGetter* weights1, const AbstrDataItem* arg2A, tile_id t, const WeightGetter* weights2) const=0; + virtual void Calculate(ResourceHandle& spi, UInt32* resBuffer, SizeT resSize, const WeightGetter* weights1, const AbstrDataItem* arg2A, tile_id t, const WeightGetter* weights2, CharPtr itemRef = "") const=0; }; template @@ -350,7 +351,7 @@ struct ConnectPointOperator : AbstrConnectPointOperator } // Override Operator - void Calculate(ResourceHandle& spi, UInt32* resBuffer, SizeT resSize, const WeightGetter* weights1, const AbstrDataItem* arg2A, tile_id t, const WeightGetter* weights2) const override + void Calculate(ResourceHandle& spi, UInt32* resBuffer, SizeT resSize, const WeightGetter* weights1, const AbstrDataItem* arg2A, tile_id t, const WeightGetter* weights2, CharPtr itemRef = "") const override { Timer processTimer; @@ -372,9 +373,10 @@ struct ConnectPointOperator : AbstrConnectPointOperator auto destBegin = spIndex.first_leaf(); - auto reporter = [&processTimer, point2Begin, point2End, t, tn = arg2A->GetAbstrDomainUnit()->GetNrTiles()](auto i) { + auto reporter = [&processTimer, point2Begin, point2End, t, tn = arg2A->GetAbstrDomainUnit()->GetNrTiles(), itemRef](auto i) { if (processTimer.PassedSecs()) - reportF(SeverityTypeID::ST_MajorTrace, "Connect %s / %s points of tile %s / %s done" + reportF(SeverityTypeID::ST_MajorTrace, "%sConnect %s / %s points of tile %s / %s done" + , itemRef , AsString(i), AsString(point2End - point2Begin) , AsString(t), AsString(tn)); }; @@ -659,6 +661,7 @@ class ConnectInfoOperator : ConnectInfoBaseClass if (mustCalc) { Timer processTimer; + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); const Arg1Type* arg1 = const_array_cast(arg1A); const Arg2Type* arg2 = const_array_cast< PointType>(arg2A); @@ -819,7 +822,8 @@ class ConnectInfoOperator : ConnectInfoBaseClass { nrArg2 += nrUnreportedPoints; nrUnreportedPoints = 0; - reportF(SeverityTypeID::ST_MajorTrace, "%s %s / %s points done" + reportF(SeverityTypeID::ST_MajorTrace, "%s%s %s / %s points done" + , itemRef.c_str() , this->GetGroup()->GetName() , AsString(nrArg2), AsString(arg2Count)); } @@ -953,6 +957,7 @@ class FastConnectOperator : std::conditional_tGetValueComposition() == ValueComposition::Polygon; @@ -1125,7 +1130,8 @@ class FastConnectOperator : std::conditional_t resultCount = 0, zoneCount = 0; + auto itemRefStr = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); + CharPtr itemRef = itemRefStr.c_str(); assert(altLinkWeights || !res.od_AltLinkImp); @@ -1174,7 +1176,8 @@ SizeT ProcessDijkstra(TreeItemDualRef& resultHolder zoneCount++; if (processTimer.PassedSecs()) - reportF(SeverityTypeID::ST_MajorTrace, "impedance_matrix %s %s of %s sources: resulted in %s od-pairs" + reportF(SeverityTypeID::ST_MajorTrace, "%simpedance_matrix %s %s of %s sources: resulted in %s od-pairs" + , itemRef , actionMsg , AsString(zoneCount), AsString(ni.nrOrgZones), AsString(resultCount)); }; @@ -1194,7 +1197,8 @@ SizeT ProcessDijkstra(TreeItemDualRef& resultHolder if (CancelableFrame::CurrActiveCanceled()) return UNDEFINED_VALUE(SizeT); - reportF(SeverityTypeID::ST_MajorTrace, "impedance_matrix %s all %d sources: resulted in %s od-pairs" + reportF(SeverityTypeID::ST_MajorTrace, "%simpedance_matrix %s all %d sources: resulted in %s od-pairs" + , itemRef , actionMsg , AsString(ni.nrOrgZones), AsString(resultCount)); From 115c2b807cae51c530f136d0ad462785b60c3e86 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 7 Apr 2026 18:27:23 +0000 Subject: [PATCH 3/3] Add [[path]] prefix to progress reports in GridDist, OperPolygon, and BoostPolygon overlap Extends clickable tree item navigation in the event log to additional operators: GridDist, point_in_all_polygons, and polygon overlay. Agent-Logs-Url: https://github.com/ObjectVision/GeoDMS/sessions/106cc8e3-7ed2-46aa-b400-a1cc3fa1b2b2 Co-authored-by: MaartenHilferink <2284361+MaartenHilferink@users.noreply.github.com> --- geo/dll/src/BoostPolygon.cpp | 4 +++- geo/dll/src/GridDist.cpp | 4 +++- geo/dll/src/OperPolygon.cpp | 4 +++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/geo/dll/src/BoostPolygon.cpp b/geo/dll/src/BoostPolygon.cpp index b78f5556c..8e736f619 100644 --- a/geo/dll/src/BoostPolygon.cpp +++ b/geo/dll/src/BoostPolygon.cpp @@ -166,6 +166,7 @@ class AbstrPolygonOverlayOperator : public VariadicOperator { DataReadLock arg1Lock(arg1A); DataReadLock arg2Lock(arg2A); + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); ResourceHandle resData; ResourceHandle pointBoxDataHandle; @@ -199,7 +200,8 @@ class AbstrPolygonOverlayOperator : public VariadicOperator } } ); - reportF(SeverityTypeID::ST_MajorTrace, "%s with %s tiles of first argument and after matching %s / %s tiles of second argument, %s intersecting tiles were processed." + reportF(SeverityTypeID::ST_MajorTrace, "%s%s with %s tiles of first argument and after matching %s / %s tiles of second argument, %s intersecting tiles were processed." + , itemRef.c_str() , GetGroup()->GetNameStr() , AsString(domain1Unit->GetNrTiles()) , AsString(u+1), AsString(ue) diff --git a/geo/dll/src/GridDist.cpp b/geo/dll/src/GridDist.cpp index cdc71f065..dad584634 100644 --- a/geo/dll/src/GridDist.cpp +++ b/geo/dll/src/GridDist.cpp @@ -270,6 +270,8 @@ class GridDistOperator : public Operator if (!mustCalc) return true; + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); + // ================================= Calculate Primary data results ================================= DataReadLock arg1Lock(adiGridImp); @@ -634,7 +636,7 @@ class GridDistOperator : public Operator for (auto i=itMap.begin(), e=itMap.end(); i!=e; ++i) numBorderCases += i->m_NumBorderCases; - reportF(SeverityTypeID::ST_MajorTrace, "GridDist completed iteration %d; %d of the %d tiles need reprocessing for %d border cases (%d extra)", ++nrIterations, nrTilesRemaining, tn, numBorderCases, numBorderCases - nrPrevBorderCases); + reportF(SeverityTypeID::ST_MajorTrace, "%sGridDist completed iteration %d; %d of the %d tiles need reprocessing for %d border cases (%d extra)", itemRef.c_str(), ++nrIterations, nrTilesRemaining, tn, numBorderCases, numBorderCases - nrPrevBorderCases); nrPrevBorderCases = numBorderCases; } // next iteration resLock.Commit(); diff --git a/geo/dll/src/OperPolygon.cpp b/geo/dll/src/OperPolygon.cpp index d2fe31c48..3981aa5f3 100644 --- a/geo/dll/src/OperPolygon.cpp +++ b/geo/dll/src/OperPolygon.cpp @@ -1570,6 +1570,7 @@ class AbstrPointInAllPolygonsOperator : public BinaryOperator { DataReadLock arg1Lock(arg1A); DataReadLock arg2Lock(arg2A); + auto itemRef = resultHolder.HasBackRef() ? resultHolder.GetBackRefStr() + " " : SharedStr(); ResourceHandle resData; ResourceHandle pointBoxDataHandle; @@ -1605,7 +1606,8 @@ class AbstrPointInAllPolygonsOperator : public BinaryOperator } ); - reportF(SeverityTypeID::ST_MajorTrace, "point_in_all_polygons with %d point tiles after processing %d/%d polygon tiles resulted in %d matches" + reportF(SeverityTypeID::ST_MajorTrace, "%spoint_in_all_polygons with %d point tiles after processing %d/%d polygon tiles resulted in %d matches" + , itemRef.c_str() , domain1Unit->GetNrTiles() , u+1, ue , intersectCount