#include <inspector/TreeModel_ItemBase.hxx>
#include <inspector/ViewControl_EditType.hxx>
+class Graphic3d_TransformPers;
+
class VInspector_ItemBase;
typedef QExplicitlySharedDataPointer<VInspector_ItemBase> VInspector_ItemBasePtr;
virtual void GetPresentations (NCollection_List<Handle(Standard_Transient)>& thePresentations)
{ (void)thePresentations; }
+ //! Returns transform persistent of the item or NULL
+ Handle(Graphic3d_TransformPers) TransformPersistence() const { return myTransformPersistence; }
+
//! Returns shape of the item parameters
//! \return generated shape of the item parameters
Standard_EXPORT virtual TopoDS_Shape GetPresentationShape() const;
Handle(AIS_InteractiveContext) myContext; //!< the current context
TopoDS_Shape myPresentationShape; //!< item presentation shape
+ Handle(Graphic3d_TransformPers) myTransformPersistence; //!< item cached persistent
};
#endif
\ No newline at end of file
Handle(Prs3d_Presentation) aPresentation = aParentItem->GetPresentation();
myCStructure = aPresentation->CStructure();
+ if (!myCStructure.IsNull())
+ myTransformPersistence = myCStructure->TransformPersistence();
TreeModel_ItemBase::Init();
}
{
VInspector_ItemBase::Reset();
myCStructure = NULL;
+ myTransformPersistence = NULL;
}
// =======================================================================
: QVariant (ViewControl_Tools::ToString (aCamera->Direction()).ToCString());
case 19: return isFirstColumn ? (!isToolTip ? QVariant ("ViewDimensions") : QVariant ("View plane size at center (target) point and distance between ZFar and ZNear planes"))
: ViewControl_Tools::ToString (aCamera->ViewDimensions()).ToCString();
+
+ case 20: return ViewControl_Table::SeparatorData();
+ case 21: return isFirstColumn ? QVariant ("TransformMatrices (D):") : QVariant();
+ case 22: return ViewControl_Table::SeparatorData();
+
+ case 23: return isFirstColumn ? QVariant ("OrientationMatrix") : VInspector_Tools::ToVariant (aCamera->OrientationMatrix());
+ case 24: return isFirstColumn ? QVariant ("ProjectionMatrix") : VInspector_Tools::ToVariant (aCamera->ProjectionMatrix());
+ case 25: return isFirstColumn ? QVariant ("ProjectionStereoLeft") : VInspector_Tools::ToVariant (aCamera->ProjectionStereoLeft());
+ case 26: return isFirstColumn ? QVariant ("ProjectionStereoRight") : VInspector_Tools::ToVariant (aCamera->ProjectionStereoRight());
+
+ case 27: return ViewControl_Table::SeparatorData();
+ case 28: return isFirstColumn ? QVariant ("TransformMatrices (F):") : QVariant();
+ case 29: return ViewControl_Table::SeparatorData();
+
+ case 30: return isFirstColumn ? QVariant ("OrientationMatrixF") : VInspector_Tools::ToVariant (aCamera->OrientationMatrixF());
+ case 31: return isFirstColumn ? QVariant ("ProjectionMatrixF") : VInspector_Tools::ToVariant (aCamera->ProjectionMatrixF());
+ case 32: return isFirstColumn ? QVariant ("ProjectionStereoLeftF") : VInspector_Tools::ToVariant (aCamera->ProjectionStereoLeftF());
+ case 33: return isFirstColumn ? QVariant ("ProjectionStereoRightF") : VInspector_Tools::ToVariant (aCamera->ProjectionStereoRightF());
}
return QVariant();
}
}
setInteractiveObject (anIO);
+ myTransformPersistence = anIO->TransformPersistence();
UpdatePresentationShape();
TreeModel_ItemBase::Init(); // to use getIO() without circling initialization
}
SetContext (NULL);
setInteractiveObject (NULL);
+ myTransformPersistence = NULL;
}
// =======================================================================
switch (theRow)
{
case 0: return ViewControl_Table::SeparatorData();
- case 1: return isFirstColumn ? QVariant (STANDARD_TYPE (Graphic3d_Structure)->Name())
+ case 1: return isFirstColumn ? QVariant (STANDARD_TYPE (Prs3d_Presentation)->Name())
: ViewControl_Tools::GetPointerInfo (aPrs).ToCString();
case 2: return ViewControl_Table::SeparatorData();
case 3: return isFirstColumn ? QVariant ("DisplayPriority") : QVariant (aPrs->DisplayPriority());
const_cast<VInspector_ItemSelectMgrSelection*>(this)->Init();
// an empty method to don't initialize the main label, as it was not cleared in Reset()
}
+
+// =======================================================================
+// function : GetTableRowCount
+// purpose :
+// =======================================================================
+int VInspector_ItemSelectMgrSelection::GetTableRowCount() const
+{
+ return 10;
+}
+
+// =======================================================================
+// function : GetTableData
+// purpose :
+// =======================================================================
+QVariant VInspector_ItemSelectMgrSelection::GetTableData (const int theRow, const int theColumn, const int theRole) const
+{
+ if (theRole != Qt::DisplayRole)
+ return QVariant();
+
+ bool isFirstColumn = theColumn == 0;
+
+ Handle(SelectMgr_Selection) aSelection = GetSelection();
+ switch (theRow)
+ {
+ case 0: return isFirstColumn ? QVariant ("Mode") : QVariant (aSelection->Mode());
+ case 1: return isFirstColumn ? QVariant ("Sensitivity") : QVariant (aSelection->Sensitivity());
+ case 2: return isFirstColumn ? QVariant ("UpdateStatus")
+ : QVariant ((int)aSelection->UpdateStatus()); // TODO! SelectMgr_TypeOfUpdate
+ case 3: return isFirstColumn ? QVariant ("BVHUpdateStatus")
+ : QVariant ((int)aSelection->BVHUpdateStatus()); // TODO! SelectMgr_TypeOfBVHUpdate
+ case 4: return isFirstColumn ? QVariant ("GetSelectionState")
+ : QVariant ((int)aSelection->GetSelectionState()); // TODO! SelectMgr_StateOfSelection
+
+ default: return QVariant();
+ }
+ return QVariant();
+}
//! Resets cached values
Standard_EXPORT virtual void Reset() Standard_OVERRIDE;
+ //! Returns number of table rows
+ //! \return an integer value
+ virtual int GetTableRowCount() const Standard_OVERRIDE;
+
+ //! Returns table value for the row in form: <function name> <function value>
+ //! \param theRow a model index row
+ //! \param theColumn a model index column
+ virtual QVariant GetTableData (const int theRow, const int theColumn, const int theRole) const Standard_OVERRIDE;
+
protected:
//! Initializes the current item. It is empty because Reset() is also empty.
theBoundingBox.IsXThin (Precision::Confusion()) ||
theBoundingBox.IsYThin (Precision::Confusion()) ||
theBoundingBox.IsZThin (Precision::Confusion()))
- return TopoDS_Shape();
+ return TopoDS_Shape(); // TODO: display shape for thin box, like in the same method for Select3D_BndBox3d
BRepPrimAPI_MakeBox aBoxBuilder(theBoundingBox.CornerMin(), theBoundingBox.CornerMax());
return aBoxBuilder.Shape();
Standard_Boolean aThinOnX = fabs (aPntMin.X() - aPntMax.X()) < Precision::Confusion();
Standard_Boolean aThinOnY = fabs (aPntMin.Y() - aPntMax.Y()) < Precision::Confusion();
Standard_Boolean aThinOnZ = fabs (aPntMin.Z() - aPntMax.Z()) < Precision::Confusion();
+
+ if (((int)aThinOnX + (int)aThinOnY + (int)aThinOnZ) > 1) // thin box in several directions is a point
+ {
+ BRep_Builder aBuilder;
+ TopoDS_Compound aCompound;
+ aBuilder.MakeCompound (aCompound);
+ aBuilder.Add (aCompound, BRepBuilderAPI_MakeVertex (aPntMin));
+ return aCompound;
+ }
+
if (aThinOnX || aThinOnY || aThinOnZ)
{
gp_Pnt aPnt1, aPnt2, aPnt3, aPnt4 ;
aPnt3 = gp_Pnt(aPntMin.X(), aPntMax.Y(), aPntMax.Z());
aPnt4 = gp_Pnt(aPntMin.X(), aPntMin.Y(), aPntMax.Z());
}
- if (aThinOnY)
+ else if (aThinOnY)
{
aPnt1 = gp_Pnt(aPntMin.X(), aPntMin.Y(), aPntMin.Z());
aPnt2 = gp_Pnt(aPntMax.X(), aPntMin.Y(), aPntMin.Z());
aPnt3 = gp_Pnt(aPntMax.X(), aPntMin.Y(), aPntMax.Z());
aPnt4 = gp_Pnt(aPntMin.X(), aPntMin.Y(), aPntMax.Z());
}
- if (aThinOnZ)
+ else if (aThinOnZ)
{
aPnt1 = gp_Pnt(aPntMin.X(), aPntMin.Y(), aPntMin.Z());
aPnt2 = gp_Pnt(aPntMax.X(), aPntMin.Y(), aPntMin.Z());
return QVariant();
}
+//=======================================================================
+//function : ToVariant
+//purpose :
+//=======================================================================
+QVariant VInspector_Tools::ToVariant (const Graphic3d_Mat4d& theMatrix)
+{
+ TCollection_AsciiString aValues;
+ for (int aRowId = 1; aRowId <= theMatrix.Rows(); aRowId++)
+ {
+ for (int aColId = 1; aColId <= theMatrix.Cols(); aColId++)
+ {
+ aValues += TCollection_AsciiString (theMatrix.GetValue (aRowId, aColId));
+ if (aColId != theMatrix.Rows())
+ aValues += ",";
+ }
+ if (aRowId != theMatrix.Rows())
+ aValues += " ";
+ }
+
+ return aValues.ToCString();
+}
+
+//=======================================================================
+//function : ToVariant
+//purpose :
+//=======================================================================
+QVariant VInspector_Tools::ToVariant (const Graphic3d_Mat4& theMatrix)
+{
+ TCollection_AsciiString aValues;
+ for (int aRowId = 1; aRowId <= theMatrix.Rows(); aRowId++)
+ {
+ for (int aColId = 1; aColId <= theMatrix.Cols(); aColId++)
+ {
+ aValues += TCollection_AsciiString (theMatrix.GetValue (aRowId, aColId));
+ if (aColId != theMatrix.Rows())
+ aValues += ",";
+ }
+ if (aRowId != theMatrix.Rows())
+ aValues += " ";
+ }
+
+ return aValues.ToCString();
+}
+
//=======================================================================
//function : ToString
//purpose :
#include <AIS_InteractiveContext.hxx>
#include <Bnd_Box.hxx>
#include <Graphic3d_Buffer.hxx>
+#include <Graphic3d_Mat4.hxx>
+#include <Graphic3d_Mat4d.hxx>
#include <Select3D_BndBox3d.hxx>
#include <SelectMgr_EntityOwner.hxx>
#include <Standard.hxx>
//! \return string presentation
Standard_EXPORT static QVariant ToVariant (const Handle(Graphic3d_BoundBuffer)& theBoundBuffer);
+ //! Convert matrix values into a text presentation
+ //! \param theMatrix a matrix of elements
+ //! \return string presentation
+ Standard_EXPORT static QVariant ToVariant (const Graphic3d_Mat4d& theMatrix);
+
+ //! Convert matrix values into a text presentation
+ //! \param theMatrix a matrix of elements
+ //! \return string presentation
+ Standard_EXPORT static QVariant ToVariant (const Graphic3d_Mat4& theMatrix);
+
Standard_EXPORT static QString ToString (const Graphic3d_Attribute& theAttribute);
};
if (!aVItem)
continue;
- Handle(AIS_InteractiveObject) anIO;
- while (aVItem && anIO.IsNull())
+ while (aVItem)
{
- VInspector_ItemPresentableObjectPtr aPrsObjectItem = itemDynamicCast<VInspector_ItemPresentableObject>(aVItem);
- if (aPrsObjectItem)
- {
- anIO = aPrsObjectItem->GetInteractiveObject();
- }
+ Handle(Graphic3d_TransformPers) aPers = aVItem->TransformPersistence();
+ if (!aPers.IsNull())
+ return aPers;
+
aVItem = itemDynamicCast<VInspector_ItemBase>(aVItem->Parent());
}
- if (!anIO.IsNull() && !anIO->TransformPersistence().IsNull())
- return anIO->TransformPersistence();
}
return Handle(Graphic3d_TransformPers)();
}