X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchPlugin%2FSketchPlugin_MultiTranslation.cpp;h=c94ae2dca77d3b18156a408b641293167339aa0b;hb=8f10db487ef409d859a62aa6e2235a17d9b56723;hp=0db1082a168502602b4da20b81295c9e7846f48c;hpb=aa7989f7a1aff79777404200842d8bc905ee8a45;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_MultiTranslation.cpp b/src/SketchPlugin/SketchPlugin_MultiTranslation.cpp index 0db1082a1..c94ae2dca 100755 --- a/src/SketchPlugin/SketchPlugin_MultiTranslation.cpp +++ b/src/SketchPlugin/SketchPlugin_MultiTranslation.cpp @@ -5,6 +5,7 @@ // Author: Artem ZHIDKOV #include "SketchPlugin_MultiTranslation.h" +#include "SketchPlugin_Tools.h" #include #include @@ -13,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -20,13 +22,18 @@ #include SketchPlugin_MultiTranslation::SketchPlugin_MultiTranslation() +: myBlockValue(false) { } void SketchPlugin_MultiTranslation::initAttributes() { + data()->addAttribute(VALUE_TYPE(), ModelAPI_AttributeString::typeId()); + data()->addAttribute(START_POINT_ID(), GeomDataAPI_Point2D::typeId()); + data()->addAttribute(START_FULL_POINT_ID(), GeomDataAPI_Point2D::typeId()); data()->addAttribute(END_POINT_ID(), GeomDataAPI_Point2D::typeId()); + data()->addAttribute(END_FULL_POINT_ID(), GeomDataAPI_Point2D::typeId()); data()->addAttribute(NUMBER_OF_OBJECTS_ID(), ModelAPI_AttributeInteger::typeId()); data()->addAttribute(SketchPlugin_Constraint::ENTITY_A(), ModelAPI_AttributeRefList::typeId()); data()->addAttribute(SketchPlugin_Constraint::ENTITY_B(), ModelAPI_AttributeRefList::typeId()); @@ -56,9 +63,23 @@ void SketchPlugin_MultiTranslation::execute() if (!aStart || !aEnd || !aStart->isInitialized() || !aEnd->isInitialized()) return; + if (attribute(END_POINT_ID())->isInitialized() && !attribute(END_FULL_POINT_ID())->isInitialized()) { + myBlockValue = true; + SketchPlugin_Tools::updateMultiAttribute(attribute(START_POINT_ID()), attribute(END_POINT_ID()), + attribute(END_FULL_POINT_ID()), aNbCopies, true); + myBlockValue = false; + } + + // make a visible points SketchPlugin_Sketch::createPoint2DResult(this, sketch(), START_POINT_ID(), 0); - SketchPlugin_Sketch::createPoint2DResult(this, sketch(), END_POINT_ID(), 1); + + std::string aSecondPointAttributeID = END_POINT_ID(); + AttributeStringPtr aMethodTypeAttr = string(VALUE_TYPE()); + std::string aMethodType = aMethodTypeAttr->value(); + if (aMethodType != "SingleValue") + aSecondPointAttributeID = END_FULL_POINT_ID(); + SketchPlugin_Sketch::createPoint2DResult(this, sketch(), aSecondPointAttributeID, 1); std::shared_ptr aShiftVec(new GeomAPI_XY(aEnd->x() - aStart->x(), aEnd->y() - aStart->y())); @@ -252,4 +273,63 @@ void SketchPlugin_MultiTranslation::attributeChanged(const std::string& theID) data()->attribute(SketchPlugin_Constraint::ENTITY_B()))->clear(); } } + else if (theID == START_POINT_ID() && !myBlockValue) { + myBlockValue = true; + std::shared_ptr aStartPoint = + std::dynamic_pointer_cast(attribute(START_POINT_ID())); + std::shared_ptr aStartFullPoint = + std::dynamic_pointer_cast(attribute(START_FULL_POINT_ID())); + aStartFullPoint->setValue(aStartPoint->pnt()); + myBlockValue = false; + } + else if (theID == START_FULL_POINT_ID() && !myBlockValue) { + myBlockValue = true; + std::shared_ptr aStartPoint = + std::dynamic_pointer_cast(attribute(START_POINT_ID())); + std::shared_ptr aStartFullPoint = + std::dynamic_pointer_cast(attribute(START_FULL_POINT_ID())); + aStartPoint->setValue(aStartFullPoint->pnt()); + myBlockValue = false; + } + else if (theID == END_POINT_ID() && !myBlockValue) { + int aNbCopies = integer(NUMBER_OF_OBJECTS_ID())->value() - 1; + if (aNbCopies > 0) { + myBlockValue = true; + SketchPlugin_Tools::updateMultiAttribute(attribute(START_POINT_ID()), attribute(END_POINT_ID()), + attribute(END_FULL_POINT_ID()), aNbCopies, true); + myBlockValue = false; + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); + } + } + else if (theID == END_FULL_POINT_ID() && !myBlockValue) { + int aNbCopies = integer(NUMBER_OF_OBJECTS_ID())->value() - 1; + if (aNbCopies > 0) { + myBlockValue = true; + SketchPlugin_Tools::updateMultiAttribute(attribute(START_POINT_ID()), attribute(END_FULL_POINT_ID()), + attribute(END_POINT_ID()), aNbCopies, false); + myBlockValue = false; + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); + } + } + else if (theID == NUMBER_OF_OBJECTS_ID()) { + if (attribute(NUMBER_OF_OBJECTS_ID())->isInitialized() && + attribute(END_POINT_ID())->isInitialized() && + attribute(VALUE_TYPE())->isInitialized()) { + AttributeStringPtr aMethodTypeAttr = string(VALUE_TYPE()); + std::string aMethodType = aMethodTypeAttr->value(); + int aNbCopies = integer(NUMBER_OF_OBJECTS_ID())->value() - 1; + if (aNbCopies > 0) { + myBlockValue = true; + if (aMethodType == "SingleValue") + SketchPlugin_Tools::updateMultiAttribute(attribute(START_POINT_ID()), attribute(END_POINT_ID()), + attribute(END_FULL_POINT_ID()), aNbCopies, true); + else { + SketchPlugin_Tools::updateMultiAttribute(attribute(START_POINT_ID()), attribute(END_FULL_POINT_ID()), + attribute(END_POINT_ID()), aNbCopies, false); + } + myBlockValue = false; + Events_Loop::loop()->flush(Events_Loop::eventByName(EVENT_OBJECT_UPDATED)); + } + } + } }