returns Projector from Select3D;
Create (theViewTrsf : Mat4d from Graphic3d;
- theProjTrsf : Mat4d from Graphic3d)
+ theProjTrsf : Mat4d from Graphic3d;
+ theZNear : Real from Standard = 0.0;
+ theZFar : Real from Standard = 10.0)
---Purpose: Builds the Projector from the passed model-view <theViewTrsf>
- -- and projection <theProjTrsf> transformation matrices.
+ -- and projection <theProjTrsf> transformation matrices. Parameters <theZNear>
+ -- and <theZFar> are passed to define view frustum depth for further projection
+ -- line computation using perspective projection.
returns Projector from Select3D;
Set (me : mutable;
Set (me : mutable;
theViewTrsf : Mat4d from Graphic3d;
- theProjTrsf : Mat4d from Graphic3d);
+ theProjTrsf : Mat4d from Graphic3d;
+ theZNear : Real from Standard;
+ theZFar : Real from Standard);
---Purpose: Sets new parameters for the Projector.
SetView (me : mutable;
myInvTrsf : GTrsf from gp is protected;
myScaledTrsf : Trsf from gp is protected;
myProjTrsf : Mat4d from Graphic3d is protected;
+ myZNear : Real from Standard is protected;
+ myZFar : Real from Standard is protected;
end Projector;
Select3D_Projector::Select3D_Projector (const Handle(V3d_View)& theView)
: myPersp (Standard_False),
myFocus (0.0),
+ myZNear (0.0),
+ myZFar (10.0),
myType (-1)
{
SetView (theView);
Select3D_Projector::Select3D_Projector()
: myPersp (Standard_False),
myFocus (0.0),
+ myZNear (0.0),
+ myZFar (10.0),
myType (-1)
{
Scaled();
Select3D_Projector::Select3D_Projector (const gp_Ax2& theCS)
: myPersp (Standard_False),
myFocus (0.0),
+ myZNear (0.0),
+ myZFar (10.0),
myType (-1)
{
myScaledTrsf.SetTransformation (theCS);
Select3D_Projector::Select3D_Projector (const gp_Ax2& theCS, const Standard_Real theFocus)
: myPersp (Standard_True),
myFocus (theFocus),
+ myZNear (0.0),
+ myZFar (10.0),
myType (-1)
{
myScaledTrsf.SetTransformation (theCS);
myFocus (theFocus),
myGTrsf (theViewTrsf),
myScaledTrsf (theViewTrsf),
+ myZNear (0.0),
+ myZFar (10.0),
myType (-1)
{
Scaled();
myFocus (theFocus),
myGTrsf (theViewTrsf),
myScaledTrsf (theViewTrsf.Trsf()),
+ myZNear (0.0),
+ myZFar (10.0),
myType (-1)
{
Scaled();
//purpose :
//=======================================================================
Select3D_Projector::Select3D_Projector (const Graphic3d_Mat4d& theViewTrsf,
- const Graphic3d_Mat4d& theProjTrsf)
+ const Graphic3d_Mat4d& theProjTrsf,
+ const Standard_Real theZNear,
+ const Standard_Real theZFar)
: myPersp (Standard_False),
myFocus (0.0),
myType (-1)
{
- Set (theViewTrsf, theProjTrsf);
+ Set (theViewTrsf, theProjTrsf, theZNear, theZFar);
}
//=======================================================================
//purpose :
//=======================================================================
void Select3D_Projector::Set (const Graphic3d_Mat4d& theViewTrsf,
- const Graphic3d_Mat4d& theProjTrsf)
+ const Graphic3d_Mat4d& theProjTrsf,
+ const Standard_Real theZNear,
+ const Standard_Real theZFar)
{
// Copy elements corresponding to common view-transformation
for (Standard_Integer aRowIt = 0; aRowIt < 3; ++aRowIt)
myPersp = Standard_False;
myFocus = 0.0;
myProjTrsf = theProjTrsf;
+ myZNear = theZNear;
+ myZFar = theZFar;
Scaled();
}
aScale.ChangeValue (2, 2) = aFrameScale.Z();
Graphic3d_Mat4d aScaledProjTrsf = aScale * aProjTrsf;
- Set (aViewTrsf, aScaledProjTrsf);
+ Set (aViewTrsf,
+ aScaledProjTrsf,
+ theView->Camera()->ZNear(),
+ theView->Camera()->ZFar());
}
//=======================================================================
return gp_Lin();
}
- Graphic3d_Vec4d aVPnt1 = aProjInv * Graphic3d_Vec4d (theX, theY, 0.0, 1.0);
- Graphic3d_Vec4d aVPnt2 = aProjInv * Graphic3d_Vec4d (theX, theY, 10.0, 1.0);
+ Graphic3d_Vec4d aVPnt1 = aProjInv * Graphic3d_Vec4d (theX, theY, myZNear, 1.0);
+ Graphic3d_Vec4d aVPnt2 = aProjInv * Graphic3d_Vec4d (theX, theY, myZFar, 1.0);
aVPnt1 /= aVPnt1.w();
aVPnt2 /= aVPnt2.w();
--- /dev/null
+puts "========"
+puts "OCC25624"
+puts "========"
+puts ""
+############################################################################
+puts "Visualization - selection is incorrect in perspective mode in a specific case"
+############################################################################
+
+pload MODELING VISUALIZATION
+box a 0.0 0.0 0.0 0.1 0.1 0.1
+box b 0.0 0.0 0.5 0.1 0.1 0.1
+box c 0.0 0.0 1.0 0.1 0.1 0.1
+
+vinit View1
+vautozfit 1
+vclear
+vtop
+vsetdispmode 0
+vcamera -persp
+vdisplay a b c
+vfit
+vselect 210 210
+
+# check if the closest box is selected
+checkcolor 170 10 0.8 0.8 0.8
+
+# check if the farthest box is displayed
+# without any highlighting
+checkcolor 210 184 1 1 0