CFx SDK Documentation 2024 SP0
Loading...
Searching...
No Matches
FMCachedSeg2D.h
Go to the documentation of this file.
1
2// Copyright (C) 2002-2022, 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 Open Design Alliance software pursuant to a license
16// agreement with Open Design Alliance.
17// Open Design Alliance Copyright (C) 2002-2022 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_CACHEDSEG2D_H__
24#define __FM_CACHEDSEG2D_H__
25
27
28namespace FacetModeler
29{
30
32//
33//
34//
35//
36//
37//
38
40{
41public:
42 // default constructor
44
45 // constructor:
46 CachedSeg2D( const OdGePoint2d & ptA, const OdGePoint2d & ptB, double dBulge, const Attributes2D& rAttr );
47
48 // constructor: 2 endpoints and a bulge value ( tan(a/4) )
49 CachedSeg2D( const OdGePoint2d & ptA, const OdGePoint2d & ptB, double dBulge=0.0 );
50
51 // constructor: 2 endpoints and an intermediate point
52 CachedSeg2D( const OdGePoint2d & ptA, const OdGePoint2d & ptB, const OdGePoint2d & ptIntermediate );
53
54 // slower copy constructor
55 CachedSeg2D( const IBulgeSeg2D & rAnySeg );
56
57 // virtual ~CachedSeg2D();
58
59
60 // Fast copy operations (cache is copied too)
61 CachedSeg2D( const CachedSeg2D& rSeg );
62
63 Result set( const CachedSeg2D& rSeg );
64
65 inline CachedSeg2D & operator = ( const CachedSeg2D & rSeg )
66 { set( rSeg ); return *this; };
67
68
69 // type info: returns esicCachedSeg2D
70 virtual SegmentImplClass implClass() const;
71
73 // const methods
74
75 // returns reference to the starting point
76 virtual const OdGePoint2d & startPt() const;
77
78 // returns reference to the ending point
79 virtual const OdGePoint2d & endPt () const;
80
81 // returns bulge value
82 virtual double bulge () const;
83
84
86 // const methods
87
88 // returns the type of this segment
89 virtual SegmentType type() const;
90
91 // returns signed deviation from the line [start, end]
92 // the deviation has the same sign, as the bulge() value
93 virtual double deviation() const;
94
95 // returns vDir = endPt - startPt
96 virtual void getDir ( OdGeVector2d & vDir ) const;
97
98 // returns distance btw startPt and endPt
99 virtual double dirLength( ) const;
100
101 // returns length of the segment
102 virtual double length ( ) const;
103
104
106 // Arcs and circles ( length>0 and bulge != 0 )
107
108
109 // returns arc center, if type()==estArc
110 virtual OdGePoint2d arcCenter() const;
111
112 // returns arc radius, if type()==estArc
113 virtual double arcRadius( ) const;
114
115 // returns arc radius and center point, if type()==estArc
116 virtual Result getCircleData( OdGePoint2d & ptCenter, double & dRadius ) const;
117
118 // returns signed included angle of the arc segment
119 // The returned value belongs to range ( -2*Pi, 2*Pi )
120 virtual double arcAngle() const;
121
122 // returns starting angle of the arc (direction from center to startPt )
123 // The returned value belongs to range [ 0, 2*Pi )
124 virtual double arcStartAngle() const;
125
126 // returns arc center point, radius and angles if type()==estArc
127 virtual Result getArcData( OdGePoint2d & ptCenter, double & dRadius,
128 double & dStartAngle, double & dInclAngle ) const;
129
130
131
133 // non-const methods
134
135 using CommonSeg2DImpl::set;
136
137 // Update ends and bulge
138 virtual Result set( const OdGePoint2d & ptA, const OdGePoint2d & ptB, double dBulge, const Attributes2D& rAttr );
139
140 // Copy from another segment
141 virtual Result set( const IBulgeSeg2D& rSeg );
142
143 // VC6 compatibility
144 virtual Result set( const OdGePoint2d & ptA, const OdGePoint2d & ptB, double dBulge=0.0 )
145 {
146 return CommonSeg2DImpl::set( ptA, ptB, dBulge );
147 }
148
149 virtual Result set( const OdGePoint2d & ptA, const OdGePoint2d & ptB, const OdGePoint2d & ptIntermediate )
150 {
151 return CommonSeg2DImpl::set( ptA, ptB, ptIntermediate );
152 }
153
154 virtual Result set( const OdGeLineSeg2d& geLine )
155 {
156 return CommonSeg2DImpl::set( geLine );
157 }
158
159 virtual Result set( const OdGeCircArc2d& geArc )
160 {
161 return CommonSeg2DImpl::set( geArc );
162 }
163
164 inline IBulgeSeg2D& operator = ( const IBulgeSeg2D& rSeg ) { set( rSeg ); return *this; };
165
166 // Transforms the object using the matrix
167 virtual Result transformBy( const OdGeMatrix2d& mTrans );
168
169 // inverts the segment (makes it going in opposite direction )
170 virtual Result reverse();
171
172
173public:
174
175 // Get attributes (including metadata)
176 virtual const Attributes2D& attributes() const;
177
178 // Get attributes (including metadata) for update
180
181private:
182
183 void _UpdateCache();
184
185 inline const OdGePoint2d & _startPt() const { return m_ptStart; };
186 inline const OdGePoint2d & _endPt() const { return m_ptEnd; };
187 inline double _bulge() const { return m_dBulge; };
188
189 inline SegmentType _type() const { return m_eType; };
190 inline double _length() const { return m_dLength; };
191 inline double _arcAngle() const { return m_dArcInclAngle; };
192 inline double _arcRadius() const { return m_dLength / ::fabs(m_dArcInclAngle); };
193 inline const OdGePoint2d & _arcCenter() const { return m_ptArcCenter; };
194
195 double _arcStartAngle() const;
196
197private:
198
200 // mandatory data:
201
202 OdGePoint2d m_ptStart; // Starting point
203
204 OdGePoint2d m_ptEnd; // Ending point
205
206 double m_dBulge; // Bulge value = tan(angle/4)
207
208 Attributes2D m_Attr; // Metadata value
209
210
212 // Cached data:
213
214 // Type of the segment
215 SegmentType m_eType;
216
217 // length of the segment
218 double m_dLength;
219
220 // double m_dArcRadius; // = m_dLength / ::fabs(m_dInclAngle);
221 double m_dArcInclAngle;
222
223 // Arc data: center, radius and included angle
224 OdGePoint2d m_ptArcCenter;
225
226 // extents ?
227 //OdGeExtents2d m_Extents;
228};
229
230
231
232};
233
234
235
236#endif //__FM_CACHEDSEG2D_H__
#define FMGEOMETRY_API
virtual Attributes2D & attributes4U()
Result set(const CachedSeg2D &rSeg)
CachedSeg2D(const OdGePoint2d &ptA, const OdGePoint2d &ptB, const OdGePoint2d &ptIntermediate)
virtual Result set(const OdGePoint2d &ptA, const OdGePoint2d &ptB, double dBulge, const Attributes2D &rAttr)
virtual SegmentImplClass implClass() const
CachedSeg2D(const IBulgeSeg2D &rAnySeg)
virtual OdGePoint2d arcCenter() const
virtual const Attributes2D & attributes() const
virtual Result getArcData(OdGePoint2d &ptCenter, double &dRadius, double &dStartAngle, double &dInclAngle) const
virtual double deviation() const
CachedSeg2D(const OdGePoint2d &ptA, const OdGePoint2d &ptB, double dBulge, const Attributes2D &rAttr)
CachedSeg2D(const OdGePoint2d &ptA, const OdGePoint2d &ptB, double dBulge=0.0)
virtual double arcStartAngle() const
virtual const OdGePoint2d & endPt() const
virtual double arcAngle() const
virtual Result set(const OdGeCircArc2d &geArc)
CachedSeg2D(const CachedSeg2D &rSeg)
virtual Result set(const OdGeLineSeg2d &geLine)
virtual void getDir(OdGeVector2d &vDir) const
virtual double bulge() const
virtual const OdGePoint2d & startPt() const
virtual Result reverse()
virtual Result set(const OdGePoint2d &ptA, const OdGePoint2d &ptB, double dBulge=0.0)
virtual double arcRadius() const
virtual Result set(const OdGePoint2d &ptA, const OdGePoint2d &ptB, const OdGePoint2d &ptIntermediate)
virtual SegmentType type() const
virtual double dirLength() const
virtual Result transformBy(const OdGeMatrix2d &mTrans)
virtual double length() const
virtual Result getCircleData(OdGePoint2d &ptCenter, double &dRadius) const
virtual Result set(const IBulgeSeg2D &rSeg)