0028361: Visualization, TKV3d - buggy behavior of Transformation Persistence compiled...
authorapl <apl@opencascade.com>
Thu, 26 Jan 2017 09:54:30 +0000 (12:54 +0300)
committerapn <apn@opencascade.com>
Thu, 2 Feb 2017 13:11:17 +0000 (16:11 +0300)
The patch fixes transformation persistence for various set of GCC compilers.
1) Optimized template-specialized operator /= for division (causes bugs)
   of NCollection_Vec4 was replaced with non-specialized version.
2) NCollection_Vec4::xyz() is not used since compiler uses modifiable-reference
   returning version, which invokes warning of possible strict-aliasing rules
   violation and leads to incorrect behavior of the reference.

src/Graphic3d/Graphic3d_TransformPers.hxx
tests/bugs/vis/bug28361 [new file with mode: 0644]

index 0588c7c..4f3ba60 100644 (file)
@@ -510,8 +510,8 @@ void Graphic3d_TransformPers::Apply (const Handle(Graphic3d_Camera)& theCamera,
   {
     typename BVH_Box<T, 4>::BVH_VecNt& aCorner = anArrayOfCorners[anIt];
     aCorner  = aTPers * aCorner;
-    aCorner /= aCorner.w();
-    theBoundingBox.Add (aCorner.xyz());
+    aCorner = aCorner / aCorner.w();
+    theBoundingBox.Add (typename BVH_Box<T, 3>::BVH_VecNt (aCorner.x(), aCorner.y(), aCorner.z()));
   }
 }
 
diff --git a/tests/bugs/vis/bug28361 b/tests/bugs/vis/bug28361
new file mode 100644 (file)
index 0000000..c4c2465
--- /dev/null
@@ -0,0 +1,14 @@
+puts "============"
+puts "OCC28361 Visualization, TKV3d - buggy behavior of Transformation Persistence compiled on several Linux platforms in optimized mode"
+puts "============"
+puts ""
+
+vclear
+vinit View1
+pload MODELING VISUALIZATION
+box b 10 10 10
+vdisplay b -trsfPers zoomRotate -trsfPersPos 90 90 90
+vmoveto 266 164
+if { [vreadpixel 256 174 rgb name] != "CYAN1" } { puts "Error: the box is not highlighted" }
+
+vdump $imagedir/${casename}.png