#include <PartSet_OperationSketch.h>
#include <ModuleBase_OperationDescription.h>
-#include <Model_Events.h>
+#include <ModuleBase_ViewerPrs.h>
-#include <XGUI_ViewerPrs.h>
+#include <ModelAPI_Events.h>
#include <SketchPlugin_Feature.h>
#include <GeomDataAPI_Point2D.h>
#include <ModelAPI_Data.h>
#include <ModelAPI_Document.h>
-#include <Model_Events.h>
+#include <ModelAPI_Events.h>
#include <Events_Loop.h>
using namespace std;
PartSet_OperationFeatureEditMulti::PartSet_OperationFeatureEditMulti(const QString& theId,
- QObject* theParent,
- FeaturePtr theFeature)
-: PartSet_OperationSketchBase(theId, theParent), mySketch(theFeature), myIsBlockedSelection(false)
+ QObject* theParent,
+ FeaturePtr theFeature)
+ : PartSet_OperationSketchBase(theId, theParent),
+ mySketch(theFeature),
+ myIsBlockedSelection(false)
{
+ myIsEditing = true;
}
PartSet_OperationFeatureEditMulti::~PartSet_OperationFeatureEditMulti()
{
}
-bool PartSet_OperationFeatureEditMulti::isGranted(ModuleBase_IOperation* theOperation) const
-{
- return theOperation->getDescription()->operationId().toStdString() == PartSet_OperationSketch::Type();
-}
-void PartSet_OperationFeatureEditMulti::initSelection(const std::list<XGUI_ViewerPrs>& theSelected,
- const std::list<XGUI_ViewerPrs>& theHighlighted)
+bool isContains(const std::list<ModuleBase_ViewerPrs>& theSelected, const ModuleBase_ViewerPrs& thePrs)
{
- if (!theHighlighted.empty()) {
- // if there is highlighted object, we check whether it is in the list of selected objects
- // in that case this object is a handle of the moved lines. If there no such object in the selection,
- // the hightlighted object should moved and the selection is skipped. The skipped selection will be
- // deselected in the viewer by blockSelection signal in the startOperation method.
- bool isSelected = false;
- std::list<XGUI_ViewerPrs>::const_iterator anIt = theSelected.begin(), aLast = theSelected.end();
- for (; anIt != aLast && !isSelected; anIt++) {
- isSelected = (*anIt).feature() == feature();
- }
- if (!isSelected)
- myFeatures = theHighlighted;
- else
- myFeatures = theSelected;
+ std::list<ModuleBase_ViewerPrs>::const_iterator anIt;
+ for (anIt = theSelected.cbegin(); anIt != theSelected.cend(); ++anIt) {
+ if ((*anIt).object() == thePrs.object())
+ return true;
}
- else
- myFeatures = theSelected;
+ return false;
}
-void PartSet_OperationFeatureEditMulti::initFeature(FeaturePtr theFeature)
+
+void PartSet_OperationFeatureEditMulti::initSelection(
+ const std::list<ModuleBase_ViewerPrs>& theSelected,
+ const std::list<ModuleBase_ViewerPrs>& theHighlighted)
{
- setEditingFeature(theFeature);
+ //if (!theHighlighted.empty()) {
+ // // if there is highlighted object, we check whether it is in the list of selected objects
+ // // in that case this object is a handle of the moved lines. If there no such object in the selection,
+ // // the hightlighted object should moved and the selection is skipped. The skipped selection will be
+ // // deselected in the viewer by blockSelection signal in the startOperation method.
+ // bool isSelected = false;
+ // std::list<ModuleBase_ViewerPrs>::const_iterator anIt = theSelected.begin(),
+ // aLast = theSelected.end();
+ // for (; anIt != aLast && !isSelected; anIt++) {
+ // isSelected = ModelAPI_Feature::feature((*anIt).object()) == feature();
+ // }
+ // if (!isSelected)
+ // myFeatures = theHighlighted;
+ // else
+ // myFeatures = theSelected;
+ //} else
+ myFeatures = theSelected;
+ // add highlighted elements if they are not selected
+ std::list<ModuleBase_ViewerPrs>::const_iterator anIt;
+ for (anIt = theHighlighted.cbegin(); anIt != theHighlighted.cend(); ++anIt) {
+ if (!isContains(myFeatures, (*anIt)))
+ myFeatures.push_back(*anIt);
+ }
+ // Remove current feature if it is in the list (it will be moved as main feature)
+ FeaturePtr aFea = feature();
+ for (anIt = myFeatures.cbegin(); anIt != myFeatures.cend(); ++anIt) {
+ FeaturePtr aF = ModelAPI_Feature::feature((*anIt).object());
+ if (ModelAPI_Feature::feature((*anIt).object()) == feature()) {
+ myFeatures.erase(anIt);
+ break;
+ }
+ }
}
FeaturePtr PartSet_OperationFeatureEditMulti::sketch() const
return mySketch;
}
-void PartSet_OperationFeatureEditMulti::mousePressed(QMouseEvent* theEvent, Handle(V3d_View) theView,
- const std::list<XGUI_ViewerPrs>& /*theSelected*/,
- const std::list<XGUI_ViewerPrs>& theHighlighted)
+void PartSet_OperationFeatureEditMulti::mousePressed(
+ QMouseEvent* theEvent, Handle(V3d_View) theView,
+ const std::list<ModuleBase_ViewerPrs>& /*theSelected*/,
+ const std::list<ModuleBase_ViewerPrs>& theHighlighted)
{
}
void PartSet_OperationFeatureEditMulti::mouseMoved(QMouseEvent* theEvent, Handle(V3d_View) theView)
{
- if (!(theEvent->buttons() & Qt::LeftButton))
+ if (!(theEvent->buttons() & Qt::LeftButton))
return;
gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theView);
double aDeltaX = aX - aCurX;
double aDeltaY = anY - aCurY;
- boost::shared_ptr<SketchPlugin_Feature> aSketchFeature =
- boost::dynamic_pointer_cast<SketchPlugin_Feature>(feature());
+ boost::shared_ptr<SketchPlugin_Feature> aSketchFeature = boost::dynamic_pointer_cast<
+ SketchPlugin_Feature>(feature());
aSketchFeature->move(aDeltaX, aDeltaY);
- std::list<XGUI_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast = myFeatures.end();
+ std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(),
+ aLast = myFeatures.end();
for (; anIt != aLast; anIt++) {
- FeaturePtr aFeature = (*anIt).feature();
- if (!aFeature || aFeature == feature())
+ ObjectPtr aObject = (*anIt).object();
+ if (!aObject || aObject == feature())
continue;
- aSketchFeature = boost::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
- aSketchFeature->move(aDeltaX, aDeltaY);
+ FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
+ if (aFeature) {
+ aSketchFeature = boost::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
+ if (aSketchFeature)
+ aSketchFeature->move(aDeltaX, aDeltaY);
+ }
}
}
sendFeatures();
myCurPoint.setPoint(aPoint);
}
-void PartSet_OperationFeatureEditMulti::mouseReleased(QMouseEvent* theEvent, Handle(V3d_View) theView,
- const std::list<XGUI_ViewerPrs>& /*theSelected*/,
- const std::list<XGUI_ViewerPrs>& /*theHighlighted*/)
+void PartSet_OperationFeatureEditMulti::mouseReleased(
+ QMouseEvent* theEvent, Handle(V3d_View) theView,
+ const std::list<ModuleBase_ViewerPrs>& /*theSelected*/,
+ const std::list<ModuleBase_ViewerPrs>& /*theHighlighted*/)
{
- std::list<XGUI_ViewerPrs> aFeatures = myFeatures;
- commit();
- std::list<XGUI_ViewerPrs>::const_iterator anIt = aFeatures.begin(), aLast = aFeatures.end();
- for (; anIt != aLast; anIt++) {
- FeaturePtr aFeature = (*anIt).feature();
- if (aFeature) {
- emit featureConstructed(aFeature, FM_Deactivation);
- }
+ if (commit()) {
+ std::list<ModuleBase_ViewerPrs> aFeatures = myFeatures;
+ std::list<ModuleBase_ViewerPrs>::const_iterator anIt = aFeatures.begin(), aLast =
+ aFeatures.end();
+ for (; anIt != aLast; anIt++) {
+ ObjectPtr aFeature = (*anIt).object();
+ if (aFeature) {
+ emit featureConstructed(aFeature, FM_Deactivation);
+ }
+ }
}
}
myFeatures.clear();
}
-void PartSet_OperationFeatureEditMulti::blockSelection(bool isBlocked, const bool isRestoreSelection)
+void PartSet_OperationFeatureEditMulti::blockSelection(bool isBlocked,
+ const bool isRestoreSelection)
{
if (myIsBlockedSelection == isBlocked)
return;
myIsBlockedSelection = isBlocked;
- QFeatureList aFeatureList;
- std::list<XGUI_ViewerPrs>::const_iterator anIt = myFeatures.begin(),
- aLast = myFeatures.end();
- for(; anIt != aLast; anIt++)
- aFeatureList.append((*anIt).feature());
+ QList<ObjectPtr> aFeatureList;
+ std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast =
+ myFeatures.end();
+ /*for(; anIt != aLast; anIt++)
+ aFeatureList.append((*anIt).feature());*/
if (isBlocked) {
- emit setSelection(QFeatureList());
+ emit setSelection(QList<ObjectPtr>());
emit stopSelection(aFeatureList, true);
- }
- else {
+ } else {
emit stopSelection(aFeatureList, false);
if (isRestoreSelection) {
emit setSelection(aFeatureList);
void PartSet_OperationFeatureEditMulti::sendFeatures()
{
- static Events_ID anEvent = Events_Loop::eventByName(EVENT_FEATURE_MOVED);
+ static Events_ID anEvent = Events_Loop::eventByName(EVENT_OBJECT_MOVED);
- std::list<FeaturePtr > aFeatures;
- std::list<XGUI_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast = myFeatures.end();
+ std::list<FeaturePtr> aFeatures;
+ std::list<ModuleBase_ViewerPrs>::const_iterator anIt = myFeatures.begin(), aLast =
+ myFeatures.end();
for (; anIt != aLast; anIt++) {
- FeaturePtr aFeature = (*anIt).feature();
+ ObjectPtr aFeature = (*anIt).object();
if (!aFeature)
continue;
- Model_FeatureUpdatedMessage aMessage(aFeature, anEvent);
- Events_Loop::loop()->send(aMessage);
+ ModelAPI_EventCreator::get()->sendUpdated(aFeature, anEvent);
}
Events_Loop::loop()->flush(anEvent);
flushUpdated();