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;
}
#include <SketchPlugin_ConstraintVertical.h>
#include <SketchPlugin_ConstraintEqual.h>
#include <SketchPlugin_ConstraintTangent.h>
+#include <SketchPlugin_ConstraintCoincidence.h>
#include <SelectMgr_IndexedMapOfOwner.hxx>
#include <StdSelect_BRepOwner.hxx>
aIds << SketchPlugin_ConstraintVertical::ID().c_str();
aIds << SketchPlugin_ConstraintEqual::ID().c_str();
aIds << SketchPlugin_ConstraintTangent::ID().c_str();
+ aIds << SketchPlugin_ConstraintCoincidence::ID().c_str();
}
return aIds;
}
<file>icons/equal.png</file>
<file>icons/tangent.png</file>
<file>icons/fillet.png</file>
+ <file>icons/coincedence.png</file>
</qresource>
</RCC>
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
<group id="Basic">
<feature
id="Sketch"
- nested="SketchPoint SketchLine SketchCircle SketchArc SketchConstraintLength SketchConstraintRadius SketchConstraintDistance SketchConstraintParallel SketchConstraintPerpendicular SketchConstraintRigid SketchConstraintHorizontal SketchConstraintVertical SketchConstraintEqual SketchConstraintTangent SketchConstraintFillet"
+ nested="SketchPoint SketchLine SketchCircle SketchArc SketchConstraintLength SketchConstraintRadius SketchConstraintDistance SketchConstraintParallel SketchConstraintPerpendicular SketchConstraintRigid SketchConstraintHorizontal SketchConstraintVertical SketchConstraintEqual SketchConstraintTangent SketchConstraintFillet SketchConstraintCoincidence"
when_nested="accept abort"
title="Sketch"
tooltip="Create a new sketch"
</group>
<group id="Constraints">
- <feature
- id="SketchConstraintCoincidence"
- title="Coincident"
- tooltip="Create constraint for the coincidence of two points"
- internal="1" />
<!-- SketchConstraintDistance -->
<feature
id="SketchConstraintDistance"
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>
<!--
<validator id="PartSet_DistanceValidator"/>
</feature>
+
<!-- SketchConstraintLength -->
<feature id="SketchConstraintLength" title="Length" tooltip="Set fixed length of a line segment" icon=":icons/length.png">
<label title="Select a line on which to calculate length" tooltip="Select a line on which to calculate length"/>
</doublevalue_editor>
<validator id="PartSet_LengthValidator"/>
</feature>
+
<!-- SketchConstraintRadius -->
<feature id="SketchConstraintRadius" title="Radius" tooltip="Set fixed radius of a circle or an arc" icon=":icons/radius_constr.png">
<label title="Select a circle or an arc on which to calculate radius" tooltip="Select a circle or an arc on which to calculate radius"/>
<doublevalue_editor label="Value" tooltip="Radius" id="ConstraintValue" default="computed"/>
<validator id="PartSet_RadiusValidator"/>
</feature>
+
<!-- SketchConstraintParallel -->
<feature id="SketchConstraintParallel" title="Parallel" tooltip="Create constraint defining two parallel lines" icon=":icons/parallel.png">
<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"/>
</feature>
+
<!-- SketchConstraintPerpendicular -->
<feature id="SketchConstraintPerpendicular" title="Perpendicular"
tooltip="Create constraint defining two perpendicular lines"
<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"/>
</feature>
- <!-- SketchConstraintRigid -->
+
+ <!-- SketchConstraintCoincedence -->
+ <feature id="SketchConstraintCoincidence" title="Coincident" tooltip="Create constraint for the coincidence of two points" icon=":icons/coincedence.png">
+ <sketch_shape_selector id="ConstraintEntityA" label="First point" tooltip="Select a first point" shape_types="vertex"/>
+ <sketch_shape_selector id="ConstraintEntityB" label="Second point" tooltip="Select a second point" shape_types="vertex">
+ <validator id="PartSet_DifferentObjects"/>
+ </sketch_shape_selector>
+ </feature>
+
+ <!-- SketchConstraintRigid -->
<feature id="SketchConstraintRigid" title="Fixed" tooltip="Fix an object" icon=":icons/fixed.png">
<shape_selector id="ConstraintEntityA" label="Object" tooltip="Select an object"
shape_types="edge vertex">
</shape_selector>
<validator id="PartSet_RigidValidator"/>
</feature>
+
<!-- SketchConstraintHorizontal -->
<feature id="SketchConstraintHorizontal" title="Horizontal" tooltip="Create constraint defining horizontal line" icon=":icons/horisontal.png">
<sketch_constraint_shape_selector id="ConstraintEntityA"
<validator id="GeomValidators_Edge" parameters="line"/>
</sketch_constraint_shape_selector>
</feature>
+
<!-- SketchConstraintVertical -->
<feature id="SketchConstraintVertical" title="Vertical" tooltip="Create constraint defining vertical line" icon=":icons/vertical.png">
<sketch_constraint_shape_selector id="ConstraintEntityA"
<validator id="GeomValidators_Edge" parameters="line"/>
</sketch_constraint_shape_selector>
</feature>
+
<!-- SketchConstraintEqual -->
<feature id="SketchConstraintEqual" title="Equal" tooltip="Create constraint defining equality of two objects" icon=":icons/equal.png">
<sketch_constraint_shape_selector id="ConstraintEntityA"
label="Last object" tooltip="Select line, circle or arc" shape_types="edge">
</sketch_constraint_shape_selector>
</feature>
+
<!-- SketchConstraintTangent -->
<feature id="SketchConstraintTangent" title="Tangent" tooltip="Create constraint defining tangency of two objects" icon=":icons/tangent.png">
<sketch_constraint_shape_selector id="ConstraintEntityA"
label="Last object" tooltip="Select line or arc" shape_types="edge">
</sketch_constraint_shape_selector>
</feature>
+
<!-- SketchConstraintMirror -->
<feature
id="SketchConstraintMirror"
tooltip="Create constraint mirroring group of objects"
internal="1" />
</group>
+
<group id="Edit">
<!-- SketchConstraintFillet -->
<feature id="SketchConstraintFillet" title="Fillet" tooltip="Create constraint defining fillet between two objects" icon=":icons/fillet.png">
else if (anAttr->attr()) {
aPointAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(anAttr->attr());
}
- return aPointAttr->pnt();
+ if (aPointAttr.get() != NULL)
+ return aPointAttr->pnt();
+ return std::shared_ptr<GeomAPI_Pnt2d>();
}