mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-21 10:13:43 +03:00
0027969: Visualization - add interfaces to access selecting volumes from SelectMgr_SelectingVolumeManager
- getter for selection frustum computed during last run of selection mechanism was added to SelectMgr_SelectingVolumeManager; - getters for frustum planes were added to SelectMgr_BaseFrustum and its successors; - an API for applications to get frustum planes was added to SelectBasics_SelectingVolumeManager.
This commit is contained in:
parent
dd115e1227
commit
871dcdc201
@ -108,6 +108,10 @@ public:
|
|||||||
//! correspondingly) onto far view frustum plane
|
//! correspondingly) onto far view frustum plane
|
||||||
virtual gp_Pnt GetFarPickedPnt() const = 0;
|
virtual gp_Pnt GetFarPickedPnt() const = 0;
|
||||||
|
|
||||||
|
//! Stores plane equation coefficients (in the following form:
|
||||||
|
//! Ax + By + Cz + D = 0) to the given vector
|
||||||
|
virtual void GetPlanes (NCollection_Vector<NCollection_Vec4<Standard_Real> >& thePlaneEquations) const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
SelectionType myActiveSelectionType; //!< Active selection type: point, box or polyline
|
SelectionType myActiveSelectionType; //!< Active selection type: point, box or polyline
|
||||||
};
|
};
|
||||||
|
@ -173,6 +173,14 @@ public:
|
|||||||
//! @return previous value of the flag
|
//! @return previous value of the flag
|
||||||
virtual Standard_Boolean SetViewClippingEnabled (const Standard_Boolean /*theToEnable*/) { return Standard_False; }
|
virtual Standard_Boolean SetViewClippingEnabled (const Standard_Boolean /*theToEnable*/) { return Standard_False; }
|
||||||
|
|
||||||
|
//! Stores plane equation coefficients (in the following form:
|
||||||
|
//! Ax + By + Cz + D = 0) to the given vector
|
||||||
|
virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const
|
||||||
|
{
|
||||||
|
thePlaneEquations.Clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
DEFINE_STANDARD_RTTIEXT(SelectMgr_BaseFrustum,Standard_Transient)
|
DEFINE_STANDARD_RTTIEXT(SelectMgr_BaseFrustum,Standard_Transient)
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
@ -746,3 +746,24 @@ Standard_Boolean SelectMgr_RectangularFrustum::isViewClippingOk (const Standard_
|
|||||||
return myViewClipRange.MaxDepth() > theDepth
|
return myViewClipRange.MaxDepth() > theDepth
|
||||||
&& myViewClipRange.MinDepth() < theDepth;
|
&& myViewClipRange.MinDepth() < theDepth;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =======================================================================
|
||||||
|
// function : GetPlanes
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
void SelectMgr_RectangularFrustum::GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const
|
||||||
|
{
|
||||||
|
thePlaneEquations.Clear();
|
||||||
|
|
||||||
|
SelectMgr_Vec4 anEquation;
|
||||||
|
for (Standard_Integer aPlaneIdx = 0; aPlaneIdx < 6; ++aPlaneIdx)
|
||||||
|
{
|
||||||
|
const gp_Vec& aPlaneNorm = myIsOrthographic && aPlaneIdx % 2 == 1 ?
|
||||||
|
myPlanes[aPlaneIdx - 1].Reversed() : myPlanes[aPlaneIdx];
|
||||||
|
anEquation.x() = aPlaneNorm.X();
|
||||||
|
anEquation.y() = aPlaneNorm.Y();
|
||||||
|
anEquation.z() = aPlaneNorm.Z();
|
||||||
|
anEquation.w() = - (aPlaneNorm.XYZ().Dot (myVertices[aPlaneIdx % 2 == 0 ? aPlaneIdx : aPlaneIdx + 2].XYZ()));
|
||||||
|
thePlaneEquations.Append (anEquation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -132,6 +132,11 @@ public:
|
|||||||
//! of center of 2d rectangle (for point and rectangular selection
|
//! of center of 2d rectangle (for point and rectangular selection
|
||||||
//! correspondingly) onto far view frustum plane
|
//! correspondingly) onto far view frustum plane
|
||||||
inline const gp_Pnt& GetFarPnt() const { return myFarPickedPnt; }
|
inline const gp_Pnt& GetFarPnt() const { return myFarPickedPnt; }
|
||||||
|
|
||||||
|
//! Stores plane equation coefficients (in the following form:
|
||||||
|
//! Ax + By + Cz + D = 0) to the given vector
|
||||||
|
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
Standard_EXPORT void segmentSegmentDistance (const gp_Pnt& theSegPnt1,
|
Standard_EXPORT void segmentSegmentDistance (const gp_Pnt& theSegPnt1,
|
||||||
|
@ -196,6 +196,29 @@ public:
|
|||||||
//! correspondingly) onto far view frustum plane
|
//! correspondingly) onto far view frustum plane
|
||||||
Standard_EXPORT virtual gp_Pnt GetFarPickedPnt() const Standard_OVERRIDE;
|
Standard_EXPORT virtual gp_Pnt GetFarPickedPnt() const Standard_OVERRIDE;
|
||||||
|
|
||||||
|
//! Returns active selecting volume that was built during last
|
||||||
|
//! run of OCCT selection mechanism
|
||||||
|
Handle(SelectMgr_BaseFrustum) ActiveVolume() const
|
||||||
|
{
|
||||||
|
if (myActiveSelectionType == Unknown)
|
||||||
|
return Handle(SelectMgr_BaseFrustum)();
|
||||||
|
|
||||||
|
return mySelectingVolumes[myActiveSelectionType / 2];
|
||||||
|
}
|
||||||
|
|
||||||
|
//! Stores plane equation coefficients (in the following form:
|
||||||
|
//! Ax + By + Cz + D = 0) to the given vector
|
||||||
|
virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE
|
||||||
|
{
|
||||||
|
if (myActiveSelectionType == Unknown)
|
||||||
|
{
|
||||||
|
thePlaneEquations.Clear();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return mySelectingVolumes[myActiveSelectionType / 2]->GetPlanes (thePlaneEquations);
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
enum { Frustum, FrustumSet, VolumeTypesNb }; //!< Defines the amount of available selecting volumes
|
enum { Frustum, FrustumSet, VolumeTypesNb }; //!< Defines the amount of available selecting volumes
|
||||||
|
|
||||||
|
@ -279,3 +279,21 @@ void SelectMgr_TriangularFrustum::Clear()
|
|||||||
{
|
{
|
||||||
myBuilder.Nullify();
|
myBuilder.Nullify();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =======================================================================
|
||||||
|
// function : GetPlanes
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
void SelectMgr_TriangularFrustum::GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const
|
||||||
|
{
|
||||||
|
SelectMgr_Vec4 aPlaneEquation;
|
||||||
|
for (Standard_Integer aPlaneIdx = 0; aPlaneIdx < 5; ++aPlaneIdx)
|
||||||
|
{
|
||||||
|
const gp_Vec& aNorm = myPlanes[aPlaneIdx];
|
||||||
|
aPlaneEquation.x() = aNorm.X();
|
||||||
|
aPlaneEquation.y() = aNorm.Y();
|
||||||
|
aPlaneEquation.z() = aNorm.Z();
|
||||||
|
aPlaneEquation.w() = - (aNorm.XYZ().Dot (myVertices[aPlaneIdx % 2 == 0 ? aPlaneIdx : 1].XYZ()));
|
||||||
|
thePlaneEquations.Append (aPlaneEquation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@ -84,6 +84,10 @@ public:
|
|||||||
//! Nullifies the handle to corresponding builder instance to prevent memory leaks
|
//! Nullifies the handle to corresponding builder instance to prevent memory leaks
|
||||||
Standard_EXPORT void Clear();
|
Standard_EXPORT void Clear();
|
||||||
|
|
||||||
|
//! Stores plane equation coefficients (in the following form:
|
||||||
|
//! Ax + By + Cz + D = 0) to the given vector
|
||||||
|
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
void cacheVertexProjections (SelectMgr_TriangularFrustum* theFrustum) const;
|
void cacheVertexProjections (SelectMgr_TriangularFrustum* theFrustum) const;
|
||||||
|
@ -224,4 +224,18 @@ Standard_Boolean SelectMgr_TriangularFrustumSet::Overlaps (const gp_Pnt& thePnt1
|
|||||||
return Standard_False;
|
return Standard_False;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// =======================================================================
|
||||||
|
// function : GetPlanes
|
||||||
|
// purpose :
|
||||||
|
// =======================================================================
|
||||||
|
void SelectMgr_TriangularFrustumSet::GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const
|
||||||
|
{
|
||||||
|
thePlaneEquations.Clear();
|
||||||
|
|
||||||
|
for (SelectMgr_TriangFrustumsIter anIter (myFrustums); anIter.More(); anIter.Next())
|
||||||
|
{
|
||||||
|
anIter.Value()->GetPlanes (thePlaneEquations);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#undef MEMORY_BLOCK_SIZE
|
#undef MEMORY_BLOCK_SIZE
|
||||||
|
@ -75,6 +75,10 @@ public:
|
|||||||
Select3D_TypeOfSensitivity theSensType,
|
Select3D_TypeOfSensitivity theSensType,
|
||||||
Standard_Real& theDepth) Standard_OVERRIDE;
|
Standard_Real& theDepth) Standard_OVERRIDE;
|
||||||
|
|
||||||
|
//! Stores plane equation coefficients (in the following form:
|
||||||
|
//! Ax + By + Cz + D = 0) to the given vector
|
||||||
|
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
SelectMgr_TriangFrustums myFrustums;
|
SelectMgr_TriangFrustums myFrustums;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user