Files
OCCT/tests/vselect
Pasukhin Dmitry c076c4ed03 Visualization - Fix polyline selection inclusion test and point-in-polyline check (#1222)
Replaces two buggy pieces of SelectMgr_TriangularFrustumSet used during
polyline (polygon rubber-band) selection:

- OverlapsBox(min, max, bool* theInside): the corner-edge isIntersectBoundary
  heuristic produced false "fully inside" answers whenever an AABB was large
  enough that its 12 edges did not cross the polyline but its interior did
  not lie inside either. Rewrite: first probe every frustum for any overlap;
  if none, return false. Otherwise, project the 8 AABB corners onto the
  frustum near plane and apply a ray-cast inside test against the original
  polyline loop. If any corner projects outside, clear theInside; else leave
  it untouched. The near-plane coplanarity assumption is guaranteed by
  Build(), which derives every near vertex from
  myBuilder->ProjectPntOnViewPlane(x, y, 0.0).

- OverlapsPoint(const gp_Pnt&): previously a stub returning false, which made
  strict-inclusion polyline selection of Select3D_SensitiveTriangle,
  SensitivePoly, SensitiveTriangulation, SensitivePrimitiveArray,
  MeshVS_CommonSensitiveEntity and MeshVS_SensitiveQuad silently impossible
  (those sensitive types call theMgr.OverlapsPoint(...) on each vertex in
  strict-inclusion mode; a blanket false meant nothing was ever picked). Now
  delegates to the same near-plane projection + ray-cast test, so strict
  inclusion works for all these sensitive types in polyline mode.

Covered by a new Draw test tests/vselect/bugs/bug_polyline_inclusion that
exercises both strict-inclusion and overlap modes for spheres inside/outside
a polygonal rubber band. No GTest is added because constructing a working
TriangularFrustumSet requires a configured Graphic3d_Camera + viewport; the
Tcl test is the regression gate.
2026-04-22 11:29:49 +01:00
..