Commit | Line | Data |
---|---|---|

b311480e | 1 | -- Created on: 1993-03-10 |

2 | -- Created by: JCV | |

3 | -- Copyright (c) 1993-1999 Matra Datavision | |

4 | -- Copyright (c) 1999-2012 OPEN CASCADE SAS | |

5 | -- | |

6 | -- The content of this file is subject to the Open CASCADE Technology Public | |

7 | -- License Version 6.5 (the "License"). You may not use the content of this file | |

8 | -- except in compliance with the License. Please obtain a copy of the License | |

9 | -- at http://www.opencascade.org and read it completely before using this file. | |

10 | -- | |

11 | -- The Initial Developer of the Original Code is Open CASCADE S.A.S., having its | |

12 | -- main offices at: 1, place des Freres Montgolfier, 78280 Guyancourt, France. | |

13 | -- | |

14 | -- The Original Code and all software distributed under the License is | |

15 | -- distributed on an "AS IS" basis, without warranty of any kind, and the | |

16 | -- Initial Developer hereby disclaims all such warranties, including without | |

17 | -- limitation, any warranties of merchantability, fitness for a particular | |

18 | -- purpose or non-infringement. Please see the License for the specific terms | |

19 | -- and conditions governing the rights and limitations under the License. | |

20 | ||

7fd59977 | 21 | |

22 | ||

23 | class OffsetCurve from Geom inherits Curve from Geom | |

24 | ||

25 | ||

26 | ---Purpose : | |

27 | -- This class implements the basis services for an offset curve | |

28 | -- in 3D space. The Offset curve in this package can be a self | |

29 | -- intersecting curve even if the basis curve does not | |

30 | -- self-intersect. The self intersecting portions are not deleted | |

31 | -- at the construction time. | |

32 | -- An offset curve is a curve at constant distance (Offset) from | |

33 | -- a basis curve in a reference direction V. The offset curve | |

34 | -- takes its parametrization from the basis curve. | |

9733d9b3 | 35 | -- The Offset curve is in the direction of the normal N |

36 | -- defined with the cross product T^V, where the vector T | |

7fd59977 | 37 | -- is given by the first derivative on the basis curve with |

38 | -- non zero length. | |

39 | -- The distance offset may be positive or negative to indicate the | |

40 | -- preferred side of the curve : | |

41 | -- . distance offset >0 => the curve is in the direction of N | |

9733d9b3 | 42 | -- . distance offset <0 => the curve is in the direction of - N |

7fd59977 | 43 | -- |

44 | -- On the Offset curve : | |

45 | -- Value (U) = BasisCurve.Value(U) + (Offset * (T ^ V)) / ||T ^ V|| | |

46 | -- | |

47 | -- At any point the Offset direction V must not be parallel to the | |

48 | -- vector T and the vector T must not have null length else the | |

49 | -- offset curve is not defined. So the offset curve has not the | |

50 | -- same continuity as the basis curve. | |

51 | -- | |

52 | -- Warnings : | |

53 | -- | |

54 | -- In this package we suppose that the continuity of the offset | |

55 | -- curve is one degree less than the continuity of the basis | |

56 | -- curve and we don't check that at any point ||T^V|| != 0.0 | |

57 | -- | |

58 | -- So to evaluate the curve it is better to check that the offset | |

59 | -- curve is well defined at any point because an exception could | |

60 | -- be raised. The check is not done in this package at the creation | |

61 | -- of the offset curve because the control needs the use of an | |

62 | -- algorithm which cannot be implemented in this package. | |

63 | -- | |

64 | -- The OffsetCurve is closed if the first point and the last point | |

65 | -- are the same (The distance between these two points is lower or | |

66 | -- equal to the Resolution sea package gp) . The OffsetCurve can be | |

67 | -- closed even if the basis curve is not closed. | |

68 | ||

69 | ||

70 | uses Dir from gp, | |

71 | Pnt from gp, | |

72 | Trsf from gp, | |

73 | Vec from gp, | |

74 | Curve from Geom, | |

75 | Geometry from Geom, | |

76 | Shape from GeomAbs | |

77 | ||

78 | ||

79 | raises ConstructionError from Standard, | |

80 | RangeError from Standard, | |

81 | NoSuchObject from Standard, | |

