zjf
2023-03-06 392b76515f40376b6d36f40a114850ef63650384
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/////////////////////////////////////////////////////////////////////////////// 
// Copyright (C) 2002-2016, Open Design Alliance (the "Alliance"). 
// All rights reserved. 
// 
// This software and its documentation and related materials are owned by 
// the Alliance. The software may only be incorporated into application 
// programs owned by members of the Alliance, subject to a signed 
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable  
// trade secrets of the Alliance and its suppliers. The software is also 
// protected by copyright law and international treaty provisions. Application  
// programs incorporating this software must include the following statement 
// with their copyright notices:
//   
//   This application incorporates Teigha(R) software pursuant to a license 
//   agreement with Open Design Alliance.
//   Teigha(R) Copyright (C) 2002-2016 by Open Design Alliance. 
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you 
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////
 
 
#ifndef _DbRevolvedSurface_h_Included_
#define _DbRevolvedSurface_h_Included_
 
#include "TD_PackPush.h"
#include "DbSurface.h"
#include "DbRevolveOptions.h"
 
/** \details
  This class implements a three-dimensional revolved surface entity.
  
  \sa
  TD_Db
 
  <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbRevolvedSurface: public OdDbSurface
{
public:
  OdDbRevolvedSurface ();
  ODDB_DECLARE_MEMBERS(OdDbRevolvedSurface);
 
  /** \details
  Creates a revolved surface from a specified curve, region, or planar surface and an axis of revolution.
  
  Axis of revolution is defined with a point (axisPnt) and vector (axisDir).
  pRevEnt will be revolved counter clockwise about the axisDir vector.
  
  If startAngle is equal to 0, rotation starts from current position of pRevEnt.
  
  \param pRevEnt        [in] A pointer to the planar curve, region, or planar surface that is to be revolved.
  \param axisPnt        [in] A point of the revolution axis.
  \param axisDir        [in] A revolution axis' direction represented with an OdGeVector object.
  \param revAngle       [in] An angle of rotation (radians).
  \param startAngle     [in] A start angle of rotation (radians).
  \param revolveOptions [in] Revolving options.
  \param pSat           [in] A pointer to an output stream buffer.
  
  \returns  Returns eOk if surface was successfully created. 
  If specified data is not valid, returns eInvalidInput.
  */
  virtual OdResult createRevolvedSurface ( OdDbEntity* pRevEnt,
    const OdGePoint3d& axisPnt, const OdGeVector3d& axisDir,
    double revAngle, double startAngle,
    OdDbRevolveOptions& revolveOptions, const OdStreamBuf *pSat = 0 );
 
  /** \details
  Returns a pointer to the entity that is to be revolved.
  Revolved entity can be a planar curve, region, or planar surface.
  */
  OdDbEntity*   getRevolveEntity () const;
 
  /** \details
  Returns a point on the revolution axis.
  The returned point and the axis direction define the axis of revolution. 
  */
  OdGePoint3d getAxisPnt () const;
  
  /** \details
  Sets the axis point. 
 
  \param pnt [in] An axis point. The revolving entity revolves around this axis point.
  
  \remarks
  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
  for other modelers. 
  */
  void setAxisPnt( const OdGePoint3d& pnt );
  
  /** \details
  Returns a vector representing the axis of revolution.
  */
  OdGeVector3d getAxisVec () const;
  
  /** \details
  Sets the axis vector for revolution.
  The axis of revolution is defined by the axis point and axis vector. 
  
  \param vec [in]  A new axis vector.
  
  \remarks
  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
  for other modelers. 
  */
  void setAxisVec( const OdGeVector3d& vec );
 
  /** \details
  Returns the revolution angle (in radians).
  */
  double getRevolveAngle () const;
  
  /** \details
  Sets the angle of revolution.
  
  \param ang [in]  A new value of revolution angle (in radians).
  
  \remarks
  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
  for other modelers. 
  */
  void setRevolveAngle ( double ang );
  
  /** \details
  Returns the start revolution angle (in radians). 
  */
  double getStartAngle () const;
  
  /** \details
  Sets the start revolution angle.
  
  \param startAng [in]  A new value of start revolution angle (in radians).
  
  \remarks
  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
  for other modelers. 
  */
  void setStartAngle (double startAng);
 
  /** \details
  Returns current revolve options.
  Revolve options are stored in the passed OdDbRevolveOptions object.  
  
  \param revolveOptions [out]  A passed-in parameter for returning current revolve options.
  */
  void getRevolveOptions ( OdDbRevolveOptions& revolveOptions ) const;
  
  /** \details
  Sets the revolve options for the surface.
  
  \param revolveOptions [in]  An OdDbRevolveOptions object with the new values of revolution options to be set.
  
  \remarks
  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
  for other modelers. 
  */
  void setRevolveOptions ( const OdDbRevolveOptions& revolveOptions );
 
  /** \details
  Sets all the data needed for the revolved surface.
 
  \param axisPnt        [in] A new axis point to be set.
  \param axisVec        [in] A new axis vector to be set.
  \param revAngle       [in] A new value of revolution angle.
  \param revolveOptions [in] A new revolution options object to be set.
  
  \remarks
  This method is implemented only for Spatial modeler and returns eNotImplementedYet status
  for other modelers. 
  */
  void setRevolve ( const OdGePoint3d& axisPnt, const OdGeVector3d& axisVec,
    double revAngle, const OdDbRevolveOptions& revolveOptions );
 
  OdResult subTransformBy(
    const OdGeMatrix3d& xfm );
 
  // OdDbObject methods
 
  virtual OdResult dwgInFields(
    OdDbDwgFiler* pFiler);
 
  virtual void dwgOutFields(
    OdDbDwgFiler* pFiler) const;
 
  virtual OdResult dxfInFields(
    OdDbDxfFiler* pFiler);
 
  virtual void dxfOutFields(
    OdDbDxfFiler* pFiler) const;
 
  virtual OdResult subGetClassID(
    void* pClsid) const;
 
  virtual bool isDependent() const { return false; }
};
 
/** \details
This template class is a specialization of the OdSmartPtr class for OdDbRevolvedSurface object pointers.
*/
typedef OdSmartPtr<OdDbRevolvedSurface> OdDbRevolvedSurfacePtr;
 
#include "TD_PackPop.h"
#endif //_DbRevolvedSurface_h_Included_