selectConstruction(theContext, theSubShape);
}
}
- myIsInitialized = true;
+ //the attribute initialized state should be changed by sendAttributeUpdated only
+ //myIsInitialized = true;
std::string aSelName = namingName();
if(!aSelName.empty())
void ModelAPI_Attribute::setInitialized()
{
- myIsInitialized = true;
+ if (!mySetInitializedBlocked)
+ myIsInitialized = true;
+}
+
+bool ModelAPI_Attribute::blockSetInitialized(const bool theBlock)
+{
+ bool aBlocked = mySetInitializedBlocked;
+
+ mySetInitializedBlocked = theBlock;
+
+ return aBlocked;
}
void ModelAPI_Attribute::setIsArgument(const bool theFlag)
ModelAPI_Attribute::ModelAPI_Attribute()
{
+ mySetInitializedBlocked = false;
myIsInitialized = false;
myIsArgument = true;
myIsImmutable = false;
protected:
// accessible from the attributes
bool myIsInitialized; ///< is some value assigned to this attribute
+ bool mySetInitializedBlocked; ///< is initialized blocked
bool myIsArgument; ///< is this attribute used as an argument for execution
bool myIsImmutable; ///< is this attribute can be changed programmatically (e.g. by constraint)
/// Makes attribute initialized
MODELAPI_EXPORT void setInitialized();
+ /// Blocks sending "attribute updated" if theBlock is true
+ /// \param theBlock a block value
+ /// \return the previous block value
+ MODELAPI_EXPORT bool blockSetInitialized(const bool theBlock);
+
/// Set this attribute is argument for result (change of this attribute requires update of result).
/// By default it is true.
MODELAPI_EXPORT void setIsArgument(const bool theFlag);
//********************************************************************
bool ModuleBase_WidgetValidated::isValid(const Handle_SelectMgr_EntityOwner& theOwner)
{
+ DataPtr aData = myFeature->data();
+ AttributePtr anAttribute = myFeature->attribute(attributeID());
+
// stores the current values of the widget attribute
+ aData->blockSendAttributeUpdated(true);
+ bool isAttributeBlocked = anAttribute->blockSetInitialized(true);
storeAttributeValue();
// saves the owner value to the widget attribute
// restores the current values of the widget attribute
restoreAttributeValue(aValid);
+ aData->blockSendAttributeUpdated(false);
+ anAttribute->blockSetInitialized(isAttributeBlocked);
return aValid;
}
DataPtr aData = myFeature->data();
AttributePtr anAttribute = myFeature->attribute(attributeID());
- aData->blockSendAttributeUpdated(true);
-
- // 3. check the acceptability of the current values
std::list<ModelAPI_Validator*>::iterator aValidator = aValidators.begin();
std::list<std::list<std::string> >::iterator aArgs = anArguments.begin();
bool aValid = true;
aValid = aAttrValidator->isValid(anAttribute, *aArgs);
}
}
- aData->blockSendAttributeUpdated(false);
-
return aValid;
}
SketchPlugin_ConstraintTangent.h
SketchPlugin_ConstraintMirror.h
SketchPlugin_ConstraintFillet.h
- SketchPlugin_ShapeValidator.h
+ SketchPlugin_ExternalValidator.h
SketchPlugin_Validators.h
)
SketchPlugin_ConstraintTangent.cpp
SketchPlugin_ConstraintMirror.cpp
SketchPlugin_ConstraintFillet.cpp
- SketchPlugin_ShapeValidator.cpp
+ SketchPlugin_ExternalValidator.cpp
SketchPlugin_Validators.cpp
)
--- /dev/null
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
+
+// File: Model_ResultValidators.cpp
+// Created: 27 Feb 2015
+// Author: Natalia ERMOLAEVA
+
+#include "SketchPlugin_ExternalValidator.h"
+#include "SketchPlugin_Feature.h"
+
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Result.h>
+#include <ModelAPI_Tools.h>
+#include <ModelAPI_AttributeRefAttr.h>
+
+bool SketchPlugin_ExternalValidator::isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments) const
+{
+ if (theArguments.size() != 1)
+ return true;
+
+ // ask whether the feature of the attribute is external
+ bool isAttributeExternal = isExternalAttribute(theAttribute);
+
+ // ask whether the feature of the attribute by parameter identifier is external
+ std::string aFrontArgument = theArguments.front();
+ FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
+ bool isParameterExternal = isExternalAttribute(aFeature->attribute(aFrontArgument));
+
+ // it is not possible that both features, attribute and attribute in parameter, are external
+ if (isAttributeExternal && isParameterExternal)
+ return false;
+ return true;
+}
+
+bool SketchPlugin_ExternalValidator::isExternalAttribute(const AttributePtr& theAttribute) const
+{
+ bool isExternal = false;
+ AttributeRefAttrPtr anAttribute = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
+
+ if (anAttribute.get() != NULL) {
+ FeaturePtr anArgumentFeature = ModelAPI_Feature::feature(anAttribute->object());
+ if (anArgumentFeature.get() != NULL) {
+ std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
+ std::dynamic_pointer_cast<SketchPlugin_Feature>(anArgumentFeature);
+ if (aSketchFeature.get() != NULL) {
+ isExternal = aSketchFeature->isExternal();
+ }
+ }
+ }
+ return isExternal;
+}
--- /dev/null
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
+
+// File: Model_ResultValidators.h
+// Created: 27 Feb 2015
+// Author: Natalia ERMOLAEVA
+
+#ifndef SketchPlugin_ExternalValidator_H
+#define SketchPlugin_ExternalValidator_H
+
+#include <SketchPlugin.h>
+#include <ModelAPI_AttributeValidator.h>
+
+/**\class SketchPlugin_ResultPointValidator
+ * \ingroup Validators
+ * \brief Validator for the points selection
+ *
+ * Allows to select points only.
+ */
+class SketchPlugin_ExternalValidator : public ModelAPI_AttributeValidator
+{
+public:
+ /// returns true if the feature of attribute do not contain external features in the given attribute and
+ /// among attributes listed in the arguments
+ /// \param theAttribute an attribute to check
+ /// \param theArguments a filter parameters
+ SKETCHPLUGIN_EXPORT virtual bool isValid(const AttributePtr& theAttribute,
+ const std::list<std::string>& theArguments) const;
+
+protected:
+ /// returns true if the feature of the attribute is external
+ /// \param theAttribute an attribute to check
+ bool isExternalAttribute(const AttributePtr& theAttribute) const;
+};
+
+#endif
#include <SketchPlugin_ConstraintTangent.h>
#include <SketchPlugin_ConstraintVertical.h>
#include <SketchPlugin_Validators.h>
-#include <SketchPlugin_ShapeValidator.h>
+#include <SketchPlugin_ExternalValidator.h>
#include <Events_Loop.h>
#include <GeomDataAPI_Dir.h>
ModelAPI_ValidatorsFactory* aFactory = aMgr->validators();
aFactory->registerValidator("SketchPlugin_DistanceAttr",
new SketchPlugin_DistanceAttrValidator);
- //aFactory->registerValidator("SketchPlugin_DifferentObjects",
- // new SketchPlugin_DifferentObjectsValidator);
-
- aFactory->registerValidator("SketchPlugin_ShapeValidator",
- new SketchPlugin_ShapeValidator);
+ aFactory->registerValidator("SketchPlugin_ExternalValidator",
+ new SketchPlugin_ExternalValidator);
// register this plugin
ModelAPI_Session::get()->registerPlugin(this);
-
+
Config_PropManager::registerProp("Visualization", "sketch_entity_color", "Sketch enity color",
Config_Prop::Color, SKETCH_ENTITY_COLOR);
+++ /dev/null
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
-
-// File: Model_ResultValidators.cpp
-// Created: 27 Feb 2015
-// Author: Natalia ERMOLAEVA
-
-#include "SketchPlugin_ShapeValidator.h"
-#include "SketchPlugin_Feature.h"
-
-#include <ModelAPI_Session.h>
-#include <ModelAPI_Result.h>
-#include <ModelAPI_Tools.h>
-#include <ModelAPI_AttributeRefAttr.h>
-
-bool SketchPlugin_ShapeValidator::isValid(const AttributePtr& theAttribute,
- const std::list<std::string>& theArguments) const
-{
- if (theArguments.size() != 1)
- return true;
-
- // ask whether the feature of the attribute is external
- bool isAttributeExternal = isExternalAttribute(theAttribute);
-
- // ask whether the feature of the attribute by parameter identifier is external
- std::string aFrontArgument = theArguments.front();
- FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(theAttribute->owner());
- bool isParameterExternal = isExternalAttribute(aFeature->attribute(aFrontArgument));
-
- // it is not possible that both features, attribute and attribute in parameter, are external
- if (isAttributeExternal && isParameterExternal)
- return false;
- return true;
-}
-
-bool SketchPlugin_ShapeValidator::isExternalAttribute(const AttributePtr& theAttribute) const
-{
- bool isExternal = false;
- AttributeRefAttrPtr anAttribute = std::dynamic_pointer_cast<ModelAPI_AttributeRefAttr>(theAttribute);
-
- if (anAttribute.get() != NULL) {
- FeaturePtr anArgumentFeature = ModelAPI_Feature::feature(anAttribute->object());
- if (anArgumentFeature.get() != NULL) {
- std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
- std::dynamic_pointer_cast<SketchPlugin_Feature>(anArgumentFeature);
- if (aSketchFeature.get() != NULL) {
- isExternal = aSketchFeature->isExternal();
- }
- }
- }
- return isExternal;
-}
+++ /dev/null
-// Copyright (C) 2014-20xx CEA/DEN, EDF R&D -->
-
-// File: Model_ResultValidators.h
-// Created: 27 Feb 2015
-// Author: Natalia ERMOLAEVA
-
-#ifndef SketchPlugin_ShapeValidator_H
-#define SketchPlugin_ShapeValidator_H
-
-#include <SketchPlugin.h>
-#include <ModelAPI_AttributeValidator.h>
-
-/**\class SketchPlugin_ResultPointValidator
- * \ingroup Validators
- * \brief Validator for the points selection
- *
- * Allows to select points only.
- */
-class SketchPlugin_ShapeValidator : public ModelAPI_AttributeValidator
-{
-public:
- /// returns true if the feature of attribute do not contain external features in the given attribute and
- /// among attributes listed in the arguments
- /// \param theAttribute an attribute to check
- /// \param theArguments a filter parameters
- SKETCHPLUGIN_EXPORT virtual bool isValid(const AttributePtr& theAttribute,
- const std::list<std::string>& theArguments) const;
-
-protected:
- /// returns true if the feature of the attribute is external
- /// \param theAttribute an attribute to check
- bool isExternalAttribute(const AttributePtr& theAttribute) const;
-};
-
-#endif
label="First object"
tooltip="Select point, line end point, line, center of circle or arc."
shape_types="edge vertex">
- <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityB"/>
+ <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityB"/>
<validator id="GeomValidators_EdgeOrVertex"/>
</sketch_shape_selector>/>
<sketch_shape_selector
shape_types="edge vertex">
<validator id="PartSet_DifferentObjects"/>
<validator id="SketchPlugin_DistanceAttr" parameters="ConstraintEntityA"/>
- <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityA"/>
+ <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
<validator id="GeomValidators_EdgeOrVertex"/>
</sketch_shape_selector>
<sketch_constraint_shape_selector id="ConstraintEntityA"
label="First line" tooltip="Select a line" shape_types="edge">
<validator id="GeomValidators_Edge" parameters="line"/>
- <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityB"/>
+ <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityB"/>
</sketch_constraint_shape_selector>
<sketch_constraint_shape_selector id="ConstraintEntityB" label="Last line" tooltip="Select a line"
shape_types="edge">
<validator id="GeomValidators_Edge" parameters="line"/>
<validator id="PartSet_DifferentObjects"/>
- <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityA"/>
+ <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
</sketch_constraint_shape_selector>
<validator id="PartSet_ParallelValidator"/>
<sketch_constraint_shape_selector id="ConstraintEntityA"
label="First line" tooltip="Select an line"
shape_types="edge">
- <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityB"/>
+ <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityB"/>
<validator id="GeomValidators_Edge" parameters="line"/>
</sketch_constraint_shape_selector>
label="Last line" tooltip="Select an line"
shape_types="edge">
<validator id="PartSet_DifferentObjects"/>
- <validator id="SketchPlugin_ShapeValidator" parameters="ConstraintEntityA"/>
+ <validator id="SketchPlugin_ExternalValidator" parameters="ConstraintEntityA"/>
<validator id="GeomValidators_Edge" parameters="line"/>
</sketch_constraint_shape_selector>
<validator id="PartSet_PerpendicularValidator"/>