void Geom_BSplineSurface::D0(const Standard_Real U,
const Standard_Real V,
- gp_Pnt& P) const
-{
- Standard_Real new_u(U), new_v(V);
- PeriodicNormalization(new_u, new_v);
-
- Geom_BSplineSurface* MySurface = (Geom_BSplineSurface *) this;
- Standard_Mutex::Sentry aSentry(MySurface->myMutex);
-
- if(!IsCacheValid(new_u, new_v))
- MySurface->ValidateCache(new_u, new_v);
-
- Standard_Real uparameter_11 = (2*ucacheparameter + ucachespanlenght)/2,
- uspanlenght_11 = ucachespanlenght/2,
- vparameter_11 = (2*vcacheparameter + vcachespanlenght)/2,
- vspanlenght_11 = vcachespanlenght/2 ;
- if (cacheweights.IsNull()) {
-
- BSplSLib::CacheD0(new_u,
- new_v,
- udeg,
- vdeg,
- uparameter_11,
- vparameter_11,
- uspanlenght_11,
- vspanlenght_11,
- cachepoles->Array2(),
- *((TColStd_Array2OfReal*) NULL),
- P) ;
- }
- else {
- BSplSLib::CacheD0(new_u,
- new_v,
- udeg,
- vdeg,
- uparameter_11,
- vparameter_11,
- uspanlenght_11,
- vspanlenght_11,
- cachepoles->Array2(),
- cacheweights->Array2(),
- P) ;
- }
+ gp_Pnt& P) const
+{
+ Standard_Real aNewU = U;
+ Standard_Real aNewV = V;
+ PeriodicNormalization(aNewU, aNewV);
+
+ BSplSLib::D0(aNewU,aNewV,0,0,POLES,WEIGHTS,UFKNOTS,VFKNOTS,FMULTS,FMULTS,
+ udeg,vdeg,urational,vrational,uperiodic,vperiodic,
+ P);
}
//=======================================================================
void Geom_BSplineSurface::D1(const Standard_Real U,
const Standard_Real V,
- gp_Pnt& P,
- gp_Vec& D1U,
- gp_Vec& D1V) const
+ gp_Pnt& P,
+ gp_Vec& D1U,
+ gp_Vec& D1V) const
{
- Standard_Real new_u(U), new_v(V);
- PeriodicNormalization(new_u, new_v);
+ Standard_Real aNewU = U;
+ Standard_Real aNewV = V;
+ PeriodicNormalization(aNewU, aNewV);
- Geom_BSplineSurface* MySurface = (Geom_BSplineSurface *) this;
- Standard_Mutex::Sentry aSentry(MySurface->myMutex);
+ Standard_Integer uindex = 0, vindex = 0;
- if(!IsCacheValid(new_u, new_v))
- MySurface->ValidateCache(new_u, new_v);
+ BSplCLib::LocateParameter(udeg, uknots->Array1(), umults->Array1(), U, uperiodic, uindex, aNewU);
+ uindex = BSplCLib::FlatIndex(udeg, uindex, umults->Array1(), uperiodic);
- Standard_Real uparameter_11 = (2*ucacheparameter + ucachespanlenght)/2,
- uspanlenght_11 = ucachespanlenght/2,
- vparameter_11 = (2*vcacheparameter + vcachespanlenght)/2,
- vspanlenght_11 = vcachespanlenght/2 ;
+ BSplCLib::LocateParameter(vdeg, vknots->Array1(), vmults->Array1(), V, vperiodic, vindex, aNewV);
+ vindex = BSplCLib::FlatIndex(vdeg, vindex, vmults->Array1(), vperiodic);
- if (cacheweights.IsNull()) {
-
- BSplSLib::CacheD1(new_u,
- new_v,
- udeg,
- vdeg,
- uparameter_11,
- vparameter_11,
- uspanlenght_11,
- vspanlenght_11,
- cachepoles->Array2(),
- *((TColStd_Array2OfReal*) NULL),
- P,
- D1U,
- D1V) ;
- }
- else {
-
- BSplSLib::CacheD1(new_u,
- new_v,
- udeg,
- vdeg,
- uparameter_11,
- vparameter_11,
- uspanlenght_11,
- vspanlenght_11,
- cachepoles->Array2(),
- cacheweights->Array2(),
- P,
- D1U,
- D1V) ;
- }
+ BSplSLib::D1(aNewU,aNewV,uindex,vindex,POLES,WEIGHTS,UFKNOTS,VFKNOTS,FMULTS,FMULTS,
+ udeg,vdeg,urational,vrational,uperiodic,vperiodic,
+ P, D1U, D1V);
}
//=======================================================================
//=======================================================================
void Geom_BSplineSurface::D2 (const Standard_Real U,
- const Standard_Real V,
- gp_Pnt& P,
- gp_Vec& D1U,
- gp_Vec& D1V,
- gp_Vec& D2U,
- gp_Vec& D2V,
- gp_Vec& D2UV) const
-{
- Standard_Real new_u(U), new_v(V);
- PeriodicNormalization(new_u, new_v);
-
- Geom_BSplineSurface* MySurface = (Geom_BSplineSurface *) this;
- Standard_Mutex::Sentry aSentry(MySurface->myMutex);
-
- if(!IsCacheValid(new_u, new_v))
- MySurface->ValidateCache(new_u, new_v);
-
- Standard_Real uparameter_11 = (2*ucacheparameter + ucachespanlenght)/2,
- uspanlenght_11 = ucachespanlenght/2,
- vparameter_11 = (2*vcacheparameter + vcachespanlenght)/2,
- vspanlenght_11 = vcachespanlenght/2 ;
- if (cacheweights.IsNull()) {
- BSplSLib::CacheD2(new_u,
- new_v,
- udeg,
- vdeg,
- uparameter_11,
- vparameter_11,
- uspanlenght_11,
- vspanlenght_11,
- cachepoles->Array2(),
- *((TColStd_Array2OfReal*) NULL),
- P,
- D1U,
- D1V,
- D2U,
- D2UV,
- D2V);
- }
- else {
- BSplSLib::CacheD2(new_u,
- new_v,
- udeg,
- vdeg,
- uparameter_11,
- vparameter_11,
- uspanlenght_11,
- vspanlenght_11,
- cachepoles->Array2(),
- cacheweights->Array2(),
- P,
- D1U,
- D1V,
- D2U,
- D2UV,
- D2V);
- }
- }
+ const Standard_Real V,
+ gp_Pnt& P,
+ gp_Vec& D1U,
+ gp_Vec& D1V,
+ gp_Vec& D2U,
+ gp_Vec& D2V,
+ gp_Vec& D2UV) const
+{
+ Standard_Real aNewU = U;
+ Standard_Real aNewV = V;
+ PeriodicNormalization(aNewU, aNewV);
+
+ Standard_Integer uindex = 0, vindex = 0;
+
+ BSplCLib::LocateParameter(udeg, uknots->Array1(), umults->Array1(), U, uperiodic, uindex, aNewU);
+ uindex = BSplCLib::FlatIndex(udeg, uindex, umults->Array1(), uperiodic);
+
+ BSplCLib::LocateParameter(vdeg, vknots->Array1(), vmults->Array1(), V, vperiodic, vindex, aNewV);
+ vindex = BSplCLib::FlatIndex(vdeg, vindex, vmults->Array1(), vperiodic);
+
+ BSplSLib::D2(aNewU,aNewV,uindex,vindex,POLES,WEIGHTS,UFKNOTS,VFKNOTS,FMULTS,FMULTS,
+ udeg,vdeg,urational,vrational,uperiodic,vperiodic,
+ P, D1U, D1V, D2U, D2V, D2UV);
+}
//=======================================================================
//function : D3
P = poles->Array2();
}
+const TColgp_Array2OfPnt& Geom_BSplineSurface::Poles() const
+{
+ return poles->Array2();
+}
+
//=======================================================================
//function : UIso
//purpose :
Ku = uknots->Array1();
}
+const TColStd_Array1OfReal& Geom_BSplineSurface::UKnots() const
+{
+ return uknots->Array1();
+}
+
//=======================================================================
//function : VKnots
//purpose :
Kv = vknots->Array1();
}
+const TColStd_Array1OfReal& Geom_BSplineSurface::VKnots() const
+{
+ return vknots->Array1();
+}
+
//=======================================================================
//function : UKnotSequence
//purpose :
Ku = ufknots->Array1();
}
+const TColStd_Array1OfReal& Geom_BSplineSurface::UKnotSequence() const
+{
+ return ufknots->Array1();
+}
+
//=======================================================================
//function : VKnotSequence
//purpose :
Kv = vfknots->Array1();
}
+const TColStd_Array1OfReal& Geom_BSplineSurface::VKnotSequence() const
+{
+ return vfknots->Array1();
+}
+
//=======================================================================
//function : UMultiplicity
//purpose :
Mu = umults->Array1();
}
+const TColStd_Array1OfInteger& Geom_BSplineSurface::UMultiplicities() const
+{
+ return umults->Array1();
+}
+
//=======================================================================
//function : VIso
//purpose :
Mv = vmults->Array1();
}
+const TColStd_Array1OfInteger& Geom_BSplineSurface::VMultiplicities() const
+{
+ return vmults->Array1();
+}
+
//=======================================================================
//function : Weight
//purpose :
W = weights->Array2();
}
+const TColStd_Array2OfReal& Geom_BSplineSurface::Weights() const
+{
+ if (urational || vrational)
+ return weights->Array2();
+ return BSplSLib::NoWeights();
+}
+
//=======================================================================
//function : Transform
//purpose :
VPoles (i, j).Transform (T);
}
}
-
- InvalidateCache();
}
//=======================================================================
for (Standard_Integer I = CPoles.Lower(); I <= CPoles.Upper(); I++) {
Poles (I+Poles.LowerRow()-1, VIndex+Poles.LowerCol()-1) = CPoles(I);
}
-
- InvalidateCache();
}
//=======================================================================
for (Standard_Integer I = CPoles.Lower(); I <= CPoles.Upper(); I++) {
Poles (UIndex+Poles.LowerRow()-1, I+Poles.LowerCol()-1) = CPoles (I);
}
-
- InvalidateCache();
}
//=======================================================================
const gp_Pnt& P)
{
poles->SetValue (UIndex+poles->LowerRow()-1, VIndex+poles->LowerCol()-1, P);
- InvalidateCache();
}
//=======================================================================
poles->ChangeArray2() = npoles;
}
maxderivinvok = 0;
- InvalidateCache() ;
}
//=======================================================================