#include "PartSet_WidgetSketchLabel.h"
#include "PartSet_Validators.h"
#include "PartSet_Tools.h"
+#include "PartSet_PreviewPlanes.h"
#include "PartSet_WidgetPoint2d.h"
#include "PartSet_WidgetPoint2dDistance.h"
#include "PartSet_WidgetPoint2DFlyout.h"
#include "PartSet_WidgetSketchCreator.h"
#include "PartSet_SketcherMgr.h"
#include "PartSet_SketcherReetntrantMgr.h"
+#include "PartSet_ResultSketchPrs.h"
#include "PartSet_MenuMgr.h"
#include "PartSet_CustomPrs.h"
#include "PartSet_IconFactory.h"
#include <ModuleBase_OperationFeature.h>
#include <ModuleBase_WidgetFactory.h>
#include <ModuleBase_OperationDescription.h>
+#include <ModuleBase_ViewerPrs.h>
#include <ModelAPI_Object.h>
#include <ModelAPI_Events.h>
#include <ModelAPI_Session.h>
#include <ModelAPI_ResultBody.h>
#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_Tools.h>
#include <GeomDataAPI_Point2D.h>
#include <GeomDataAPI_Point.h>
#include <XGUI_DataModel.h>
#include <XGUI_ErrorMgr.h>
#include <XGUI_CustomPrs.h>
+#include <XGUI_SelectionMgr.h>
#include <SketchPlugin_Feature.h>
#include <SketchPlugin_Sketch.h>
#include <SketchPlugin_ConstraintRadius.h>
#include <SketcherPrs_SymbolPrs.h>
+#include <SketcherPrs_Coincident.h>
#include <SketcherPrs_Tools.h>
#include <Events_Loop.h>
mySelectionFilters.Append(new PartSet_GlobalFilter(myWorkshop));
mySelectionFilters.Append(new PartSet_FilterInfinite(myWorkshop));
- myHasConstraintShown[PartSet_Tools::Geometrical] = true;
- myHasConstraintShown[PartSet_Tools::Dimensional] = true;
+ setDefaultConstraintShown();
Config_PropManager::registerProp("Visualization", "operation_parameter_color",
"Reference shape wireframe color in operation", Config_Prop::Color,
aFactory->registerValidator("PartSet_MiddlePointSelection", new PartSet_MiddlePointSelection);
aFactory->registerValidator("PartSet_DifferentObjects", new PartSet_DifferentObjectsValidator);
aFactory->registerValidator("PartSet_CoincidentAttr", new PartSet_CoincidentAttr);
- aFactory->registerValidator("PartSet_SketchEntityValidator", new PartSet_SketchEntityValidator);
}
void PartSet_Module::registerFilters()
// the objects of the current operation should be deactivated
QObjectPtrList anObjects;
anObjects.append(aFeature);
- std::list<ResultPtr> aResults = aFeature->results();
+ std::list<ResultPtr> aResults;
+ ModelAPI_Tools::allResults(aFeature, aResults);
std::list<ResultPtr>::const_iterator aIt;
for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
anObjects.append(*aIt);
if (PartSet_SketcherMgr::isNestedSketchOperation(theOperation)) {
mySketchMgr->stopNestedSketch(theOperation);
}
+ else if (PartSet_SketcherMgr::isSketchOperation(theOperation))
+ setDefaultConstraintShown();
//VSV: Viewer is updated on feature update and redisplay
if (isModified) {
QMap<PartSet_Tools::ConstraintVisibleState, bool>::const_iterator anIt = myHasConstraintShown.begin(),
aLast = myHasConstraintShown.end();
for (; anIt != aLast; anIt++) {
- myHasConstraintShown[anIt.key()];
- mySketchMgr->onShowConstraintsToggle(anIt.key(), anIt.value());
+ mySketchMgr->updateBySketchParameters(anIt.key(), anIt.value());
}
}
if (theActionId == "MOVE_CMD") {
FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
if (aFeature) {
+ ResultPtr aResult = ModuleBase_Tools::firstResult(aFeature);
// part features can not be moved in the history.
- if (aFeature->getKind() == PartSetPlugin_Part::ID())
+ if (aResult.get() && aResult->groupName() == ModelAPI_ResultPart::group())
aValid = false;
}
}
return mySketchMgr->canDisplayObject(theObject);
}
-void PartSet_Module::processHiddenObject(const std::list<ObjectPtr>& theObjects)
+/*void PartSet_Module::processHiddenObject(const std::list<ObjectPtr>& theObjects)
{
mySketchMgr->processHiddenObject(theObjects);
-}
+}*/
bool PartSet_Module::canActivateSelection(const ObjectPtr& theObject) const
{
return aCanActivate;
}
-bool PartSet_Module::addViewerMenu(QMenu* theMenu, const QMap<QString, QAction*>& theStdActions) const
+bool PartSet_Module::addViewerMenu(const QMap<QString, QAction*>& theStdActions,
+ QWidget* theParent,
+ QMap<int, QAction*>& theMenuActions) const
{
- return myMenuMgr->addViewerMenu(theMenu, theStdActions);
+ return myMenuMgr->addViewerMenu(theStdActions, theParent, theMenuActions);
}
void PartSet_Module::updateViewerMenu(const QMap<QString, QAction*>& theStdActions)
PartSet_SketcherMgr::sketchSelectionModes(theModes);
}
+void PartSet_Module::customSubShapesSelectionModes(QIntList& theTypes)
+{
+ if (theTypes.contains(TopAbs_FACE))
+ theTypes.append(SketcherPrs_Tools::Sel_Sketch_Face);
+ if (theTypes.contains(TopAbs_WIRE))
+ theTypes.append(SketcherPrs_Tools::Sel_Sketch_Wire);
+}
+
bool PartSet_Module::isMouseOverWindow()
{
return mySketchMgr->isMouseOverWindow();
if (mySketchMgr->activeSketch().get() && aFOperation && aPropertyPanel) {
ModuleBase_ISelection* aSelection = workshop()->selection();
// click on a point in sketch leads here with the point is highlighted, not yet selected
- QList<ModuleBase_ViewerPrs> aPreselection = aSelection->getHighlighted();
+ QList<ModuleBase_ViewerPrsPtr> aPreselection = aSelection->getHighlighted();
if (aPreselection.size() == 1) {
- ModuleBase_ViewerPrs aSelectedPrs = aPreselection[0];
- ObjectPtr anObject = aSelectedPrs.object();
+ ModuleBase_ViewerPrsPtr aSelectedPrs = aPreselection[0];
+ ObjectPtr anObject = aSelectedPrs->object();
FeaturePtr aFeature = ModelAPI_Feature::feature(anObject);
FeaturePtr anOpFeature = aFOperation->feature();
- TopoDS_Shape aShape = aSelectedPrs.shape();
+ GeomShapePtr aShape = aSelectedPrs->shape();
// click on the digit of dimension constrain comes here with an empty shape, so we need the check
- if (aFeature == anOpFeature && !aShape.IsNull()) {
- AttributePtr anAttribute = PartSet_Tools::findAttributeBy2dPoint(anObject, aShape,
+ if (aFeature == anOpFeature && aShape.get() && !aShape->isNull()) {
+ const TopoDS_Shape& aTDShape = aShape->impl<TopoDS_Shape>();
+ AttributePtr anAttribute = PartSet_Tools::findAttributeBy2dPoint(anObject, aTDShape,
mySketchMgr->activeSketch());
if (anAttribute.get()) {
QString aXmlRepr = aFOperation->getDescription()->xmlRepresentation();
if (isSketcherOp) {
// Editing of constraints can be done on selection
ModuleBase_ISelection* aSelect = myWorkshop->selection();
- QList<ModuleBase_ViewerPrs> aSelected = aSelect->getSelected();
+ QList<ModuleBase_ViewerPrsPtr> aSelected = aSelect->getSelected();
if (aSelected.size() == 1) {
- ModuleBase_ViewerPrs aPrs = aSelected.first();
- ObjectPtr aObject = aPrs.object();
+ ModuleBase_ViewerPrsPtr aPrs = aSelected.first();
+ ObjectPtr aObject = aPrs->object();
FeaturePtr aFeature = ModelAPI_Feature::feature(aObject);
if (aFeature) {
std::string aId = aFeature->getKind();
new PartSet_WidgetMultiSelector(theParent, aWorkshop, theWidgetApi);
aShapeSelectorWgt->setSketcher(mySketchMgr->activeSketch());
aWgt = aShapeSelectorWgt;
- } else if (theType == WDG_DOUBLEVALUE_EDITOR) {
+ }
+ else if (theType == WDG_DOUBLEVALUE_EDITOR) {
aWgt = new PartSet_WidgetEditor(theParent, aWorkshop, theWidgetApi);
} else if (theType == "export_file_selector") {
aWgt = new PartSet_WidgetFileSelector(theParent, aWorkshop, theWidgetApi);
aWgt = new PartSet_WidgetSketchCreator(theParent, this, theWidgetApi);
} else if (theType == "module_choice") {
aWgt = new PartSet_WidgetChoice(theParent, theWidgetApi);
- connect(aWgt, SIGNAL(itemSelected(int)), SLOT(onBooleanOperationChange(int)));
+ connect(aWgt, SIGNAL(itemSelected(ModuleBase_ModelWidget*, int)),
+ this, SLOT(onChoiceChanged(ModuleBase_ModelWidget*, int)));
}
return aWgt;
}
anOpMgr->startOperation(anOpAction);
+ // WORKAROUND, should be done to avoid viewer highlight update after deletetion of objects
+ // the problem is in AIS Dimensions recompute if a line and the dim are removed, line is the first
+ // it causes the AIS recompute, where the base line is null, the result is empty AIS in the viewer
+ XGUI_Tools::workshop(myWorkshop)->selector()->clearSelection();
+
// 4. delete features
// sketch feature should be skipped, only sub-features can be removed
// when sketch operation is active
void PartSet_Module::onFeatureTriggered()
{
- QAction* aCmd = dynamic_cast<QAction*>(sender());
+ // is commented for imp: Unpressing the button of the current action must behave like
+ // a validation if the entity can be created (instead of Cancel, as currently)
+ /*QAction* aCmd = dynamic_cast<QAction*>(sender());
if (aCmd->isCheckable() && aCmd->isChecked()) {
// 1. check whether the delete should be processed in the module
ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
launchOperation(aCmd->data().toString());
}
}
- }
+ }*/
ModuleBase_IModule::onFeatureTriggered();
}
+void PartSet_Module::editFeature(FeaturePtr theFeature)
+{
+ storeConstraintsState(theFeature->getKind());
+ ModuleBase_IModule::editFeature(theFeature);
+}
+
+bool PartSet_Module::canCommitOperation() const
+{
+ return true;
+}
+
void PartSet_Module::launchOperation(const QString& theCmdId)
+{
+ storeConstraintsState(theCmdId.toStdString());
+ updateConstraintsState(theCmdId.toStdString());
+
+ ModuleBase_IModule::launchOperation(theCmdId);
+}
+
+void PartSet_Module::storeConstraintsState(const std::string& theFeatureKind)
{
if (myWorkshop->currentOperation() &&
myWorkshop->currentOperation()->id().toStdString() == SketchPlugin_Sketch::ID()) {
- const QMap<PartSet_Tools::ConstraintVisibleState, bool>& aShownStates =
- mySketchMgr->showConstraintStates();
- myHasConstraintShown = aShownStates;
+ const QMap<PartSet_Tools::ConstraintVisibleState, bool>& aShownStates =
+ mySketchMgr->showConstraintStates();
+ myHasConstraintShown = aShownStates;
}
- if (PartSet_SketcherMgr::constraintsIdList().contains(theCmdId)) {
+}
+
+void PartSet_Module::updateConstraintsState(const std::string& theFeatureKind)
+{
+ if (PartSet_SketcherMgr::constraintsIdList().contains(theFeatureKind.c_str())) {
// Show constraints if a constraint was anOperation
- mySketchMgr->onShowConstraintsToggle(PartSet_Tools::Geometrical, true);
- mySketchMgr->onShowConstraintsToggle(PartSet_Tools::Dimensional, true);
+ mySketchMgr->updateBySketchParameters(PartSet_Tools::Geometrical, true);
+ mySketchMgr->updateBySketchParameters(PartSet_Tools::Dimensional, true);
+ mySketchMgr->updateBySketchParameters(PartSet_Tools::Expressions,
+ myHasConstraintShown[PartSet_Tools::Expressions]);
}
- ModuleBase_IModule::launchOperation(theCmdId);
}
-
void PartSet_Module::onObjectDisplayed(ObjectPtr theObject, AISObjectPtr theAIS)
{
Handle(AIS_InteractiveObject) anAIS = theAIS->impl<Handle(AIS_InteractiveObject)>();
{
bool aCustomized = false;
- if (theResult.get())
- return aCustomized;
-
XGUI_Workshop* aWorkshop = getWorkshop();
XGUI_Displayer* aDisplayer = aWorkshop->displayer();
ObjectPtr anObject = aDisplayer->getObject(thePrs);
- if (anObject.get()) {
+ if (!anObject)
+ return aCustomized;
+
+ if (!theResult.get()) {
bool isConflicting = myOverconstraintListener->isConflictingObject(anObject);
- // customize sketcy symbol presentation
+ // customize sketch symbol presentation
if (thePrs.get()) {
Handle(AIS_InteractiveObject) anAISIO = thePrs->impl<Handle(AIS_InteractiveObject)>();
if (!anAISIO.IsNull()) {
aPrs->SetConflictingConstraint(isConflicting, aColor);
aCustomized = true;
}
+ } else if (!Handle(SketcherPrs_Coincident)::DownCast(anAISIO).IsNull()) {
+ Handle(SketcherPrs_Coincident) aPrs = Handle(SketcherPrs_Coincident)::DownCast(anAISIO);
+ if (!aPrs.IsNull()) {
+ std::vector<int> aColor;
+ myOverconstraintListener->getConflictingColor(aColor);
+ aPrs->SetConflictingConstraint(isConflicting, aColor);
+ aCustomized = true;
+ }
}
}
}
if (aColor.empty())
XGUI_CustomPrs::getDefaultColor(anObject, true, aColor);
if (!aColor.empty()) {
- thePrs->setColor(aColor[0], aColor[1], aColor[2]);
- aCustomized = true;
+ aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]);
}
}
}
+ // customize dimentional constrains
+ sketchMgr()->customizePresentation(anObject);
return aCustomized;
}
aMenu.exec(aHeader->mapToGlobal(thePnt));
}
+Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ResultPtr& theResult)
+{
+ return mySketchMgr->createPresentation(theResult);
+}
+
ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const
{
return anObject;
}
+bool PartSet_Module::canBeShaded(Handle(AIS_InteractiveObject) theAIS) const
+{
+ bool aCanBeShaged = true;
+
+ Handle(PartSet_ResultSketchPrs) aPrs = Handle(PartSet_ResultSketchPrs)::DownCast(theAIS);
+ if (!aPrs.IsNull())
+ aCanBeShaged = false;
+
+ return aCanBeShaged;
+}
+
void PartSet_Module::addObjectBrowserMenu(QMenu* theMenu) const
{
QObjectPtrList aObjects = myWorkshop->selection()->selectedObjects();
bool hasResult = false;
bool hasFeature = false;
bool hasParameter = false;
- bool hasSubFeature = false;
- ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter, hasSubFeature);
-
+ bool hasCompositeOwner = false;
+ ModuleBase_Tools::checkObjects(aObjects, hasResult, hasFeature, hasParameter,
+ hasCompositeOwner);
ObjectPtr aObject = aObjects.first();
if (aObject) {
ResultPartPtr aPart = std::dynamic_pointer_cast<ModelAPI_ResultPart>(aObject);
}
//******************************************************
-void PartSet_Module::onBooleanOperationChange(int theOperation)
+void PartSet_Module::onChoiceChanged(ModuleBase_ModelWidget* theWidget,
+ int theIndex)
{
- ModuleBase_Operation* aOperation = myWorkshop->currentOperation();
- if (!aOperation)
+ PartSet_WidgetChoice* aChoiceWidget = dynamic_cast<PartSet_WidgetChoice*>(theWidget);
+ if (!aChoiceWidget)
return;
- ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel();
- switch (theOperation) {
- case 0:
- aPanel->setWindowTitle(tr("Cut"));
- break;
- case 1:
- aPanel->setWindowTitle(tr("Fuse"));
- break;
- case 2:
- aPanel->setWindowTitle(tr("Common"));
- break;
+
+ QString aChoiceTitle = aChoiceWidget->getPropertyPanelTitle(theIndex);
+ if (!aChoiceTitle.isEmpty()) {
+ ModuleBase_Operation* aOperation = myWorkshop->currentOperation();
+ if (!aOperation)
+ return;
+ ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel();
+ if (aPanel)
+ aPanel->setWindowTitle(aChoiceTitle);
}
}
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(workshop());
return aConnector->workshop();
}
+
+//******************************************************
+void PartSet_Module::setDefaultConstraintShown()
+{
+ myHasConstraintShown[PartSet_Tools::Geometrical] = true;
+ myHasConstraintShown[PartSet_Tools::Dimensional] = true;
+ myHasConstraintShown[PartSet_Tools::Expressions] = false;
+}