Sketcher: Symmetry support for BSpline
This commit is contained in:
parent
252d84ff4f
commit
46075f31ba
|
@ -2140,6 +2140,20 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
||||||
geosymaoe->setRange(theta1,theta2,true);
|
geosymaoe->setRange(theta1,theta2,true);
|
||||||
isStartEndInverted.insert(std::make_pair(*it, true));
|
isStartEndInverted.insert(std::make_pair(*it, true));
|
||||||
}
|
}
|
||||||
|
else if(geosym->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||||
|
Part::GeomBSplineCurve *geosymbsp = static_cast<Part::GeomBSplineCurve *>(geosym);
|
||||||
|
|
||||||
|
std::vector<Base::Vector3d> poles = geosymbsp->getPoles();
|
||||||
|
|
||||||
|
for(std::vector<Base::Vector3d>::iterator it = poles.begin(); it != poles.end(); ++it){
|
||||||
|
|
||||||
|
(*it) = (*it) + 2.0*((*it).Perpendicular(refGeoLine->getStartPoint(),vectline)-(*it));
|
||||||
|
}
|
||||||
|
|
||||||
|
geosymbsp->setPoles(poles);
|
||||||
|
|
||||||
|
isStartEndInverted.insert(std::make_pair(*it, false));
|
||||||
|
}
|
||||||
else if(geosym->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
else if(geosym->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
||||||
Part::GeomPoint *geosympoint = static_cast<Part::GeomPoint *>(geosym);
|
Part::GeomPoint *geosympoint = static_cast<Part::GeomPoint *>(geosym);
|
||||||
Base::Vector3d cp = geosympoint->getPoint();
|
Base::Vector3d cp = geosympoint->getPoint();
|
||||||
|
@ -2189,6 +2203,9 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
||||||
else if(georef->getTypeId() == Part::GeomArcOfParabola::getClassTypeId()){
|
else if(georef->getTypeId() == Part::GeomArcOfParabola::getClassTypeId()){
|
||||||
const Part::GeomArcOfParabola *geosymaoe = static_cast<const Part::GeomArcOfParabola *>(georef);
|
const Part::GeomArcOfParabola *geosymaoe = static_cast<const Part::GeomArcOfParabola *>(georef);
|
||||||
refpoint = geosymaoe->getStartPoint(true);
|
refpoint = geosymaoe->getStartPoint(true);
|
||||||
|
} else if(georef->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||||
|
const Part::GeomBSplineCurve *geosymbsp = static_cast<const Part::GeomBSplineCurve *>(georef);
|
||||||
|
refpoint = geosymbsp->getStartPoint();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case Sketcher::end:
|
case Sketcher::end:
|
||||||
|
@ -2212,6 +2229,10 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
||||||
const Part::GeomArcOfParabola *geosymaoe = static_cast<const Part::GeomArcOfParabola *>(georef);
|
const Part::GeomArcOfParabola *geosymaoe = static_cast<const Part::GeomArcOfParabola *>(georef);
|
||||||
refpoint = geosymaoe->getEndPoint(true);
|
refpoint = geosymaoe->getEndPoint(true);
|
||||||
}
|
}
|
||||||
|
else if(georef->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||||
|
const Part::GeomBSplineCurve *geosymbsp = static_cast<const Part::GeomBSplineCurve *>(georef);
|
||||||
|
refpoint = geosymbsp->getEndPoint();
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case Sketcher::mid:
|
case Sketcher::mid:
|
||||||
if(georef->getTypeId() == Part::GeomCircle::getClassTypeId()){
|
if(georef->getTypeId() == Part::GeomCircle::getClassTypeId()){
|
||||||
|
@ -2383,6 +2404,20 @@ int SketchObject::addSymmetric(const std::vector<int> &geoIdList, int refGeoId,
|
||||||
geosymaoe->setRange(theta1,theta2,true);
|
geosymaoe->setRange(theta1,theta2,true);
|
||||||
isStartEndInverted.insert(std::make_pair(*it, false));
|
isStartEndInverted.insert(std::make_pair(*it, false));
|
||||||
}
|
}
|
||||||
|
else if(geosym->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){
|
||||||
|
Part::GeomBSplineCurve *geosymbsp = static_cast<Part::GeomBSplineCurve *>(geosym);
|
||||||
|
|
||||||
|
std::vector<Base::Vector3d> poles = geosymbsp->getPoles();
|
||||||
|
|
||||||
|
for(std::vector<Base::Vector3d>::iterator it = poles.begin(); it != poles.end(); ++it){
|
||||||
|
|
||||||
|
(*it) = (*it) + 2.0*(refpoint-(*it));
|
||||||
|
}
|
||||||
|
|
||||||
|
geosymbsp->setPoles(poles);
|
||||||
|
|
||||||
|
//isStartEndInverted.insert(std::make_pair(*it, false));
|
||||||
|
}
|
||||||
else if(geosym->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
else if(geosym->getTypeId() == Part::GeomPoint::getClassTypeId()){
|
||||||
Part::GeomPoint *geosympoint = static_cast<Part::GeomPoint *>(geosym);
|
Part::GeomPoint *geosympoint = static_cast<Part::GeomPoint *>(geosym);
|
||||||
Base::Vector3d cp = geosympoint->getPoint();
|
Base::Vector3d cp = geosympoint->getPoint();
|
||||||
|
|
Loading…
Reference in New Issue
Block a user