-// Copyright (C) 2014-2017 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
-// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
-// See http://www.salome-platform.org/ or
-// email : webmaster.salome@opencascade.com<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
#include <SketchPlugin_Projection.h>
FeaturePtr aProjection = ModelAPI_Feature::feature(aRefAttr->object());
if (!lastResult().get()) {
- bool hasProjResult = aProjection->lastResult().get();
+ bool hasProjResult = aProjection->lastResult().get() != NULL;
ResultConstructionPtr aConstr = document()->createConstruction(data());
if (hasProjResult)
aConstr->setShape(aProjection->lastResult()->shape());
aProjection->selection(EXTERNAL_ID())->setValue(lastResult(), lastResult()->shape());
}
+ keepCurrentFeature();
+
if (aVertex) {
std::shared_ptr<GeomAPI_Pnt> aPrjPnt = aSketchPlane->project(aVertex->point());
std::shared_ptr<GeomAPI_Pnt2d> aPntInSketch = sketch()->to2D(aPrjPnt);
std::shared_ptr<GeomAPI_Circ> aCircle = anEdge->circle();
double aRadius = aCircle->radius();
+ double aNormalsDot = aCircle->normal()->dot(aSketchPlane->direction());
+ if (fabs(fabs(aNormalsDot) - 1.0) > tolerance)
+ return; // circle is not in the plane, parallel to the sketch plane
+
std::shared_ptr<GeomAPI_Pnt> aCenter = aSketchPlane->project(aCircle->center());
std::shared_ptr<GeomAPI_Pnt2d> aCenterInSketch = sketch()->to2D(aCenter);
std::shared_ptr<GeomAPI_Pnt> aCenter = aSketchPlane->project(aCircle->center());
std::shared_ptr<GeomAPI_Pnt2d> aCenterInSketch = sketch()->to2D(aCenter);
- bool isInversed = aCircle->normal()->dot(aSketchPlane->direction()) < 0.;
+ double aNormalsDot = aCircle->normal()->dot(aSketchPlane->direction());
+ if (fabs(fabs(aNormalsDot) - 1.0) > tolerance)
+ return; // arc is not in the plane, parallel to the sketch plane
+
+ bool isInversed = aNormalsDot < 0.;
if (!hasPrevProj)
aProjection = sketch()->addFeature(SketchPlugin_Arc::ID());
aCenterPnt->setValue(aCenterInSketch);
aProjection->boolean(SketchPlugin_Arc::REVERSED_ID())->setValue(isInversed);
- aProjection->data()->blockSendAttributeUpdated(aWasBlocked, false);
+ aProjection->data()->blockSendAttributeUpdated(aWasBlocked);
} else
return;
aProjection->execute();
aRefAttr->setObject(aProjection);
+ restoreCurrentFeature();
+
if (theID == EXTERNAL_FEATURE_ID()) {
selection(EXTERNAL_ID())->selectValue(aExtFeature);