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
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
/////////////////////////////////////////////////////////////////////////////// 
// 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_DB_2DPOLYLINE_
#define _OD_DB_2DPOLYLINE_
 
#include "TD_PackPush.h"
 
#include "DbCurve.h"
#include "DbObjectIterator.h"
#include "Db2dVertex.h"
 
class OdGePoint3d;
class OdDbSequenceEnd;
template <class T> class OdSmartPtr;
 
/** \details
    This template class is a specialization of the OdSmartPtr class for OdDbSequenceEnd object pointers.
*/
typedef OdSmartPtr<OdDbSequenceEnd> OdDbSequenceEndPtr;
 
/** \details
  
    <group TD_Namespaces>
*/
namespace OdDb
{
  enum Poly2dType
  {
    k2dSimplePoly      = 0, // Simple polyline.
    k2dFitCurvePoly    = 1, // Curve fit (DXF 70, bit 0x04).
    k2dQuadSplinePoly  = 2, // Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
    k2dCubicSplinePoly = 3  // Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
  };
}
/** \details
    This class represents 2D Polyline entities in an OdDbDatabase instance.
 
    \sa
    TD_Db
 
    <group OdDb_Classes> 
*/
class TOOLKIT_EXPORT OdDb2dPolyline: public OdDbCurve
{
public:
 
  ODDB_DECLARE_MEMBERS(OdDb2dPolyline);
 
  OdDb2dPolyline();
 
  /** \details
    Returns the type of this Polyline entity. 
    
    \remarks
    polyType() returns one of the following:
    
    <table>
    Name                        Value   Description
    OdDb::k2dSimplePoly         0       Simple polyline.
    OdDb::k2dFitCurvePoly       1       Curve fit (DXF 70, bit 0x04).
    OdDb::k2dQuadSplinePoly     2       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
    OdDb::k2dCubicSplinePoly    3       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
    </table>
  */
  OdDb::Poly2dType polyType() const;
 
  /** \details
    Sets the type of this Polyline entity. 
      
    \param polyType [in]  Polyline type.
    
    \remarks
    polyType must be one of the following:
    
    <table>
    Name                        Value   Description
    OdDb::k2dSimplePoly         0       Simple polyline.
    OdDb::k2dFitCurvePoly       1       Curve fit (DXF 70, bit 0x04).
    OdDb::k2dQuadSplinePoly     2       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
    OdDb::k2dCubicSplinePoly    3       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
    </table>
  */
  void setPolyType(
    OdDb::Poly2dType polyType);
 
  /** \details
    Sets this Polyline entity closed (DXF 70, bit 0x01=1).
  */
  void makeClosed();
 
  /** \details
    Sets this Polyline entity open (DXF 70, bit 0x01=0).
  */
  void makeOpen();
 
  /** \details
    Returns the default segment start width for this Polyline entity (DXF 40).
  */
  double defaultStartWidth() const;
 
  /** \details
    Sets the default segment start width for this Polyline entity (DXF 40).
    \param defaultStartWidth [in]  Default start width.
  */
  void setDefaultStartWidth(
    double defaultStartWidth);
 
  /** \details
    Returns the default segment end width for this Polyline entity (DXF 41).
  */
  double defaultEndWidth() const;
 
  /** \details
    Sets the default segment end width for this Polyline entity (DXF 41).
    \param defaultEndWidth [in]  Default end width.
  */
  void setDefaultEndWidth(
    double defaultEndWidth);
 
  /** \details
    Returns the thickness of this entity (DXF 39).
    
    \remarks
    Thickness is the extrusion length along the normal.
  */
  double thickness() const;
  
  /** \details
    Sets the thickness of this entity (DXF 39).
    \param thickness [in]  Thickness.
    \remarks
    Thickness is the extrusion length along the normal.
  */
  void setThickness(
    double thickness);
 
  /** \details
    Returns the WCS normal to the plane of this entity (DXF 210).
  */
  OdGeVector3d normal() const;
  
  /** \details
    Sets the WCS normal to the plane of this entity (DXF 210).
    \param normal [in]  Normal.
  */
  void setNormal(
    const OdGeVector3d& normal);
 
  /** \details
    Returns the elevation of this entity in the OCS (DXF 30).
    
    \remarks
    The elevation is the distance from the WCS origin to the plane of this entity.
  */
  double elevation() const;
 
  /** \details
    Sets the elevation of this entity in the OCS (DXF 30).
 
    \param elevation [in]  Elevation.    
 
    \remarks
    The elevation is the distance from the WCS origin to the plane of this entity.
  */
  void setElevation(
    double elevation);
 
  /** \details
    Returns true if and only if linetype generation is on for this Polyline entity (DXF 70, bit 0x80).
      
    \remarks
    Linetype generation on indicates that the linetype pattern of this Polyline entity
    is continuously generated around all vertices, rather than being restarted at each vertex.
  */
  bool isLinetypeGenerationOn() const;
 
