Branch data Line data Source code
1 : : //-------------------------------------------------------------------------
2 : : // Filename : RefVolume.hpp
3 : : //
4 : : // Purpose : This file contains the declarations of the class
5 : : // RefVolume.
6 : : //
7 : : // Special Notes :
8 : : //
9 : : // Creator : Malcolm J. Panthaki
10 : : //
11 : : // Creation Date : 07/11/96
12 : : //
13 : : // Owner : Malcolm J. Panthaki
14 : : //-------------------------------------------------------------------------
15 : :
16 : : #ifndef REFVOLUME_HPP
17 : : #define REFVOLUME_HPP
18 : :
19 : : // ********** BEGIN STANDARD INCLUDES **********
20 : : // ********** END STANDARD INCLUDES **********
21 : :
22 : : // ********** BEGIN MOTIF INCLUDES **********
23 : : // ********** END MOTIF INCLUDES **********
24 : :
25 : : // ********** BEGIN OPEN INVENTOR INCLUDES **********
26 : : // ********** END OPEN INVENTOR INCLUDES **********
27 : :
28 : : // ********** BEGIN CUBIT INCLUDES **********
29 : :
30 : : #include "CastTo.hpp"
31 : : #include "BasicTopologyEntity.hpp"
32 : : #include "Lump.hpp"
33 : : // lists
34 : : #include "DLIList.hpp"
35 : : // ********** END CUBIT INCLUDES **********
36 : :
37 : : // ********** BEGIN MACRO DEFINITIONS **********
38 : : // ********** END MACRO DEFINITIONS **********
39 : :
40 : : // ********** BEGIN ENUM DECLARATIONS **********
41 : : // ********** END ENUM DECLARATIONS **********
42 : :
43 : : // ********** BEGIN FORWARD DECLARATIONS **********
44 : :
45 : : // ********** END FORWARD DECLARATIONS **********
46 : :
47 : : //! RefVolume class.
48 : : class CUBIT_GEOM_EXPORT RefVolume : public BasicTopologyEntity
49 : : {
50 : : public :
51 : :
52 : : typedef RefFace ChildType;
53 : : typedef Body ParentType;
54 : :
55 : : friend class RefEntityFactory;
56 : : //- the factory is allowed to call the (private) constructors
57 : :
58 : : /* constructors/destructors */
59 : :
60 : : virtual ~RefVolume() ;
61 : : //- The destructor
62 : :
63 : : /* topology */
64 : :
65 : : //! Gets the dag type.
66 : 50994 : DagType dag_type() const { return DagType::ref_volume_type(); }
67 : :
68 : : //! Gets the type info of this RefVolume.
69 : 0 : const std::type_info& entity_type_info() const { return typeid(RefVolume); }
70 : :
71 : : void get_parent_ref_entities(DLIList<RefEntity*>& entity_list);
72 : :
73 : : //! Gets the class name for a volume: "Volume".
74 : 110 : static const char* get_class_name()
75 : : {
76 : 110 : return "Volume";
77 : : }
78 : :
79 : : //! Gets the class name for a volume: "Volume".
80 : 110 : virtual const char* class_name() const
81 : : {
82 : 110 : return get_class_name();
83 : : }
84 : :
85 : : //! Gets the lump pointer.
86 : : Lump* get_lump_ptr() ;
87 : :
88 : : //!R Lump*
89 : : //!R- A pointer to the Lump to which the current
90 : : //!R- volume points.
91 : : //! This function returns a pointer to the Lump
92 : : //! to which the current volume points.
93 : : Lump const* get_lump_ptr() const ;
94 : :
95 : : //! Gets the owning Body of this RefVolume.
96 : : Body* get_body_ptr() ;
97 : :
98 : : //! Return the number of connected components bounding this volume.
99 : : //! Note: this counts the number of ref_edge-connected ref_face
100 : : //! components, which may not be the same as the number of acis shells.
101 : : int num_boundary_components();
102 : :
103 : : //!R CubitBoolean
104 : : //!R-CUBIT_TRUE/CUBIT_FALSE
105 : : //!I RefVolume*
106 : : //!O CubitBoolean
107 : : //!O- If the two RefVolumes are spatially equal within the GEOMETRY_RESABS*
108 : : //! the tolerance_factor, then CUBIT_TRUE will be returned. Otherwise
109 : : //! CUBIT_FALSE is returned.
110 : : //! The comparison is done by checking the bounding boxes of the
111 : : //! RefVolumes.
112 : : CubitBoolean about_spatially_equal ( RefVolume* ref_vol_ptr_2,
113 : : double tolerance_factor);
114 : :
115 : : //! returns the genus of the volume, where
116 : : //! g = 1 - .5(v - e + f - gs), and v,e,f = # vertices, edges, faces,
117 : : //! and gs = summed genus of surfaces
118 : : int genus();
119 : :
120 : : /* geometry */
121 : :
122 : : //! Returns centroid of the RefVolume
123 : : virtual CubitVector center_point();
124 : :
125 : : //! Returns true if all Shells of RefVolume are sheets.
126 : : CubitBoolean is_sheet();
127 : :
128 : : //**********Graphics Related Functions**********//
129 : :
130 : : //! returns dimension of the actual entity.
131 : : virtual int dimension() const;
132 : :
133 : : /* other functions */
134 : :
135 : : virtual CubitString measure_label();
136 : :
137 : : //@{
138 : : //! Get the mass properties from the underlying lump
139 : : CubitStatus mass_properties( CubitVector ¢roid, double &volume );
140 : : CubitStatus mass_properties( CubitVector principal_axes[3],
141 : : CubitVector &principal_moments,
142 : : CubitVector ¢roid,
143 : : double &volume );
144 : : //@}
145 : :
146 : : //! Do a an api entity check.
147 : : int validate();
148 : :
149 : : protected:
150 : :
151 : : RefVolume(Lump* lumpPtr) ;
152 : : //- The constructor with a pointer to a Lump.
153 : :
154 : : private:
155 : :
156 : : void initialize();
157 : : //- Initializes all the member data
158 : :
159 : :
160 : : RefVolume( const RefVolume& );
161 : : void operator=( const RefVolume& );
162 : : };
163 : :
164 : : template <> struct DLIListSorter<RefVolume*>
165 : : {
166 : : bool operator()(RefVolume* a, RefVolume* b) { return a->id() < b->id(); }
167 : : };
168 : :
169 : : #endif
170 : :
|