Open CASCADE, the 3D modelling kernel
3D modeling & numerical simulation

Search the Forums
See All Topics
 

Bug in AIS_TexturedShape::Compute()?

Bug in AIS_TexturedShape::Compute()?
EricThompson 2012/08/03 18:48
While porting my application from 6.2.0 to 6.5.3, I believe I found a bug in the new version of AIS_TexturedShape::Compute().

I have my own class derived from AIS_TexturedShape. When I moved to 6.5.3, I found that while my shapes drew correctly in wireframe, they did not appear in shaded mode. While stepping through the source code, I noticed that the logic changed in the Compute() method's shaded case.

In the old version, if OwnDeviationAngle and OwnDeviationCoefficient both return false, it would skip calling BRepTools::Clean() then go on to draw the shaded surface.

In the new version, if OwnDeviationAngle and OwnDeviationCoefficient both return false, it breaks out of the shaded case and does not draw anything for the surface.

Note that the 6.5.3 version of AIS_Shape::Compute() does not have this problem, only the textured shape does.

Here is the source code for she shape case from 6.2.0 and 6.5.3:

6.2.0

case 1: // Shading)
{
Standard_Real prevangle ;
Standard_Real newangle ;
Standard_Real prevcoeff ;
Standard_Real newcoeff ;

if (OwnDeviationAngle(newangle,prevangle) || OwnDeviationCoefficient(newcoeff,prevcoeff))

if (Abs (newangle - prevangle) > Precision::Angular() || Abs (newcoeff - prevcoeff) > Precision::Confusion() )
{
BRepTools::Clean(myshape);
}

if ((Standard_Integer) myshape.ShapeType()>4)
StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer);
else
{
myDrawer->SetShadingAspectGlobal(Standard_False);
if (IsInfinite())
StdPrs_WFDeflectionShape::Add(aPrs,myshape,myDrawer);
else
{
try
{
OCC_CATCH_SIGNALS
StdPrs_ShadedShape::Add(aPrs,myshape,myDrawer);
}
catch (Standard_Failure)
{
cout <<"AIS_TexturedShape::Compute() in ShadingMode failed \n" <<endl;
StdPrs_WFShape::Add(aPrs,myshape,myDrawer);
}
}
}
break;
}


6.3.5

case 1: // Shading
{
Standard_Real prevangle;
Standard_Real newangle;
Standard_Real prevcoeff;
Standard_Real newcoeff;

if (!OwnDeviationAngle (newangle, prevangle) && !OwnDeviationCoefficient (newcoeff, prevcoeff))
{
break;
}

if (Abs (newangle - prevangle) > Precision::Angular() || Abs (newcoeff - prevcoeff) > Precision::Confusion())
{
BRepTools::Clean (myshape);
}

if (myshape.ShapeType() > TopAbs_FACE)
{
StdPrs_WFDeflectionShape::Add (thePrs, myshape, myDrawer);
break;
}

myDrawer->SetShadingAspectGlobal (Standard_False);
if (IsInfinite())
{
StdPrs_WFDeflectionShape::Add (thePrs, myshape, myDrawer);
break;
}

try
{
OCC_CATCH_SIGNALS
StdPrs_ShadedShape::Add (thePrs, myshape, myDrawer);
}
catch (Standard_Failure)
{
std::cout << "AIS_TexturedShape::Compute() in ShadingMode failed \n";
StdPrs_WFShape::Add (thePrs, myshape, myDrawer);
}
break;
}

Forum supervisor 2012/08/06 16:23
Dear Eric,
According our visualization expert opinion it is rather a bug in AIS_TexturedShape, caused by modifications performed in scope of issue #22971 "TKOpenGl clean up obsolete functionality".
The affected logic

if (!OwnDeviationAngle (newangle, prevangle) && !OwnDeviationCoefficient (newcoeff, prevcoeff))
{
break;
}

does not allow building presentations with default deviation parameters (as it was previously).
So, the new code in AIS_TexturedShape at least looks strange and requires further investigation.
We would appreciated if you would registered this issue in Mantis BugTracker, which is available
now via the Collaborative portal - http://dev.opencascade.org/index.php?q=home/get_involved.
It would be also very helpful to get a test case (shape) for this issue.
Regards
Forum supervisor 2012/08/17 09:38
Dear Eric,
The regression has been fixed in OCCT Git branch CR23385.
So, you are welcome to test the patch.
Details you can check at the Mantis BugTracker,
the issue - http://tracker.dev.opencascade.org/view.php?id=23385.
Regards
 
 
Latest news
  • OCCT Applications
  • Open CASCADE Technology 6.8.0 is available for download!
  • New features to enhance the development process

  • © OPEN CASCADE 2000 - 2014  |  Search  |  Contacts   |  Site map