1 // Created on: 1991-03-16
3 // Copyright (c) 1991-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
18 #include <AppDef_MultiPointConstraint.hxx>
20 #include <gp_Vec2d.hxx>
21 #include <MMgt_TShared.hxx>
22 #include <Standard_ConstructionError.hxx>
23 #include <Standard_DimensionError.hxx>
24 #include <Standard_OutOfRange.hxx>
25 #include <TColgp_HArray1OfPnt.hxx>
26 #include <TColgp_HArray1OfPnt2d.hxx>
27 #include <TColgp_HArray1OfVec.hxx>
28 #include <TColgp_HArray1OfVec2d.hxx>
30 #define tabTang Handle(TColgp_HArray1OfVec)::DownCast (ttabTang)
31 #define tabCurv Handle(TColgp_HArray1OfVec)::DownCast (ttabCurv)
32 #define tabTang2d Handle(TColgp_HArray1OfVec2d)::DownCast (ttabTang2d)
33 #define tabCurv2d Handle(TColgp_HArray1OfVec2d)::DownCast (ttabCurv2d)
38 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint() {}
42 AppDef_MultiPointConstraint::
43 AppDef_MultiPointConstraint(const Standard_Integer NbPoles,
44 const Standard_Integer NbPoles2d):
45 AppParCurves_MultiPoint(NbPoles, NbPoles2d)
49 AppDef_MultiPointConstraint::
50 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP):
51 AppParCurves_MultiPoint(tabP)
55 AppDef_MultiPointConstraint::
56 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt2d& tabP2d):
57 AppParCurves_MultiPoint(tabP2d)
64 AppDef_MultiPointConstraint::
65 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP,
66 const TColgp_Array1OfPnt2d& tabP2d):
67 AppParCurves_MultiPoint(tabP, tabP2d)
72 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
73 (const TColgp_Array1OfPnt& tabP,
74 const TColgp_Array1OfPnt2d& tabP2d,
75 const TColgp_Array1OfVec& tabVec,
76 const TColgp_Array1OfVec2d& tabVec2d,
77 const TColgp_Array1OfVec& tabCur,
78 const TColgp_Array1OfVec2d& tabCur2d):
79 AppParCurves_MultiPoint(tabP, tabP2d) {
81 if ((tabP.Length() != tabVec.Length()) ||
82 (tabP2d.Length() != tabVec2d.Length()) ||
83 (tabCur.Length() != tabP.Length()) ||
84 (tabCur2d.Length() != tabP2d.Length())) {
85 Standard_ConstructionError::Raise();
87 Handle(TColgp_HArray1OfVec) T3d =
88 new TColgp_HArray1OfVec(1, tabVec.Length());
92 Handle(TColgp_HArray1OfVec2d) T2d =
93 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
96 Standard_Integer i, Lower = tabVec.Lower();
97 for (i = 1; i <= tabVec.Length(); i++) {
98 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
100 Lower = tabVec2d.Lower();
101 for (i = 1; i <= tabVec2d.Length(); i++) {
102 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
105 Handle(TColgp_HArray1OfVec) C3d =
106 new TColgp_HArray1OfVec(1, tabCur.Length());
109 Handle(TColgp_HArray1OfVec2d) C2d =
110 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
113 Lower = tabCur.Lower();
114 for (i = 1; i <= tabVec.Length(); i++) {
115 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
117 Lower = tabCur2d.Lower();
118 for (i = 1; i <= tabCur2d.Length(); i++) {
119 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
125 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
126 (const TColgp_Array1OfPnt& tabP,
127 const TColgp_Array1OfPnt2d& tabP2d,
128 const TColgp_Array1OfVec& tabVec,
129 const TColgp_Array1OfVec2d& tabVec2d):
130 AppParCurves_MultiPoint(tabP, tabP2d) {
132 if ((tabP.Length() != tabVec.Length()) ||
133 (tabP2d.Length() != tabVec2d.Length())) {
134 Standard_ConstructionError::Raise();
138 Handle(TColgp_HArray1OfVec) T3d =
139 new TColgp_HArray1OfVec(1, tabVec.Length());
142 Handle(TColgp_HArray1OfVec2d) T2d =
143 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
146 Standard_Integer i, Lower = tabVec.Lower();
147 for (i = 1; i <= tabVec.Length(); i++) {
148 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
150 Lower = tabVec2d.Lower();
151 for (i = 1; i <= tabVec2d.Length(); i++) {
152 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
158 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint (
159 const TColgp_Array1OfPnt& tabP,
160 const TColgp_Array1OfVec& tabVec):
161 AppParCurves_MultiPoint(tabP) {
163 if (tabP.Length() != tabVec.Length()) {
164 Standard_ConstructionError::Raise();
166 Handle(TColgp_HArray1OfVec) T3d =
167 new TColgp_HArray1OfVec(1, tabVec.Length());
170 Standard_Integer i, Lower = tabVec.Lower();
171 for (i = 1; i <= tabVec.Length(); i++) {
172 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
177 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
178 (const TColgp_Array1OfPnt& tabP,
179 const TColgp_Array1OfVec& tabVec,
180 const TColgp_Array1OfVec& tabCur):
181 AppParCurves_MultiPoint(tabP) {
183 if ((tabP.Length() != tabVec.Length()) ||
184 (tabP.Length() != tabCur.Length())) {
185 Standard_ConstructionError::Raise();
187 Handle(TColgp_HArray1OfVec) T3d =
188 new TColgp_HArray1OfVec(1, tabVec.Length());
191 Standard_Integer i, Lower = tabVec.Lower();
192 for (i = 1; i <= tabVec.Length(); i++) {
193 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
196 Handle(TColgp_HArray1OfVec) C3d =
197 new TColgp_HArray1OfVec(1, tabCur.Length());
200 Lower = tabCur.Lower();
201 for (i = 1; i <= tabCur.Length(); i++) {
202 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
208 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
209 (const TColgp_Array1OfPnt2d& tabP2d,
210 const TColgp_Array1OfVec2d& tabVec2d):
212 AppParCurves_MultiPoint(tabP2d) {
214 if (tabP2d.Length() != tabVec2d.Length()) {
215 Standard_ConstructionError::Raise();
218 Handle(TColgp_HArray1OfVec2d) T2d =
219 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
222 Standard_Integer i, Lower = tabVec2d.Lower();
223 for (i = 1; i <= tabVec2d.Length(); i++) {
224 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
231 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
232 (const TColgp_Array1OfPnt2d& tabP2d,
233 const TColgp_Array1OfVec2d& tabVec2d,
234 const TColgp_Array1OfVec2d& tabCur2d):
235 AppParCurves_MultiPoint(tabP2d) {
237 if ((tabP2d.Length() != tabVec2d.Length()) ||
238 (tabCur2d.Length() != tabP2d.Length())) {
239 Standard_ConstructionError::Raise();
241 Handle(TColgp_HArray1OfVec2d) T2d =
242 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
245 Standard_Integer i, Lower = tabVec2d.Lower();
246 for (i = 1; i <= tabVec2d.Length(); i++) {
247 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
250 Handle(TColgp_HArray1OfVec2d) C2d =
251 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
254 Lower = tabCur2d.Lower();
255 for (i = 1; i <= tabCur2d.Length(); i++) {
256 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
262 void AppDef_MultiPointConstraint::SetTang (const Standard_Integer Index,
263 const gp_Vec& Tang) {
264 if (tabTang.IsNull())
265 tabTang = new TColgp_HArray1OfVec (1, nbP);
266 if ((Index <= 0) || (Index > nbP)) {
267 Standard_OutOfRange::Raise();
269 tabTang->SetValue(Index, Tang);
273 gp_Vec AppDef_MultiPointConstraint::Tang (const Standard_Integer Index) const {
274 if ((Index <= 0) || (Index > nbP)) {
275 Standard_OutOfRange::Raise();
277 return tabTang->Value(Index);
282 void AppDef_MultiPointConstraint::SetTang2d (const Standard_Integer Index,
283 const gp_Vec2d& Tang2d){
284 if (tabTang2d.IsNull())
285 tabTang2d = new TColgp_HArray1OfVec2d (1, nbP2d);
287 if ((Index <= nbP) ||
288 (Index > nbP+nbP2d)) {
289 Standard_OutOfRange::Raise();
291 tabTang2d->SetValue(Index-nbP, Tang2d);
295 gp_Vec2d AppDef_MultiPointConstraint::Tang2d (const Standard_Integer Index) const {
296 if ((Index <= nbP) ||
297 (Index > nbP+nbP2d)) {
298 Standard_OutOfRange::Raise();
300 return tabTang2d->Value(Index-nbP);
304 void AppDef_MultiPointConstraint::SetCurv (const Standard_Integer Index, const gp_Vec& Curv) {
305 if (tabCurv.IsNull())
306 tabCurv = new TColgp_HArray1OfVec (1, nbP);
307 if ((Index <= 0) || (Index > nbP)) {
308 Standard_OutOfRange::Raise();
310 tabCurv->SetValue(Index, Curv);
314 gp_Vec AppDef_MultiPointConstraint::Curv (const Standard_Integer Index) const {
315 if ((Index <= 0) || (Index > nbP)) {
316 Standard_OutOfRange::Raise();
318 return tabCurv->Value(Index);
323 void AppDef_MultiPointConstraint::SetCurv2d (const Standard_Integer Index,
324 const gp_Vec2d& Curv2d){
325 if (tabCurv2d.IsNull())
326 tabCurv2d = new TColgp_HArray1OfVec2d (1, nbP2d);
327 if ((Index <= nbP) ||
328 (Index > nbP+nbP2d)) {
329 Standard_OutOfRange::Raise();
331 tabCurv2d->SetValue(Index- nbP, Curv2d);
336 gp_Vec2d AppDef_MultiPointConstraint::Curv2d (const Standard_Integer Index) const {
337 if ((Index <= nbP) ||
338 (Index > nbP+nbP2d)) {
339 Standard_OutOfRange::Raise();
341 return tabCurv2d->Value(Index - nbP);
345 Standard_Boolean AppDef_MultiPointConstraint::IsTangencyPoint() const
347 return !(tabTang.IsNull() && tabTang2d.IsNull());
350 Standard_Boolean AppDef_MultiPointConstraint::IsCurvaturePoint() const
352 return !(tabCurv.IsNull() && tabCurv2d.IsNull());
358 void AppDef_MultiPointConstraint::Dump(Standard_OStream& o) const
360 o << "AppDef_MultiPointConstraint dump:" << endl;