1 // Created on: 1991-03-16
3 // Copyright (c) 1991-1999 Matra Datavision
4 // Copyright (c) 1999-2012 OPEN CASCADE SAS
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.
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.
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.
23 #include <AppDef_MultiPointConstraint.ixx>
25 #include <Standard_OutOfRange.hxx>
26 #include <Standard_ConstructionError.hxx>
27 #include <TColgp_HArray1OfPnt.hxx>
28 #include <TColgp_HArray1OfPnt2d.hxx>
29 #include <TColgp_HArray1OfVec.hxx>
30 #include <TColgp_HArray1OfVec2d.hxx>
33 #define tabTang (*(Handle_TColgp_HArray1OfVec*)&ttabTang)
34 #define tabCurv (*(Handle_TColgp_HArray1OfVec*)&ttabCurv)
35 #define tabTang2d (*(Handle_TColgp_HArray1OfVec2d*)&ttabTang2d)
36 #define tabCurv2d (*(Handle_TColgp_HArray1OfVec2d*)&ttabCurv2d)
41 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint() {}
45 AppDef_MultiPointConstraint::
46 AppDef_MultiPointConstraint(const Standard_Integer NbPoles,
47 const Standard_Integer NbPoles2d):
48 AppParCurves_MultiPoint(NbPoles, NbPoles2d)
52 AppDef_MultiPointConstraint::
53 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP):
54 AppParCurves_MultiPoint(tabP)
58 AppDef_MultiPointConstraint::
59 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt2d& tabP2d):
60 AppParCurves_MultiPoint(tabP2d)
67 AppDef_MultiPointConstraint::
68 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP,
69 const TColgp_Array1OfPnt2d& tabP2d):
70 AppParCurves_MultiPoint(tabP, tabP2d)
75 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
76 (const TColgp_Array1OfPnt& tabP,
77 const TColgp_Array1OfPnt2d& tabP2d,
78 const TColgp_Array1OfVec& tabVec,
79 const TColgp_Array1OfVec2d& tabVec2d,
80 const TColgp_Array1OfVec& tabCur,
81 const TColgp_Array1OfVec2d& tabCur2d):
82 AppParCurves_MultiPoint(tabP, tabP2d) {
84 if ((tabP.Length() != tabVec.Length()) ||
85 (tabP2d.Length() != tabVec2d.Length()) ||
86 (tabCur.Length() != tabP.Length()) ||
87 (tabCur2d.Length() != tabP2d.Length())) {
88 Standard_ConstructionError::Raise();
90 Handle(TColgp_HArray1OfVec) T3d =
91 new TColgp_HArray1OfVec(1, tabVec.Length());
95 Handle(TColgp_HArray1OfVec2d) T2d =
96 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
99 Standard_Integer i, Lower = tabVec.Lower();
100 for (i = 1; i <= tabVec.Length(); i++) {
101 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
103 Lower = tabVec2d.Lower();
104 for (i = 1; i <= tabVec2d.Length(); i++) {
105 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
108 Handle(TColgp_HArray1OfVec) C3d =
109 new TColgp_HArray1OfVec(1, tabCur.Length());
112 Handle(TColgp_HArray1OfVec2d) C2d =
113 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
116 Lower = tabCur.Lower();
117 for (i = 1; i <= tabVec.Length(); i++) {
118 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
120 Lower = tabCur2d.Lower();
121 for (i = 1; i <= tabCur2d.Length(); i++) {
122 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
128 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
129 (const TColgp_Array1OfPnt& tabP,
130 const TColgp_Array1OfPnt2d& tabP2d,
131 const TColgp_Array1OfVec& tabVec,
132 const TColgp_Array1OfVec2d& tabVec2d):
133 AppParCurves_MultiPoint(tabP, tabP2d) {
135 if ((tabP.Length() != tabVec.Length()) ||
136 (tabP2d.Length() != tabVec2d.Length())) {
137 Standard_ConstructionError::Raise();
141 Handle(TColgp_HArray1OfVec) T3d =
142 new TColgp_HArray1OfVec(1, tabVec.Length());
145 Handle(TColgp_HArray1OfVec2d) T2d =
146 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
149 Standard_Integer i, Lower = tabVec.Lower();
150 for (i = 1; i <= tabVec.Length(); i++) {
151 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
153 Lower = tabVec2d.Lower();
154 for (i = 1; i <= tabVec2d.Length(); i++) {
155 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
161 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint (
162 const TColgp_Array1OfPnt& tabP,
163 const TColgp_Array1OfVec& tabVec):
164 AppParCurves_MultiPoint(tabP) {
166 if (tabP.Length() != tabVec.Length()) {
167 Standard_ConstructionError::Raise();
169 Handle(TColgp_HArray1OfVec) T3d =
170 new TColgp_HArray1OfVec(1, tabVec.Length());
173 Standard_Integer i, Lower = tabVec.Lower();
174 for (i = 1; i <= tabVec.Length(); i++) {
175 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
180 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
181 (const TColgp_Array1OfPnt& tabP,
182 const TColgp_Array1OfVec& tabVec,
183 const TColgp_Array1OfVec& tabCur):
184 AppParCurves_MultiPoint(tabP) {
186 if ((tabP.Length() != tabVec.Length()) ||
187 (tabP.Length() != tabCur.Length())) {
188 Standard_ConstructionError::Raise();
190 Handle(TColgp_HArray1OfVec) T3d =
191 new TColgp_HArray1OfVec(1, tabVec.Length());
194 Standard_Integer i, Lower = tabVec.Lower();
195 for (i = 1; i <= tabVec.Length(); i++) {
196 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
199 Handle(TColgp_HArray1OfVec) C3d =
200 new TColgp_HArray1OfVec(1, tabCur.Length());
203 Lower = tabCur.Lower();
204 for (i = 1; i <= tabCur.Length(); i++) {
205 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
211 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
212 (const TColgp_Array1OfPnt2d& tabP2d,
213 const TColgp_Array1OfVec2d& tabVec2d):
215 AppParCurves_MultiPoint(tabP2d) {
217 if (tabP2d.Length() != tabVec2d.Length()) {
218 Standard_ConstructionError::Raise();
221 Handle(TColgp_HArray1OfVec2d) T2d =
222 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
225 Standard_Integer i, Lower = tabVec2d.Lower();
226 for (i = 1; i <= tabVec2d.Length(); i++) {
227 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
234 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
235 (const TColgp_Array1OfPnt2d& tabP2d,
236 const TColgp_Array1OfVec2d& tabVec2d,
237 const TColgp_Array1OfVec2d& tabCur2d):
238 AppParCurves_MultiPoint(tabP2d) {
240 if ((tabP2d.Length() != tabVec2d.Length()) ||
241 (tabCur2d.Length() != tabP2d.Length())) {
242 Standard_ConstructionError::Raise();
244 Handle(TColgp_HArray1OfVec2d) T2d =
245 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
248 Standard_Integer i, Lower = tabVec2d.Lower();
249 for (i = 1; i <= tabVec2d.Length(); i++) {
250 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
253 Handle(TColgp_HArray1OfVec2d) C2d =
254 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
257 Lower = tabCur2d.Lower();
258 for (i = 1; i <= tabCur2d.Length(); i++) {
259 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
265 void AppDef_MultiPointConstraint::SetTang (const Standard_Integer Index,
266 const gp_Vec& Tang) {
267 if (tabTang.IsNull())
268 tabTang = new TColgp_HArray1OfVec (1, nbP);
269 if ((Index <= 0) || (Index > nbP)) {
270 Standard_OutOfRange::Raise();
272 tabTang->SetValue(Index, Tang);
276 gp_Vec AppDef_MultiPointConstraint::Tang (const Standard_Integer Index) const {
277 if ((Index <= 0) || (Index > nbP)) {
278 Standard_OutOfRange::Raise();
280 return tabTang->Value(Index);
285 void AppDef_MultiPointConstraint::SetTang2d (const Standard_Integer Index,
286 const gp_Vec2d& Tang2d){
287 if (tabTang2d.IsNull())
288 tabTang2d = new TColgp_HArray1OfVec2d (1, nbP2d);
290 if ((Index <= nbP) ||
291 (Index > nbP+nbP2d)) {
292 Standard_OutOfRange::Raise();
294 tabTang2d->SetValue(Index-nbP, Tang2d);
298 gp_Vec2d AppDef_MultiPointConstraint::Tang2d (const Standard_Integer Index) const {
299 if ((Index <= nbP) ||
300 (Index > nbP+nbP2d)) {
301 Standard_OutOfRange::Raise();
303 return tabTang2d->Value(Index-nbP);
307 void AppDef_MultiPointConstraint::SetCurv (const Standard_Integer Index, const gp_Vec& Curv) {
308 if (tabCurv.IsNull())
309 tabCurv = new TColgp_HArray1OfVec (1, nbP);
310 if ((Index <= 0) || (Index > nbP)) {
311 Standard_OutOfRange::Raise();
313 tabCurv->SetValue(Index, Curv);
317 gp_Vec AppDef_MultiPointConstraint::Curv (const Standard_Integer Index) const {
318 if ((Index <= 0) || (Index > nbP)) {
319 Standard_OutOfRange::Raise();
321 return tabCurv->Value(Index);
326 void AppDef_MultiPointConstraint::SetCurv2d (const Standard_Integer Index,
327 const gp_Vec2d& Curv2d){
328 if (tabCurv2d.IsNull())
329 tabCurv2d = new TColgp_HArray1OfVec2d (1, nbP2d);
330 if ((Index <= nbP) ||
331 (Index > nbP+nbP2d)) {
332 Standard_OutOfRange::Raise();
334 tabCurv2d->SetValue(Index- nbP, Curv2d);
339 gp_Vec2d AppDef_MultiPointConstraint::Curv2d (const Standard_Integer Index) const {
340 if ((Index <= nbP) ||
341 (Index > nbP+nbP2d)) {
342 Standard_OutOfRange::Raise();
344 return tabCurv2d->Value(Index - nbP);
348 Standard_Boolean AppDef_MultiPointConstraint::IsTangencyPoint() const
350 return !(tabTang.IsNull() && tabTang2d.IsNull());
353 Standard_Boolean AppDef_MultiPointConstraint::IsCurvaturePoint() const
355 return !(tabCurv.IsNull() && tabCurv2d.IsNull());
361 void AppDef_MultiPointConstraint::Dump(Standard_OStream& o) const
363 o << "AppDef_MultiPointConstraint dump:" << endl;