V3d_View::Remove() - erase trihedron and grid structures from structure manager.
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-// Modified 23/02/98 : FMN ; Remplacement PI par Standard_PI
-
#include <Aspect_CircularGrid.hxx>
-#include <Aspect_Grid.hxx>
+
#include <Standard_NegativeValue.hxx>
#include <Standard_NullValue.hxx>
#include <Standard_NumericError.hxx>
-#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Aspect_CircularGrid,Aspect_Grid)
class Standard_NullValue;
class Standard_NumericError;
-class Aspect_CircularGrid;
-DEFINE_STANDARD_HANDLE(Aspect_CircularGrid, Aspect_Grid)
-
class Aspect_CircularGrid : public Aspect_Grid
{
-
+ DEFINE_STANDARD_RTTIEXT(Aspect_CircularGrid, Aspect_Grid)
public:
//! creates a new grid. By default this grid is not
Standard_EXPORT void SetGridValues (const Standard_Real XOrigin, const Standard_Real YOrigin, const Standard_Real RadiusStep, const Standard_Integer DivisionNumber, const Standard_Real RotationAngle);
//! returns the point of the grid the closest to the point X,Y
- Standard_EXPORT void Compute (const Standard_Real X, const Standard_Real Y, Standard_Real& gridX, Standard_Real& gridY) const Standard_OVERRIDE;
+ Standard_EXPORT virtual void Compute (const Standard_Real X, const Standard_Real Y, Standard_Real& gridX, Standard_Real& gridY) const Standard_OVERRIDE;
//! returns the x step of the grid.
Standard_EXPORT Standard_Real RadiusStep() const;
//! returns the x step of the grid.
Standard_EXPORT Standard_Integer DivisionNumber() const;
- Standard_EXPORT void Init() Standard_OVERRIDE;
-
- DEFINE_STANDARD_RTTIEXT(Aspect_CircularGrid,Aspect_Grid)
+ Standard_EXPORT virtual void Init() Standard_OVERRIDE;
private:
};
+DEFINE_STANDARD_HANDLE(Aspect_CircularGrid, Aspect_Grid)
+
#endif // _Aspect_CircularGrid_HeaderFile
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-
#include <Aspect_Grid.hxx>
-#include <Quantity_Color.hxx>
-#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Aspect_Grid,Standard_Transient)
-Aspect_Grid::Aspect_Grid(
- const Standard_Real anXOrigin,
- const Standard_Real anYOrigin,
- const Standard_Real anAngle,
- const Quantity_Color& aColor,
- const Quantity_Color& aTenthColor)
-: myRotationAngle(anAngle),
- myXOrigin(anXOrigin),
- myYOrigin(anYOrigin),
- myColor(aColor),
- myTenthColor(aTenthColor),
- myIsActive(Standard_False),
- myDrawMode(Aspect_GDM_Lines)
+Aspect_Grid::Aspect_Grid (const Standard_Real theXOrigin,
+ const Standard_Real theYOrigin,
+ const Standard_Real theAngle,
+ const Quantity_Color& theColor,
+ const Quantity_Color& theTenthColor)
+: myRotationAngle (theAngle),
+ myXOrigin (theXOrigin),
+ myYOrigin (theYOrigin),
+ myColor (theColor),
+ myTenthColor (theTenthColor),
+ myIsActive (Standard_False),
+ myDrawMode (Aspect_GDM_Lines)
{
+ //
}
-
-void Aspect_Grid::SetXOrigin(const Standard_Real anOrigin) {
- myXOrigin = anOrigin;
+void Aspect_Grid::SetXOrigin (const Standard_Real theOrigin)
+{
+ myXOrigin = theOrigin;
Init();
UpdateDisplay();
}
-void Aspect_Grid::SetYOrigin(const Standard_Real anOrigin) {
- myYOrigin = anOrigin;
+void Aspect_Grid::SetYOrigin (const Standard_Real theOrigin)
+{
+ myYOrigin = theOrigin;
Init();
UpdateDisplay();
}
-void Aspect_Grid::SetRotationAngle(const Standard_Real anAngle){
-
-
- myRotationAngle = anAngle;
+void Aspect_Grid::SetRotationAngle (const Standard_Real theAngle)
+{
+ myRotationAngle = theAngle;
Init();
UpdateDisplay();
}
-void Aspect_Grid::Rotate(const Standard_Real anAngle) {
- myRotationAngle += anAngle;
+
+void Aspect_Grid::Rotate (const Standard_Real theAngle)
+{
+ myRotationAngle += theAngle;
Init();
UpdateDisplay();
}
-void Aspect_Grid::Translate(const Standard_Real aDx,
- const Standard_Real aDy) {
- myXOrigin += aDx;
- myYOrigin += aDy;
+
+void Aspect_Grid::Translate (const Standard_Real theDx,
+ const Standard_Real theDy)
+{
+ myXOrigin += theDx;
+ myYOrigin += theDy;
Init();
UpdateDisplay();
}
-void Aspect_Grid::SetColors(const Quantity_Color& aColor,
- const Quantity_Color& aTenthColor) {
- myColor = aColor;
- myTenthColor = aTenthColor;
+void Aspect_Grid::SetColors (const Quantity_Color& theColor,
+ const Quantity_Color& theTenthColor)
+{
+ myColor = theColor;
+ myTenthColor = theTenthColor;
UpdateDisplay();
}
-void Aspect_Grid::Colors(Quantity_Color& aColor,
- Quantity_Color& aTenthColor) const {
- aColor = myColor;
- aTenthColor = myTenthColor;
+void Aspect_Grid::Colors (Quantity_Color& theColor,
+ Quantity_Color& theTenthColor) const
+{
+ theColor = myColor;
+ theTenthColor = myTenthColor;
}
-void Aspect_Grid::Hit(const Standard_Real X,
- const Standard_Real Y,
- Standard_Real& gridX,
- Standard_Real& gridY) const {
- if (myIsActive) {
- Compute(X,Y,gridX,gridY);}
- else{
- gridX = X;
- gridY = Y;
+void Aspect_Grid::Hit (const Standard_Real theX,
+ const Standard_Real theY,
+ Standard_Real& theGridX,
+ Standard_Real& theGridY) const
+{
+ if (myIsActive)
+ {
+ Compute (theX, theY, theGridX, theGridY);
+ }
+ else
+ {
+ theGridX = theX;
+ theGridY = theY;
}
- }
-void Aspect_Grid::Activate () {
- myIsActive = Standard_True;
-}
-
-void Aspect_Grid::Deactivate () {
- myIsActive = Standard_False;
-}
-
-Standard_Real Aspect_Grid::XOrigin() const {
- return myXOrigin;
-}
-
-Standard_Real Aspect_Grid::YOrigin() const {
- return myYOrigin;
-}
-
-Standard_Real Aspect_Grid::RotationAngle() const {
- return myRotationAngle;
-}
-
-Standard_Boolean Aspect_Grid::IsActive() const {
- return myIsActive;
}
-void Aspect_Grid::Display() {}
-
-void Aspect_Grid::Erase () const {}
-
-void Aspect_Grid::UpdateDisplay () {}
-
-Standard_Boolean Aspect_Grid::IsDisplayed() const {
- return Standard_False;}
-
-void Aspect_Grid::SetDrawMode(const Aspect_GridDrawMode aDrawMode) {
- myDrawMode = aDrawMode;
+void Aspect_Grid::SetDrawMode (const Aspect_GridDrawMode theDrawMode)
+{
+ myDrawMode = theDrawMode;
UpdateDisplay();
}
-Aspect_GridDrawMode Aspect_Grid::DrawMode() const {
- return myDrawMode;
-}
#include <Aspect_GridDrawMode.hxx>
#include <Standard_Transient.hxx>
-class Aspect_Grid;
-DEFINE_STANDARD_HANDLE(Aspect_Grid, Standard_Transient)
-
class Aspect_Grid : public Standard_Transient
{
-
+ DEFINE_STANDARD_RTTIEXT(Aspect_Grid, Standard_Transient)
public:
//! defines the x Origin of the grid.
//! defines the y Origin of the grid.
Standard_EXPORT void SetYOrigin (const Standard_Real anOrigin);
- //! defines the orientation of the the grid.
+ //! defines the orientation of the grid.
Standard_EXPORT void SetRotationAngle (const Standard_Real anAngle);
//! Rotate the grid from a relative angle.
//! activates the grid. The Hit method will return
//! gridx and gridx computed according to the steps
//! of the grid.
- Standard_EXPORT void Activate();
+ void Activate() { myIsActive = Standard_True; }
//! deactivates the grid. The hit method will return
//! gridx and gridx as the enter value X & Y.
- Standard_EXPORT void Deactivate();
+ void Deactivate() { myIsActive = Standard_False; }
//! returns the x Origin of the grid.
- Standard_EXPORT Standard_Real XOrigin() const;
+ Standard_Real XOrigin() const { return myXOrigin; }
//! returns the x Origin of the grid.
- Standard_EXPORT Standard_Real YOrigin() const;
+ Standard_Real YOrigin() const { return myYOrigin; }
//! returns the x Angle of the grid.
- Standard_EXPORT Standard_Real RotationAngle() const;
+ Standard_Real RotationAngle() const { return myRotationAngle; }
//! Returns TRUE when the grid is active.
- Standard_EXPORT Standard_Boolean IsActive() const;
+ Standard_Boolean IsActive() const { return myIsActive; }
//! Returns the colors of the grid.
Standard_EXPORT void Colors (Quantity_Color& aColor, Quantity_Color& aTenthColor) const;
Standard_EXPORT void SetDrawMode (const Aspect_GridDrawMode aDrawMode);
//! Returns the grid aspect.
- Standard_EXPORT Aspect_GridDrawMode DrawMode() const;
-
+ Aspect_GridDrawMode DrawMode() const { return myDrawMode; }
+
//! Display the grid at screen.
- Standard_EXPORT virtual void Display();
+ Standard_EXPORT virtual void Display() = 0;
//! Erase the grid from screen.
- Standard_EXPORT virtual void Erase() const;
+ Standard_EXPORT virtual void Erase() const = 0;
//! Returns TRUE when the grid is displayed at screen.
- Standard_EXPORT virtual Standard_Boolean IsDisplayed() const;
+ Standard_EXPORT virtual Standard_Boolean IsDisplayed() const = 0;
Standard_EXPORT virtual void Init() = 0;
- DEFINE_STANDARD_RTTIEXT(Aspect_Grid,Standard_Transient)
-
protected:
- //! creates a new grid. By default this grid is not
- //! active.
- Standard_EXPORT Aspect_Grid(const Standard_Real anXOrigin = 0.0, const Standard_Real anYOrigin = 0.0, const Standard_Real aRotationAngle = 0, const Quantity_Color& aColor = Quantity_NOC_GRAY50, const Quantity_Color& aTenthColor = Quantity_NOC_GRAY70);
+ //! Creates a new grid. By default this grid is not active.
+ Standard_EXPORT Aspect_Grid (const Standard_Real theXOrigin = 0.0,
+ const Standard_Real theYOrigin = 0.0,
+ const Standard_Real theRotationAngle = 0,
+ const Quantity_Color& theColor = Quantity_NOC_GRAY50,
+ const Quantity_Color& theTenthColor = Quantity_NOC_GRAY70);
//! Updates the grid parameters.
- Standard_EXPORT virtual void UpdateDisplay();
+ Standard_EXPORT virtual void UpdateDisplay() = 0;
+
+protected:
Standard_Real myRotationAngle;
Standard_Real myXOrigin;
Standard_Real myYOrigin;
Quantity_Color myColor;
Quantity_Color myTenthColor;
-
-private:
-
Standard_Boolean myIsActive;
Aspect_GridDrawMode myDrawMode;
};
+DEFINE_STANDARD_HANDLE(Aspect_Grid, Standard_Transient)
+
#endif // _Aspect_Grid_HeaderFile
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-// Modified 23/02/98 : FMN ; Remplacement PI par Standard_PI
-
#include <Aspect_RectangularGrid.hxx>
+
#include <Standard_NegativeValue.hxx>
#include <Standard_NullValue.hxx>
#include <Standard_NumericError.hxx>
-#include <Standard_Type.hxx>
IMPLEMENT_STANDARD_RTTIEXT(Aspect_RectangularGrid,Aspect_Grid)
const Standard_Real beta) const {
return (Abs( Sin(alpha) * Cos(beta + M_PI / 2.) - Cos(alpha) * Sin(beta + M_PI / 2.)) != 0) ;
}
-
-
class Standard_NullValue;
class Standard_NumericError;
-class Aspect_RectangularGrid;
-DEFINE_STANDARD_HANDLE(Aspect_RectangularGrid, Aspect_Grid)
-
class Aspect_RectangularGrid : public Aspect_Grid
{
-
+ DEFINE_STANDARD_RTTIEXT(Aspect_RectangularGrid, Aspect_Grid)
public:
-
//! creates a new grid. By default this grid is not
//! active.
//! The first angle is given relatively to the horizontal.
Standard_EXPORT void SetGridValues (const Standard_Real XOrigin, const Standard_Real YOrigin, const Standard_Real XStep, const Standard_Real YStep, const Standard_Real RotationAngle);
//! returns the point of the grid the closest to the point X,Y
- Standard_EXPORT void Compute (const Standard_Real X, const Standard_Real Y, Standard_Real& gridX, Standard_Real& gridY) const Standard_OVERRIDE;
+ Standard_EXPORT virtual void Compute (const Standard_Real X, const Standard_Real Y, Standard_Real& gridX, Standard_Real& gridY) const Standard_OVERRIDE;
//! returns the x step of the grid.
Standard_EXPORT Standard_Real XStep() const;
//! returns the y Angle of the grid, relatively to the vertical.
Standard_EXPORT Standard_Real SecondAngle() const;
- Standard_EXPORT void Init() Standard_OVERRIDE;
-
- DEFINE_STANDARD_RTTIEXT(Aspect_RectangularGrid,Aspect_Grid)
+ Standard_EXPORT virtual void Init() Standard_OVERRIDE;
private:
Standard_EXPORT Standard_Boolean CheckAngle (const Standard_Real alpha, const Standard_Real beta) const;
+private:
+
Standard_Real myXStep;
Standard_Real myYStep;
Standard_Real myFirstAngle;
};
+DEFINE_STANDARD_HANDLE(Aspect_RectangularGrid, Aspect_Grid)
+
#endif // _Aspect_RectangularGrid_HeaderFile
* Constant
*/
#define DIVISION 8
-#define MYMINMAX 25.
#define MYFACTOR 50.
/*----------------------------------------------------------------------*/
SetRadiusStep (step);
}
+V3d_CircularGrid::~V3d_CircularGrid()
+{
+ myGroup.Nullify();
+ if (!myStructure.IsNull())
+ {
+ myStructure->Erase();
+ }
+}
+
void V3d_CircularGrid::SetColors (const Quantity_Color& aColor, const Quantity_Color& aTenthColor)
{
if( myColor != aColor || myTenthColor != aTenthColor ) {
myCurViewPlane = ThePlane;
}
- switch (DrawMode())
+ switch (myDrawMode)
{
- default:
- //case Aspect_GDM_Points:
+ case Aspect_GDM_Points:
DefinePoints ();
myCurDrawMode = Aspect_GDM_Points;
break;
DefineLines ();
myCurDrawMode = Aspect_GDM_Lines;
break;
-#ifdef IMP210100
case Aspect_GDM_None:
myCurDrawMode = Aspect_GDM_None;
break;
-#endif
}
myCurAreDefined = Standard_True;
}
#include <Aspect_CircularGrid.hxx>
class Graphic3d_Structure;
class Graphic3d_Group;
-class Quantity_Color;
-
-
-class V3d_CircularGrid;
-DEFINE_STANDARD_HANDLE(V3d_CircularGrid, Aspect_CircularGrid)
-
class V3d_CircularGrid : public Aspect_CircularGrid
{
-
+ DEFINE_STANDARD_RTTIEXT(V3d_CircularGrid, Aspect_CircularGrid)
public:
-
Standard_EXPORT V3d_CircularGrid(const V3d_ViewerPointer& aViewer, const Quantity_Color& aColor, const Quantity_Color& aTenthColor);
-
+
+ Standard_EXPORT virtual ~V3d_CircularGrid();
+
Standard_EXPORT void SetColors (const Quantity_Color& aColor, const Quantity_Color& aTenthColor) Standard_OVERRIDE;
Standard_EXPORT void Display() Standard_OVERRIDE;
Standard_EXPORT void SetGraphicValues (const Standard_Real Radius, const Standard_Real OffSet);
-
-
-
- DEFINE_STANDARD_RTTIEXT(V3d_CircularGrid,Aspect_CircularGrid)
-
protected:
-
Standard_EXPORT void UpdateDisplay() Standard_OVERRIDE;
-
-
private:
-
Standard_EXPORT void DefineLines();
Standard_EXPORT void DefinePoints();
+private:
+
Handle(Graphic3d_Structure) myStructure;
Handle(Graphic3d_Group) myGroup;
gp_Ax3 myCurViewPlane;
Standard_Real myRadius;
Standard_Real myOffSet;
-
};
-
-
-
-
-
+DEFINE_STANDARD_HANDLE(V3d_CircularGrid, Aspect_CircularGrid)
#endif // _V3d_CircularGrid_HeaderFile
// Alternatively, this file may be used under the terms of Open CASCADE
// commercial license or contractual agreement.
-/***********************************************************************
- FONCTION :
- ----------
- Classe V3d_CircularGrid :
- HISTORIQUE DES MODIFICATIONS :
- --------------------------------
- 16-08-98 : CAL ; S3892. Ajout grilles 3d.
- 13-10-98 : CAL ; S3892. Ajout de la gestion de la taille des grilles 3d.
- 23-10-98 : CAL ; PRO 15885. Patch K4403 et K4404
- 03-11-98 : CAL ; PRO 16161. Patch K4418 et K4419
-************************************************************************/
-/*----------------------------------------------------------------------*/
-/*
- * Includes
- */
+#include <V3d_RectangularGrid.hxx>
#include <Graphic3d_ArrayOfPoints.hxx>
#include <Graphic3d_ArrayOfSegments.hxx>
#include <Standard_Type.hxx>
#include <TColgp_SequenceOfPnt.hxx>
#include <TColStd_Array2OfReal.hxx>
-#include <V3d_RectangularGrid.hxx>
#include <V3d_Viewer.hxx>
IMPLEMENT_STANDARD_RTTIEXT(V3d_RectangularGrid,Aspect_RectangularGrid)
/*
* Constant
*/
-#define MYMINMAX 25.
#define MYFACTOR 50.
/*----------------------------------------------------------------------*/
SetYStep (step);
}
+V3d_RectangularGrid::~V3d_RectangularGrid()
+{
+ myGroup.Nullify();
+ if (!myStructure.IsNull())
+ {
+ myStructure->Erase();
+ }
+}
+
void V3d_RectangularGrid::SetColors (const Quantity_Color& aColor, const Quantity_Color& aTenthColor)
{
if( myColor != aColor || myTenthColor != aTenthColor ) {
myCurViewPlane = ThePlane;
}
- switch (DrawMode ())
+ switch (myDrawMode)
{
- default:
- //case Aspect_GDM_Points:
+ case Aspect_GDM_Points:
DefinePoints ();
myCurDrawMode = Aspect_GDM_Points;
break;
DefineLines ();
myCurDrawMode = Aspect_GDM_Lines;
break;
-#ifdef IMP210100
case Aspect_GDM_None:
myCurDrawMode = Aspect_GDM_None;
break;
-#endif
}
myCurAreDefined = Standard_True;
}
#include <Aspect_RectangularGrid.hxx>
class Graphic3d_Structure;
class Graphic3d_Group;
-class Quantity_Color;
-
-
-class V3d_RectangularGrid;
-DEFINE_STANDARD_HANDLE(V3d_RectangularGrid, Aspect_RectangularGrid)
-
class V3d_RectangularGrid : public Aspect_RectangularGrid
{
-
+ DEFINE_STANDARD_RTTIEXT(V3d_RectangularGrid, Aspect_RectangularGrid)
public:
-
Standard_EXPORT V3d_RectangularGrid(const V3d_ViewerPointer& aViewer, const Quantity_Color& aColor, const Quantity_Color& aTenthColor);
+
+ Standard_EXPORT virtual ~V3d_RectangularGrid();
- Standard_EXPORT void SetColors (const Quantity_Color& aColor, const Quantity_Color& aTenthColor) Standard_OVERRIDE;
+ Standard_EXPORT virtual void SetColors (const Quantity_Color& aColor, const Quantity_Color& aTenthColor) Standard_OVERRIDE;
- Standard_EXPORT void Display() Standard_OVERRIDE;
+ Standard_EXPORT virtual void Display() Standard_OVERRIDE;
- Standard_EXPORT void Erase() const Standard_OVERRIDE;
+ Standard_EXPORT virtual void Erase() const Standard_OVERRIDE;
- Standard_EXPORT Standard_Boolean IsDisplayed() const Standard_OVERRIDE;
+ Standard_EXPORT virtual Standard_Boolean IsDisplayed() const Standard_OVERRIDE;
Standard_EXPORT void GraphicValues (Standard_Real& XSize, Standard_Real& YSize, Standard_Real& OffSet) const;
Standard_EXPORT void SetGraphicValues (const Standard_Real XSize, const Standard_Real YSize, const Standard_Real OffSet);
-
-
-
- DEFINE_STANDARD_RTTIEXT(V3d_RectangularGrid,Aspect_RectangularGrid)
-
protected:
-
- Standard_EXPORT void UpdateDisplay() Standard_OVERRIDE;
-
-
+ Standard_EXPORT virtual void UpdateDisplay() Standard_OVERRIDE;
private:
-
Standard_EXPORT void DefineLines();
Standard_EXPORT void DefinePoints();
+private:
+
Handle(Graphic3d_Structure) myStructure;
Handle(Graphic3d_Group) myGroup;
gp_Ax3 myCurViewPlane;
Standard_Real myYSize;
Standard_Real myOffSet;
-
};
-
-
-
-
-
+DEFINE_STANDARD_HANDLE(V3d_RectangularGrid, Aspect_RectangularGrid)
#endif // _V3d_RectangularGrid_HeaderFile
myTextAspect->SetVerticalJustification (Graphic3d_VTA_BOTTOM);
}
+// ============================================================================
+// function : V3d_Trihedron
+// purpose :
+// ============================================================================
+V3d_Trihedron::~V3d_Trihedron()
+{
+ Erase();
+}
+
// ============================================================================
// function : SetLabelsColor
// purpose :
//! Creates a default trihedron.
Standard_EXPORT V3d_Trihedron();
+ //! Destructor.
+ Standard_EXPORT virtual ~V3d_Trihedron();
+
//! Switch wireframe / shaded trihedron.
void SetWireframe (const Standard_Boolean theAsWireframe) { myIsWireframe = theAsWireframe; }
//=============================================================================
void V3d_View::Remove() const
{
+ if (!MyGrid.IsNull())
+ {
+ MyGrid->Erase();
+ }
+ if (!myTrihedron.IsNull())
+ {
+ myTrihedron->Erase();
+ }
+
MyViewer->DelView (this);
myView->Remove();
Handle(Aspect_Window)& aWin = const_cast<Handle(Aspect_Window)&> (MyWindow);
//function : TrsPoint
//purpose :
//=============================================================================
-Graphic3d_Vertex V3d_View::TrsPoint( const Graphic3d_Vertex &P, const TColStd_Array2OfReal &Matrix )
+gp_XYZ V3d_View::TrsPoint (const Graphic3d_Vertex& thePnt, const TColStd_Array2OfReal& theMat)
{
- Graphic3d_Vertex PP ;
- Standard_Real X,Y,Z,XX,YY,ZZ ;
-
// CAL. S3892
- Standard_Integer lr, ur, lc, uc;
- lr = Matrix.LowerRow ();
- ur = Matrix.UpperRow ();
- lc = Matrix.LowerCol ();
- uc = Matrix.UpperCol ();
- if ((ur - lr + 1 != 4) || (uc - lc + 1 != 4) ) {
- P.Coord(X,Y,Z) ;
- PP.SetCoord(X,Y,Z) ;
- return PP ;
- }
- P.Coord(X,Y,Z) ;
- XX = (Matrix(lr,lc+3) + X*Matrix(lr,lc) + Y*Matrix(lr,lc+1)+
- Z*Matrix(lr,lc+2))/Matrix(lr+3,lc+3) ;
-
- YY = (Matrix(lr+1,lc+3) + X*Matrix(lr+1,lc) + Y*Matrix(lr+1,lc+1) +
- Z*Matrix(lr+1,lc+2))/Matrix(lr+3,lc+3) ;
-
- ZZ = (Matrix(lr+2,lc+3) + X*Matrix(lr+2,lc) + Y*Matrix(lr+2,lc+1) +
- Z*Matrix(lr+2,lc+2))/Matrix(lr+3,lc+3) ;
- PP.SetCoord(XX,YY,ZZ) ;
- return PP ;
+ const Standard_Integer lr = theMat.LowerRow();
+ const Standard_Integer ur = theMat.UpperRow();
+ const Standard_Integer lc = theMat.LowerCol();
+ const Standard_Integer uc = theMat.UpperCol();
+ if ((ur - lr + 1 != 4) || (uc - lc + 1 != 4))
+ {
+ return gp_XYZ (thePnt.X(), thePnt.Y(), thePnt.Z());
+ }
+
+ Standard_Real X, Y, Z;
+ thePnt.Coord (X,Y,Z);
+ const Standard_Real XX = (theMat(lr,lc+3) + X*theMat(lr,lc) + Y*theMat(lr,lc+1) + Z*theMat(lr,lc+2)) / theMat(lr+3,lc+3);
+ const Standard_Real YY = (theMat(lr+1,lc+3) + X*theMat(lr+1,lc) + Y*theMat(lr+1,lc+1) + Z*theMat(lr+1,lc+2))/theMat(lr+3,lc+3);
+ const Standard_Real ZZ = (theMat(lr+2,lc+3) + X*theMat(lr+2,lc) + Y*theMat(lr+2,lc+1) + Z*theMat(lr+2,lc+2))/theMat(lr+3,lc+3);
+ return gp_XYZ (XX, YY, ZZ);
}
//=======================================================================
Standard_EXPORT static Standard_Boolean ScreenAxis (const gp_Dir& Vpn, const gp_Dir& Vup, Graphic3d_Vector& Xaxe, Graphic3d_Vector& Yaxe, Graphic3d_Vector& Zaxe);
//! Transforms the Vertex V according to the matrice Matrix .
- Standard_EXPORT static Graphic3d_Vertex TrsPoint (const Graphic3d_Vertex& V, const TColStd_Array2OfReal& Matrix);
+ Standard_EXPORT static gp_XYZ TrsPoint (const Graphic3d_Vertex& V, const TColStd_Array2OfReal& Matrix);
//! Returns the objects number and the projection window
//! of the objects contained in the view.
//function : Compute
//purpose :
//=============================================================================
-Graphic3d_Vertex V3d_View::Compute (const Graphic3d_Vertex & AVertex) const
+Graphic3d_Vertex V3d_View::Compute (const Graphic3d_Vertex& theVertex) const
{
- Graphic3d_Vertex CurPoint, NewPoint;
- Standard_Real X1, Y1, Z1, X2, Y2, Z2;
- Standard_Real XPp, YPp;
- Handle(Graphic3d_Camera) aCamera = Camera();
+ const Handle(Graphic3d_Camera)& aCamera = Camera();
+ gp_Dir VPN = aCamera->Direction().Reversed(); // RefPlane
+ gp_Dir GPN = MyPlane.Direction();
- gp_Dir aRefPlane = aCamera->Direction().Reversed();
- X1 = aRefPlane.X(); Y1 = aRefPlane.Y(); Z1 = aRefPlane.Z();
- MyPlane.Direction ().Coord (X2, Y2, Z2);
-
- gp_Dir VPN (X1, Y1, Z1);
- gp_Dir GPN (X2, Y2, Z2);
-
- AVertex.Coord (X1, Y1, Z1);
- Project (X1, Y1, Z1, XPp, YPp);
+ Standard_Real XPp = 0.0, YPp = 0.0;
+ Project (theVertex.X(), theVertex.Y(), theVertex.Z(), XPp, YPp);
// Casw when the plane of the grid and the plane of the view
// are perpendicular to MYEPSILON2 close radians
- if (Abs (VPN.Angle (GPN) - M_PI / 2.) < MYEPSILON2) {
- NewPoint.SetCoord (X1, Y1, Z1);
- return NewPoint;
+ if (Abs (VPN.Angle (GPN) - M_PI / 2.) < MYEPSILON2)
+ {
+ return theVertex;
}
- Standard_Boolean IsRectangular =
- MyGrid->IsKind (STANDARD_TYPE (Aspect_RectangularGrid));
-
- Graphic3d_Vertex P1;
-
- Standard_Real x0, y0, z0, x1, y1, z1, x2, y2, z2;
-
- P1.SetCoord (0.0, 0.0, 0.0);
- CurPoint = V3d_View::TrsPoint (P1, MyTrsf);
- CurPoint.Coord (x0, y0, z0);
+ const gp_XYZ aPnt0 = V3d_View::TrsPoint (Graphic3d_Vertex (0.0, 0.0, 0.0), MyTrsf);
// get grid axes in world space
- P1.SetCoord (1.0, 0.0, 0.0);
- CurPoint = V3d_View::TrsPoint (P1, MyTrsf);
- CurPoint.Coord (x1, y1, z1);
- gp_Vec aGridX (gp_Pnt (x0, y0, z0), gp_Pnt (x1, y1, z1));
+ const gp_XYZ aPnt1 = V3d_View::TrsPoint (Graphic3d_Vertex (1.0, 0.0, 0.0), MyTrsf);
+ gp_Vec aGridX (aPnt0, aPnt1);
aGridX.Normalize();
- P1.SetCoord (0.0, 1.0, 0.0);
- CurPoint = V3d_View::TrsPoint (P1, MyTrsf);
- CurPoint.Coord (x2, y2, z2);
- gp_Vec aGridY (gp_Pnt (x0, y0, z0), gp_Pnt (x2, y2, z2));
+ const gp_XYZ aPnt2 = V3d_View::TrsPoint (Graphic3d_Vertex (0.0, 1.0, 0.0), MyTrsf);
+ gp_Vec aGridY (aPnt0, aPnt2);
aGridY.Normalize();
- // get grid normal
- MyPlane.Direction().Coord (x2, y2, z2);
- gp_Vec aPlaneNormal (x2, y2, z2);
-
- gp_Vec aPointOnPlane = gp_Vec (0.0, 0.0, 0.0);
-
- AVertex.Coord (x1, y1, z1);
-
// project ray from camera onto grid plane
- gp_Vec aProjection = aCamera->IsOrthographic()
- ? gp_Vec (aCamera->Direction())
- : gp_Vec (aCamera->Eye(), gp_Pnt (x1, y1, z1)).Normalized();
- gp_Vec aPointOrigin = gp_Vec (gp_Pnt (x1, y1, z1), gp_Pnt (x0, y0, z0));
- Standard_Real aT = aPointOrigin.Dot (aPlaneNormal) / aProjection.Dot (aPlaneNormal);
- aPointOnPlane = gp_Vec (x1, y1, z1) + aProjection * aT;
-
- if (IsRectangular) {
- Standard_Real XS, YS;
- Handle(Aspect_RectangularGrid) theGrid =
- Handle(Aspect_RectangularGrid)::DownCast (MyGrid);
- XS = theGrid->XStep (), YS = theGrid->YStep ();
-
+ const gp_Vec aProjection = aCamera->IsOrthographic()
+ ? gp_Vec (aCamera->Direction())
+ : gp_Vec (aCamera->Eye(), gp_Pnt (theVertex.X(), theVertex.Y(), theVertex.Z())).Normalized();
+ const gp_Vec aPointOrigin = gp_Vec (gp_Pnt (theVertex.X(), theVertex.Y(), theVertex.Z()), aPnt0);
+ const Standard_Real aT = aPointOrigin.Dot (MyPlane.Direction()) / aProjection.Dot (MyPlane.Direction());
+ const gp_XYZ aPointOnPlane = gp_XYZ (theVertex.X(), theVertex.Y(), theVertex.Z()) + aProjection.XYZ() * aT;
+
+ if (Handle(Aspect_RectangularGrid) aRectGrid = Handle(Aspect_RectangularGrid)::DownCast (MyGrid))
+ {
// project point on plane to grid local space
- gp_Vec aToPoint (gp_Pnt (x0, y0, z0),
- gp_Pnt (aPointOnPlane.X(), aPointOnPlane.Y(), aPointOnPlane.Z()));
- Standard_Real anXSteps = Round (aGridX.Dot (aToPoint) / XS);
- Standard_Real anYSteps = Round (aGridY.Dot (aToPoint) / YS);
+ const gp_Vec aToPoint (aPnt0, aPointOnPlane);
+ const Standard_Real anXSteps = Round (aGridX.Dot (aToPoint) / aRectGrid->XStep());
+ const Standard_Real anYSteps = Round (aGridY.Dot (aToPoint) / aRectGrid->YStep());
// clamp point to grid
- gp_Vec aResult = aGridX * anXSteps * XS + aGridY * anYSteps * YS + gp_Vec (x0, y0, z0);
- NewPoint.SetCoord (aResult.X(), aResult.Y(), aResult.Z());
-
+ const gp_Vec aResult = aGridX * anXSteps * aRectGrid->XStep()
+ + aGridY * anYSteps * aRectGrid->YStep()
+ + gp_Vec (aPnt0);
+ return Graphic3d_Vertex (aResult.X(), aResult.Y(), aResult.Z());
}
else // IsCircular
{
- Standard_Real RS;
- Standard_Integer DN;
- Standard_Real Alpha;
- Handle(Aspect_CircularGrid) theGrid =
- Handle(Aspect_CircularGrid)::DownCast (MyGrid);
- RS = theGrid->RadiusStep ();
- DN = theGrid->DivisionNumber ();
- Alpha = M_PI / Standard_Real (DN);
+ Handle(Aspect_CircularGrid) aCircleGrid = Handle(Aspect_CircularGrid)::DownCast (MyGrid);
+ const Standard_Real anAlpha = M_PI / Standard_Real (aCircleGrid->DivisionNumber());
// project point on plane to grid local space
- gp_Vec aToPoint (gp_Pnt (x0, y0, z0),
- gp_Pnt (aPointOnPlane.X(), aPointOnPlane.Y(), aPointOnPlane.Z()));
-
- Standard_Real anR = 0.0, aPhi = 0.0;
+ const gp_Vec aToPoint (aPnt0, aPointOnPlane);
Standard_Real aLocalX = aGridX.Dot (aToPoint);
Standard_Real aLocalY = aGridY.Dot (aToPoint);
+ Standard_Real anR = 0.0, aPhi = 0.0;
toPolarCoords (aLocalX, aLocalY, anR, aPhi);
// clamp point to grid
- Standard_Real anRSteps = Round (anR / RS);
- Standard_Real aPhiSteps = Round (aPhi / Alpha);
- toCartesianCoords (anRSteps * RS, aPhiSteps * Alpha, aLocalX, aLocalY);
+ const Standard_Real anRSteps = Round (anR / aCircleGrid->RadiusStep());
+ const Standard_Real aPhiSteps = Round (aPhi / anAlpha);
+ toCartesianCoords (anRSteps * aCircleGrid->RadiusStep(), aPhiSteps * anAlpha, aLocalX, aLocalY);
- gp_Vec aResult = aGridX * aLocalX + aGridY * aLocalY + gp_Vec (x0, y0, z0);
- NewPoint.SetCoord (aResult.X(), aResult.Y(), aResult.Z());
+ const gp_Vec aResult = aGridX * aLocalX + aGridY * aLocalY + gp_Vec (aPnt0);
+ return Graphic3d_Vertex (aResult.X(), aResult.Y(), aResult.Z());
}
-
- return NewPoint;
}
//=============================================================================