mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
Provide an interface to retrieve selecting volume's planes from SelectBasics_SelectingVolumeManager
This commit is contained in:
@@ -96,6 +96,9 @@ public:
|
||||
|
||||
virtual Standard_Boolean IsOverlapAllowed() const = 0;
|
||||
|
||||
//! Stores plane equations to the given vector
|
||||
virtual void GetPlanes (NCollection_Vector<NCollection_Vec4<Standard_Real> >& thePlaneEquations) const = 0;
|
||||
|
||||
protected:
|
||||
SelectionType myActiveSelectionType; //!< Active selection type: point, box or polyline
|
||||
};
|
||||
|
@@ -162,6 +162,9 @@ public:
|
||||
//! Computes depth range for global (defined for the whole view) clipping planes.
|
||||
Standard_EXPORT virtual void SetViewClipping (const Graphic3d_SequenceOfHClipPlane& /*thePlanes*/) {};
|
||||
|
||||
//! Stores plane equations to the given vector
|
||||
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const = 0;
|
||||
|
||||
DEFINE_STANDARD_RTTIEXT(SelectMgr_BaseFrustum,Standard_Transient)
|
||||
|
||||
protected:
|
||||
|
@@ -741,3 +741,24 @@ Standard_Boolean SelectMgr_RectangularFrustum::isViewClippingOk (const Standard_
|
||||
return myViewClipRange.MaxDepth() > 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);
|
||||
}
|
||||
}
|
||||
|
@@ -117,6 +117,10 @@ public:
|
||||
inline gp_Pnt GetNearPnt() const { return myNearPickedPnt; }
|
||||
|
||||
inline gp_Pnt GetFarPnt() const { return myFarPickedPnt; }
|
||||
|
||||
//! Stores plane equations to the given vector
|
||||
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
|
||||
|
||||
protected:
|
||||
|
||||
Standard_EXPORT void segmentSegmentDistance (const gp_Pnt& theSegPnt1,
|
||||
|
@@ -183,6 +183,18 @@ public:
|
||||
return mySelectingVolumes[myActiveSelectionType];
|
||||
}
|
||||
|
||||
//! Stores plane equations to the given vector
|
||||
virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE
|
||||
{
|
||||
if (myActiveSelectionType == Unknown)
|
||||
{
|
||||
thePlaneEquations.Clear();
|
||||
return;
|
||||
}
|
||||
|
||||
return mySelectingVolumes[myActiveSelectionType]->GetPlanes (thePlaneEquations);
|
||||
}
|
||||
|
||||
private:
|
||||
enum { Frustum, FrustumSet, VolumeTypesNb }; //!< Defines the amount of available selecting volumes
|
||||
|
||||
|
@@ -285,3 +285,21 @@ void SelectMgr_TriangularFrustum::Clear()
|
||||
{
|
||||
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,9 @@ public:
|
||||
//! Nullifies the handle to corresponding builder instance to prevent memory leaks
|
||||
Standard_EXPORT void Clear();
|
||||
|
||||
//! Stores plane equations to the given vector
|
||||
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
|
||||
|
||||
private:
|
||||
|
||||
void cacheVertexProjections (SelectMgr_TriangularFrustum* theFrustum);
|
||||
|
@@ -224,4 +224,18 @@ Standard_Boolean SelectMgr_TriangularFrustumSet::Overlaps (const gp_Pnt& thePnt1
|
||||
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
|
||||
|
@@ -75,6 +75,9 @@ public:
|
||||
Select3D_TypeOfSensitivity theSensType,
|
||||
Standard_Real& theDepth) Standard_OVERRIDE;
|
||||
|
||||
//! Stores plane equations to the given vector
|
||||
Standard_EXPORT virtual void GetPlanes (NCollection_Vector<SelectMgr_Vec4>& thePlaneEquations) const Standard_OVERRIDE;
|
||||
|
||||
private:
|
||||
|
||||
SelectMgr_TriangFrustums myFrustums;
|
||||
|
Reference in New Issue
Block a user