Sketcher: Comb appropriate scaling for closed and periodic BSplines
This commit is contained in:
parent
feb29bd630
commit
e3487368d7
|
@ -3604,28 +3604,39 @@ void ViewProviderSketch::draw(bool temp /*=false*/, bool rebuildinformationlayer
|
||||||
std::vector<double> curvaturelist(ndiv);
|
std::vector<double> curvaturelist(ndiv);
|
||||||
std::vector<Base::Vector3d> normallist(ndiv);
|
std::vector<Base::Vector3d> normallist(ndiv);
|
||||||
double maxcurv = 0;
|
double maxcurv = 0;
|
||||||
|
|
||||||
double length = spline->length(firstparam,lastparam);
|
double maxdisttocenterofmass = 0;
|
||||||
|
|
||||||
|
//double length = spline->length(firstparam,lastparam);
|
||||||
|
|
||||||
for(int i = 0; i < ndiv; i++) {
|
for(int i = 0; i < ndiv; i++) {
|
||||||
paramlist[i] = firstparam + i * step;
|
paramlist[i] = firstparam + i * step;
|
||||||
pointatcurvelist[i] = spline->pointAtParameter(paramlist[i]);
|
pointatcurvelist[i] = spline->pointAtParameter(paramlist[i]);
|
||||||
curvaturelist[i] = spline->curvatureAt(paramlist[i]);
|
curvaturelist[i] = spline->curvatureAt(paramlist[i]);
|
||||||
|
|
||||||
if(curvaturelist[i] > maxcurv)
|
if(curvaturelist[i] > maxcurv)
|
||||||
maxcurv = curvaturelist[i];
|
maxcurv = curvaturelist[i];
|
||||||
|
|
||||||
spline->normalAt(paramlist[i],normallist[i]);
|
spline->normalAt(paramlist[i],normallist[i]);
|
||||||
|
|
||||||
|
double temp = ( pointatcurvelist[i] - midp ).Length();
|
||||||
|
|
||||||
|
if( temp > maxdisttocenterofmass )
|
||||||
|
maxdisttocenterofmass = temp;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
double repscale = ( 0.5 * length ) / maxcurv; // just a factor to make it reasonably visible
|
double repscale;
|
||||||
|
|
||||||
|
repscale = ( 0.5 * maxdisttocenterofmass ) / maxcurv; // just a factor to make it reasonably visible
|
||||||
|
//repscale = ( 0.5 * length ) / maxcurv; // this is Chris_G's original
|
||||||
|
|
||||||
std::vector<Base::Vector3d> pointatcomblist(ndiv);
|
std::vector<Base::Vector3d> pointatcomblist(ndiv);
|
||||||
|
|
||||||
for(int i = 0; i < ndiv; i++) {
|
for(int i = 0; i < ndiv; i++) {
|
||||||
pointatcomblist[i] = pointatcurvelist[i] + repscale * curvaturelist[i] * normallist[i];
|
pointatcomblist[i] = pointatcurvelist[i] + repscale * curvaturelist[i] * normallist[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(rebuildinformationlayer) {
|
if(rebuildinformationlayer) {
|
||||||
SoSwitch *sw = new SoSwitch();
|
SoSwitch *sw = new SoSwitch();
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user