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
/////////////////////////////////////////////////////////////////////////////// 
// 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_DBSPFILT_H
#define OD_DBSPFILT_H
 
#include "TD_PackPush.h"
 
/** \details
   Defines the disabled back or front clipping plane distance.
*/
   #define ODDB_INFINITE_XCLIP_DEPTH (1.0e+300)
 
#include "DbFilter.h"
#include "Ge/GePoint3d.h"
#include "Ge/GePoint2dArray.h"
 
class OdGeExtents3d;
class OdDbBlockReference;
 
class OdDbFilteredBlockIterator;
/** \details
  This template class is a specialization of the OdSmartPtr class for OdDbFilteredBlockIterator object pointers.
*/
typedef OdSmartPtr<OdDbFilteredBlockIterator> OdDbFilteredBlockIteratorPtr;
 
struct OdGiClipBoundary;
 
/** \details
    This class implements Spatial Filter objects in an OdDbDatabase instance.
 
    \remarks
    Spatial Filter objects are extruded volumes based on a 2D boundary,
    an extrusion direction, and front and back clipping distances.
    
    They implement Xref clipping boundaries.
    
    \sa
    TD_Db
 
    <group OdDb_Classes>
*/
class TOOLKIT_EXPORT OdDbSpatialFilter : public OdDbFilter
{
public:
  ODDB_DECLARE_MEMBERS(OdDbSpatialFilter);
 
  OdDbSpatialFilter();
 
  OdRxClass* indexClass() const; 
 
  /** \details
    Returns clip boundary extents.
 
    \param ext [out]  Output extents.
  */
  void queryBounds(OdGeExtents3d& ext) const;
 
  /** \details
    Returns the clip boundary definition of this Spatial Filter object.
    
    \param fromPoint [out]  Receives the WCS 'from' point.
    \param toPoint [out]  Receives the  WCS 'to' point.
    \param upDir [out]  Receives the WCS normal vector.
    \param viewField [out]  Receives the WCS view field vector.
  */
  void getVolume(
      OdGePoint3d& fromPoint, 
      OdGePoint3d& toPoint, 
      OdGeVector3d& upDir,
      OdGeVector2d& viewField ) const;
 
  /** \details
    Sets the definition of this Spatial Filter object.
 
    \param points [in]  Boundary definition.
    \param normal [in]  WCS Positive extrusion vector.
    \param elevation [in]  Elevation.
    \param frontClip [in]  Front clip distance in the normal direction.
    \param backClip [in]  Back clip distance in the -normal direction.
    \param enabled [in]  Enables the clip volume. 
    
    \remarks
    The elevation is the distance from the WCS origin to the plane of the clip boundary.
 
    Together elevation and normal define the ECS plane of the clip boundary.
       
    If only two points are provided in points, these points define the diagonal of a rectangle. Otherwise,
    they define a non-self-intersecting polygon.
    
    The points are in the ECS defined by normal and elevation. 
    
    If the clip volume is disabled, this Spatial Filter object includes all of 3D space.
  */
  void setDefinition( 
    const OdGePoint2dArray& points, 
    const OdGeVector3d& normal = OdGeVector3d::kZAxis,
    double elevation = 0.0,
    double frontClip = ODDB_INFINITE_XCLIP_DEPTH,
    double backClip = ODDB_INFINITE_XCLIP_DEPTH,
    bool enabled = true); 
 
  /** \param xToClipSpace [in]  The transformation matrix from WCS to ECS for the clip boundary.
  */
  void setDefinition(
    const OdGePoint2dArray& points,
    const OdGeMatrix3d& xToClipSpace, 
    double frontClip = ODDB_INFINITE_XCLIP_DEPTH,
    double backClip = ODDB_INFINITE_XCLIP_DEPTH,
    bool enabled = true);
 
