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
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
/////////////////////////////////////////////////////////////////////////////// 
// 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 OD_GECONE_H
#define OD_GECONE_H /*!DOM*/
 
#include "OdPlatformSettings.h"
#include "Ge/GeSurface.h"
#include "Ge/GeInterval.h"
 
class OdGePoint3d;
class OdGeVector3d;
class OdGeCircArc3d;
class OdGeLinearEnt3d;
 
#include "TD_PackPush.h"
 
/** \details
    This class represents cones with a circular base.
 
    \remarks
    A circular cone is defined by:
 
    * axis of symmetry
    * height
    * half angle (the angle between the generating line and the axis of symmetry)
    * origin (a point on the axis of symmetry)
    * radius at the origin 
 
    The cross section containing the origin is refered to as the base. 
    The radius at the base cannot be zero.  
    This cone may extend on either side of the base.
 
    The half angle is constrained to the interval (-OdaPI/2, OdaPI/2),
    and is measured from the symmetric axis of the cone.
    A negative angle results in an apex on the opposite direction of the
    symmetric axis.
 
    Parameter V is the angle of revolution measured from the refAxis
    (an axis perpendicular to the axis of symmetry). For a closed cone,
    it defaults to [-OdaPI, OdaPI). The positive V direction is defined 
    by applying the right hand rule along the axis of symmetry.  
    The surface is periodic in V with a period of Oda2PI.
 
    Parameter U varies along the axis of symmetry. U is dimensionless
    and increases in the direction of the axis of symmetry. 
    U = 0 corresponds to center of the cone base, 
    and U = 1 corresponds to the cone apex. 
 
    [umin, umax] x [vmin, vmax] defines a four sided conical patch
    bounded by two straight lines (at angles vmin and vmax), and two
    circular arcs (at umin and umax). The following must be observed
    when defining a cone:
 
    * umin < umax
    * |vmax - vmin| <= Oda2PI.
    * baseRadius > 0.0
 
    The height interval of this cone is specified relative to its origin
    (with the height increasing in the direction of the symmetric
    axis).
    
    Library: TD_Ge
 
    <group OdGe_Classes> 
 
    \sa
    <link ge_OdGeCone.html, Working with Cones>
*/
class GE_TOOLKIT_EXPORT OdGeCone : public OdGeSurface
{
public:
 
 
  /** \param cosineAngle [in]  The cosine of the angle between the generating line and the axis of symmetry.
    \param sineAngle [in]  The sine of the angle between the generating line and the axis of symmetry.
    \param baseOrigin [in]  Center of the base.
    \param baseRadius [in]  Radius of the base. 
    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
    \param refAxis [in]  defines thegle 0 of circular base.
    \param height [in]  Height interval of the cone.
    \param startAng [in]  Start angle.
    \param endAng [in]  End angle.
 
    \remarks
    The default constructor uses a half angle of 45°,
    a reference axis of (1,0,0), a baseOrigin of (0,0,0), and a base radius of 2.0.
    \note
    All angles are expressed in radians.
 
  */
  OdGeCone();
  OdGeCone(
    double cosineAngle, 
    double sineAngle,
    const  OdGePoint3d& baseOrigin, 
    double baseRadius,
    const  OdGeVector3d& axisOfSymmetry);
  OdGeCone(
    double cosineAngle, 
    double sineAngle,
    const  OdGePoint3d& baseOrigin, 
    double baseRadius,
    const  OdGeVector3d& axisOfSymmetry,
    const  OdGeVector3d& refAxis, 
    const  OdGeInterval& height,
    double startAng, 
    double endAng);
  OdGeCone(const OdGeCone& cone);
 
  /** \details
  Returns the base radius of this cone.
  */
  double baseRadius() const;
 
  /** \details
  Returns the center of the base.
  */
  OdGePoint3d baseCenter() const;
 
  /** \details
  Returns the starting and ending angles of this cone.
 
  \param startAng [out]  Receives the start angle.
  \param endAng [out]  Receives the end angle.
  \note
  All angles are expressed in radians.
 
  */
  void getAngles(
    double& startAng, 
    double& endAng) const;
 