82 | UndefinedDerivative from Geom, | |

83 | UndefinedValue from Geom | |

84 | ||

85 | ||

86 | ||

87 | ||

88 | is | |

89 | ||

90 | ||

91 | ||

92 | ||

93 | Create (C : Curve from Geom; Offset : Real; V : Dir) | |

94 | returns mutable OffsetCurve | |

95 | ---Purpose : | |

96 | -- C is the basis curve, Offset is the distance between <me> and | |

97 | -- the basis curve at any point. V defines the fixed reference | |

98 | -- direction (offset direction). If P is a point on the basis | |

99 | -- curve and T the first derivative with non zero length | |

100 | -- at this point, the corresponding point on the offset curve is | |

101 | -- in the direction of the vector-product N = V ^ T where | |

102 | -- N is a unitary vector. | |

103 | -- Warnings : | |

104 | -- In this package the entities are not shared. The OffsetCurve is | |

105 | -- built with a copy of the curve C. So when C is modified the | |

106 | -- OffsetCurve is not modified | |

107 | raises ConstructionError; | |

108 | ---Purpose : | |

109 | -- Raised if the basis curve C is not at least C1. | |

110 | -- Warnings : | |

111 | -- No check is done to know if ||V^T|| != 0.0 at any point. | |

112 | ||

113 | ||

114 | ||

115 | Reverse (me : mutable); | |

116 | ---Purpose : Changes the orientation of this offset curve. | |

117 | -- As a result: | |

118 | -- - the basis curve is reversed, | |

119 | -- - the start point of the initial curve becomes the | |

120 | -- end point of the reversed curve, | |

121 | -- - the end point of the initial curve becomes the | |

122 | -- start point of the reversed curve, and | |

123 | -- - the first and last parameters are recomputed. | |

124 | ||

125 | ||

126 | ReversedParameter(me; U : Real) returns Real; | |

127 | ---Purpose: Computes the parameter on the reversed curve for | |

128 | -- the point of parameter U on this offset curve. | |

129 | ||

130 | ||

131 | SetBasisCurve (me : mutable; C : Curve from Geom) | |

132 | raises ConstructionError; | |

133 | ---Purpose : Changes this offset curve by assigning C as the basis curve from which it is built. | |

134 | -- Exceptions | |

135 | -- Standard_ConstructionError if the curve C is not at least "C1" continuous. | |

136 | ||

137 | ||

138 | SetDirection (me : mutable; V : Dir); | |

139 | ---Purpose : Changes this offset curve by assigning V as the | |

140 | -- reference vector used to compute the offset direction. | |

141 | ||

142 | SetOffsetValue (me : mutable; D : Real); | |

143 | ---Purpose : Changes this offset curve by assigning D as the offset value. | |

144 | ||

145 | ||

146 | BasisCurve (me) returns Curve from Geom; | |

147 | ---Purpose : Returns the basis curve of this offset curve. | |

148 | -- Note: The basis curve can be an offset curve. | |

149 | ||

150 | ||

151 | Continuity (me) returns Shape from GeomAbs; | |

152 | ---Purpose : Returns the global continuity of this offset curve as a | |

153 | -- value of the GeomAbs_Shape enumeration. | |

154 | -- The degree of continuity of this offset curve is equal | |

155 | -- to the degree of continuity of the basis curve minus 1. | |

156 | -- Continuity of the Offset curve : | |

157 | -- C0 : only geometric continuity, | |

158 | -- C1 : continuity of the first derivative all along the Curve, | |

159 | -- C2 : continuity of the second derivative all along the Curve, | |

160 | -- C3 : continuity of the third derivative all along the Curve, | |

161 | -- G1 : tangency continuity all along the Curve, | |

162 | -- G2 : curvature continuity all along the Curve, | |

163 | -- CN : the order of continuity is infinite. | |

164 | -- Warnings : | |

165 | -- Returns the continuity of the basis curve - 1. | |

166 | -- The offset curve must have a unique offset direction defined | |

167 | -- at any point. | |

168 | ||

169 | ||

170 | Direction (me) returns Dir; | |

171 | ---Purpose : Returns the reference vector of this offset curve. | |

172 | ---C++: return const& | |

173 | ||