  /** \details
    Sets the linetype generation on for this Polyline entity (DXF 70, bit 0x80).
      
    \remarks
    Linetype generation on indicates that the linetype pattern of this Polyline entity
    is continuously generated around all vertices, rather than being restarted at each vertex.
  */
  void setLinetypeGenerationOn();
 
  /** \details
    Sets the linetype generation off for this Polyline entity (DXF 70, bit 0x80).
      
    \remarks
    Linetype generation off indicates that the linetype pattern of this Polyline entity is
    restarted at each vertex, rather than being continuously generated around all vertices.
  */
  void setLinetypeGenerationOff();
 
  /** \details
    Removes all curve and spline fitting from this Polyline entity.
  
    \remarks
    Removes all but the simple vertices.
  */
  void straighten();
 
  /** \details
    Appends the specified Vertex entity to this Polyline entity, and makes this Polyline entity its owner.
    
    \remarks
    Returns the Object ID of the appended vertex.
    
    If this Polyline entity is database resident, the Vertex entity will be made database resident. 
    
    If this Polyline entity is not database resident, the Vertex entity will be made database resident
    when this Polyline entity is made database resident.
    
    \note
    If this Polyline is database resident, the Vertex entity must explicitly be closed when
    appendVertex() returns.
    
    \param pVertex [in]  Pointer to the Vertex entity to be appended.
  */
  OdDbObjectId appendVertex(
    OdDb2dVertex* pVertex);
 
  /** \details
    Inserts the specified Vertex entity into this Polyline entity
    after the specified vertex, and makes this Polyline its owner.
    
    \remarks
    Returns the Object ID of the newly inserted vertex.
    
    The Vertex will be made database resident. 
    
    If this Polyline entity is not database resident, the vertex will be made database resident
    when the polyline is made database resident.
    
    To insert the specified Vertex at the start of this Polyline, use a null indexVertexId.
    
    \note
    The Vertex entity must explicitly be closed when insertertex() returns.
 
    \param indexVertId [in]  Object ID of vertex after which to insert the specified vertex.
    \param pVertex [in]  Pointer to the Vertex entity to be inserted.
 
  */
  OdDbObjectId insertVertexAt(
    const OdDbObjectId& indexVertId, 
    OdDb2dVertex* pVertex);
 
  /** \param pIndexVert [in]  Pointer to vertex after which to insert the specified vertex.
  */
  OdDbObjectId insertVertexAt(
    const OdDb2dVertex* pIndexVert, 
    OdDb2dVertex* pVertex);
 
  /** \details
    Opens a vertex owned by this Polyline entity.
 
    \param vertId [in]  Object ID of vertex to be opened.
    \param mode [in]  Mode in which to open the vertex.
    \param openErasedOne [in]  If and only if true, erased objects will be opened.
 
    \remarks
    Returns a SmartPointer to the opened object if successful, otherwise a null SmartPointer.
  */
  OdDb2dVertexPtr openVertex(
    OdDbObjectId vertId, 
    OdDb::OpenMode mode, 
    bool openErasedOne = false);
 
  /** \details
    Opens the OdDbSequenceEnd entity for this Polyline entity.
 
    \param mode [in]  Mode in which to open the OdDbSequenceEnd entity.
 
    \remarks
    Returns a SmartPointer to the newly opened OdDbSequenceEnd, or a null SmartPointer.
 
    \note
    This method is provided solely for applications that store XData on
    OdDbSequenceEnd entities; this is not recommended. 
  */
  OdDbSequenceEndPtr openSequenceEnd(
    OdDb::OpenMode mode);
 
  /** \details
    Returns an Iterator that can be used to traverse the vertices owned 
    by this Polyline entity.
  */
  OdDbObjectIteratorPtr vertexIterator() const;
 
  /** \details
    Returns the WCS position of the specified Vertex entity.
    
    \param vertex [in]  Vertex.
  */
  OdGePoint3d vertexPosition(
    const OdDb2dVertex& vertex) const;
 
  virtual bool subWorldDraw(
    OdGiWorldDraw* pWd) const;
 
  virtual OdResult dwgInFields(
    OdDbDwgFiler* pFiler);
 
  virtual void dwgOutFields(
    OdDbDwgFiler* pFiler) const;
 
  virtual OdResult dxfInFields(
    OdDbDxfFiler* pFiler);
 
  virtual void dxfOutFields(
    OdDbDxfFiler* pFiler) const;
 
  virtual OdResult dxfInFields_R12(
    OdDbDxfFiler* pFiler);
 
  virtual void dxfOutFields_R12(
    OdDbDxfFiler* pFiler) const;
 
  virtual void dxfOut(
    OdDbDxfFiler* pFiler) const;
 
  virtual OdResult dxfIn(
    OdDbDxfFiler* pFiler);
 
  virtual void subClose();
 
