X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSketchPlugin%2FSketchPlugin_Plugin.cpp;h=9999ea08c7ca04c7fe3788709e047191f3c9b151;hb=a299eecbf62594492e777394588e4cf2e6ba11c3;hp=c7ee95fcc32070a00d6564cbb37effd8ad1f9870;hpb=3e3d76500389cb3a5a6eeb09f229cd3c83730dac;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Plugin.cpp b/src/SketchPlugin/SketchPlugin_Plugin.cpp index c7ee95fcc..9999ea08c 100644 --- a/src/SketchPlugin/SketchPlugin_Plugin.cpp +++ b/src/SketchPlugin/SketchPlugin_Plugin.cpp @@ -4,14 +4,20 @@ #include #include #include +#include #include #include +#include +#include #include +#include #include #include -#include +#include +#include #include #include +#include #include #include #include @@ -19,8 +25,15 @@ #include #include #include +#include +#include +#include +#include +#include #include #include +#include +#include #include #include @@ -38,9 +51,13 @@ #include #endif -//#define SET_PLANES_COLOR_IN_PREFERENCES +#define SKETCH_ENTITY_COLOR "225,0,0" +#define SKETCH_EXTERNAL_COLOR "170,0,225" +#define SKETCH_AUXILIARY_COLOR "0,85,0" +#define SKETCH_OVERCONSTRAINT_COLOR "0,0,0" +#define SKETCH_FULLY_CONSTRAINED_COLOR "0,150,0" -using namespace std; +//#define SET_PLANES_COLOR_IN_PREFERENCES // the only created instance of this plugin static SketchPlugin_Plugin* MY_SKETCH_INSTANCE = new SketchPlugin_Plugin(); @@ -50,30 +67,78 @@ SketchPlugin_Plugin::SketchPlugin_Plugin() SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); aFactory->registerValidator("SketchPlugin_DistanceAttr", - new SketchPlugin_DistanceAttrValidator); + new SketchPlugin_DistanceAttrValidator); aFactory->registerValidator("SketchPlugin_ExternalValidator", new SketchPlugin_ExternalValidator); aFactory->registerValidator("SketchPlugin_TangentAttr", new SketchPlugin_TangentAttrValidator); + aFactory->registerValidator("SketchPlugin_NotFixed", + new SketchPlugin_NotFixedValidator); + aFactory->registerValidator("SketchPlugin_EqualAttr", + new SketchPlugin_EqualAttrValidator); + aFactory->registerValidator("SketchPlugin_MirrorAttr", + new SketchPlugin_MirrorAttrValidator); + aFactory->registerValidator("SketchPlugin_CoincidenceAttr", + new SketchPlugin_CoincidenceAttrValidator); + aFactory->registerValidator("SketchPlugin_CopyValidator", + new SketchPlugin_CopyValidator); + aFactory->registerValidator("SketchPlugin_SolverErrorValidator", + new SketchPlugin_SolverErrorValidator); + aFactory->registerValidator("SketchPlugin_FilletVertexValidator", + new SketchPlugin_FilletVertexValidator); + aFactory->registerValidator("SketchPlugin_SplitValidator", + new SketchPlugin_SplitValidator); + aFactory->registerValidator("SketchPlugin_TrimValidator", + new SketchPlugin_TrimValidator); + aFactory->registerValidator("SketchPlugin_MiddlePointAttr", + new SketchPlugin_MiddlePointAttrValidator); + aFactory->registerValidator("SketchPlugin_ArcTangentPoint", + new SketchPlugin_ArcTangentPointValidator); + aFactory->registerValidator("SketchPlugin_IntersectionValidator", + new SketchPlugin_IntersectionValidator); + aFactory->registerValidator("SketchPlugin_ProjectionValidator", + new SketchPlugin_ProjectionValidator); + aFactory->registerValidator("SketchPlugin_DifferentReference", + new SketchPlugin_DifferentReferenceValidator); + aFactory->registerValidator("SketchPlugin_DifferentPointReference", + new SketchPlugin_DifferentPointReferenceValidator); + aFactory->registerValidator("SketchPlugin_CirclePassedPointValidator", + new SketchPlugin_CirclePassedPointValidator); + aFactory->registerValidator("SketchPlugin_ThirdPointValidator", + new SketchPlugin_ThirdPointValidator); + aFactory->registerValidator("SketchPlugin_ArcEndPointValidator", + new SketchPlugin_ArcEndPointValidator); + aFactory->registerValidator("SketchPlugin_ArcEndPointIntersectionValidator", + new SketchPlugin_ArcEndPointIntersectionValidator); + aFactory->registerValidator("SketchPlugin_HasNoConstraint", new SketchPlugin_HasNoConstraint); // register this plugin ModelAPI_Session::get()->registerPlugin(this); - - Config_PropManager::registerProp("Visualization", "sketch_entity_color", "Sketch enity color", + + Config_PropManager::registerProp("Visualization", "sketch_entity_color", + "Sketch entity color", Config_Prop::Color, SKETCH_ENTITY_COLOR); - Config_PropManager::registerProp("Visualization", "sketch_external_color", "Sketch external entity color", + Config_PropManager::registerProp("Visualization", "sketch_external_color", + "Sketch external entity color", Config_Prop::Color, SKETCH_EXTERNAL_COLOR); - Config_PropManager::registerProp("Visualization", "sketch_auxiliary_color", "Sketch auxiliary entity color", + Config_PropManager::registerProp("Visualization", "sketch_auxiliary_color", + "Sketch auxiliary entity color", Config_Prop::Color, SKETCH_AUXILIARY_COLOR); - Config_PropManager::registerProp("Visualization", "sketch_constraint_color", "Sketch constraint color", - Config_Prop::Color, SKETCH_CONSTRAINT_COLOR); - - Config_PropManager::registerProp("Visualization", "sketch_dimension_color", "Sketch dimension color", + Config_PropManager::registerProp("Visualization", "sketch_dimension_color", + "Sketch dimension color", Config_Prop::Color, SKETCH_DIMENSION_COLOR); + Config_PropManager::registerProp("Visualization", "sketch_overconstraint_color", + "Sketch overconstraint color", + Config_Prop::Color, SKETCH_OVERCONSTRAINT_COLOR); + + Config_PropManager::registerProp("Visualization", "sketch_fully_constrained_color", + "Sketch fully constrained color", + Config_Prop::Color, SKETCH_FULLY_CONSTRAINED_COLOR); + // register sketcher properties #ifdef SET_PLANES_COLOR_IN_PREFERENCES Config_PropManager::registerProp("Visualization", "yz_plane_color", "YZ plane color", @@ -85,20 +150,26 @@ SketchPlugin_Plugin::SketchPlugin_Plugin() #endif } -FeaturePtr SketchPlugin_Plugin::createFeature(string theFeatureID) +FeaturePtr SketchPlugin_Plugin::createFeature(std::string theFeatureID) { if (theFeatureID == SketchPlugin_Sketch::ID()) { return FeaturePtr(new SketchPlugin_Sketch); } else if (theFeatureID == SketchPlugin_Point::ID()) { return FeaturePtr(new SketchPlugin_Point); + } else if (theFeatureID == SketchPlugin_IntersectionPoint::ID()) { + return FeaturePtr(new SketchPlugin_IntersectionPoint); } else if (theFeatureID == SketchPlugin_Line::ID()) { return FeaturePtr(new SketchPlugin_Line); } else if (theFeatureID == SketchPlugin_Circle::ID()) { return FeaturePtr(new SketchPlugin_Circle); } else if (theFeatureID == SketchPlugin_Arc::ID()) { return FeaturePtr(new SketchPlugin_Arc); + } else if (theFeatureID == SketchPlugin_Projection::ID()) { + return FeaturePtr(new SketchPlugin_Projection); } else if (theFeatureID == SketchPlugin_ConstraintCoincidence::ID()) { return FeaturePtr(new SketchPlugin_ConstraintCoincidence); + } else if (theFeatureID == SketchPlugin_ConstraintCollinear::ID()) { + return FeaturePtr(new SketchPlugin_ConstraintCollinear); } else if (theFeatureID == SketchPlugin_ConstraintDistance::ID()) { return FeaturePtr(new SketchPlugin_ConstraintDistance); } else if (theFeatureID == SketchPlugin_ConstraintLength::ID()) { @@ -119,10 +190,30 @@ FeaturePtr SketchPlugin_Plugin::createFeature(string theFeatureID) return FeaturePtr(new SketchPlugin_ConstraintEqual); } else if (theFeatureID == SketchPlugin_ConstraintTangent::ID()) { return FeaturePtr(new SketchPlugin_ConstraintTangent); + } else if (theFeatureID == SketchPlugin_ConstraintMiddle::ID()) { + return FeaturePtr(new SketchPlugin_ConstraintMiddle); } else if (theFeatureID == SketchPlugin_ConstraintMirror::ID()) { return FeaturePtr(new SketchPlugin_ConstraintMirror); - } else if (theFeatureID == SketchPlugin_ConstraintFillet::ID()) { - return FeaturePtr(new SketchPlugin_ConstraintFillet); + } else if (theFeatureID == SketchPlugin_Fillet::ID()) { + return FeaturePtr(new SketchPlugin_Fillet); + } else if (theFeatureID == SketchPlugin_ConstraintSplit::ID()) { + return FeaturePtr(new SketchPlugin_ConstraintSplit); + } else if (theFeatureID == SketchPlugin_MultiTranslation::ID()) { + return FeaturePtr(new SketchPlugin_MultiTranslation); + } else if (theFeatureID == SketchPlugin_MultiRotation::ID()) { + return FeaturePtr(new SketchPlugin_MultiRotation); + } else if (theFeatureID == SketchPlugin_ConstraintAngle::ID()) { + return FeaturePtr(new SketchPlugin_ConstraintAngle); + } else if (theFeatureID == SketchPlugin_Trim::ID()) { + return FeaturePtr(new SketchPlugin_Trim); + } else if (theFeatureID == SketchPlugin_MacroArc::ID()) { + return FeaturePtr(new SketchPlugin_MacroArc); + } else if (theFeatureID == SketchPlugin_MacroCircle::ID()) { + return FeaturePtr(new SketchPlugin_MacroCircle); + } else if (theFeatureID == SketchPlugin_Ellipse::ID()) { + return FeaturePtr(new SketchPlugin_Ellipse); + } else if (theFeatureID == SketchPlugin_MacroEllipse::ID()) { + return FeaturePtr(new SketchPlugin_MacroEllipse); } // feature of such kind is not found return FeaturePtr(); @@ -143,8 +234,8 @@ std::shared_ptr SketchPlugin_Plugin ::getFeaturesState(const std::shared_ptr& theFeature) const { const Events_ID kResponseEvent = Events_Loop::loop()->eventByName(EVENT_FEATURE_STATE_RESPONSE); - std::shared_ptr aMsg = - std::make_shared(kResponseEvent, this); + std::shared_ptr aMsg( + new ModelAPI_FeatureStateMessage(kResponseEvent, this)); bool aHasSketchPlane = false; std::shared_ptr aSketchFeature = @@ -153,14 +244,21 @@ std::shared_ptr SketchPlugin_Plugin std::shared_ptr aData = aSketchFeature->data(); if (aData) { std::shared_ptr aNormal = - std::dynamic_pointer_cast(aData->attribute(SketchPlugin_Sketch::NORM_ID())); - aHasSketchPlane = aNormal && !(aNormal->x() == 0 && aNormal->y() == 0 && aNormal->z() == 0); + std::dynamic_pointer_cast( + aData->attribute(SketchPlugin_Sketch::NORM_ID())); + // it is important to check whether the normal attribute is initialized + // because it is possible that normal values are filled when the plane is checked on validity + aHasSketchPlane = aNormal && aNormal->isInitialized() && + !(aNormal->x() == 0 && aNormal->y() == 0 && aNormal->z() == 0); aMsg->setState(SketchPlugin_Point::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_IntersectionPoint::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_Line::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_Circle::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_Arc::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_Projection::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintCoincidence::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintCollinear::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintDistance::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintLength::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintParallel::ID(), aHasSketchPlane); @@ -171,8 +269,18 @@ std::shared_ptr SketchPlugin_Plugin aMsg->setState(SketchPlugin_ConstraintVertical::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintEqual::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintTangent::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintMiddle::ID(), aHasSketchPlane); aMsg->setState(SketchPlugin_ConstraintMirror::ID(), aHasSketchPlane); - aMsg->setState(SketchPlugin_ConstraintFillet::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_Fillet::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintSplit::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintAngle::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_MultiRotation::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_MultiTranslation::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_Trim::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_MacroArc::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_MacroCircle::ID(), aHasSketchPlane); + // SketchRectangle is a python feature, so its ID is passed just as a string + aMsg->setState("SketchRectangle", aHasSketchPlane); } } return aMsg;