diff --git a/src/Mod/Sketcher/App/SketchObject.cpp b/src/Mod/Sketcher/App/SketchObject.cpp index 21d3233da..9847c1fdc 100644 --- a/src/Mod/Sketcher/App/SketchObject.cpp +++ b/src/Mod/Sketcher/App/SketchObject.cpp @@ -2140,6 +2140,20 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, geosymaoe->setRange(theta1,theta2,true); isStartEndInverted.insert(std::make_pair(*it, true)); } + else if(geosym->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){ + Part::GeomBSplineCurve *geosymbsp = static_cast(geosym); + + std::vector poles = geosymbsp->getPoles(); + + for(std::vector::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()){ Part::GeomPoint *geosympoint = static_cast(geosym); Base::Vector3d cp = geosympoint->getPoint(); @@ -2189,6 +2203,9 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, else if(georef->getTypeId() == Part::GeomArcOfParabola::getClassTypeId()){ const Part::GeomArcOfParabola *geosymaoe = static_cast(georef); refpoint = geosymaoe->getStartPoint(true); + } else if(georef->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){ + const Part::GeomBSplineCurve *geosymbsp = static_cast(georef); + refpoint = geosymbsp->getStartPoint(); } break; case Sketcher::end: @@ -2212,6 +2229,10 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, const Part::GeomArcOfParabola *geosymaoe = static_cast(georef); refpoint = geosymaoe->getEndPoint(true); } + else if(georef->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){ + const Part::GeomBSplineCurve *geosymbsp = static_cast(georef); + refpoint = geosymbsp->getEndPoint(); + } break; case Sketcher::mid: if(georef->getTypeId() == Part::GeomCircle::getClassTypeId()){ @@ -2383,6 +2404,20 @@ int SketchObject::addSymmetric(const std::vector &geoIdList, int refGeoId, geosymaoe->setRange(theta1,theta2,true); isStartEndInverted.insert(std::make_pair(*it, false)); } + else if(geosym->getTypeId() == Part::GeomBSplineCurve::getClassTypeId()){ + Part::GeomBSplineCurve *geosymbsp = static_cast(geosym); + + std::vector poles = geosymbsp->getPoles(); + + for(std::vector::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()){ Part::GeomPoint *geosympoint = static_cast(geosym); Base::Vector3d cp = geosympoint->getPoint();