const double paramTolerance = 1.e-4;
const double PI =3.141592653589793238463;
+
+static const std::string& INVERSED_ID()
+{
+ static const std::string MY_INVERSED_ID("InversedArc");
+ return MY_INVERSED_ID;
+}
+
SketchPlugin_Arc::SketchPlugin_Arc()
: SketchPlugin_SketchEntity()
{
myXEndBefore = 0;
myYEndBefore = 0;
- myForwardDirection = true;
myParamBefore = 0;
}
data()->addAttribute(EXTERNAL_ID(), ModelAPI_AttributeSelection::typeId());
ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), EXTERNAL_ID());
+ data()->addAttribute(INVERSED_ID(), ModelAPI_AttributeBoolean::typeId());
+
// get the initial values
if (anEndAttr->isInitialized()) {
myXEndBefore = anEndAttr->x();
anEndAttr->setValue(aProjection);
*/
std::shared_ptr<GeomAPI_Pnt> aEndPoint(aSketch->to3D(anEndAttr->x(), anEndAttr->y()));
+ AttributeBooleanPtr isInversed = std::dynamic_pointer_cast<ModelAPI_AttributeBoolean>(attribute(INVERSED_ID()));
std::shared_ptr<GeomAPI_Dir> anXDir(new GeomAPI_Dir(aStartPoint->xyz()->decreased(aCenter->xyz())));
std::shared_ptr<GeomAPI_Ax2> anAx2(new GeomAPI_Ax2(aCenter, aNormal, anXDir));
if(aCirc->parameter(aEndPoint, paramTolerance, aParameterNew)) {
if(0 < myParamBefore && myParamBefore <= PI / 2.0
&& PI * 1.5 < aParameterNew && aParameterNew <= PI * 2.0) {
- myForwardDirection = false;
+ isInversed->setValue(true);
} else if(PI * 1.5 < myParamBefore && myParamBefore <= PI * 2.0
&& 0 < aParameterNew && aParameterNew <= PI / 2.0) {
- myForwardDirection = true;
+ isInversed->setValue(false);
}
}
myParamBefore = aParameterNew;
std::shared_ptr<GeomAPI_Shape> aCircleShape;
- if(myForwardDirection) {
+ if(!isInversed->value()) {
aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aStartPoint, aEndPoint, aNormal);
} else {
aCircleShape = GeomAlgoAPI_EdgeBuilder::lineCircleArc(aCenter, aEndPoint, aStartPoint, aNormal);