174 | ---Purpose : Value and derivatives | |

175 | -- Warnings : | |

176 | -- The exception UndefinedValue or UndefinedDerivative is | |

177 | -- raised if it is not possible to compute a unique offset | |

178 | -- direction. | |

179 | -- If T is the first derivative with not null length and | |

180 | -- V the offset direction the relation ||T(U) ^ V|| != 0 | |

181 | -- must be satisfied to evaluate the offset curve. | |

182 | -- No check is done at the creation time and we suppose | |

183 | -- in this package that the offset curve is well defined. | |

184 | ||

185 | ||

186 | D0(me; U : Real; P : out Pnt); | |

187 | ---Purpose: Warning! this should not be called | |

188 | -- if the basis curve is not at least C1. Nevertheless | |

189 | -- if used on portion where the curve is C1, it is OK | |

190 | ||

191 | ||

192 | D1 (me; U : Real; P : out Pnt; V1 : out Vec) | |

193 | raises UndefinedDerivative; | |

194 | ---Purpose: Warning! this should not be called | |

195 | -- if the continuity of the basis curve is not C2. | |

196 | -- Nevertheless, it's OK to use it on portion | |

197 | -- where the curve is C2 | |

198 | ||

199 | ||

200 | D2 (me; U : Real; P : out Pnt; V1, V2 : out Vec) | |

201 | raises UndefinedDerivative; | |

202 | ---Purpose: Warning! this should not be called | |

203 | -- if the continuity of the basis curve is not C3. | |

204 | -- Nevertheless, it's OK to use it on portion | |

205 | -- where the curve is C3 | |

206 | ||

207 | ||

208 | ||

209 | D3 (me; U : Real; P : out Pnt; V1, V2, V3 : out Vec) | |

210 | raises UndefinedDerivative; | |

211 | ---Warning: | |

212 | -- this should not be called | |

213 | -- if the continuity of the basis curve is not C4. | |

214 | -- Nevertheless, it's OK to use it on portion | |

215 | -- where the curve is C4 | |

216 | ||

217 | ||

218 | ||

219 | ||

220 | DN (me; U : Real; N : Integer) returns Vec | |

221 | ---Purpose : | |

222 | -- The returned vector gives the value of the derivative | |

223 | -- for the order of derivation N. | |

224 | --Warning! | |

225 | -- this should not be called | |

226 | -- if the continuity of the basis curve is not CN+1. | |

227 | -- Nevertheless, it's OK to use it on portion | |

228 | -- where the curve is CN+1 | |

229 | ||

230 | raises UndefinedDerivative, | |

231 | ||

232 | ||

233 | ||

234 | ||

235 | ---Purpose : | |

236 | -- The following functions compute the value and derivatives | |

237 | -- on the offset curve and returns the derivatives on the | |

238 | -- basis curve too. | |

239 | -- The computation of the value and derivatives on the basis | |

240 | -- curve are used to evaluate the offset curve | |

241 | -- | |

242 | -- Warning: | |

243 | -- The exception UndefinedValue or UndefinedDerivative is | |

244 | -- raised if it is not possible to compute a unique offset | |

245 | -- direction. | |

246 | ||

247 | RangeError; | |

248 | ---Purpose : Raised if N < 1. | |

249 | -- | |

250 | ||

251 | Value (me; U : Real; P, Pbasis : out Pnt; V1basis : out Vec) | |

252 | raises UndefinedValue; | |

253 | ||

254 | ---Purpose: Warning! this should not be called | |

255 | -- if the basis curve is not at least C1. Nevertheless | |

256 | -- if used on portion where the curve is C1, it is OK | |

257 | ||

258 | D0 (me; U : Real; P, Pbasis : out Pnt; V1basis : out Vec) | |

259 | raises UndefinedValue; | |

260 | ---Purpose: Warning! this should not be called | |

261 | -- if the continuity of the basis curve is not C1. | |

262 | -- Nevertheless, it's OK to use it on portion | |

263 | -- where the curve is C1 | |

264 | ||

265 | ||

266 | ||

267 | D1 (me; U : Real; P, Pbasis : out Pnt; V1, V1basis, V2basis : out Vec) | |

268 | raises UndefinedDerivative; | |

269 | ---Purpose: Warning! this should not be called | |

