CFx SDK Documentation  2023 SP0
FM_IContour2D.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2015, Open Design Alliance (the "Alliance").
3 // All rights reserved.
4 //
5 // This software and its documentation and related materials are owned by
6 // the Alliance. The software may only be incorporated into application
7 // programs owned by members of the Alliance, subject to a signed
8 // Membership Agreement and Supplemental Software License Agreement with the
9 // Alliance. The structure and organization of this software are the valuable
10 // trade secrets of the Alliance and its suppliers. The software is also
11 // protected by copyright law and international treaty provisions. Application
12 // programs incorporating this software must include the following statement
13 // with their copyright notices:
14 //
15 // This application incorporates Teigha(R) software pursuant to a license
16 // agreement with Open Design Alliance.
17 // Teigha(R) Copyright (C) 2002-2015 by Open Design Alliance.
18 // All rights reserved.
19 //
20 // By use of this software, its documentation or related materials, you
21 // acknowledge and accept the above terms.
23 #ifndef __FM_ICONTOUR2D_H__
24 #define __FM_ICONTOUR2D_H__
25 
26 #include "FMGeometry.h"
28 
29 class OdGeLineSeg2d;
30 class OdGeCircArc2d;
31 
32 
33 namespace FacetModeler
34 {
35 
36 
38 {
39 public:
40 
41  virtual ~IContour2D() { };
42 
43 
44  // Copy this contour from rSrcCont
45  virtual void set( const IContour2D & rSrcCont ) = 0;
46 
47  // Create a new copy of this contour.
48  // Call delete to release memory
49  virtual IContour2D * clone() const = 0;
50 
51 
52  // returns class info at runtime
53  virtual ContourImplClass implClass() const = 0;
54 
55  // Create a contour of given class (ecicSimple or ecicCached ) and copy pSrcContour to it
56  static IContour2D * create( ContourImplClass eClass, const IContour2D * pSrcContour = 0 );
57 
59  //
60 
61  // Returns true if this entity is closed, false otherwise.
62  virtual bool isClosed() const = 0;
63 
64  // Makes the contour closed (open).
65  // This method doesn't change vertex count.
66  // In open contours the last bulge value is unused.
67  virtual void setClosed(bool bClosed = true) = 0;
68 
69  // Removes the last vertex (point, bulge and metadata) and makes contour closed
70  // if the last and the first points are equal. Does nothing otherwise.
71  // Returns true, if the vertex was removed and the contour was closed
72  virtual bool setClosedIfEndsAreEqual( const OdGeTol& gTol = FMGeGbl::gTol ) = 0;
73 
74  // returns true, if there is no vertices
75  virtual bool isEmpty() const = 0;
76 
77  // returns number of vertices
78  virtual OdUInt32 numVerts() const = 0;
79 
80  // returns number of segments
81  // It is less than or equal (if the contour is closed) to the number of vertices.
82  virtual OdUInt32 numSegments() const = 0;
83 
84 
85  // Returns true, if the contour contains at least one arc
86  virtual bool hasArcs() const = 0;
87 
88 
89 
90 
92  //
93  // 1. Simple Segment and Vertex operations
94  //
95 
96 
97 
98  // Returns the type of the segment that begins at the specified vertex.
99  // If the index is out of range estUnknown is returned
100  // Otherwise one of estArc, estLine, estCoincident is returned
101  virtual SegmentType segmentType (OdUInt32 iIndex ) const = 0;
102 
103 
104  // returns IBulgeSeg2D
105  virtual Result getSegmentAt (OdUInt32 iIndex, IBulgeSeg2D & rSegment ) const = 0;
106 
107  // Returns coordinates of segment ends and a bulge value
108  virtual Result getSegmentAt (OdUInt32 iIndex,
109  OdGePoint2d & ptStart,
110  OdGePoint2d & ptEnd,
111  double & dBulge ) const = 0;
112 
113  // Returns OdGeLineSeg2d corresponding to the segment given by iIndex
114  // Error code will be returned, if the segment's type is estArc
115  virtual Result getLineSegAt (OdUInt32 iIndex, OdGeLineSeg2d& geLine ) const = 0;
116 
117  // Returns OdGeCircArc2d corresponding to the segment given by iIndex
118  // Error code will be returned, if the segment's type is not estArc
119  virtual Result getArcSegAt (OdUInt32 iIndex, OdGeCircArc2d& geArc ) const = 0;
120 
121 
122  // Returns a point given by iIndex
123  virtual Result getPointAt (OdUInt32 iIndex, OdGePoint2d & ptPoint ) const = 0;
124 
125  // Returns a bulge value of the segment given by the iIndex
126  virtual Result getBulgeAt (OdUInt32 iIndex, double & dBulge ) const = 0;
127 
128  // Returns vertex data: starting point, bulge and metadata of corresponding segment
129  virtual Result getVertexAt(OdUInt32 iIndex, OdGePoint2d * pptPoint, double * pdBulge = 0, Attributes2D * pAttr = 0 ) const = 0;
130 
131  // Returns internal angle of vertex vectors, given by the iIndex
132  virtual Result getInternalAngleAt( OdUInt32 iIndex, double & dAngle ) const = 0;
133 
134  // Updates existing point coordinates
135  virtual Result setPointAt (OdUInt32 iIndex, const OdGePoint2d & ptPoint ) = 0;
136 
137  // Updates existing bulge value
138  virtual Result setBulgeAt (OdUInt32 iIndex, double dBulge ) = 0;
139 
140  // Updates existing point and bulge values
141  virtual Result setVertexAt (OdUInt32 iIndex, const OdGePoint2d & ptPoint, double dBulge ) = 0;
142 
143  // Reset the contour
144  virtual void reset() = 0;
145 
146  // Makes capacity of the vertex vector >= iReservedSize
147  // Number of vertices is not changed
148  virtual void reserveVertices( OdUInt32 iReservedSize ) = 0;
149 
150  // Returns attributes for given segment
151  virtual const Attributes2D& attributesAt(OdUInt32 iIndex ) const = 0;
152 
153  // Returns attributes for given segment for update
154  virtual Attributes2D& attributes4UAt(OdUInt32 iIndex ) = 0;
155 
156  // Updates attributes for given segment
157  virtual Result setAttributesAt(OdUInt32 iIndex, const Attributes2D& rAttr ) = 0;
158 
159  // Returns metadata for given segment or 0
160  virtual OdIntPtr metadataAt (OdUInt32 iIndex ) const = 0;
161 
162  // Updates metadata for given segment
163  virtual Result setMetadataAt (OdUInt32 iIndex, OdIntPtr uNewData ) = 0;
164 
165  // Adds a vertex at the specified index.
166  // The index should be <= numVerts()
167  // If it is equal to numVerts(), a new vertex will be appended to the array,
168  // otherwise it'll be inserted before the old iIndex vertex.
169  virtual Result addVertexAt (OdUInt32 iIndex, const OdGePoint2d& ptStart, double dBulge = 0.0, const Attributes2D& rAttr = Attributes2D::kNull ) = 0;
170 
171  // Appends a new starting point and a bulge value.
172  // The bulge value relates to the segment starting at the point.
173  virtual Result appendVertex (const OdGePoint2d& ptStart, double dBulge = 0.0, const Attributes2D& rAttr = Attributes2D::kNull ) = 0;
174 
175  // Appends vertex data from vecSource to this contour
176  virtual Result appendVertices ( const OdGePoint2dArray & vecSource ) = 0;
177 
178  // Appends rSeg to this contour.
179  // Returns erPointNotOnThis if rSeg.startPt() is not equal to the end of this (open) contour
180  // if bShiftToHit is true, the rSeg is shifted and the return code is erWarnPointNotOnThis
181  // Note: if the contour is closed, the last (closing) segment is wiped out
182  virtual Result appendSegment ( const IBulgeSeg2D & rSeg, bool bShiftToHit = false, const OdGeTol& gTol = FMGeGbl::gTol ) = 0;
183 
184  // Appends new segment to this contour ( updates bulge and metadata at the last vertex and
185  // appends new vertex with zero bulge and data)
186  // Returns erEmptyContour if there are no vertices in the contour
187  // Note: if the contour is closed, the last (closing) segment is wiped out
188  virtual Result appendSegment (double dBulge, const OdGePoint2d& ptNewEnd, const Attributes2D& rAttr = Attributes2D::kNull ) = 0;
189 
190  // Appends rCont to this contour ( "closed" flags are ignored )
191  // Returns erPointNotOnThis if rCont.startPoint is not equal to the end of this (open) contour
192  // If bCloseGap is true, a segment, connecting the points is inserted and
193  // the return code is erWarnPointNotOnThis
194  virtual Result appendContour ( const IContour2D & rCont, bool bCloseGap = false, double dMaxGap = 1e99 ) = 0;
195 
196  // Removes a vertex (and a corresponding segment).
197  // Bulge values of the other segments are left intact.
198  virtual Result removeVertexAt (OdUInt32 iIndex ) = 0;
199 
201  //
202  // 2. Parameterization and arbitrary point access
203  //
204 
205 
206  // There are 3 ways to pick some (non-vertex) point on the contour:
207  // a) use an integer index to get a segment and then
208  // use parameter on the segment (GeLine or GeArc).
209  // b) use a distance along the curve from the starting point.
210  // c) use a "parameter" value.
211  //
212  // The last way is the fastest (and preferred in most cases) because of
213  // the "parameter" structure:
214  // dParam = startParam() + iIndex * (dOffsetOnSegment/dSegmentLength)
215  //
216  // So the point given by parameter value can be found at constant time.
217 
218  inline double startParam() const { return 0.0; };
219 
220  inline double endParam () const { return numSegments(); };
221 
222  // Returns starting point of the contour, if the contour is not empty
223  virtual Result getStartPoint(OdGePoint2d & ptPoint ) const = 0;
224 
225  // Returns ending point of the contour, if the contour is not empty.
226  // The ptPoint is equal to the starting point, if the contour is closed.
227  virtual Result getEndPoint (OdGePoint2d & ptPoint ) const = 0;
228 
229 
230  // Returns the length of the contour
231  virtual double length() const = 0;
232 
233 
234  // returns tangent vector at the parameter
235  virtual Result getTangent (double dParam, OdGeVector2d& vTangent ) const = 0;
236 
237  // Returns a point given by a parameter value
238  virtual Result getPoint (double dParam, OdGePoint2d& ptPoint ) const = 0;
239 
240  // Returns a point given by a distance along the curve from the starting point
241  virtual Result getPointAtDist (double dDist, OdGePoint2d& ptPoint ) const = 0;
242 
243  // Converts parameter value to the distance from start along the curve
244  virtual Result getDistAtParam (double dParam, double& dDist ) const = 0;
245 
246  // Converts distance from start to parameter value
247  virtual Result getParamAtDist (double dDist, double& dParam ) const = 0;
248 
249 
250  //virtual Result getParamAtPoint(const OdGePoint2d& ptPoint, double& dParam) const = 0;
251  //virtual Result getDistAtPoint (const OdGePoint2d& ptPoint, double& dDist) const = 0;
252 
253 
255  // Distance along the contour and closed contours
256 
257  // Convert dParam to [0, endParam() ) range (on closed contours)
258  // and returns erOk, if the dParam is valid
259  virtual Result getNormalizedParam( double & dParam ) const = 0;
260 
261  // Convert dDist to [0, length() ) range (on closed contours)
262  // and returns erOk, if the dDist is valid
263  virtual Result getNormalizedDist( double & dDist ) const = 0;
264 
265 
266  // Returns true, if the parameters are valid and equal (after normalization)
267  // The result is useless, if some parameter is not valid
268  virtual bool areEqualParams( double dParam1, double dParam2, const double dParamTol = 1e-10 ) const = 0;
269 
270  // Returns true, if the distances are equal (after normalization) with given tolerance
271  // The result is useless, if some parameter is not valid
272  virtual bool areEqualDists ( double dDist1, double dDist2, const double dTol = FMGeGbl::gTol.equalPoint() ) const = 0;
273 
274 
275  // Get signed length of the shortest way btw the points 1 and 2.
276  // The points are given by distances along the curve
277  virtual double signedMinDist ( double dDist1, double dDist2 ) const = 0;
278 
279  // Get signed length of the shortest way btw the points 1 and 2.
280  // The points are given by parameters on the curve
281  virtual double signedMinDistByParams( double dParam1, double dParam2 ) const = 0;
282 
283 
284 
286  //
287  // 3. Geometrical Queries
288  //
289 
290 
291  // Adds geometrical extents of the contour to geExtents
292  virtual Result addExtents(OdGeExtents2d& geExtents ) const = 0;
293 
294 
295  // Returns signed area of the contour. (positive for CCW contours)
296  // In open contours the first and last vertices are considered
297  // to be connected with a straight line.
298  virtual double signedArea() const = 0;
299 
300  virtual bool isConvex() const = 0;
301 
302  inline double area() const { return ::fabs( signedArea() ); };
303 
304  inline bool isCCW() const { return ( signedArea() >= 0.0 ); };
305 
306  // returns internal point of the closed contour (contour orientation is ignored)
307  // If succeeded this->contains( rPoint, gTol ) will return true
308  virtual Result getInternalPoint( OdGePoint2d& rPoint, const OdGeTol& gTol = FMGeGbl::gTol ) const = 0;
309 
310  // returns true, if the point lies on the contour
311  // *dParam stores the parameter of the point
312  virtual bool isOn( const OdGePoint2d & ptTest, double * pdParam = 0,
313  const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
314 
315  // returns parameter of a point on the curve, which is closest to the ptTest
316  virtual double nearestParam( const OdGePoint2d & ptTest, OdGePoint2d * ptNearest = 0 ) const = 0;
317 
318 
319  // Returns true if the point lies inside the contour or on it's border.
320  // Contour must be closed.
321  // pbOnBorder is true, if the point lies on the border of the contour
322  // Note: the contour is considered to be non-oriented.
323  virtual bool contains( const OdGePoint2d &rPoint, bool * pbOnBorder = 0,
324  const OdGeTol & gTol = FMGeGbl::gTol) const = 0;
325 
326 
327  // Returns whether the contour intersects itself.
328  // Works O( N log N ) at the average
329  virtual bool isSelfIntersecting(const OdGeTol& gTol = FMGeGbl::gTol, bool bExcludeTouch = false ) const = 0;
330 
331  // Returns whether this contour is closed and coincides with a directional
332  // boundary of some open 2D-region.
333  virtual bool isValidRegion( const OdGeTol& gTol = FMGeGbl::gTol ) const = 0;
334 
335  virtual bool isInsideContour(const IContour2D& c2dOuter, bool fAllowBordersTouch = false, const OdGeTol& gTol = FMGeGbl::gTol) const = 0;
336 
337 
338  // Returns number of intersections
339  // and appends Intersection data to the vecPoints vector
340  // Note: some intersection points (esp. on segment bounds) can coincide
341  virtual OdUInt32 intersect( const IBulgeSeg2D & rSegB,
342  std::vector< Intersection > & vecPoints,
343  const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
344 
345  // Returns number of intersections
346  // and appends Intersection data to the vecPoints vector
347  // Note: some intersection points (esp. on segment bounds) can coincide
348  virtual OdUInt32 intersect( const IContour2D& rContB,
349  std::vector< Intersection > & vecPoints,
350  const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
351 
352  // Intersects this contour with an infinite line
353  // Returns number of intersections
354  // and APPENDS Intersection data to the vecPoints vector
355  // Note: some intersection points (esp. on segment bounds) can coincide
357  const OdGePoint2d& ptLineOrigin,
358  const OdGeVector2d& vLineDir,
359  std::vector< Intersection > & vecPoints,
360  const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
361 
362 
364  //
365  // 4. Transformations
366  //
367 
368  // Transforms the contour
369  virtual Result transformBy(const OdGeMatrix2d& geMatrix,
370  const DeviationParams& devDeviation = FMGeGbl::gDefDev ) = 0;
371 
372  // Reverses the contour.
373  virtual void reverse() = 0;
374 
375  // Deletes redundant segments that have length = 0.
376  virtual void deleteCoincident( const OdGeTol & gTol = FMGeGbl::gTol ) = 0;
377 
378  // Merges adjacent segments that lie on the same line or arc
379  virtual void mergeSegments( int iMergeFlags = 0, const OdGeTol & gTol = FMGeGbl::gTol ) = 0;
380 
381  // Explodes all arc segments to lines.
382  // Note: &rDestCont == this IS OK!
383  virtual Result explodeTo( IContour2D & rDestCont, const DeviationParams& devDeviation,
384  OdIntPtr uArcMetadata = 0 ) const = 0;
385 
386 
388 
389 
390  // Adds a vertex corresponding to the specified parameter into the contour, if
391  // the vertex does not exist.
392  // Returns index of the created/existing vertex.
393  // Note: insertion/deletion of a vertex at dParam shifts all parameters > dParam by 1.0
394  virtual OdUInt32 createVertexAt( double dParam, const OdGeTol & gTol = FMGeGbl::gTol ) = 0;
395 
396  // Adds vertices at the specified parameters into the contour, if
397  // the vertices do not exist.
398  virtual Result createVerticesAt( const std::vector<double> & vecParams, const OdGeTol & gTol = FMGeGbl::gTol ) = 0;
399 
400  // returns sub-contour given by 2 parameters
401  // Note: if (dStartParam > dEndParam) the rSubContour will have opposite direction
402  virtual Result getSubContour(double dStartParam, double dEndParam,
403  IContour2D & rSubContour, const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
404 
405  // appends sub-contour to rSubContour, if possible
406  virtual Result appendSubContourTo(double dStartParam, double dEndParam,
407  IContour2D & rSubContour, const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
408 
409  // Divides this contour into sets of contours that lie to the left of the given line and to the right.
410  // Note: if OdGeLinearEnd2d can be an infinite of a finite line, depending
411  // on it`s class: OdGeLine2d or OdGeLineSeg2d
412  //virtual Result splitByLine( const OdGeLinearEnt2d& rLine,
413  // AECProfile& rLeftSide, AECProfile& rRightSide,
414  // const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
415 
416 
417  // replaces part of this contour with the given contour
418  // rSubContour should be an open curve.
419  // Directions are significant! I.e. if this one is closed, the remaining half is choosen
420  // using rSubContour direction.
421  virtual Result replaceSubContourTo( IContour2D& rDest, const IContour2D & rSubContour, const OdGeTol & gTol = FMGeGbl::gTol ) const = 0;
422 
423 };
424 
425 
426 
427 
428 
429 }; // namespace AECContours
430 
431 
432 #endif //__FM_ICONTOUR2D_H__
unsigned int OdUInt32
ptrdiff_t OdIntPtr
static FMGEOMETRY_API_STATIC const Attributes2D kNull
virtual OdUInt32 intersect(const IBulgeSeg2D &rSegB, std::vector< Intersection > &vecPoints, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual Result appendSegment(const IBulgeSeg2D &rSeg, bool bShiftToHit=false, const OdGeTol &gTol=FMGeGbl::gTol)=0
virtual SegmentType segmentType(OdUInt32 iIndex) const =0
virtual OdUInt32 intersect(const IContour2D &rContB, std::vector< Intersection > &vecPoints, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual IContour2D * clone() const =0
virtual Result getSubContour(double dStartParam, double dEndParam, IContour2D &rSubContour, const OdGeTol &gTol=FMGeGbl::gTol) const =0
static IContour2D * create(ContourImplClass eClass, const IContour2D *pSrcContour=0)
virtual Result getInternalAngleAt(OdUInt32 iIndex, double &dAngle) const =0
virtual Result getNormalizedDist(double &dDist) const =0
virtual Result getVertexAt(OdUInt32 iIndex, OdGePoint2d *pptPoint, double *pdBulge=0, Attributes2D *pAttr=0) const =0
virtual Result getBulgeAt(OdUInt32 iIndex, double &dBulge) const =0
virtual bool isClosed() const =0
virtual void mergeSegments(int iMergeFlags=0, const OdGeTol &gTol=FMGeGbl::gTol)=0
virtual Result getPoint(double dParam, OdGePoint2d &ptPoint) const =0
virtual Result getSegmentAt(OdUInt32 iIndex, OdGePoint2d &ptStart, OdGePoint2d &ptEnd, double &dBulge) const =0
virtual Result replaceSubContourTo(IContour2D &rDest, const IContour2D &rSubContour, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual Result getPointAtDist(double dDist, OdGePoint2d &ptPoint) const =0
virtual void set(const IContour2D &rSrcCont)=0
virtual bool isValidRegion(const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual void deleteCoincident(const OdGeTol &gTol=FMGeGbl::gTol)=0
virtual double signedMinDistByParams(double dParam1, double dParam2) const =0
virtual Result setAttributesAt(OdUInt32 iIndex, const Attributes2D &rAttr)=0
virtual Result getDistAtParam(double dParam, double &dDist) const =0
virtual bool isOn(const OdGePoint2d &ptTest, double *pdParam=0, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual Result getStartPoint(OdGePoint2d &ptPoint) const =0
virtual Result explodeTo(IContour2D &rDestCont, const DeviationParams &devDeviation, OdIntPtr uArcMetadata=0) const =0
virtual Result setMetadataAt(OdUInt32 iIndex, OdIntPtr uNewData)=0
virtual void reserveVertices(OdUInt32 iReservedSize)=0
virtual double length() const =0
virtual bool setClosedIfEndsAreEqual(const OdGeTol &gTol=FMGeGbl::gTol)=0
virtual void reset()=0
virtual bool hasArcs() const =0
virtual OdUInt32 intersectLine(const OdGePoint2d &ptLineOrigin, const OdGeVector2d &vLineDir, std::vector< Intersection > &vecPoints, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual bool isSelfIntersecting(const OdGeTol &gTol=FMGeGbl::gTol, bool bExcludeTouch=false) const =0
virtual Result addExtents(OdGeExtents2d &geExtents) const =0
virtual bool areEqualDists(double dDist1, double dDist2, const double dTol=FMGeGbl::gTol.equalPoint()) const =0
virtual Attributes2D & attributes4UAt(OdUInt32 iIndex)=0
virtual bool isEmpty() const =0
virtual Result transformBy(const OdGeMatrix2d &geMatrix, const DeviationParams &devDeviation=FMGeGbl::gDefDev)=0
virtual void setClosed(bool bClosed=true)=0
virtual Result getNormalizedParam(double &dParam) const =0
virtual Result getPointAt(OdUInt32 iIndex, OdGePoint2d &ptPoint) const =0
virtual bool contains(const OdGePoint2d &rPoint, bool *pbOnBorder=0, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual OdUInt32 numVerts() const =0
virtual Result appendVertex(const OdGePoint2d &ptStart, double dBulge=0.0, const Attributes2D &rAttr=Attributes2D::kNull)=0
virtual OdUInt32 createVertexAt(double dParam, const OdGeTol &gTol=FMGeGbl::gTol)=0
virtual void reverse()=0
virtual Result getTangent(double dParam, OdGeVector2d &vTangent) const =0
virtual double signedMinDist(double dDist1, double dDist2) const =0
virtual Result appendSubContourTo(double dStartParam, double dEndParam, IContour2D &rSubContour, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual bool isConvex() const =0
virtual Result createVerticesAt(const std::vector< double > &vecParams, const OdGeTol &gTol=FMGeGbl::gTol)=0
virtual Result setVertexAt(OdUInt32 iIndex, const OdGePoint2d &ptPoint, double dBulge)=0
virtual Result getArcSegAt(OdUInt32 iIndex, OdGeCircArc2d &geArc) const =0
virtual double nearestParam(const OdGePoint2d &ptTest, OdGePoint2d *ptNearest=0) const =0
virtual bool isInsideContour(const IContour2D &c2dOuter, bool fAllowBordersTouch=false, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual Result removeVertexAt(OdUInt32 iIndex)=0
virtual OdIntPtr metadataAt(OdUInt32 iIndex) const =0
virtual bool areEqualParams(double dParam1, double dParam2, const double dParamTol=1e-10) const =0
virtual Result setPointAt(OdUInt32 iIndex, const OdGePoint2d &ptPoint)=0
virtual Result setBulgeAt(OdUInt32 iIndex, double dBulge)=0
virtual const Attributes2D & attributesAt(OdUInt32 iIndex) const =0
virtual double signedArea() const =0
virtual Result appendContour(const IContour2D &rCont, bool bCloseGap=false, double dMaxGap=1e99)=0
virtual Result getInternalPoint(OdGePoint2d &rPoint, const OdGeTol &gTol=FMGeGbl::gTol) const =0
virtual Result getEndPoint(OdGePoint2d &ptPoint) const =0
virtual Result getSegmentAt(OdUInt32 iIndex, IBulgeSeg2D &rSegment) const =0
virtual Result appendSegment(double dBulge, const OdGePoint2d &ptNewEnd, const Attributes2D &rAttr=Attributes2D::kNull)=0
virtual Result appendVertices(const OdGePoint2dArray &vecSource)=0
virtual OdUInt32 numSegments() const =0
double startParam() const
virtual Result addVertexAt(OdUInt32 iIndex, const OdGePoint2d &ptStart, double dBulge=0.0, const Attributes2D &rAttr=Attributes2D::kNull)=0
virtual Result getParamAtDist(double dDist, double &dParam) const =0
virtual ContourImplClass implClass() const =0
virtual Result getLineSegAt(OdUInt32 iIndex, OdGeLineSeg2d &geLine) const =0
Definition: GeTol.h:49
static FMGEOMETRY_API_STATIC DeviationParams gDefDev
Definition: FMGeometry.h:148
static FMGEOMETRY_API_STATIC OdGeTol gTol
Definition: FMGeometry.h:156