1 // File: AppDef_MultiPointConstraint.cxx
7 #include <AppDef_MultiPointConstraint.ixx>
9 #include <Standard_OutOfRange.hxx>
10 #include <Standard_ConstructionError.hxx>
11 #include <TColgp_HArray1OfPnt.hxx>
12 #include <TColgp_HArray1OfPnt2d.hxx>
13 #include <TColgp_HArray1OfVec.hxx>
14 #include <TColgp_HArray1OfVec2d.hxx>
17 #define tabTang (*(Handle_TColgp_HArray1OfVec*)&ttabTang)
18 #define tabCurv (*(Handle_TColgp_HArray1OfVec*)&ttabCurv)
19 #define tabTang2d (*(Handle_TColgp_HArray1OfVec2d*)&ttabTang2d)
20 #define tabCurv2d (*(Handle_TColgp_HArray1OfVec2d*)&ttabCurv2d)
25 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint() {}
29 AppDef_MultiPointConstraint::
30 AppDef_MultiPointConstraint(const Standard_Integer NbPoles,
31 const Standard_Integer NbPoles2d):
32 AppParCurves_MultiPoint(NbPoles, NbPoles2d)
36 AppDef_MultiPointConstraint::
37 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP):
38 AppParCurves_MultiPoint(tabP)
42 AppDef_MultiPointConstraint::
43 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt2d& tabP2d):
44 AppParCurves_MultiPoint(tabP2d)
51 AppDef_MultiPointConstraint::
52 AppDef_MultiPointConstraint(const TColgp_Array1OfPnt& tabP,
53 const TColgp_Array1OfPnt2d& tabP2d):
54 AppParCurves_MultiPoint(tabP, tabP2d)
59 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
60 (const TColgp_Array1OfPnt& tabP,
61 const TColgp_Array1OfPnt2d& tabP2d,
62 const TColgp_Array1OfVec& tabVec,
63 const TColgp_Array1OfVec2d& tabVec2d,
64 const TColgp_Array1OfVec& tabCur,
65 const TColgp_Array1OfVec2d& tabCur2d):
66 AppParCurves_MultiPoint(tabP, tabP2d) {
68 if ((tabP.Length() != tabVec.Length()) ||
69 (tabP2d.Length() != tabVec2d.Length()) ||
70 (tabCur.Length() != tabP.Length()) ||
71 (tabCur2d.Length() != tabP2d.Length())) {
72 Standard_ConstructionError::Raise();
74 Handle(TColgp_HArray1OfVec) T3d =
75 new TColgp_HArray1OfVec(1, tabVec.Length());
79 Handle(TColgp_HArray1OfVec2d) T2d =
80 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
83 Standard_Integer i, Lower = tabVec.Lower();
84 for (i = 1; i <= tabVec.Length(); i++) {
85 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
87 Lower = tabVec2d.Lower();
88 for (i = 1; i <= tabVec2d.Length(); i++) {
89 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
92 Handle(TColgp_HArray1OfVec) C3d =
93 new TColgp_HArray1OfVec(1, tabCur.Length());
96 Handle(TColgp_HArray1OfVec2d) C2d =
97 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
100 Lower = tabCur.Lower();
101 for (i = 1; i <= tabVec.Length(); i++) {
102 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
104 Lower = tabCur2d.Lower();
105 for (i = 1; i <= tabCur2d.Length(); i++) {
106 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
112 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
113 (const TColgp_Array1OfPnt& tabP,
114 const TColgp_Array1OfPnt2d& tabP2d,
115 const TColgp_Array1OfVec& tabVec,
116 const TColgp_Array1OfVec2d& tabVec2d):
117 AppParCurves_MultiPoint(tabP, tabP2d) {
119 if ((tabP.Length() != tabVec.Length()) ||
120 (tabP2d.Length() != tabVec2d.Length())) {
121 Standard_ConstructionError::Raise();
125 Handle(TColgp_HArray1OfVec) T3d =
126 new TColgp_HArray1OfVec(1, tabVec.Length());
129 Handle(TColgp_HArray1OfVec2d) T2d =
130 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
133 Standard_Integer i, Lower = tabVec.Lower();
134 for (i = 1; i <= tabVec.Length(); i++) {
135 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
137 Lower = tabVec2d.Lower();
138 for (i = 1; i <= tabVec2d.Length(); i++) {
139 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
145 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint (
146 const TColgp_Array1OfPnt& tabP,
147 const TColgp_Array1OfVec& tabVec):
148 AppParCurves_MultiPoint(tabP) {
150 if (tabP.Length() != tabVec.Length()) {
151 Standard_ConstructionError::Raise();
153 Handle(TColgp_HArray1OfVec) T3d =
154 new TColgp_HArray1OfVec(1, tabVec.Length());
157 Standard_Integer i, Lower = tabVec.Lower();
158 for (i = 1; i <= tabVec.Length(); i++) {
159 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
164 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
165 (const TColgp_Array1OfPnt& tabP,
166 const TColgp_Array1OfVec& tabVec,
167 const TColgp_Array1OfVec& tabCur):
168 AppParCurves_MultiPoint(tabP) {
170 if ((tabP.Length() != tabVec.Length()) ||
171 (tabP.Length() != tabCur.Length())) {
172 Standard_ConstructionError::Raise();
174 Handle(TColgp_HArray1OfVec) T3d =
175 new TColgp_HArray1OfVec(1, tabVec.Length());
178 Standard_Integer i, Lower = tabVec.Lower();
179 for (i = 1; i <= tabVec.Length(); i++) {
180 tabTang->SetValue(i, tabVec.Value(Lower+i-1));
183 Handle(TColgp_HArray1OfVec) C3d =
184 new TColgp_HArray1OfVec(1, tabCur.Length());
187 Lower = tabCur.Lower();
188 for (i = 1; i <= tabCur.Length(); i++) {
189 tabCurv->SetValue(i, tabCur.Value(Lower+i-1));
195 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
196 (const TColgp_Array1OfPnt2d& tabP2d,
197 const TColgp_Array1OfVec2d& tabVec2d):
199 AppParCurves_MultiPoint(tabP2d) {
201 if (tabP2d.Length() != tabVec2d.Length()) {
202 Standard_ConstructionError::Raise();
205 Handle(TColgp_HArray1OfVec2d) T2d =
206 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
209 Standard_Integer i, Lower = tabVec2d.Lower();
210 for (i = 1; i <= tabVec2d.Length(); i++) {
211 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
218 AppDef_MultiPointConstraint::AppDef_MultiPointConstraint
219 (const TColgp_Array1OfPnt2d& tabP2d,
220 const TColgp_Array1OfVec2d& tabVec2d,
221 const TColgp_Array1OfVec2d& tabCur2d):
222 AppParCurves_MultiPoint(tabP2d) {
224 if ((tabP2d.Length() != tabVec2d.Length()) ||
225 (tabCur2d.Length() != tabP2d.Length())) {
226 Standard_ConstructionError::Raise();
228 Handle(TColgp_HArray1OfVec2d) T2d =
229 new TColgp_HArray1OfVec2d(1, tabVec2d.Length());
232 Standard_Integer i, Lower = tabVec2d.Lower();
233 for (i = 1; i <= tabVec2d.Length(); i++) {
234 tabTang2d->SetValue(i, tabVec2d.Value(Lower+i-1));
237 Handle(TColgp_HArray1OfVec2d) C2d =
238 new TColgp_HArray1OfVec2d(1, tabCur2d.Length());
241 Lower = tabCur2d.Lower();
242 for (i = 1; i <= tabCur2d.Length(); i++) {
243 tabCurv2d->SetValue(i, tabCur2d.Value(Lower+i-1));
249 void AppDef_MultiPointConstraint::SetTang (const Standard_Integer Index,
250 const gp_Vec& Tang) {
251 if (tabTang.IsNull())
252 tabTang = new TColgp_HArray1OfVec (1, nbP);
253 if ((Index <= 0) || (Index > nbP)) {
254 Standard_OutOfRange::Raise();
256 tabTang->SetValue(Index, Tang);
260 gp_Vec AppDef_MultiPointConstraint::Tang (const Standard_Integer Index) const {
261 if ((Index <= 0) || (Index > nbP)) {
262 Standard_OutOfRange::Raise();
264 return tabTang->Value(Index);
269 void AppDef_MultiPointConstraint::SetTang2d (const Standard_Integer Index,
270 const gp_Vec2d& Tang2d){
271 if (tabTang2d.IsNull())
272 tabTang2d = new TColgp_HArray1OfVec2d (1, nbP2d);
274 if ((Index <= nbP) ||
275 (Index > nbP+nbP2d)) {
276 Standard_OutOfRange::Raise();
278 tabTang2d->SetValue(Index-nbP, Tang2d);
282 gp_Vec2d AppDef_MultiPointConstraint::Tang2d (const Standard_Integer Index) const {
283 if ((Index <= nbP) ||
284 (Index > nbP+nbP2d)) {
285 Standard_OutOfRange::Raise();
287 return tabTang2d->Value(Index-nbP);
291 void AppDef_MultiPointConstraint::SetCurv (const Standard_Integer Index, const gp_Vec& Curv) {
292 if (tabCurv.IsNull())
293 tabCurv = new TColgp_HArray1OfVec (1, nbP);
294 if ((Index <= 0) || (Index > nbP)) {
295 Standard_OutOfRange::Raise();
297 tabCurv->SetValue(Index, Curv);
301 gp_Vec AppDef_MultiPointConstraint::Curv (const Standard_Integer Index) const {
302 if ((Index <= 0) || (Index > nbP)) {
303 Standard_OutOfRange::Raise();
305 return tabCurv->Value(Index);
310 void AppDef_MultiPointConstraint::SetCurv2d (const Standard_Integer Index,
311 const gp_Vec2d& Curv2d){
312 if (tabCurv2d.IsNull())
313 tabCurv2d = new TColgp_HArray1OfVec2d (1, nbP2d);
314 if ((Index <= nbP) ||
315 (Index > nbP+nbP2d)) {
316 Standard_OutOfRange::Raise();
318 tabCurv2d->SetValue(Index- nbP, Curv2d);
323 gp_Vec2d AppDef_MultiPointConstraint::Curv2d (const Standard_Integer Index) const {
324 if ((Index <= nbP) ||
325 (Index > nbP+nbP2d)) {
326 Standard_OutOfRange::Raise();
328 return tabCurv2d->Value(Index - nbP);
332 Standard_Boolean AppDef_MultiPointConstraint::IsTangencyPoint() const
334 return !(tabTang.IsNull() && tabTang2d.IsNull());
337 Standard_Boolean AppDef_MultiPointConstraint::IsCurvaturePoint() const
339 return !(tabCurv.IsNull() && tabCurv2d.IsNull());
345 void AppDef_MultiPointConstraint::Dump(Standard_OStream& o) const
347 o << "AppDef_MultiPointConstraint dump:" << endl;