270 | -- if the continuity of the basis curve is not C1. | |

271 | -- Nevertheless, it's OK to use it on portion | |

272 | -- where the curve is C1 | |

273 | ||

274 | D2 (me; U : Real; P, Pbasis : out Pnt; V1, V2, V1basis, V2basis, | |

275 | V3basis : out Vec) | |

276 | raises UndefinedDerivative; | |

277 | ||

278 | ---Purpose: Warning! this should not be called | |

279 | -- if the continuity of the basis curve is not C3. | |

280 | -- Nevertheless, it's OK to use it on portion | |

281 | -- where the curve is C3 | |

282 | FirstParameter (me) returns Real; | |

283 | ||

284 | LastParameter (me) returns Real; | |

285 | ||

286 | --- Purpose: Returns the value of the first or last parameter of this | |

287 | -- offset curve. The first parameter corresponds to the | |

288 | -- start point of the curve. The last parameter | |

289 | -- corresponds to the end point. | |

290 | -- Note: the first and last parameters of this offset curve | |

291 | -- are also the ones of its basis curve. | |

292 | ||

293 | Offset (me) returns Real; | |

294 | ---Purpose: Returns the offset value of this offset curve. | |

295 | ||

296 | IsClosed (me) returns Boolean; | |

297 | ---Purpose : Returns True if the distance between the start point | |

298 | -- and the end point of the curve is lower or equal to | |

299 | -- Resolution from package gp. | |

300 | ||

301 | ||

302 | IsCN (me; N : Integer) returns Boolean | |

303 | ---Purpose : Returns true if the degree of continuity of the basis | |

304 | -- curve of this offset curve is at least N + 1. | |

305 | -- This method answer True if the continuity of the basis curve | |

306 | -- is N + 1. We suppose in this class that a normal direction | |

307 | -- to the basis curve (used to compute the offset curve) is | |

308 | -- defined at any point on the basis curve. | |

309 | raises RangeError; | |

310 | ---Purpose : Raised if N < 0. | |

311 | ||

312 | ||

313 | IsPeriodic (me) returns Boolean; | |

314 | ---Purpose : Returns true if this offset curve is periodic, i.e. if the | |

315 | -- basis curve of this offset curve is periodic. | |

316 | ||

317 | ||

318 | Period (me) returns Real from Standard | |

319 | ---Purpose: Returns the period of this offset curve, i.e. the period | |

320 | -- of the basis curve of this offset curve. | |

321 | -- Exceptions | |

322 | -- Standard_NoSuchObject if the basis curve is not periodic. | |

323 | raises | |

324 | NoSuchObject from Standard | |

325 | is redefined; | |

326 | ||

327 | ||

328 | Transform (me : mutable; T : Trsf); | |

329 | --- Purpose: Applies the transformation T to this offset curve. | |

330 | -- Note: the basis curve is also modified. | |

331 | ||

332 | TransformedParameter(me; U : Real; T : Trsf from gp) returns Real | |

333 | ---Purpose: Returns the parameter on the transformed curve for | |

334 | -- the transform of the point of parameter U on <me>. | |

335 | -- me->Transformed(T)->Value(me->TransformedParameter(U,T)) | |

336 | -- is the same point as | |

337 | -- me->Value(U).Transformed(T) | |

338 | -- This methods calls the basis curve method. | |

339 | is redefined; | |

340 | ||

341 | ParametricTransformation(me; T : Trsf from gp) returns Real | |

342 | ---Purpose: Returns a coefficient to compute the parameter on | |

343 | -- the transformed curve for the transform of the | |

344 | -- point on <me>. | |

345 | -- | |

346 | -- Transformed(T)->Value(U * ParametricTransformation(T)) | |

347 | -- is the same point as | |

348 | -- Value(U).Transformed(T) | |

349 | -- This methods calls the basis curve method. | |

350 | is redefined; | |

351 | ||

352 | ||

353 | ||

354 | Copy (me) returns mutable like me; | |

355 | ---Purpose: Creates a new object which is a copy of this offset curve. | |

356 | ||

357 | fields | |

358 | ||

359 | basisCurve : Curve from Geom; | |

360 | direction : Dir; | |

361 | offsetValue : Real; | |

362 | ||

363 | end; |