// This file is generated by WOK (CPPExt). // Please do not edit this file; modify original file instead. // The copyright and license terms as defined for the original file apply to // this header file considered to be the "object code" form of the original source. #ifndef _GProp_GProps_HeaderFile #define _GProp_GProps_HeaderFile #ifndef _Standard_HeaderFile #include #endif #ifndef _Standard_Macro_HeaderFile #include #endif #ifndef _gp_Pnt_HeaderFile #include #endif #ifndef _Standard_Real_HeaderFile #include #endif #ifndef _gp_Mat_HeaderFile #include #endif class Standard_DomainError; class gp_Pnt; class gp_Mat; class gp_Ax1; class GProp_PrincipalProps; //! Implements a general mechanism to compute the global properties of
//! a "compound geometric system" in 3d space by composition of the
//! global properties of "elementary geometric entities" such as
//! (curve, surface, solid, set of points). It is possible to compose
//! the properties of several "compound geometric systems" too.
//!
//! To computes the global properties of a compound geometric
//! system you should :
//! . declare the GProps using a constructor which initializes the
//! GProps and defines the location point used to compute the inertia
//! . compose the global properties of your geometric components with
//! the properties of your system using the method Add.
//!
//! To compute the global properties of the geometric components of
//! the system you should use the services of the following classes :
//! - class PGProps for a set of points,
//! - class CGProps for a curve,
//! - class SGProps for a surface,
//! - class VGProps for a "solid".
//! The classes CGProps, SGProps, VGProps are generic classes and
//! must be instantiated for your application.
//!
//!
//! The global properties computed are :
//! - the dimension (length, area or volume)
//! - the mass,
//! - the centre of mass,
//! - the moments of inertia (static moments and quadratic moments),
//! - the moment about an axis,
//! - the radius of gyration about an axis,
//! - the principal properties of inertia :
//! (sea also class PrincipalProps)
//! . the principal moments,
//! . the principal axis of inertia,
//! . the principal radius of gyration,
class GProp_GProps { public: void* operator new(size_t,void* anAddress) { return anAddress; } void* operator new(size_t size) { return Standard::Allocate(size); } void operator delete(void *anAddress) { if (anAddress) Standard::Free((Standard_Address&)anAddress); } //! The origin (0, 0, 0) of the absolute cartesian coordinate system
//! is used to compute the global properties.
Standard_EXPORT GProp_GProps(); //! The point SystemLocation is used to compute the gobal properties
//! of the system. For more accuracy it is better to define this
//! point closed to the location of the system. For example it could
//! be a point around the centre of mass of the system.
//! This point is referred to as the reference point for
//! this framework. For greater accuracy it is better for
//! the reference point to be close to the location of the
//! system. It can, for example, be a point near the
//! center of mass of the system.
//! At initialization, the framework is empty; i.e. it
//! retains no dimensional information such as mass, or
//! inertia. However, it is now able to bring together
//! global properties of various other systems, whose
//! global properties have already been computed
//! using another framework. To do this, use the
//! function Add to define the components of the
//! system. Use it once per component of the system,
//! and then use the interrogation functions available to
//! access the computed values.
Standard_EXPORT GProp_GProps(const gp_Pnt& SystemLocation); //! Either
//! - initializes the global properties retained by this
//! framework from those retained by the framework Item, or
//! - brings together the global properties still retained by
//! this framework with those retained by the framework Item.
//! The value Density, which is 1.0 by default, is used as
//! the density of the system analysed by Item.
//! Sometimes the density will have already been given at
//! the time of construction of the framework Item. This
//! may be the case for example, if Item is a
//! GProp_PGProps framework built to compute the
//! global properties of a set of points ; or another
//! GProp_GProps object which already retains
//! composite global properties. In these cases the real
//! density was perhaps already taken into account at the
//! time of construction of Item. Note that this is not
//! checked: if the density of parts of the system is taken
//! into account two or more times, results of the
//! computation will be false.
//! Notes :
//! - The point relative to which the inertia of Item is
//! computed (i.e. the reference point of Item) may be
//! different from the reference point in this
//! framework. Huygens' theorem is applied
//! automatically to transfer inertia values to the
//! reference point in this framework.
//! - The function Add is used once per component of
//! the system. After that, you use the interrogation
//! functions available to access values computed for the system.
//! - The system whose global properties are already
//! brought together by this framework is referred to
//! as the current system. However, the current system
//! is not retained by this framework, which maintains
//! only its global properties.
//! Exceptions
//! Standard_DomainError if Density is less than or
//! equal to gp::Resolution().
Standard_EXPORT void Add(const GProp_GProps& Item,const Standard_Real Density = 1.0) ; //! Returns the mass of the current system.
//! If no density is attached to the components of the
//! current system the returned value corresponds to :
//! - the total length of the edges of the current
//! system if this framework retains only linear
//! properties, as is the case for example, when
//! using only the LinearProperties function to
//! combine properties of lines from shapes, or
//! - the total area of the faces of the current system if
//! this framework retains only surface properties,
//! as is the case for example, when using only the
//! SurfaceProperties function to combine
//! properties of surfaces from shapes, or
//! - the total volume of the solids of the current
//! system if this framework retains only volume
//! properties, as is the case for example, when
//! using only the VolumeProperties function to
//! combine properties of volumes from solids.
//! Warning
//! A length, an area, or a volume is computed in the
//! current data unit system. The mass of a single
//! object is obtained by multiplying its length, its area
//! or its volume by the given density. You must be
//! consistent with respect to the units used.
Standard_EXPORT Standard_Real Mass() const; //! Returns the center of mass of the current system. If
//! the gravitational field is uniform, it is the center of gravity.
//! The coordinates returned for the center of mass are
//! expressed in the absolute Cartesian coordinate system.
Standard_EXPORT gp_Pnt CentreOfMass() const; //! returns the matrix of inertia. It is a symmetrical matrix.
//! The coefficients of the matrix are the quadratic moments of
//! inertia.
//!
//! | Ixx Ixy Ixz |
//! matrix = | Ixy Iyy Iyz |
//! | Ixz Iyz Izz |
//!
//! The moments of inertia are denoted by Ixx, Iyy, Izz.
//! The products of inertia are denoted by Ixy, Ixz, Iyz.
//! The matrix of inertia is returned in the central coordinate
//! system (G, Gx, Gy, Gz) where G is the centre of mass of the
//! system and Gx, Gy, Gz the directions parallel to the X(1,0,0)
//! Y(0,1,0) Z(0,0,1) directions of the absolute cartesian
//! coordinate system. It is possible to compute the matrix of
//! inertia at another location point using the Huyghens theorem
//! (you can use the method of package GProp : HOperator).
Standard_EXPORT gp_Mat MatrixOfInertia() const; //! Returns Ix, Iy, Iz, the static moments of inertia of the
//! current system; i.e. the moments of inertia about the
//! three axes of the Cartesian coordinate system.
Standard_EXPORT void StaticMoments(Standard_Real& Ix,Standard_Real& Iy,Standard_Real& Iz) const; //! computes the moment of inertia of the material system about the
//! axis A.
Standard_EXPORT Standard_Real MomentOfInertia(const gp_Ax1& A) const; //! Computes the principal properties of inertia of the current system.
//! There is always a set of axes for which the products
//! of inertia of a geometric system are equal to 0; i.e. the
//! matrix of inertia of the system is diagonal. These axes
//! are the principal axes of inertia. Their origin is
//! coincident with the center of mass of the system. The
//! associated moments are called the principal moments of inertia.
//! This function computes the eigen values and the
//! eigen vectors of the matrix of inertia of the system.
//! Results are stored by using a presentation framework
//! of principal properties of inertia
//! (GProp_PrincipalProps object) which may be
//! queried to access the value sought.
Standard_EXPORT GProp_PrincipalProps PrincipalProperties() const; //! Returns the radius of gyration of the current system about the axis A.
Standard_EXPORT Standard_Real RadiusOfGyration(const gp_Ax1& A) const; protected: gp_Pnt g; gp_Pnt loc; Standard_Real dim; gp_Mat inertia; private: }; // other Inline functions and methods (like "C++: function call" methods) #endif