#include "PartSet_IconFactory.h"
#include "PartSet_OverconstraintListener.h"
#include "PartSet_TreeNodes.h"
+#include "PartSet_FieldStepPrs.h"
#include "PartSet_Filters.h"
#include "PartSet_FilterInfinite.h"
+#ifdef _DEBUG
+#include <QDebug>
+#endif
+
#include <PartSetPlugin_Remove.h>
#include <PartSetPlugin_Part.h>
#include <PartSetPlugin_Duplicate.h>
#include <SketchPlugin_ConstraintCoincidence.h>
#include <ModuleBase_Operation.h>
-#include <ModuleBase_OperationAction.h>
#include <ModuleBase_IViewer.h>
#include <ModuleBase_IViewWindow.h>
#include <ModuleBase_IPropertyPanel.h>
#include <ModuleBase_WidgetFactory.h>
#include <ModuleBase_OperationDescription.h>
#include <ModuleBase_ViewerPrs.h>
+#include <ModuleBase_ResultPrs.h>
+#include <ModelAPI_ResultField.h>
#include <ModelAPI_Object.h>
#include <ModelAPI_Events.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_Tools.h>
#include <ModelAPI_ResultConstruction.h>
#include <ModelAPI_AttributeIntArray.h>
+#include <ModelAPI_ResultGroup.h>
#include <GeomDataAPI_Point2D.h>
#include <GeomDataAPI_Point.h>
#include <XGUI_ActiveControlSelector.h>
#include <XGUI_ActionsMgr.h>
#include <XGUI_ContextMenuMgr.h>
-#include <XGUI_CustomPrs.h>
#include <XGUI_DataModel.h>
#include <XGUI_Displayer.h>
#include <XGUI_ErrorMgr.h>
#include <SelectMgr_ListIteratorOfListOfFilter.hxx>
-#ifdef _DEBUG
-#include <QDebug>
-#endif
-
/*!Create and return new instance of XGUI_Module*/
extern "C" PARTSET_EXPORT ModuleBase_IModule* createModule(ModuleBase_IWorkshop* theWshop)
{
Events_Loop* aLoop = Events_Loop::loop();
aLoop->registerListener(this, Events_Loop::eventByName(EVENT_DOCUMENT_CHANGED));
+ aLoop->registerListener(this, Events_Loop::eventByName(EVENT_OBJECT_TO_REDISPLAY));
registerSelectionFilter(SF_GlobalFilter, new PartSet_GlobalFilter(myWorkshop));
registerSelectionFilter(SF_FilterInfinite, new PartSet_FilterInfinite(myWorkshop));
setDefaultConstraintShown();
+ //Config_PropManager::registerProp("Visualization", "object_default_color", "Object color",
+ // Config_Prop::Color, "225,225,225");
+
+ Config_PropManager::registerProp("Visualization", "result_body_color", "Result color",
+ Config_Prop::Color, ModelAPI_ResultBody::DEFAULT_COLOR());
+
+ Config_PropManager::registerProp("Visualization", "result_group_color", "Group color",
+ Config_Prop::Color, ModelAPI_ResultGroup::DEFAULT_COLOR());
+
+ Config_PropManager::registerProp("Visualization", "result_construction_color",
+ "Construction color",
+ Config_Prop::Color,
+ ModelAPI_ResultConstruction::DEFAULT_COLOR());
+
+ Config_PropManager::registerProp("Visualization", "result_part_color", "Part color",
+ Config_Prop::Color, ModelAPI_ResultPart::DEFAULT_COLOR());
+
+ Config_PropManager::registerProp("Visualization", "result_field_color", "Field color",
+ Config_Prop::Color, ModelAPI_ResultField::DEFAULT_COLOR());
+
Config_PropManager::registerProp("Visualization", "operation_parameter_color",
"Reference shape wireframe color in operation", Config_Prop::Color,
PartSet_CustomPrs::OPERATION_PARAMETER_COLOR());
Config_PropManager::registerProp("Visualization", "sketch_dimension_color",
"Dimension color",
Config_Prop::Color, SKETCH_DIMENSION_COLOR);
+
+ Config_PropManager::registerProp("Shortcuts", "add_parameter_shortcut",
+ "Add parameter in parameters manager dialog",
+ Config_Prop::Shortcut, "Ctrl+A");
+
+ Config_PropManager::registerProp("Windows", "use_hide_faces_panel",
+ "Use HideFaces panel in operations", Config_Prop::Boolean, "false");
}
//******************************************************
PartSet_Module::~PartSet_Module()
{
- std::map<XGUI_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
- mySelectionFilters.begin();
- for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) {
- Handle(SelectMgr_Filter) aFilter = aFiltersIt->second;
- if (!aFilter.IsNull())
- aFilter.Nullify();
- }
delete myCustomPrs;
delete myOverconstraintListener;
delete myRoot;
if (PartSet_SketcherMgr::isSketchOperation(theOperation)) {
mySketchMgr->startSketch(theOperation);
}
- else if (sketchMgr()->isNestedSketchOperation(theOperation)) {
- mySketchMgr->startNestedSketch(theOperation);
- }
+ // It is switched off because of
+ // Task #3067: 5.2.2 Drawing in the sketcher: change the mouse cursor arrow
+ //else if (sketchMgr()->isNestedSketchOperation(theOperation)) {
+ // mySketchMgr->startNestedSketch(theOperation);
+ //}
}
//******************************************************
ModuleBase_OperationFeature* aFOperation =
dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
if (aFOperation) {
- myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, true);
- myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, true);
+ myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, false);
+ myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, false);
}
}
ModuleBase_OperationFeature* aFOperation =
dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
if (aFOperation) {
- myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, true);
- myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, true);
+ myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeArguments, false);
+ myCustomPrs->activate(aFOperation->feature(), ModuleBase_IModule::CustomizeResults, false);
}
}
bool PartSet_Module::canApplyAction(const ObjectPtr& theObject, const QString& theActionId) const
{
bool aValid = true;
- if (theActionId == "MOVE_CMD") {
+ if (theActionId == "MOVE_CMD" || theActionId == "MOVE_SPLIT_CMD") {
FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
if (aFeature) {
ResultPtr aResult = ModuleBase_Tools::firstResult(aFeature);
{
bool isSketchActive = mySketchMgr->activeSketch().get();
- std::map<XGUI_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
+ std::map<ModuleBase_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
mySelectionFilters.begin();
for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++) {
int aFilterType = aFiltersIt->first;
// using sketch filters only if sketch operation is active
if (!isSketchActive &&
- mySketchMgr->sketchSelectionFilter((XGUI_SelectionFilterType)aFilterType))
+ mySketchMgr->sketchSelectionFilter((ModuleBase_SelectionFilterType)aFilterType))
continue;
// using filtering of construction results only from faces panel
}
}
-//******************************************************
-QIntList PartSet_Module::selectionFilters()
-{
- QIntList aTypes;
-
- std::map<XGUI_SelectionFilterType, Handle(SelectMgr_Filter)>::const_iterator aFiltersIt =
- mySelectionFilters.begin();
- for (; aFiltersIt != mySelectionFilters.end(); aFiltersIt++)
- aTypes.append(aFiltersIt->first);
-
- return aTypes;
-}
-
-//******************************************************
-void PartSet_Module::registerSelectionFilter(const XGUI_SelectionFilterType theFilterType,
- const Handle(SelectMgr_Filter)& theFilter)
-{
- mySelectionFilters[theFilterType] = theFilter;
-}
-
-//******************************************************
-Handle(SelectMgr_Filter) PartSet_Module::selectionFilter(const int theType)
-{
- XGUI_SelectionFilterType aType = (XGUI_SelectionFilterType)theType;
-
- if (mySelectionFilters.find(aType) != mySelectionFilters.end())
- return mySelectionFilters[aType];
- else
- return Handle(SelectMgr_Filter)();
-}
-
//******************************************************
void PartSet_Module::customSubShapesSelectionModes(QIntList& theModes)
{
}
//******************************************************
-bool PartSet_Module::createWidgets(ModuleBase_Operation* theOperation,
+bool PartSet_Module::createWidgets(const FeaturePtr& theFeature, const QString& theXmlRepr,
QList<ModuleBase_ModelWidget*>& theWidgets) const
{
bool aProcessed = false;
- ModuleBase_OperationFeature* aFOperation =
- dynamic_cast<ModuleBase_OperationFeature*>(theOperation);
XGUI_Workshop* aWorkshop = getWorkshop();
XGUI_PropertyPanel* aPropertyPanel = aWorkshop->propertyPanel();
- if (mySketchMgr->activeSketch().get() && aFOperation && aPropertyPanel) {
+ if (mySketchMgr->activeSketch().get() && aPropertyPanel) {
ModuleBase_ISelection* aSelection = workshop()->selection();
// click on a point in sketch leads here with the point is highlighted, not yet selected
QList<ModuleBase_ViewerPrsPtr> aPreselection = aSelection->getHighlighted();
ObjectPtr anObject = aSelectedPrs->object();
FeaturePtr aFeature = ModelAPI_Feature::feature(anObject);
- FeaturePtr anOpFeature = aFOperation->feature();
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.get() && !aShape->isNull()) {
+ if (aFeature == theFeature && aShape.get() && !aShape->isNull()) {
// if feature has only one result and shape of result is equal to selected shape
// this attribute is not processed. It is a case of Sketch Point.
if (aFeature->results().size() == 1) {
AttributePtr anAttribute = PartSet_Tools::findAttributeBy2dPoint(anObject, aTDShape,
mySketchMgr->activeSketch());
if (anAttribute.get()) {
- QString aXmlRepr = aFOperation->getDescription()->xmlRepresentation();
- ModuleBase_WidgetFactory aFactory(aXmlRepr.toStdString(), workshop());
+ ModuleBase_WidgetFactory aFactory(theXmlRepr.toStdString(), workshop());
const std::string anAttributeId = anAttribute->id();
aFactory.createWidget(aPropertyPanel->contentWidget(), anAttributeId);
mySketchMgr, SLOT(onPlaneSelected(const std::shared_ptr<GeomAPI_Pln>&)));
connect(aLabelWgt, SIGNAL(showConstraintToggled(int, bool)),
mySketchMgr, SLOT(onShowConstraintsToggle(int, bool)));
+ connect(aLabelWgt, SIGNAL(showFreePoints(bool)), mySketchMgr, SLOT(onShowPoints(bool)));
+ connect(aLabelWgt, SIGNAL(autoConstraints(bool)),
+ sketchReentranceMgr(), SLOT(onAutoConstraints(bool)));
+ aLabelWgt->setShowPointsState(mySketchMgr->isShowFreePointsShown());
aWgt = aLabelWgt;
} else if (theType == "sketch-2dpoint_selector") {
PartSet_WidgetPoint2D* aPointWgt = new PartSet_WidgetPoint2D(theParent, aWorkshop,
// 3. start operation
QString aDescription = aWorkshop->contextMenuMgr()->action("DELETE_CMD")->text();
- ModuleBase_OperationAction* anOpAction = new ModuleBase_OperationAction(aDescription, this);
+ ModuleBase_Operation* anOpAction = new ModuleBase_Operation(aDescription, this);
// the active nested sketch operation should be aborted unconditionally
// the Delete action should be additionally granted for the Sketch operation
}
//******************************************************
-bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
- std::shared_ptr<GeomAPI_ICustomPrs> theCustomPrs)
-{
- bool aCustomized = false;
-
- XGUI_Workshop* aWorkshop = getWorkshop();
- XGUI_Displayer* aDisplayer = aWorkshop->displayer();
- ObjectPtr anObject = aDisplayer->getObject(thePrs);
- if (!anObject)
- return aCustomized;
-
- if (!theResult.get()) {
- std::vector<int> aColor;
- XGUI_CustomPrs::getDefaultColor(anObject, true, aColor);
- if (!aColor.empty()) {
- aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]);
- }
- }
- // customize dimentional constrains
- sketchMgr()->customizePresentation(anObject);
-
- return aCustomized;
-}
-
-//******************************************************
-bool PartSet_Module::afterCustomisePresentation(std::shared_ptr<ModelAPI_Result> theResult,
- AISObjectPtr thePrs,
- GeomCustomPrsPtr theCustomPrs)
-{
- bool aCustomized = false;
-
- XGUI_Workshop* aWorkshop = getWorkshop();
- XGUI_Displayer* aDisplayer = aWorkshop->displayer();
- ObjectPtr anObject = aDisplayer->getObject(thePrs);
- if (!anObject)
- return aCustomized;
-
- std::vector<int> aColor;
- bool aUseCustomColor = true;
- if (aUseCustomColor)
- myOverconstraintListener->getCustomColor(anObject, aColor);
- // customize sketch symbol presentation
- Handle(AIS_InteractiveObject) anAISIO = thePrs->impl<Handle(AIS_InteractiveObject)>();
- if (!anAISIO.IsNull()) {
- if (!Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO).IsNull()) {
- Handle(SketcherPrs_SymbolPrs) aPrs = Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO);
- if (!aPrs.IsNull()) {
- aPrs->SetCustomColor(aColor);
- aCustomized = true;
- }
- } else if (!Handle(SketcherPrs_Coincident)::DownCast(anAISIO).IsNull()) {
- Handle(SketcherPrs_Coincident) aPrs = Handle(SketcherPrs_Coincident)::DownCast(anAISIO);
- if (!aPrs.IsNull()) {
- aPrs->SetCustomColor(aColor);
- aCustomized = true;
- }
- }
- }
- // customize sketch dimension constraint presentation
- if (!aCustomized) {
- if (!aColor.empty()) { // otherwise presentation has the default color
- aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]);
- }
- }
- return aCustomized;
-}
-
-//******************************************************
-bool PartSet_Module::customizeObject(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag,
+//bool PartSet_Module::customisePresentation(ResultPtr theResult, AISObjectPtr thePrs,
+// std::shared_ptr<GeomAPI_ICustomPrs> theCustomPrs)
+//{
+// bool aCustomized = false;
+//
+// XGUI_Workshop* aWorkshop = getWorkshop();
+// XGUI_Displayer* aDisplayer = aWorkshop->displayer();
+// ObjectPtr anObject = aDisplayer->getObject(thePrs);
+// if (!anObject)
+// return aCustomized;
+//
+// if (!theResult.get()) {
+// std::vector<int> aColor;
+// XGUI_CustomPrs::getDefaultColor(anObject, true, aColor);
+// if (!aColor.empty()) {
+// aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]);
+// }
+// }
+// // customize dimentional constrains
+// sketchMgr()->customisePresentation(anObject);
+//
+// return aCustomized;
+//}
+//
+////******************************************************
+//bool PartSet_Module::afterCustomisePresentation(std::shared_ptr<ModelAPI_Result> theResult,
+// AISObjectPtr thePrs,
+// GeomCustomPrsPtr theCustomPrs)
+//{
+// bool aCustomized = false;
+//
+// XGUI_Workshop* aWorkshop = getWorkshop();
+// XGUI_Displayer* aDisplayer = aWorkshop->displayer();
+// ObjectPtr anObject = aDisplayer->getObject(thePrs);
+// if (!anObject)
+// return aCustomized;
+//
+// std::vector<int> aColor;
+// bool aUseCustomColor = true;
+// if (aUseCustomColor)
+// myOverconstraintListener->getCustomColor(anObject, aColor);
+// // customize sketch symbol presentation
+// Handle(AIS_InteractiveObject) anAISIO = thePrs->impl<Handle(AIS_InteractiveObject)>();
+// if (!anAISIO.IsNull()) {
+// if (!Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO).IsNull()) {
+// Handle(SketcherPrs_SymbolPrs) aPrs = Handle(SketcherPrs_SymbolPrs)::DownCast(anAISIO);
+// if (!aPrs.IsNull()) {
+// aPrs->SetCustomColor(aColor);
+// aCustomized = true;
+// }
+// } else if (!Handle(SketcherPrs_Coincident)::DownCast(anAISIO).IsNull()) {
+// Handle(SketcherPrs_Coincident) aPrs = Handle(SketcherPrs_Coincident)::DownCast(anAISIO);
+// if (!aPrs.IsNull()) {
+// aPrs->SetCustomColor(aColor);
+// aCustomized = true;
+// }
+// }
+// }
+// // customize sketch dimension constraint presentation
+// if (!aCustomized) {
+// if (!aColor.empty()) { // otherwise presentation has the default color
+// aCustomized = thePrs->setColor(aColor[0], aColor[1], aColor[2]);
+// }
+// }
+// return aCustomized;
+//}
+
+//******************************************************
+bool PartSet_Module::customizeFeature(ObjectPtr theObject, const ModuleBase_CustomizeFlag& theFlag,
const bool theUpdateViewer)
{
bool isRedisplayed = false;
}
//******************************************************
-Handle(AIS_InteractiveObject) PartSet_Module::createPresentation(const ResultPtr& theResult)
+AISObjectPtr PartSet_Module::createPresentation(const ObjectPtr& theObject)
{
- return mySketchMgr->createPresentation(theResult);
+ Handle(AIS_InteractiveObject) anAISPrs = mySketchMgr->createPresentation(theObject);
+ if (anAISPrs.IsNull()) {
+ ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
+ if (aResult.get()) {
+ std::shared_ptr<GeomAPI_Shape> aShapePtr = ModelAPI_Tools::shape(aResult);
+ if (aShapePtr.get() != NULL)
+ anAISPrs = new ModuleBase_ResultPrs(aResult);
+ }
+ else {
+ FieldStepPtr aStep =
+ std::dynamic_pointer_cast<ModelAPI_ResultField::ModelAPI_FieldStep>(theObject);
+ if (aStep.get()) {
+ anAISPrs = new PartSet_FieldStepPrs(aStep);
+ }
+ }
+ }
+ AISObjectPtr anAIS;
+ if (!anAISPrs.IsNull()) {
+ Handle(AIS_Shape) aShapePrs = Handle(AIS_Shape)::DownCast(anAISPrs);
+ if (!aShapePrs.IsNull())
+ ModuleBase_Tools::setPointBallHighlighting((AIS_Shape*)aShapePrs.get());
+
+ anAIS = AISObjectPtr(new GeomAPI_AISObject());
+ anAIS->setImpl(new Handle(AIS_InteractiveObject)(anAISPrs));
+ customizePresentation(theObject, anAIS);
+ }
+ return anAIS;
+}
+
+//******************************************************
+void getResultColor(const ResultPtr& theResult, std::vector<int>& theColor)
+{
+ ModelAPI_Tools::getColor(theResult, theColor);
+ if (theColor.empty())
+ PartSet_Tools::getDefaultColor(theResult, false, theColor);
}
+//******************************************************
+double getResultDeflection(const ResultPtr& theResult)
+{
+ double aDeflection = ModelAPI_Tools::getDeflection(theResult);
+ if (aDeflection < 0)
+ aDeflection = PartSet_Tools::getDefaultDeflection(theResult);
+ return aDeflection;
+}
+
+//******************************************************
+double getResultTransparency(const ResultPtr& theResult)
+{
+ double aTransparency = ModelAPI_Tools::getTransparency(theResult);
+ if (aTransparency < 0)
+ aTransparency = PartSet_Tools::getDefaultTransparency();
+ return aTransparency;
+}
+
+
+//******************************************************
+void PartSet_Module::customizePresentation(const ObjectPtr& theObject,
+ const AISObjectPtr& thePrs) const
+{
+ if (mySketchMgr->isSketchStarted()) {
+ mySketchMgr->customizeSketchPresentation(theObject, thePrs);
+ }
+ else {
+ ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theObject);
+ if (aResult.get()) {
+ std::vector<int> aColor;
+ getResultColor(aResult, aColor);
+
+ SessionPtr aMgr = ModelAPI_Session::get();
+ if (aMgr->activeDocument() != aResult->document()) {
+ QColor aQColor(aColor[0], aColor[1], aColor[2]);
+ QColor aNewColor =
+ QColor::fromHsvF(aQColor.hueF(), aQColor.saturationF() / 3., aQColor.valueF());
+ aColor[0] = aNewColor.red();
+ aColor[1] = aNewColor.green();
+ aColor[2] = aNewColor.blue();
+ }
+ thePrs->setColor(aColor[0], aColor[1], aColor[2]);
+
+ thePrs->setDeflection(getResultDeflection(aResult));
+
+ thePrs->setTransparency(getResultTransparency(aResult));
+ }
+ FeaturePtr aFeature = ModelAPI_Feature::feature(theObject);
+ if (aFeature.get()) {
+ if (aFeature->getKind() == SketchPlugin_Sketch::ID())
+ thePrs->setWidth(2);
+ }
+ }
+}
+
+
//******************************************************
ObjectPtr PartSet_Module::findPresentedObject(const AISObjectPtr& theAIS) const
{
XGUI_Displayer* aDisplayer = aWorkshop->displayer();
QObjectPtrList aObjects = aDisplayer->displayedObjects();
bool aHidden;
+ bool aUpdateViewer = false;
foreach(ObjectPtr aObj, aObjects) {
aHidden = !aObj->data() || !aObj->data()->isValid() ||
aObj->isDisabled() || (!aObj->isDisplayed());
- if (!aHidden)
+ if (!aHidden) {
aDisplayer->redisplay(aObj, false);
+ aUpdateViewer = true;
+ }
}
- aDisplayer->updateViewer();
+ if (aUpdateViewer)
+ aDisplayer->updateViewer();
// Update tree items if they are expanded
if (needUpdate) {
- aTreeView->viewport()->repaint(aTreeView->viewport()->rect());
+ aTreeView->viewport()->update(aTreeView->viewport()->rect());
}
} else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_CREATED)) {
std::shared_ptr<ModelAPI_ObjectUpdatedMessage> aUpdMsg =
}
}
}
+ else if (theMessage->eventID() == Events_Loop::loop()->eventByName(EVENT_OBJECT_TO_REDISPLAY)) {
+ CompositeFeaturePtr aSketch = mySketchMgr->activeSketch();
+ if (aSketch.get()) {
+ ModuleBase_Operation* anOperation = myWorkshop->currentOperation();
+ if (PartSet_SketcherMgr::isSketchOperation(anOperation))
+ mySketchMgr->previewSketchPlane()->createSketchPlane(aSketch, myWorkshop);
+ }
+ }
}
//******************************************************
{
return myRoot;
}
+
+//******************************************************
+void PartSet_Module::disableCustomMode(ModuleBase_CustomizeFlag theMode) {
+ myCustomPrs->disableCustomMode(theMode);
+}
+
+//******************************************************
+void PartSet_Module::enableCustomModes() {
+ myCustomPrs->enableCustomModes();
+}