#include "PartSet_SketcherMgr.h"
#include "PartSet_Tools.h"
+#include <PartSetPlugin_Part.h>
+
#include <GeomAPI_Pnt2d.h>
#include <GeomDataAPI_Point2D.h>
#include <Events_Loop.h>
#include <ModelAPI_Events.h>
#include <ModelAPI_Session.h>
+#include <ModelAPI_ResultPart.h>
+#include <ModelAPI_ResultParameter.h>
#include <QAction>
#include <QMenu>
void PartSet_MenuMgr::createActions()
{
- QAction* anAction;
+ QAction* aAction;
+
+ aAction = new QAction(tr("Auxiliary"), this);
+ aAction->setCheckable(true);
+ addAction("AUXILIARY_CMD", aAction);
+
+ aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this);
+ connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePart(bool)));
+ myActions["ACTIVATE_PART_CMD"] = aAction;
+
+ aAction = new QAction(QIcon(":icons/deactivate.png"), tr("Deactivate"), this);
+ connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePartSet(bool)));
+ myActions["DEACTIVATE_PART_CMD"] = aAction;
- anAction = new QAction(tr("Auxiliary"), this);
- anAction->setCheckable(true);
- addAction("AUXILIARY_CMD", anAction);
+ // Activate PartSet
+ aAction = new QAction(QIcon(":icons/activate.png"), tr("Activate"), this);
+ connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onActivatePartSet(bool)));
+ myActions["ACTIVATE_PARTSET_CMD"] = aAction;
+
+ aAction = new QAction(QIcon(":icons/edit.png"), tr("Edit..."), this);
+ connect(aAction, SIGNAL(triggered(bool)), this, SLOT(onEdit(bool)));
+ myActions["EDIT_CMD"] = aAction;
}
aPointAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
aFeature->data()->attribute(SketchPlugin_Point::COORD_ID()));
- else if (aFeature && aFeature->getKind() == SketchPlugin_Circle::ID())
- aPointAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(
- aFeature->data()->attribute(SketchPlugin_Circle::CENTER_ID()));
-
else if (anAttr->attr()) {
aPointAttr = std::dynamic_pointer_cast<GeomDataAPI_Point2D>(anAttr->attr());
}
FeaturePtr aObj = ModelAPI_Feature::feature(aPnt->object());
if (!theList.contains(aObj)) {
std::shared_ptr<GeomAPI_Pnt2d> aOrig = getPoint(theStartCoin, theAttr);
+ if (aOrig.get() == NULL)
+ return;
theList.append(aObj);
const std::set<AttributePtr>& aRefsList = aObj->data()->refsToMe();
std::set<AttributePtr>::const_iterator aIt;
FeaturePtr aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
if (aConstrFeature->getKind() == SketchPlugin_ConstraintCoincidence::ID()) {
std::shared_ptr<GeomAPI_Pnt2d> aPnt = getPoint(aConstrFeature, theAttr);
- if (aOrig->isEqual(aPnt)) {
+ if (aPnt.get() && aOrig->isEqual(aPnt)) {
findCoincidences(aConstrFeature, theList, SketchPlugin_ConstraintCoincidence::ENTITY_A());
findCoincidences(aConstrFeature, theList, SketchPlugin_ConstraintCoincidence::ENTITY_B());
}
}
-bool PartSet_MenuMgr::addViewerItems(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const
+bool PartSet_MenuMgr::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const
{
ModuleBase_Operation* anOperation = myModule->workshop()->currentOperation();
if (!PartSet_SketcherMgr::isSketchOperation(anOperation) &&
bool hasAttribute = false;
bool hasFeature = false;
- QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected();
+ QList<ModuleBase_ViewerPrs> aPrsList = aSelection->getSelected(ModuleBase_ISelection::AllControls);
TopoDS_Shape aShape;
ResultPtr aResult;
FeaturePtr aFeature;
std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
FeaturePtr aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
if (aConstrFeature->getKind() == SketchPlugin_ConstraintCoincidence::ID()) {
- std::shared_ptr<GeomAPI_Pnt2d> a2dPnt = getPoint(aConstrFeature, SketchPlugin_ConstraintCoincidence::ENTITY_A());
- if (aSelPnt->isEqual(a2dPnt)) {
+ std::shared_ptr<GeomAPI_Pnt2d> a2dPnt =
+ getPoint(aConstrFeature, SketchPlugin_ConstraintCoincidence::ENTITY_A());
+ if (a2dPnt.get() && aSelPnt->isEqual(a2dPnt)) {
aCoincident = aConstrFeature;
break;
- }
+ } else {
+ a2dPnt = getPoint(aConstrFeature, SketchPlugin_ConstraintCoincidence::ENTITY_B());
+ if (a2dPnt.get() && aSelPnt->isEqual(a2dPnt)) {
+ aCoincident = aConstrFeature;
+ break;
+ }
+ }
}
}
// If we have coincidence then add Detach menu
int aId = theAction->data().toInt();
FeaturePtr aLine = myCoinsideLines.at(aId);
std::shared_ptr<GeomAPI_Pnt2d> aOrig = getPoint(mySelectedFeature, SketchPlugin_ConstraintCoincidence::ENTITY_A());
+ if (aOrig.get() == NULL)
+ aOrig = getPoint(mySelectedFeature, SketchPlugin_ConstraintCoincidence::ENTITY_B());
+
gp_Pnt aOr = aOrig->impl<gp_Pnt>();
const std::set<AttributePtr>& aRefsList = aLine->data()->refsToMe();
FeaturePtr aConstrFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
if (aConstrFeature->getKind() == SketchPlugin_ConstraintCoincidence::ID()) {
std::shared_ptr<GeomAPI_Pnt2d> aPnt = getPoint(aConstrFeature, SketchPlugin_ConstraintCoincidence::ENTITY_A());
+ if (aPnt.get() == NULL)
+ aPnt = getPoint(aConstrFeature, SketchPlugin_ConstraintCoincidence::ENTITY_B());
+ if (aPnt.get() == NULL)
+ return;
gp_Pnt aP = aPnt->impl<gp_Pnt>();
if (aOrig->isEqual(aPnt)) {
aToDelFeatures.append(aConstrFeature);
theValue = anObjects.size() && !isNotAuxiliaryFound;
return anEnabled;
}
+
+void PartSet_MenuMgr::onActivatePart(bool)
+{
+ QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
+ if (aObjects.size() > 0) {
+ ObjectPtr aObj = aObjects.first();
+ ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObj);
+ if (!aPart.get()) {
+ FeaturePtr aPartFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObj);
+ if (aPartFeature.get() && (aPartFeature->getKind() == PartSetPlugin_Part::ID())) {
+ aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aPartFeature->firstResult());
+ }
+ }
+ if (aPart.get())
+ aPart->activate();
+ }
+}
+
+void PartSet_MenuMgr::onActivatePartSet(bool)
+{
+ SessionPtr aMgr = ModelAPI_Session::get();
+ bool isNewTransaction = !aMgr->isOperation();
+ // activation may cause changes in current features in document, so it must be in transaction
+ if (isNewTransaction) {
+ aMgr->startOperation("Activation");
+ }
+ aMgr->setActiveDocument(aMgr->moduleDocument());
+ if (isNewTransaction) {
+ aMgr->finishOperation();
+ }
+}
+
+void PartSet_MenuMgr::onEdit(bool)
+{
+ QObjectPtrList aObjects = myModule->workshop()->selection()->selectedObjects();
+ FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObjects.first());
+ if (aFeature == NULL) {
+ ResultParameterPtr aParam =
+ std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aObjects.first());
+ if (aParam.get() != NULL) {
+ aFeature = ModelAPI_Feature::feature(aParam);
+ }
+ }
+ if (aFeature.get() != NULL)
+ myModule->editFeature(aFeature);
+}