  virtual OdResult subExplode(
    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
 
  virtual OdResult explodeGeometry(
    OdRxObjectPtrArray& entitySet) const ODRX_OVERRIDE;
 
  virtual OdResult subTransformBy(
    const OdGeMatrix3d& xfm) ODRX_OVERRIDE;
 
  virtual OdResult subGetClassID(
    void* pClsid) const ODRX_OVERRIDE;
 
  virtual bool isPlanar() const;
 
  virtual OdResult getArea(
    double& area) const;
 
  virtual OdResult getPlane(
    OdGePlane& plane, 
    OdDb::Planarity& planarity) const;
 
 
  // OdDbCurveMethods
 
  /** \details
  Returns true if 2D-Polyline is closed or false otherwise.
  */
  virtual bool isClosed() const;
 
  virtual bool isPeriodic() const;
 
  virtual OdResult getStartParam(
    double& startParam) const;
 
  virtual OdResult getEndParam (
    double& endParam) const;
 
  virtual OdResult getStartPoint(
    OdGePoint3d& startPoint) const;
 
  virtual OdResult getEndPoint(
    OdGePoint3d& endPoint) const;
 
  virtual OdResult getPointAtParam(
    double param, 
    OdGePoint3d& pointOnCurve) const;
 
  virtual OdResult getParamAtPoint(
    const OdGePoint3d& pointOnCurve, 
    double& param) const;
 
  virtual OdResult getDistAtParam( double param, double& dist ) const;
 
  virtual OdResult getParamAtDist( double dist, double& param ) const;
 
  virtual OdResult getFirstDeriv (
    double param,
    OdGeVector3d& firstDeriv) const;
 
  virtual OdResult getSecondDeriv (
    double param,
    OdGeVector3d& secondDeriv) const;
 
  TD_USING(OdDbCurve::getFirstDeriv);
  TD_USING(OdDbCurve::getSecondDeriv);
 
  /** \details
  Convert 2D-Polyline to the specified type.
 
  \param newVal [in]  Polyline type.
    
  \remarks
  newVal must be one of the following:
 
  <table>
  Name                        Value   Description
  OdDb::k2dSimplePoly         0       Simple polyline.
  OdDb::k2dFitCurvePoly       1       Curve fit (DXF 70, bit 0x04).
  OdDb::k2dQuadSplinePoly     2       Quadratic B-spline fit (DXF 80, bit 0x08; DXF 75 == 5).
  OdDb::k2dCubicSplinePoly    3       Cubic B-spline-fit (DXF 80, bit 0x08; DXF 75 == 6).
  </table>
  */
  OdResult convertToPolyType(OdDb::Poly2dType newVal);
  
  /** \details
  Convert polyline to a smooth curve consisting of pairs of arcs in each pair of vertices.
    
  \returns eOk if successful, or an appropriate error code if not.
  */
  OdResult curveFit();
  
  /** \details
  Transforms all simple vertices to control vertices and creates a new spline-fit vertices based
  on a control vertices, through which the polyline will be drawn.
    
  \returns eOk if successful, or an appropriate error code if not.
  */
  OdResult splineFit();
  
  /** \details
  Transforms all simple vertices to control vertices and creates a new spline-fit vertices based
  on a control vertices, through which the polyline will be drawn.
 
  \param splineType [in]  Spline-Fit Polyline type.
 
  \param splineSegs [in]  Number of Spline-Fit segments.
  
  \returns eOk if successful, or an appropriate error code if not.
  */
  OdResult splineFit(OdDb::Poly2dType splineType, OdInt16 splineSegs);
 
  OdResult subGetSubentPathsAtGsMarker( OdDb::SubentType type,
                                        OdGsMarker gsMark, 
                                        const OdGePoint3d& ,
                                        const OdGeMatrix3d& , 
                                        OdDbFullSubentPathArray& subentPaths, 
                                        const OdDbObjectIdArray* pEntAndInsertStack ) const;
  OdResult subGetGsMarkersAtSubentPath( const OdDbFullSubentPath& subPath, 
                                        OdGsMarkerArray& gsMarkers) const;
 
  OdDbEntityPtr subSubentPtr(const OdDbFullSubentPath& path) const;
 
  /** \details
  Returns the entity coordinate system matrix.
  */
  OdGeMatrix3d getEcs( ) const;
 
  virtual OdResult getOdGeCurve(OdGeCurve3d*& pGeCurve, const OdGeTol& tol = OdGeContext::gTol) const;
  virtual OdResult setFromOdGeCurve(const OdGeCurve3d& geCurve, OdGeVector3d *normal = NULL, const OdGeTol& tol = OdGeContext::gTol);
  
  /** \details
  Reverses the Polyline so that the first vertex become the last vertex of a Polyline 
  and the last vertex become the first vertex.
    
  \returns eOk if successful, or an appropriate error code if not.
  */
  virtual OdResult reverseCurve();
};
/** \details
    This template class is a specialization of the OdSmartPtr class for OdDb2dPolyline object pointers.
*/
typedef OdSmartPtr<OdDb2dPolyline> OdDb2dPolylinePtr;
 
 
/*
 
inline void OdDb2dPolyline::extend(double)
{
  return OdeNotApplicable;
}
*/
#include "TD_PackPop.h"
 
#endif