X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FSketchPlugin%2FSketchPlugin_Plugin.cpp;h=6680aef33008ad4a073d0ed3e3e6b7eebdc207f5;hb=94a0bf3ae8768e2f4ec5848692276dca05208e80;hp=90f54d5604785d6f5e08e72b605e5d5a007b6fce;hpb=d77708ba98445935aae7a0d93b5506e1f16018de;p=modules%2Fshaper.git diff --git a/src/SketchPlugin/SketchPlugin_Plugin.cpp b/src/SketchPlugin/SketchPlugin_Plugin.cpp index 90f54d560..6680aef33 100644 --- a/src/SketchPlugin/SketchPlugin_Plugin.cpp +++ b/src/SketchPlugin/SketchPlugin_Plugin.cpp @@ -1,39 +1,53 @@ -#include "SketchPlugin_Plugin.h" -#include "SketchPlugin_Sketch.h" -#include "SketchPlugin_Line.h" -#include "SketchPlugin_Point.h" -#include "SketchPlugin_Circle.h" -#include "SketchPlugin_Arc.h" -#include "SketchPlugin_ConstraintCoincidence.h" -#include "SketchPlugin_ConstraintDistance.h" -#include "SketchPlugin_ConstraintLength.h" -#include "SketchPlugin_ConstraintParallel.h" -#include "SketchPlugin_ConstraintPerpendicular.h" -#include "SketchPlugin_ConstraintRadius.h" -#include "SketchPlugin_Validators.h" -#include "SketchPlugin_ResultValidators.h" +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D --> + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + #include #include #include +#include #include +#include + +#ifdef _DEBUG +#include +#endif + using namespace std; // the only created instance of this plugin -static SketchPlugin_Plugin* MY_INSTANCE = new SketchPlugin_Plugin(); +static SketchPlugin_Plugin* MY_SKETCH_INSTANCE = new SketchPlugin_Plugin(); SketchPlugin_Plugin::SketchPlugin_Plugin() { SessionPtr aMgr = ModelAPI_Session::get(); ModelAPI_ValidatorsFactory* aFactory = aMgr->validators(); - aFactory->registerValidator("SketchPlugin_DistanceAttrValidator", - new SketchPlugin_DistanceAttrValidator); - aFactory->registerValidator("SketchPlugin_RadiusValidator", - new SketchPlugin_RadiusValidator); - aFactory->registerValidator("SketchPlugin_ResultPointValidator", new SketchPlugin_ResultPointValidator); - aFactory->registerValidator("SketchPlugin_ResultLineValidator", new SketchPlugin_ResultLineValidator); - aFactory->registerValidator("SketchPlugin_ResultArcValidator", new SketchPlugin_ResultArcValidator); + aFactory->registerValidator("SketchPlugin_DistanceAttr", + new SketchPlugin_DistanceAttrValidator); + aFactory->registerValidator("SketchPlugin_DifferentObjects", + new SketchPlugin_DifferentObjectsValidator); + aFactory->registerValidator("SketchPlugin_ResultPoint", new SketchPlugin_ResultPointValidator); + aFactory->registerValidator("SketchPlugin_ResultLine", new SketchPlugin_ResultLineValidator); + aFactory->registerValidator("SketchPlugin_ResultArc", new SketchPlugin_ResultArcValidator); // register this plugin ModelAPI_Session::get()->registerPlugin(this); @@ -43,7 +57,7 @@ SketchPlugin_Plugin::SketchPlugin_Plugin() SKETCH_PLANE_COLOR); Config_PropManager::registerProp("Sketch planes", "planes_size", "Size", Config_Prop::Double, PLANE_SIZE); - Config_PropManager::registerProp("Sketch planes", "planes_thikness", "Thickness", + Config_PropManager::registerProp("Sketch planes", "planes_thickness", "Thickness", Config_Prop::Integer, SKETCH_WIDTH); Config_PropManager::registerProp("Visualization", "parallel_color", "Parallel constraint color", @@ -57,6 +71,8 @@ SketchPlugin_Plugin::SketchPlugin_Plugin() Config_Prop::Color, LENGTH_COLOR); Config_PropManager::registerProp("Visualization", "radius_color", "Radius color", Config_Prop::Color, RADIUS_COLOR); + Config_PropManager::registerProp("Visualization", "fixing_color", "Fixing color", + Config_Prop::Color, FIXING_COLOR); } FeaturePtr SketchPlugin_Plugin::createFeature(string theFeatureID) @@ -83,7 +99,51 @@ FeaturePtr SketchPlugin_Plugin::createFeature(string theFeatureID) return FeaturePtr(new SketchPlugin_ConstraintPerpendicular); } else if (theFeatureID == SketchPlugin_ConstraintRadius::ID()) { return FeaturePtr(new SketchPlugin_ConstraintRadius); + } else if (theFeatureID == SketchPlugin_ConstraintRigid::ID()) { + return FeaturePtr(new SketchPlugin_ConstraintRigid); } // feature of such kind is not found return FeaturePtr(); } + +void SketchPlugin_Plugin::processEvent(const std::shared_ptr& theMessage) +{ + const Events_ID kRequestEvent = + Events_Loop::loop()->eventByName(EVENT_FEATURE_STATE_REQUEST); + if (theMessage->eventID() == kRequestEvent) { + std::shared_ptr aStateMessage = + std::dynamic_pointer_cast(theMessage); + Events_Loop::loop()->send(getFeaturesState(aStateMessage->feature()), false); + } +} + +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); + + bool aHasSketchPlane = false; + std::shared_ptr aSketchFeature = + std::dynamic_pointer_cast(theFeature); + if (aSketchFeature.get()) { + std::shared_ptr aData = aSketchFeature->data(); + 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); + + aMsg->setState(SketchPlugin_Point::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_Line::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_Circle::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_Arc::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintCoincidence::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintDistance::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintLength::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintParallel::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintPerpendicular::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintRadius::ID(), aHasSketchPlane); + aMsg->setState(SketchPlugin_ConstraintRigid::ID(), aHasSketchPlane); + } + return aMsg; +}