  /** \details
    Returns the angle between the generating line and the axis of symmetry.
  */
  double halfAngle() const;
 
  /** \details
    Returns the cosine and the sine of the angle between the generating line and the axis of symmetry.
 
    \param cosineAngle [out]  Receives the cosine of the angle.
    \param sineAngle [out]  Receives the sine of the angle.
  */
  void getHalfAngle(
    double& cosineAngle, 
    double& sineAngle) const;
 
  /** \details
    Returns the interval of the axis of symmetry.
 
    \param height [out]  Receives the interval.
  */
  void getHeight(
    OdGeInterval& height) const;
 
  /** \details
    Returns the height of this cone corresponding to
    the specified position on the U-axis.
 
    \remarks
    Parameter U varies along the axis of symmetry.  U is dimensionless,
    and increases in the direction of the axis of symmetry. 
 
    \param u [in]  Position on the U-axis of this cone.
 
  */
  double heightAt(
    double u) const;
 
  /** \details
    Returns the axis of symmetry of this cone.
  */
  OdGeVector3d axisOfSymmetry() const;
 
  /** \details
    Returns the reference axis of this cone.
  */
  OdGeVector3d refAxis () const;
 
  /** \details
    Returns the apex of this cone.
  */
  OdGePoint3d apex() const;
 
  /** \details
    Returns true if and only if the base of this cone
    is a full circle within the specified tolerance.
 
    \param tol [in]  Geometric tolerance.
  */
  bool isClosed(
    const OdGeTol& tol = OdGeContext::gTol) const;
 
  /** \details
  Returns true if and only if the normal to this surface
  is pointing outward.
  */
  bool isOuterNormal() const;
 
  /** \details
    Sets the base radius of this cone.
 
    \param baseRadius [in]  Radius of the base. 
  */
  OdGeCone& setBaseRadius(
    double baseRadius);
 
  /** \details
    Sets the starting and ending angles of this cone.
 
    \param startAng [in]  Start angle.
    \param endAng [in]  End angle.
    \note
    All angles are expressed in radians.
 
  */
  OdGeCone& setAngles(
    double startAng, 
    double endAng);
 
  /** \details
    Sets the height interval of this cone.
 
    \param height [in]  Height interval of this cone.
  */
  OdGeCone& setHeight(
    const OdGeInterval& height);
 
  /** \details
    Sets the parameters for this cone according to the arguments, 
    and returns a reference to this cone.
 
    \param cosineAngle [in]  The cosine of the angle between the generating line and the axis of symmetry.
    \param sineAngle [in]  The sine of the angle between the generating line and the axis of symmetry.
    \param baseOrigin [in]  Center of the base.
    \param baseRadius [in]  Radius of the base. 
    \param axisOfSymmetry [in]  Axis of symmetry (rotation).
    \param refAxis [in]  defines thegle 0 of circular base.
    \param height [in]  Height interval of this cone.
    \param startAng [in]  Start angle.
    \param endAng [in]  End angle.
    
    \note
    All angles are expressed in radians.
 
  */
  OdGeCone& set(
    double cosineAngle, 
    double sineAngle,
    const OdGePoint3d& baseCenter,
    double baseRadius,
    const OdGeVector3d& axisOfSymmetry);
  OdGeCone& set(
    double cosineAngle, 
    double sineAngle,
    const OdGePoint3d& baseCenter,
    double baseRadius,
    const OdGeVector3d& axisOfSymmetry,
    const OdGeVector3d& refAxis,
    const OdGeInterval& height,
    double startAng, 
    double endAng);
  
  OdGeCone& operator =(const OdGeCone& cone);
 
  /** \details
    Computes the intersection of this object with a linear entity.
  */
  bool intersectWith(
    const OdGeLinearEnt3d& linEnt, 
    int& numInt,
    OdGePoint3d& p1,
    OdGePoint3d& p2,
    const OdGeTol& tol = OdGeContext::gTol) const;
};
 
#include "TD_PackPop.h"
 
#endif // OD_GECONE_H