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.
17 #include <AppDef_MultiPointConstraint.ixx>
19 #include <Standard_OutOfRange.hxx>
20 #include <Standard_ConstructionError.hxx>
21 #include <TColgp_HArray1OfPnt.hxx>
22 #include <TColgp_HArray1OfPnt2d.hxx>
23 #include <TColgp_HArray1OfVec.hxx>
24 #include <TColgp_HArray1OfVec2d.hxx>
27 #define tabTang (*(Handle_TColgp_HArray1OfVec*)&ttabTang)
28 #define tabCurv (*(Handle_TColgp_HArray1OfVec*)&ttabCurv)
29 #define tabTang2d (*(Handle_TColgp_HArray1OfVec2d*)&ttabTang2d)
30 #define tabCurv2d (*(Handle_TColgp_HArray1OfVec2d*)&ttabCurv2d)
35 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint() {}
39 AppDef_MultiPointConstraint::
40 AppDef_MultiPointConstraint(const Standard_Integer NbPoles,
41 const Standard_Integer NbPoles2d):
42 AppParCurves_MultiPoint(NbPoles, NbPoles2d)
46 AppDef_MultiPointConstraint::
47 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP):
48 AppParCurves_MultiPoint(tabP)
52 AppDef_MultiPointConstraint::
53 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt2d& tabP2d):
54 AppParCurves_MultiPoint(tabP2d)
61 AppDef_MultiPointConstraint::
62 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP,
63 const TColgp_Array1OfPnt2d& tabP2d):
64 AppParCurves_MultiPoint(tabP, tabP2d)
69 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
70 (const TColgp_Array1OfPnt& tabP,
71 const TColgp_Array1OfPnt2d& tabP2d,
72 const TColgp_Array1OfVec& tabVec,
73 const TColgp_Array1OfVec2d& tabVec2d,
74 const TColgp_Array1OfVec& tabCur,
75 const TColgp_Array1OfVec2d& tabCur2d):
76 AppParCurves_MultiPoint(tabP, tabP2d) {
78 if ((tabP.Length() != tabVec.Length()) ||
79 (tabP2d.Length() != tabVec2d.Length()) ||
80 (tabCur.Length() != tabP.Length()) ||
81 (tabCur2d.Length() != tabP2d.Length())) {
82 Standard_ConstructionError::Raise();
84 Handle(TColgp_HArray1OfVec) T3d =
85 new TColgp_HArray1OfVec(1, tabVec.Length());
89 Handle(TColgp_HArray1OfVec2d) T2d =
90 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
93 Standard_Integer i, Lower = tabVec.Lower();
94 for (i = 1; i <= tabVec.Length(); i++) {
95 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
97 Lower = tabVec2d.Lower();
98 for (i = 1; i <= tabVec2d.Length(); i++) {
99 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
102 Handle(TColgp_HArray1OfVec) C3d =
103 new TColgp_HArray1OfVec(1, tabCur.Length());
106 Handle(TColgp_HArray1OfVec2d) C2d =
107 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
110 Lower = tabCur.Lower();
111 for (i = 1; i <= tabVec.Length(); i++) {
112 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
114 Lower = tabCur2d.Lower();
115 for (i = 1; i <= tabCur2d.Length(); i++) {
116 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
122 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
123 (const TColgp_Array1OfPnt& tabP,
124 const TColgp_Array1OfPnt2d& tabP2d,
125 const TColgp_Array1OfVec& tabVec,
126 const TColgp_Array1OfVec2d& tabVec2d):
127 AppParCurves_MultiPoint(tabP, tabP2d) {
129 if ((tabP.Length() != tabVec.Length()) ||
130 (tabP2d.Length() != tabVec2d.Length())) {
131 Standard_ConstructionError::Raise();
135 Handle(TColgp_HArray1OfVec) T3d =
136 new TColgp_HArray1OfVec(1, tabVec.Length());
139 Handle(TColgp_HArray1OfVec2d) T2d =
140 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
143 Standard_Integer i, Lower = tabVec.Lower();
144 for (i = 1; i <= tabVec.Length(); i++) {
145 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
147 Lower = tabVec2d.Lower();
148 for (i = 1; i <= tabVec2d.Length(); i++) {
149 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
155 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint (
156 const TColgp_Array1OfPnt& tabP,
157 const TColgp_Array1OfVec& tabVec):
158 AppParCurves_MultiPoint(tabP) {
160 if (tabP.Length() != tabVec.Length()) {
161 Standard_ConstructionError::Raise();
163 Handle(TColgp_HArray1OfVec) T3d =
164 new TColgp_HArray1OfVec(1, tabVec.Length());
167 Standard_Integer i, Lower = tabVec.Lower();
168 for (i = 1; i <= tabVec.Length(); i++) {
169 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
174 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
175 (const TColgp_Array1OfPnt& tabP,
176 const TColgp_Array1OfVec& tabVec,
177 const TColgp_Array1OfVec& tabCur):
178 AppParCurves_MultiPoint(tabP) {
180 if ((tabP.Length() != tabVec.Length()) ||
181 (tabP.Length() != tabCur.Length())) {
182 Standard_ConstructionError::Raise();
184 Handle(TColgp_HArray1OfVec) T3d =
185 new TColgp_HArray1OfVec(1, tabVec.Length());
188 Standard_Integer i, Lower = tabVec.Lower();
189 for (i = 1; i <= tabVec.Length(); i++) {
190 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
193 Handle(TColgp_HArray1OfVec) C3d =
194 new TColgp_HArray1OfVec(1, tabCur.Length());
197 Lower = tabCur.Lower();
198 for (i = 1; i <= tabCur.Length(); i++) {
199 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
205 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
206 (const TColgp_Array1OfPnt2d& tabP2d,
207 const TColgp_Array1OfVec2d& tabVec2d):
209 AppParCurves_MultiPoint(tabP2d) {
211 if (tabP2d.Length() != tabVec2d.Length()) {
212 Standard_ConstructionError::Raise();
215 Handle(TColgp_HArray1OfVec2d) T2d =
216 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
219 Standard_Integer i, Lower = tabVec2d.Lower();
220 for (i = 1; i <= tabVec2d.Length(); i++) {
221 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
228 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
229 (const TColgp_Array1OfPnt2d& tabP2d,
230 const TColgp_Array1OfVec2d& tabVec2d,
231 const TColgp_Array1OfVec2d& tabCur2d):
232 AppParCurves_MultiPoint(tabP2d) {
234 if ((tabP2d.Length() != tabVec2d.Length()) ||
235 (tabCur2d.Length() != tabP2d.Length())) {
236 Standard_ConstructionError::Raise();
238 Handle(TColgp_HArray1OfVec2d) T2d =
239 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
242 Standard_Integer i, Lower = tabVec2d.Lower();
243 for (i = 1; i <= tabVec2d.Length(); i++) {
244 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
247 Handle(TColgp_HArray1OfVec2d) C2d =
248 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
251 Lower = tabCur2d.Lower();
252 for (i = 1; i <= tabCur2d.Length(); i++) {
253 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
259 void AppDef_MultiPointConstraint::SetTang (const Standard_Integer Index,
260 const gp_Vec& Tang) {
261 if (tabTang.IsNull())
262 tabTang = new TColgp_HArray1OfVec (1, nbP);
263 if ((Index <= 0) || (Index > nbP)) {
264 Standard_OutOfRange::Raise();
266 tabTang->SetValue(Index, Tang);
270 gp_Vec AppDef_MultiPointConstraint::Tang (const Standard_Integer Index) const {
271 if ((Index <= 0) || (Index > nbP)) {
272 Standard_OutOfRange::Raise();
274 return tabTang->Value(Index);
279 void AppDef_MultiPointConstraint::SetTang2d (const Standard_Integer Index,
280 const gp_Vec2d& Tang2d){
281 if (tabTang2d.IsNull())
282 tabTang2d = new TColgp_HArray1OfVec2d (1, nbP2d);
284 if ((Index <= nbP) ||
285 (Index > nbP+nbP2d)) {
286 Standard_OutOfRange::Raise();
288 tabTang2d->SetValue(Index-nbP, Tang2d);
292 gp_Vec2d AppDef_MultiPointConstraint::Tang2d (const Standard_Integer Index) const {
293 if ((Index <= nbP) ||
294 (Index > nbP+nbP2d)) {
295 Standard_OutOfRange::Raise();
297 return tabTang2d->Value(Index-nbP);
301 void AppDef_MultiPointConstraint::SetCurv (const Standard_Integer Index, const gp_Vec& Curv) {
302 if (tabCurv.IsNull())
303 tabCurv = new TColgp_HArray1OfVec (1, nbP);
304 if ((Index <= 0) || (Index > nbP)) {
305 Standard_OutOfRange::Raise();
307 tabCurv->SetValue(Index, Curv);
311 gp_Vec AppDef_MultiPointConstraint::Curv (const Standard_Integer Index) const {
312 if ((Index <= 0) || (Index > nbP)) {
313 Standard_OutOfRange::Raise();
315 return tabCurv->Value(Index);
320 void AppDef_MultiPointConstraint::SetCurv2d (const Standard_Integer Index,
321 const gp_Vec2d& Curv2d){
322 if (tabCurv2d.IsNull())
323 tabCurv2d = new TColgp_HArray1OfVec2d (1, nbP2d);
324 if ((Index <= nbP) ||
325 (Index > nbP+nbP2d)) {
326 Standard_OutOfRange::Raise();
328 tabCurv2d->SetValue(Index- nbP, Curv2d);
333 gp_Vec2d AppDef_MultiPointConstraint::Curv2d (const Standard_Integer Index) const {
334 if ((Index <= nbP) ||
335 (Index > nbP+nbP2d)) {
336 Standard_OutOfRange::Raise();
338 return tabCurv2d->Value(Index - nbP);
342 Standard_Boolean AppDef_MultiPointConstraint::IsTangencyPoint() const
344 return !(tabTang.IsNull() && tabTang2d.IsNull());
347 Standard_Boolean AppDef_MultiPointConstraint::IsCurvaturePoint() const
349 return !(tabCurv.IsNull() && tabCurv2d.IsNull());
355 void AppDef_MultiPointConstraint::Dump(Standard_OStream& o) const
357 o << "AppDef_MultiPointConstraint dump:" << endl;