1 // Created on: 1993-03-09
3 // Copyright (c) 1993-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #ifndef _Geom_Axis2Placement_HeaderFile
18 #define _Geom_Axis2Placement_HeaderFile
20 #include <Standard.hxx>
21 #include <Standard_Type.hxx>
24 #include <Geom_AxisPlacement.hxx>
25 class Standard_ConstructionError;
33 class Geom_Axis2Placement;
34 DEFINE_STANDARD_HANDLE(Geom_Axis2Placement, Geom_AxisPlacement)
36 //! Describes a right-handed coordinate system in 3D space.
37 //! A coordinate system is defined by:
38 //! - its origin, also termed the "Location point" of the coordinate system,
39 //! - three orthogonal unit vectors, termed respectively
40 //! the "X Direction", "Y Direction" and "Direction" (or
41 //! "main Direction") of the coordinate system.
42 //! As a Geom_Axis2Placement coordinate system is
43 //! right-handed, its "Direction" is always equal to the
44 //! cross product of its "X Direction" and "Y Direction".
45 //! The "Direction" of a coordinate system is called the
46 //! "main Direction" because when this unit vector is
47 //! modified, the "X Direction" and "Y Direction" are
48 //! recomputed, whereas when the "X Direction" or "Y
49 //! Direction" is changed, the "main Direction" is
50 //! retained. The "main Direction" is also the "Z Direction".
51 //! Note: Geom_Axis2Placement coordinate systems
52 //! provide the same kind of "geometric" services as
53 //! gp_Ax2 coordinate systems but have more complex
54 //! data structures. The geometric objects provided by
55 //! the Geom package use gp_Ax2 objects to include
56 //! coordinate systems in their data structures, or to
57 //! define the geometric transformations, which are applied to them.
58 //! Geom_Axis2Placement coordinate systems are
59 //! used in a context where they can be shared by
60 //! several objects contained inside a common data structure.
61 class Geom_Axis2Placement : public Geom_AxisPlacement
67 //! Returns a transient copy of A2.
68 Standard_EXPORT Geom_Axis2Placement(const gp_Ax2& A2);
71 //! P is the origin of the axis placement, N is the main
72 //! direction of the axis placement and Vx is the "XDirection".
73 //! If the two directions N and Vx are not orthogonal the
74 //! "XDirection" is computed as follow :
75 //! XDirection = N ^ (Vx ^ N).
76 //! Raised if N and Vx are parallel.
77 Standard_EXPORT Geom_Axis2Placement(const gp_Pnt& P, const gp_Dir& N, const gp_Dir& Vx);
79 //! Assigns the origin and the three unit vectors of A2 to
80 //! this coordinate system.
81 Standard_EXPORT void SetAx2 (const gp_Ax2& A2);
84 //! Changes the main direction of the axis placement.
85 //! The "Xdirection" is modified :
86 //! New XDirection = V ^ (Previous_Xdirection ^ V).
88 //! Raised if V and the previous "XDirection" are parallel
89 //! because it is impossible to calculate the new "XDirection"
90 //! and the new "YDirection".
91 Standard_EXPORT void SetDirection (const gp_Dir& V) Standard_OVERRIDE;
94 //! Changes the "XDirection" of the axis placement, Vx is the
95 //! new "XDirection". If Vx is not normal to the main direction
96 //! then "XDirection" is computed as follow :
97 //! XDirection = Direction ^ ( Vx ^ Direction).
98 //! The main direction is not modified.
99 //! Raised if Vx and "Direction" are parallel.
100 Standard_EXPORT void SetXDirection (const gp_Dir& Vx);
103 //! Changes the "YDirection" of the axis placement, Vy is the
104 //! new "YDirection". If Vy is not normal to the main direction
105 //! then "YDirection" is computed as follow :
106 //! YDirection = Direction ^ ( Vy ^ Direction).
107 //! The main direction is not modified. The "XDirection" is
109 //! Raised if Vy and the main direction are parallel.
110 Standard_EXPORT void SetYDirection (const gp_Dir& Vy);
112 //! Returns a non transient copy of <me>.
113 Standard_EXPORT gp_Ax2 Ax2() const;
115 //! Returns the "XDirection". This is a unit vector.
116 Standard_EXPORT const gp_Dir& XDirection() const;
118 //! Returns the "YDirection". This is a unit vector.
119 Standard_EXPORT const gp_Dir& YDirection() const;
122 //! Transforms an axis placement with a Trsf.
123 //! The "Location" point, the "XDirection" and the
124 //! "YDirection" are transformed with T. The resulting
125 //! main "Direction" of <me> is the cross product between
126 //! the "XDirection" and the "YDirection" after transformation.
127 Standard_EXPORT void Transform (const gp_Trsf& T) Standard_OVERRIDE;
129 //! Creates a new object which is a copy of this coordinate system.
130 Standard_EXPORT Handle(Geom_Geometry) Copy() const Standard_OVERRIDE;
135 DEFINE_STANDARD_RTTIEXT(Geom_Axis2Placement,Geom_AxisPlacement)
145 Standard_EXPORT Geom_Axis2Placement(const gp_Pnt& P, const gp_Dir& Vz, const gp_Dir& Vx, const gp_Dir& Vy);
159 #endif // _Geom_Axis2Placement_HeaderFile