File indexing completed on 2026-09-09 09:15:08
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017 #ifndef _BSplSLib_HeaderFile
0018 #define _BSplSLib_HeaderFile
0019
0020 #include <BSplSLib_EvaluatorFunction.hxx>
0021 #include <Standard.hxx>
0022 #include <Standard_DefineAlloc.hxx>
0023 #include <TColgp_Array1OfPnt.hxx>
0024 #include <TColgp_Array2OfPnt.hxx>
0025 #include <TColStd_Array1OfInteger.hxx>
0026 #include <TColStd_Array1OfReal.hxx>
0027 #include <TColStd_Array2OfReal.hxx>
0028
0029 class gp_Pnt;
0030 class gp_Vec;
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065
0066
0067
0068
0069
0070
0071
0072
0073
0074
0075
0076
0077
0078
0079
0080
0081
0082
0083
0084
0085
0086 class BSplSLib
0087 {
0088 public:
0089 DEFINE_STANDARD_ALLOC
0090
0091
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110
0111
0112
0113
0114
0115
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127
0128
0129
0130
0131
0132
0133
0134
0135
0136
0137
0138
0139
0140
0141
0142
0143
0144
0145
0146
0147
0148
0149
0150
0151
0152
0153
0154
0155
0156
0157
0158
0159
0160
0161
0162
0163
0164
0165
0166
0167
0168
0169
0170
0171
0172
0173
0174 Standard_EXPORT static void RationalDerivative(const Standard_Integer UDeg,
0175 const Standard_Integer VDeg,
0176 const Standard_Integer N,
0177 const Standard_Integer M,
0178 Standard_Real& Ders,
0179 Standard_Real& RDers,
0180 const Standard_Boolean All = Standard_True);
0181
0182 Standard_EXPORT static void D0(const Standard_Real U,
0183 const Standard_Real V,
0184 const Standard_Integer UIndex,
0185 const Standard_Integer VIndex,
0186 const TColgp_Array2OfPnt& Poles,
0187 const TColStd_Array2OfReal* Weights,
0188 const TColStd_Array1OfReal& UKnots,
0189 const TColStd_Array1OfReal& VKnots,
0190 const TColStd_Array1OfInteger* UMults,
0191 const TColStd_Array1OfInteger* VMults,
0192 const Standard_Integer UDegree,
0193 const Standard_Integer VDegree,
0194 const Standard_Boolean URat,
0195 const Standard_Boolean VRat,
0196 const Standard_Boolean UPer,
0197 const Standard_Boolean VPer,
0198 gp_Pnt& P);
0199
0200 Standard_EXPORT static void D1(const Standard_Real U,
0201 const Standard_Real V,
0202 const Standard_Integer UIndex,
0203 const Standard_Integer VIndex,
0204 const TColgp_Array2OfPnt& Poles,
0205 const TColStd_Array2OfReal* Weights,
0206 const TColStd_Array1OfReal& UKnots,
0207 const TColStd_Array1OfReal& VKnots,
0208 const TColStd_Array1OfInteger* UMults,
0209 const TColStd_Array1OfInteger* VMults,
0210 const Standard_Integer Degree,
0211 const Standard_Integer VDegree,
0212 const Standard_Boolean URat,
0213 const Standard_Boolean VRat,
0214 const Standard_Boolean UPer,
0215 const Standard_Boolean VPer,
0216 gp_Pnt& P,
0217 gp_Vec& Vu,
0218 gp_Vec& Vv);
0219
0220 Standard_EXPORT static void D2(const Standard_Real U,
0221 const Standard_Real V,
0222 const Standard_Integer UIndex,
0223 const Standard_Integer VIndex,
0224 const TColgp_Array2OfPnt& Poles,
0225 const TColStd_Array2OfReal* Weights,
0226 const TColStd_Array1OfReal& UKnots,
0227 const TColStd_Array1OfReal& VKnots,
0228 const TColStd_Array1OfInteger* UMults,
0229 const TColStd_Array1OfInteger* VMults,
0230 const Standard_Integer UDegree,
0231 const Standard_Integer VDegree,
0232 const Standard_Boolean URat,
0233 const Standard_Boolean VRat,
0234 const Standard_Boolean UPer,
0235 const Standard_Boolean VPer,
0236 gp_Pnt& P,
0237 gp_Vec& Vu,
0238 gp_Vec& Vv,
0239 gp_Vec& Vuu,
0240 gp_Vec& Vvv,
0241 gp_Vec& Vuv);
0242
0243 Standard_EXPORT static void D3(const Standard_Real U,
0244 const Standard_Real V,
0245 const Standard_Integer UIndex,
0246 const Standard_Integer VIndex,
0247 const TColgp_Array2OfPnt& Poles,
0248 const TColStd_Array2OfReal* Weights,
0249 const TColStd_Array1OfReal& UKnots,
0250 const TColStd_Array1OfReal& VKnots,
0251 const TColStd_Array1OfInteger* UMults,
0252 const TColStd_Array1OfInteger* VMults,
0253 const Standard_Integer UDegree,
0254 const Standard_Integer VDegree,
0255 const Standard_Boolean URat,
0256 const Standard_Boolean VRat,
0257 const Standard_Boolean UPer,
0258 const Standard_Boolean VPer,
0259 gp_Pnt& P,
0260 gp_Vec& Vu,
0261 gp_Vec& Vv,
0262 gp_Vec& Vuu,
0263 gp_Vec& Vvv,
0264 gp_Vec& Vuv,
0265 gp_Vec& Vuuu,
0266 gp_Vec& Vvvv,
0267 gp_Vec& Vuuv,
0268 gp_Vec& Vuvv);
0269
0270 Standard_EXPORT static void DN(const Standard_Real U,
0271 const Standard_Real V,
0272 const Standard_Integer Nu,
0273 const Standard_Integer Nv,
0274 const Standard_Integer UIndex,
0275 const Standard_Integer VIndex,
0276 const TColgp_Array2OfPnt& Poles,
0277 const TColStd_Array2OfReal* Weights,
0278 const TColStd_Array1OfReal& UKnots,
0279 const TColStd_Array1OfReal& VKnots,
0280 const TColStd_Array1OfInteger* UMults,
0281 const TColStd_Array1OfInteger* VMults,
0282 const Standard_Integer UDegree,
0283 const Standard_Integer VDegree,
0284 const Standard_Boolean URat,
0285 const Standard_Boolean VRat,
0286 const Standard_Boolean UPer,
0287 const Standard_Boolean VPer,
0288 gp_Vec& Vn);
0289
0290
0291
0292
0293 Standard_EXPORT static void Iso(const Standard_Real Param,
0294 const Standard_Boolean IsU,
0295 const TColgp_Array2OfPnt& Poles,
0296 const TColStd_Array2OfReal* Weights,
0297 const TColStd_Array1OfReal& Knots,
0298 const TColStd_Array1OfInteger* Mults,
0299 const Standard_Integer Degree,
0300 const Standard_Boolean Periodic,
0301 TColgp_Array1OfPnt& CPoles,
0302 TColStd_Array1OfReal* CWeights);
0303
0304
0305
0306
0307
0308
0309
0310
0311
0312
0313 Standard_EXPORT static void Reverse(TColgp_Array2OfPnt& Poles,
0314 const Standard_Integer Last,
0315 const Standard_Boolean UDirection);
0316
0317
0318
0319
0320
0321 Standard_EXPORT static void HomogeneousD0(const Standard_Real U,
0322 const Standard_Real V,
0323 const Standard_Integer UIndex,
0324 const Standard_Integer VIndex,
0325 const TColgp_Array2OfPnt& Poles,
0326 const TColStd_Array2OfReal* Weights,
0327 const TColStd_Array1OfReal& UKnots,
0328 const TColStd_Array1OfReal& VKnots,
0329 const TColStd_Array1OfInteger* UMults,
0330 const TColStd_Array1OfInteger* VMults,
0331 const Standard_Integer UDegree,
0332 const Standard_Integer VDegree,
0333 const Standard_Boolean URat,
0334 const Standard_Boolean VRat,
0335 const Standard_Boolean UPer,
0336 const Standard_Boolean VPer,
0337 Standard_Real& W,
0338 gp_Pnt& P);
0339
0340
0341
0342
0343
0344 Standard_EXPORT static void HomogeneousD1(const Standard_Real U,
0345 const Standard_Real V,
0346 const Standard_Integer UIndex,
0347 const Standard_Integer VIndex,
0348 const TColgp_Array2OfPnt& Poles,
0349 const TColStd_Array2OfReal* Weights,
0350 const TColStd_Array1OfReal& UKnots,
0351 const TColStd_Array1OfReal& VKnots,
0352 const TColStd_Array1OfInteger* UMults,
0353 const TColStd_Array1OfInteger* VMults,
0354 const Standard_Integer UDegree,
0355 const Standard_Integer VDegree,
0356 const Standard_Boolean URat,
0357 const Standard_Boolean VRat,
0358 const Standard_Boolean UPer,
0359 const Standard_Boolean VPer,
0360 gp_Pnt& N,
0361 gp_Vec& Nu,
0362 gp_Vec& Nv,
0363 Standard_Real& D,
0364 Standard_Real& Du,
0365 Standard_Real& Dv);
0366
0367
0368 Standard_EXPORT static void Reverse(TColStd_Array2OfReal& Weights,
0369 const Standard_Integer Last,
0370 const Standard_Boolean UDirection);
0371
0372
0373
0374
0375
0376 Standard_EXPORT static Standard_Boolean IsRational(const TColStd_Array2OfReal& Weights,
0377 const Standard_Integer I1,
0378 const Standard_Integer I2,
0379 const Standard_Integer J1,
0380 const Standard_Integer J2,
0381 const Standard_Real Epsilon = 0.0);
0382
0383
0384 Standard_EXPORT static void SetPoles(const TColgp_Array2OfPnt& Poles,
0385 TColStd_Array1OfReal& FP,
0386 const Standard_Boolean UDirection);
0387
0388
0389 Standard_EXPORT static void SetPoles(const TColgp_Array2OfPnt& Poles,
0390 const TColStd_Array2OfReal& Weights,
0391 TColStd_Array1OfReal& FP,
0392 const Standard_Boolean UDirection);
0393
0394
0395 Standard_EXPORT static void GetPoles(const TColStd_Array1OfReal& FP,
0396 TColgp_Array2OfPnt& Poles,
0397 const Standard_Boolean UDirection);
0398
0399
0400 Standard_EXPORT static void GetPoles(const TColStd_Array1OfReal& FP,
0401 TColgp_Array2OfPnt& Poles,
0402 TColStd_Array2OfReal& Weights,
0403 const Standard_Boolean UDirection);
0404
0405
0406
0407
0408
0409
0410
0411
0412
0413
0414
0415
0416
0417
0418 Standard_EXPORT static void MovePoint(const Standard_Real U,
0419 const Standard_Real V,
0420 const gp_Vec& Displ,
0421 const Standard_Integer UIndex1,
0422 const Standard_Integer UIndex2,
0423 const Standard_Integer VIndex1,
0424 const Standard_Integer VIndex2,
0425 const Standard_Integer UDegree,
0426 const Standard_Integer VDegree,
0427 const Standard_Boolean Rational,
0428 const TColgp_Array2OfPnt& Poles,
0429 const TColStd_Array2OfReal& Weights,
0430 const TColStd_Array1OfReal& UFlatKnots,
0431 const TColStd_Array1OfReal& VFlatKnots,
0432 Standard_Integer& UFirstIndex,
0433 Standard_Integer& ULastIndex,
0434 Standard_Integer& VFirstIndex,
0435 Standard_Integer& VLastIndex,
0436 TColgp_Array2OfPnt& NewPoles);
0437
0438 Standard_EXPORT static void InsertKnots(const Standard_Boolean UDirection,
0439 const Standard_Integer Degree,
0440 const Standard_Boolean Periodic,
0441 const TColgp_Array2OfPnt& Poles,
0442 const TColStd_Array2OfReal* Weights,
0443 const TColStd_Array1OfReal& Knots,
0444 const TColStd_Array1OfInteger& Mults,
0445 const TColStd_Array1OfReal& AddKnots,
0446 const TColStd_Array1OfInteger* AddMults,
0447 TColgp_Array2OfPnt& NewPoles,
0448 TColStd_Array2OfReal* NewWeights,
0449 TColStd_Array1OfReal& NewKnots,
0450 TColStd_Array1OfInteger& NewMults,
0451 const Standard_Real Epsilon,
0452 const Standard_Boolean Add = Standard_True);
0453
0454 Standard_EXPORT static Standard_Boolean RemoveKnot(const Standard_Boolean UDirection,
0455 const Standard_Integer Index,
0456 const Standard_Integer Mult,
0457 const Standard_Integer Degree,
0458 const Standard_Boolean Periodic,
0459 const TColgp_Array2OfPnt& Poles,
0460 const TColStd_Array2OfReal* Weights,
0461 const TColStd_Array1OfReal& Knots,
0462 const TColStd_Array1OfInteger& Mults,
0463 TColgp_Array2OfPnt& NewPoles,
0464 TColStd_Array2OfReal* NewWeights,
0465 TColStd_Array1OfReal& NewKnots,
0466 TColStd_Array1OfInteger& NewMults,
0467 const Standard_Real Tolerance);
0468
0469 Standard_EXPORT static void IncreaseDegree(const Standard_Boolean UDirection,
0470 const Standard_Integer Degree,
0471 const Standard_Integer NewDegree,
0472 const Standard_Boolean Periodic,
0473 const TColgp_Array2OfPnt& Poles,
0474 const TColStd_Array2OfReal* Weights,
0475 const TColStd_Array1OfReal& Knots,
0476 const TColStd_Array1OfInteger& Mults,
0477 TColgp_Array2OfPnt& NewPoles,
0478 TColStd_Array2OfReal* NewWeights,
0479 TColStd_Array1OfReal& NewKnots,
0480 TColStd_Array1OfInteger& NewMults);
0481
0482 Standard_EXPORT static void Unperiodize(const Standard_Boolean UDirection,
0483 const Standard_Integer Degree,
0484 const TColStd_Array1OfInteger& Mults,
0485 const TColStd_Array1OfReal& Knots,
0486 const TColgp_Array2OfPnt& Poles,
0487 const TColStd_Array2OfReal* Weights,
0488 TColStd_Array1OfInteger& NewMults,
0489 TColStd_Array1OfReal& NewKnots,
0490 TColgp_Array2OfPnt& NewPoles,
0491 TColStd_Array2OfReal* NewWeights);
0492
0493
0494 static TColStd_Array2OfReal* NoWeights();
0495
0496
0497
0498
0499
0500 Standard_EXPORT static void BuildCache(const Standard_Real U,
0501 const Standard_Real V,
0502 const Standard_Real USpanDomain,
0503 const Standard_Real VSpanDomain,
0504 const Standard_Boolean UPeriodicFlag,
0505 const Standard_Boolean VPeriodicFlag,
0506 const Standard_Integer UDegree,
0507 const Standard_Integer VDegree,
0508 const Standard_Integer UIndex,
0509 const Standard_Integer VIndex,
0510 const TColStd_Array1OfReal& UFlatKnots,
0511 const TColStd_Array1OfReal& VFlatKnots,
0512 const TColgp_Array2OfPnt& Poles,
0513 const TColStd_Array2OfReal* Weights,
0514 TColgp_Array2OfPnt& CachePoles,
0515 TColStd_Array2OfReal* CacheWeights);
0516
0517
0518
0519
0520 Standard_EXPORT static void BuildCache(const Standard_Real theU,
0521 const Standard_Real theV,
0522 const Standard_Real theUSpanDomain,
0523 const Standard_Real theVSpanDomain,
0524 const Standard_Boolean theUPeriodic,
0525 const Standard_Boolean theVPeriodic,
0526 const Standard_Integer theUDegree,
0527 const Standard_Integer theVDegree,
0528 const Standard_Integer theUIndex,
0529 const Standard_Integer theVIndex,
0530 const TColStd_Array1OfReal& theUFlatKnots,
0531 const TColStd_Array1OfReal& theVFlatKnots,
0532 const TColgp_Array2OfPnt& thePoles,
0533 const TColStd_Array2OfReal* theWeights,
0534 TColStd_Array2OfReal& theCacheArray);
0535
0536
0537
0538
0539
0540
0541
0542
0543
0544
0545
0546
0547 Standard_EXPORT static void CacheD0(const Standard_Real U,
0548 const Standard_Real V,
0549 const Standard_Integer UDegree,
0550 const Standard_Integer VDegree,
0551 const Standard_Real UCacheParameter,
0552 const Standard_Real VCacheParameter,
0553 const Standard_Real USpanLenght,
0554 const Standard_Real VSpanLength,
0555 const TColgp_Array2OfPnt& Poles,
0556 const TColStd_Array2OfReal* Weights,
0557 gp_Pnt& Point);
0558
0559
0560
0561
0562 static void CoefsD0(const Standard_Real U,
0563 const Standard_Real V,
0564 const TColgp_Array2OfPnt& Poles,
0565 const TColStd_Array2OfReal* Weights,
0566 gp_Pnt& Point);
0567
0568
0569
0570
0571
0572
0573
0574
0575
0576
0577
0578
0579 Standard_EXPORT static void CacheD1(const Standard_Real U,
0580 const Standard_Real V,
0581 const Standard_Integer UDegree,
0582 const Standard_Integer VDegree,
0583 const Standard_Real UCacheParameter,
0584 const Standard_Real VCacheParameter,
0585 const Standard_Real USpanLenght,
0586 const Standard_Real VSpanLength,
0587 const TColgp_Array2OfPnt& Poles,
0588 const TColStd_Array2OfReal* Weights,
0589 gp_Pnt& Point,
0590 gp_Vec& VecU,
0591 gp_Vec& VecV);
0592
0593
0594
0595
0596 static void CoefsD1(const Standard_Real U,
0597 const Standard_Real V,
0598 const TColgp_Array2OfPnt& Poles,
0599 const TColStd_Array2OfReal* Weights,
0600 gp_Pnt& Point,
0601 gp_Vec& VecU,
0602 gp_Vec& VecV);
0603
0604
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615 Standard_EXPORT static void CacheD2(const Standard_Real U,
0616 const Standard_Real V,
0617 const Standard_Integer UDegree,
0618 const Standard_Integer VDegree,
0619 const Standard_Real UCacheParameter,
0620 const Standard_Real VCacheParameter,
0621 const Standard_Real USpanLenght,
0622 const Standard_Real VSpanLength,
0623 const TColgp_Array2OfPnt& Poles,
0624 const TColStd_Array2OfReal* Weights,
0625 gp_Pnt& Point,
0626 gp_Vec& VecU,
0627 gp_Vec& VecV,
0628 gp_Vec& VecUU,
0629 gp_Vec& VecUV,
0630 gp_Vec& VecVV);
0631
0632
0633
0634
0635 static void CoefsD2(const Standard_Real U,
0636 const Standard_Real V,
0637 const TColgp_Array2OfPnt& Poles,
0638 const TColStd_Array2OfReal* Weights,
0639 gp_Pnt& Point,
0640 gp_Vec& VecU,
0641 gp_Vec& VecV,
0642 gp_Vec& VecUU,
0643 gp_Vec& VecUV,
0644 gp_Vec& VecVV);
0645
0646
0647 static void PolesCoefficients(const TColgp_Array2OfPnt& Poles, TColgp_Array2OfPnt& CachePoles);
0648
0649
0650
0651
0652
0653 Standard_EXPORT static void PolesCoefficients(const TColgp_Array2OfPnt& Poles,
0654 const TColStd_Array2OfReal* Weights,
0655 TColgp_Array2OfPnt& CachePoles,
0656 TColStd_Array2OfReal* CacheWeights);
0657
0658
0659
0660
0661
0662
0663
0664
0665 Standard_EXPORT static void Resolution(const TColgp_Array2OfPnt& Poles,
0666 const TColStd_Array2OfReal* Weights,
0667 const TColStd_Array1OfReal& UKnots,
0668 const TColStd_Array1OfReal& VKnots,
0669 const TColStd_Array1OfInteger& UMults,
0670 const TColStd_Array1OfInteger& VMults,
0671 const Standard_Integer UDegree,
0672 const Standard_Integer VDegree,
0673 const Standard_Boolean URat,
0674 const Standard_Boolean VRat,
0675 const Standard_Boolean UPer,
0676 const Standard_Boolean VPer,
0677 const Standard_Real Tolerance3D,
0678 Standard_Real& UTolerance,
0679 Standard_Real& VTolerance);
0680
0681
0682
0683
0684
0685
0686
0687
0688
0689
0690
0691
0692
0693
0694
0695
0696
0697
0698 Standard_EXPORT static void Interpolate(const Standard_Integer UDegree,
0699 const Standard_Integer VDegree,
0700 const TColStd_Array1OfReal& UFlatKnots,
0701 const TColStd_Array1OfReal& VFlatKnots,
0702 const TColStd_Array1OfReal& UParameters,
0703 const TColStd_Array1OfReal& VParameters,
0704 TColgp_Array2OfPnt& Poles,
0705 TColStd_Array2OfReal& Weights,
0706 Standard_Integer& InversionProblem);
0707
0708
0709
0710
0711
0712
0713
0714
0715
0716
0717
0718
0719
0720
0721
0722
0723
0724 Standard_EXPORT static void Interpolate(const Standard_Integer UDegree,
0725 const Standard_Integer VDegree,
0726 const TColStd_Array1OfReal& UFlatKnots,
0727 const TColStd_Array1OfReal& VFlatKnots,
0728 const TColStd_Array1OfReal& UParameters,
0729 const TColStd_Array1OfReal& VParameters,
0730 TColgp_Array2OfPnt& Poles,
0731 Standard_Integer& InversionProblem);
0732
0733
0734
0735
0736
0737
0738
0739
0740
0741
0742
0743
0744
0745
0746
0747
0748
0749
0750
0751
0752
0753
0754
0755
0756
0757
0758 Standard_EXPORT static void FunctionMultiply(const BSplSLib_EvaluatorFunction& Function,
0759 const Standard_Integer UBSplineDegree,
0760 const Standard_Integer VBSplineDegree,
0761 const TColStd_Array1OfReal& UBSplineKnots,
0762 const TColStd_Array1OfReal& VBSplineKnots,
0763 const TColStd_Array1OfInteger* UMults,
0764 const TColStd_Array1OfInteger* VMults,
0765 const TColgp_Array2OfPnt& Poles,
0766 const TColStd_Array2OfReal* Weights,
0767 const TColStd_Array1OfReal& UFlatKnots,
0768 const TColStd_Array1OfReal& VFlatKnots,
0769 const Standard_Integer UNewDegree,
0770 const Standard_Integer VNewDegree,
0771 TColgp_Array2OfPnt& NewNumerator,
0772 TColStd_Array2OfReal& NewDenominator,
0773 Standard_Integer& theStatus);
0774
0775 protected:
0776 private:
0777 };
0778
0779 #include <BSplSLib.lxx>
0780
0781 #endif