  /** \details
    Returns the definition of this Spatial Filter object.
 
    \param points [out]  Receives the boundary definition.
    \param normal [out]  Receives the WCS positive extrusion vector.
    \param elevation [out]  Receives the elevation.
    \param frontClip [out]  Receives the front clip distance in the normal direction.
    \param backClip [out]  Receives the back clip distance in the -normal direction.
    \param enabled [out]  Receives the status of the clip volume. 
 
    \remarks
    The elevation is the distance from the WCS origin to the plane of the clip boundary.
 
    Together elevation and normal define the ECS plane of the clip boundary.
       
    If only two points are provided in points, these points define the diagonal of a rectangle. Otherwise,
    they define a non-self-intersecting polygon.
    
    The points are in the ECS defined by normal and elevation. 
    
    If the clip volume is disabled, this Spatial Filter object includes all of 3D space.
  */
  void getDefinition( 
    OdGePoint2dArray& points, 
    OdGeVector3d& normal,
    double& elevation, 
    double& frontClip, 
    double& backClip,
    bool& enabled ) const; 
 
  /** \param clipBoundary [in]  Clip boundary.
    \param enabled [in]  Enables the clip volume. 
  */
  void setDefinition(
    const OdGiClipBoundary& clipBoundary,
    bool enabled = true); 
 
  /** \param clipBoundary [out]  Clip boundary.
    \param enabled [out]  Receives the status of the clip volume. 
    \param plotting [in]  Must be true if clip boundary will be plotted.
  */
  void getDefinition(
    OdGiClipBoundary& clipBoundary,
    bool& enabled,
    bool plotting = false ) const; 
 
  OdGeMatrix3d& getClipSpaceToWCSMatrix(OdGeMatrix3d& mat) const;
  OdGeMatrix3d& getOriginalInverseBlockXform(OdGeMatrix3d& mat) const;
 
  /** \details
    Returns the boundary defintion of this Spatial Filter object.
 
    \param points [out]  Receives the boundary definition.
  */
  void boundary(
    OdGePoint2dArray& points) const;
    
  /** \details
    Returns the WCS positive extrusion vector of this Spatial Filter object.
  */
  OdGeVector3d normal() const;
  
  /** \details
    Returns the WCS origin of this Spatial Filter object.
  */
  OdGePoint3d origin() const;
 
  /** \details
    Returns true if and only if front clipping is enabled for this Spatial Filter object.
  */
    bool frontClipEnabled() const;
  
  /** \details
    Returns the front clipping distance for this Spatial Filter object.
  */
    double frontClipDist() const;
  
  /** \details
    Returns true if and only if back clipping is enabled for this Spatial Filter object.
  */
    bool backClipDistEnabled() const;
  /** \details
    Returns the back clipping distance for this Spatial Filter object.
  */
    double backClipDist() const;
  /** \details
    Returns true if and only if the clip volume for this Spatial Filter object is enabled.
    \remarks
    If disabled, this Spatial Filter object includes all of 3D space.
  */
    bool isEnabled() const; 
 
  /** \details
    Sets the perspective camera position of this Spatial Filter object.
 
    \param fromPoint [in]  Perspective camera position.
  */
  void setPerspectiveCamera(
    const OdGePoint3d& fromPoint);
  
  /** \details
    Returns true if and only if the specified extents intersect the clip boundary of the Spatial Filter object.
  */
  bool clipVolumeIntersectsExtents(
    const OdGeExtents3d& extents) const;
  
  /** \details
    Returns true if and only if setPerspectiveCamera() has been called for this Spatial Filter object.
  */
  bool hasPerspectiveCamera() const;
  
  virtual OdResult dwgInFields(
    OdDbDwgFiler* pFiler);
 
  virtual void dwgOutFields(
    OdDbDwgFiler* pFiler) const;
 
  virtual OdResult dxfInFields(
    OdDbDxfFiler* pFiler);
 
  virtual void dxfOutFields(
    OdDbDxfFiler* pFiler) const;
 
  // TD Special :
  bool isFilterInverted() const;
  void setFilterInverted(bool bSet);
  OdResult generateClipBoundaryFromPline(OdDbObjectId id);
};
 
/** \details
  This template class is a specialization of the OdSmartPtr class for OdDbSpatialFilter object pointers.
*/
typedef OdSmartPtr<OdDbSpatialFilter> OdDbSpatialFilterPtr;
 
#include "TD_PackPop.h"
 
#endif // OD_DBSPFILT_H