-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2023 CEA, EDF
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
#include <SelectMgr_IndexedMapOfOwner.hxx>
#include <StdSelect_BRepOwner.hxx>
-//#include <AIS_DimensionSelectionMode.hxx>
#include <AIS_Shape.hxx>
-#include <AIS_Dimension.hxx>
+#include <PrsDim_Dimension.hxx>
#include <ModelAPI_Events.h>
#include <ModelAPI_Session.h>
}
PartSet_SketcherMgr::PartSet_SketcherMgr(PartSet_Module* theModule)
- : QObject(theModule), myModule(theModule), myIsEditLaunching(false), myIsDragging(false),
- myDragDone(false), myIsMouseOverWindow(false),
- myIsMouseOverViewProcessed(true), myPreviousUpdateViewerEnabled(true),
- myIsPopupMenuActive(false), myExternalPointsMgr(0), myNoDragMoving(false)
+ : QObject(theModule),
+ myModule(theModule),
+ myIsEditLaunching(false),
+ myIsDragging(false),
+ myDragDone(false),
+ myIsMouseOverWindow(false),
+ myIsMouseOverViewProcessed(true),
+ myIsPopupMenuActive(false),
+ myPreviousUpdateViewerEnabled(true),
+ myExternalPointsMgr(0),
+ myNoDragMoving(false)
{
ModuleBase_IWorkshop* anIWorkshop = myModule->workshop();
ModuleBase_IViewer* aViewer = anIWorkshop->viewer();
// Acceptable features;
QStringList aList;
aList << "SketchLine" << "SketchMacroCircle" << "SketchMacroArc" <<
- "SketchMacroEllipse" << "SketchMacroEllipticArc" << "SketchRectangle";
+ "SketchMacroEllipse" << "SketchMacroEllipticArc" << "SketchMacroRectangle";
return aList.contains(aId);
}
}
myPreviousDrawModeEnabled = aViewer->enableDrawMode(false);
launchEditing();
- if (aFeature.get() != NULL) {
- std::shared_ptr<SketchPlugin_Feature> aSPFeature =
- std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
- if (aSPFeature.get() &&
- (aSPFeature->getKind() == SketchPlugin_ConstraintRadius::ID() ||
- aSPFeature->getKind() == SketchPlugin_ConstraintAngle::ID())) {
- DataPtr aData = aSPFeature->data();
- AttributePtr aAttr = aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
- std::shared_ptr<GeomDataAPI_Point2D> aFPAttr =
- std::dynamic_pointer_cast<GeomDataAPI_Point2D>(aAttr);
- aFPAttr->setValue(myCurrentPoint.myCurX, myCurrentPoint.myCurY);
- }
- }
} else if (isSketchOpe && isEditing) {
// If selected another object commit current result
bool aPrevLaunchingState = myIsEditLaunching;
myPreviousDrawModeEnabled = aViewer->enableDrawMode(false);
if (isRelaunchEditing)
launchEditing();
+ else {
+ if (myCurrentSelection.size() > 1)
+ aFOperation->propertyPanel()->cleanContent();
+ }
myIsEditLaunching = aPrevLaunchingState;
if (aFeature.get() != NULL) {
- std::shared_ptr<SketchPlugin_Feature> aSPFeature =
+ std::shared_ptr<SketchPlugin_Feature> aSketchFeature =
std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
- if (aSPFeature.get() &&
- (aSPFeature->getKind() == SketchPlugin_ConstraintRadius::ID() ||
- aSPFeature->getKind() == SketchPlugin_ConstraintAngle::ID())) {
- DataPtr aData = aSPFeature->data();
+ if (aSketchFeature.get() &&
+ (aSketchFeature->getKind() == SketchPlugin_ConstraintRadius::ID() ||
+ aSketchFeature->getKind() == SketchPlugin_ConstraintAngle::ID())) {
+ DataPtr aData = aSketchFeature->data();
AttributePtr aAttr = aData->attribute(SketchPlugin_Constraint::FLYOUT_VALUE_PNT());
std::shared_ptr<GeomDataAPI_Point2D> aFPAttr =
std::dynamic_pointer_cast<GeomDataAPI_Point2D>(aAttr);
#endif
Handle(V3d_View) aView = theWnd->v3dView();
- gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), aView);
Point aMousePnt;
get2dPoint(theWnd, theEvent, aMousePnt);
myCurrentSketch = std::dynamic_pointer_cast<ModelAPI_CompositeFeature>(aFOperation->feature());
double aSizeOfView = 0;
std::shared_ptr<GeomAPI_Pnt> aCentralPoint;
+ // Reset size of view from previous launches
+ mySketchPlane->setSizeOfView(aSizeOfView, false, aCentralPoint);
if (aFOperation->isEditOperation() &&
mySketchPlane->getDefaultSizeOfView(myCurrentSketch, aSizeOfView, aCentralPoint)) {
mySketchPlane->setSizeOfView(aSizeOfView, true, aCentralPoint);
for (; anIt != aLast; anIt++) {
FeaturePtr aFeature = *anIt;
if (aFeature.get())
- anInvalidFeatureNames.append(aFeature->name().c_str());
+ anInvalidFeatureNames.append(QString::fromStdWString(aFeature->name()));
}
std::string aPrefixInfo = QString("Invalid features of the sketch will be deleted: %1.\n\n").
arg(anInvalidFeatureNames.join(", ")).toStdString().c_str();
#ifdef DEBUG_SKETCHER_ENTITIES
anInfo.append(ModuleBase_Tools::objectInfo(aFeature));
#endif
- std::list<ResultPtr> aResults = aFeature->results();
- std::list<ResultPtr>::const_iterator aIt;
- for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
+ std::list<ResultPtr> aFeatResults = aFeature->results();
+ for (aIt = aFeatResults.begin(); aIt != aFeatResults.end(); ++aIt) {
if ((*aIt)->isDisplayed())
// Display object if it was created outside of GUI
aECreator->sendUpdated((*aIt), EVENT_DISP);
qDebug(QString("startSketch: %1, %2").arg(anInfo.size()).arg(anInfoStr).toStdString().c_str());
#endif
- bool aHasPlane = false;
std::shared_ptr<GeomAPI_Pln> aPln;
aPln = PartSet_Tools::sketchPlane(myCurrentSketch);
Handle(SelectMgr_Filter) aFilter = myModule->selectionFilter(SF_SketchPlaneFilter);
workshop()->selectionActivate()->updateSelectionFilters();
workshop()->selectionActivate()->updateSelectionModes();
- Events_Loop::loop()->flush(EVENT_DISP);
Events_Loop::loop()->flush(EVENT_ATTR);
+ Events_Loop::loop()->flush(EVENT_DISP);
myExternalPointsMgr = new PartSet_ExternalPointsMgr(myModule->workshop(), myCurrentSketch);
std::string aKind = theFeature->getKind();
if (aConstrIds.contains(QString(aKind.c_str()))) {
- bool isTypedConstraint = false;
-
switch (theState) {
case PartSet_Tools::Dimensional: {
bool isDistance = isDistanceKind(aKind);
anAISIO = anAIS->impl<Handle(AIS_InteractiveObject)>();
}
if (anAIS.get() != NULL) {
- Handle(AIS_InteractiveObject) anAISIO = anAIS->impl<Handle(AIS_InteractiveObject)>();
+ anAISIO = anAIS->impl<Handle(AIS_InteractiveObject)>();
if (!anAISIO.IsNull()) {
- Handle(AIS_Dimension) aDim = Handle(AIS_Dimension)::DownCast(anAISIO);
+ Handle(PrsDim_Dimension) aDim = Handle(PrsDim_Dimension)::DownCast(anAISIO);
if (!aDim.IsNull()) {
gp_Pnt aPosition = aDim->GetTextPosition();
std::map<AttributePtr, int> aSelectedAttributes = anInfo.myAttributes;
std::set<ResultPtr> aSelectedResults = anInfo.myResults;
- ModuleBase_IViewer* aViewer = theWorkshop->viewer();
-
XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(theWorkshop);
XGUI_Displayer* aDisplayer = aConnector->workshop()->displayer();
}
for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
ResultPtr aResult = *aIt;
- AISObjectPtr aAISObj = aDisplayer->getAISObject(aResult);
- if (aAISObj.get() == NULL)
+ AISObjectPtr aResAISObj = aDisplayer->getAISObject(aResult);
+ if (aResAISObj.get() == NULL)
continue;
- Handle(AIS_InteractiveObject) anAISIO = aAISObj->impl<Handle(AIS_InteractiveObject)>();
+ Handle(AIS_InteractiveObject) anAISIO = aResAISObj->impl<Handle(AIS_InteractiveObject)>();
SelectMgr_IndexedMapOfOwner aSelectedOwners;
aConnector->workshop()->selector()->selection()->entityOwners(anAISIO, aSelectedOwners);
// result owners are put in the list of selection only if local selected shapes were not
// found
if (aSelectedResults.find(aResult) != aSelectedResults.end()) {
- for ( Standard_Integer i = 1, n = aSelectedOwners.Extent(); i <= n; i++ ) {
+ for (Standard_Integer i = 1, n = aSelectedOwners.Extent(); i <= n; i++ ) {
Handle(StdSelect_BRepOwner) anOwner =
- Handle(StdSelect_BRepOwner)::DownCast(aSelectedOwners(i));
- if ( anOwner.IsNull() || !anOwner->HasShape() || theOwnersToSelect.FindIndex(anOwner))
+ Handle(StdSelect_BRepOwner)::DownCast(aSelectedOwners(i));
+ if (anOwner.IsNull() || !anOwner->HasShape() || theOwnersToSelect.FindIndex(anOwner))
continue;
- // select whole result
- theOwnersToSelect.Add(anOwner);
+ // select whole result
+ theOwnersToSelect.Add(anOwner);
}
}
}
ModuleBase_OperationFeature* aFOperation = dynamic_cast<ModuleBase_OperationFeature*>
(getCurrentOperation());
if (aFOperation) {
- if (PartSet_SketcherMgr::isSketchOperation(aFOperation) ||
- isNestedSketchOperation(aFOperation) &&
+ if ((PartSet_SketcherMgr::isSketchOperation(aFOperation) ||
+ isNestedSketchOperation(aFOperation)) &&
thePreviousState == ModuleBase_ModelWidget::ModifiedInPP) {
FeaturePtr aFeature = aFOperation->feature();
visualizeFeature(aFeature, aFOperation->isEditOperation(), canDisplayObject(aFeature));
if (isEditOperation || !theFeature.get())
return;
- ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
- XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(aWorkshop);
-
// 1. change visibility of the object itself, here the presentable object is processed,
// e.g. constraints features
//FeaturePtr aFeature = aFOperation->feature();
std::list<ResultPtr> aResults = aFeature->results();
std::list<ResultPtr>::const_iterator aIt;
for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
- ResultPtr aResult = *aIt;
- getAttributesOrResults(anOwner, aFeature, aSketch, aResult,
+ ResultPtr aCurResult = *aIt;
+ getAttributesOrResults(anOwner, aFeature, aSketch, aCurResult,
anInfo.myAttributes, anInfo.myResults, anInfo.myLocalSelectedShapes);
}
}
case PartSet_Tools::Geometrical:
case PartSet_Tools::Dimensional: {
if (aPrevState != theState) {
- ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
- XGUI_ModuleConnector* aConnector = dynamic_cast<XGUI_ModuleConnector*>(aWorkshop);
int aNumberOfSubs = myCurrentSketch->numberOfSubs();
for (int i = 0; i < aNumberOfSubs; i++) {
FeaturePtr aSubFeature = myCurrentSketch->subFeature(i);
}
}
break;
+ default: // [to avoid compilation warning]
+ break;
}
}
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(*aIt);
if (aFeature.get()) {
std::list<ResultPtr> aRes = aFeature->results();
- std::list<ResultPtr>::const_iterator aIt;
- for (aIt = aRes.cbegin(); aIt != aRes.cend(); ++aIt) {
- ModuleBase_ViewerPrsPtr aPrsPtr(new ModuleBase_ViewerPrs(*aIt));
+ std::list<ResultPtr>::const_iterator aRIt;
+ for (aRIt = aRes.cbegin(); aRIt != aRes.cend(); ++aRIt) {
+ ModuleBase_ViewerPrsPtr aPrsPtr(new ModuleBase_ViewerPrs(*aRIt));
aPrsList.append(aPrsPtr);
}
}
for (aIt = aRefsToMe.cbegin(); aIt != aRefsToMe.cend(); ++aIt) {
if ((*aIt)->id() == SketchPlugin_Projection::PROJECTED_FEATURE_ID()) {
FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>((*aIt)->owner());
- if (aFeature.get()) {
+ if (aFeature.get() && !aFeature->isMacro()) {
anAttr = aFeature->data()->boolean(SketchPlugin_Projection::INCLUDE_INTO_RESULT());
if (anAttr.get())
return anAttr->value();
std::vector<int> PartSet_SketcherMgr::colorOfObject(const ObjectPtr& theObject,
const FeaturePtr& theFeature, bool isConstruction) const
{
- static const QStringList& aConstrIds = constraintsIdList();
PartSet_OverconstraintListener* aOCListener = myModule->overconstraintListener();
std::string aKind = theFeature->getKind();
+ if (aOCListener->isConflictingObject(theObject)) {
+ return Config_PropManager::color("Visualization", "sketch_overconstraint_color");
+ }
if (isDistanceKind(aKind)) {
- if (aOCListener->isConflictingObject(theObject))
- return Config_PropManager::color("Visualization", "sketch_overconstraint_color");
return Config_PropManager::color("Visualization", "sketch_dimension_color");
}
if (isExternal(theFeature))
return Config_PropManager::color("Visualization", "sketch_external_color");
- if (isConstruction)
- return Config_PropManager::color("Visualization", "sketch_auxiliary_color");
if (aOCListener->isFullyConstrained()) {
return Config_PropManager::color("Visualization", "sketch_fully_constrained_color");
}
- else if (aOCListener->isConflictingObject(theObject)) {
- return Config_PropManager::color("Visualization", "sketch_overconstraint_color");
- }
+ if (aKind == SketchPlugin_ConstraintCoincidence::ID())
+ return std::vector<int>(3, 0);
+
+ if (isConstruction)
+ return Config_PropManager::color("Visualization", "sketch_auxiliary_color");
+
return Config_PropManager::color("Visualization", "sketch_entity_color");
}
thePrs->setWidth(17);
// thePrs->setPointMarker(1, 1.); // Set point as a '+' symbol
}
- if (isCopy(aFeature) && !isIncludeToResult(aFeature)) {
- double aWidth = thePrs->width();
- thePrs->setWidth(aWidth / 2.5);
+ if (isCopy(aFeature) || !isIncludeToResult(aFeature)) {
+ double aPrsWidth = thePrs->width();
+ thePrs->setWidth(aPrsWidth / 2.5);
}
double aDeflection = Config_PropManager::real("Visualization", "construction_deflection");
for (aIt = aResults.begin(); aIt != aResults.end(); ++aIt) {
aRes = (*aIt);
if (aRes->isDisplayed()) {
- FeaturePtr aFeature = ModelAPI_Feature::feature(aRes);
- if (aFeature.get()) {
+ FeaturePtr aCurFeature = ModelAPI_Feature::feature(aRes);
+ if (aCurFeature.get()) {
std::shared_ptr<SketchPlugin_Feature> aSPFeature =
- std::dynamic_pointer_cast<SketchPlugin_Feature>(aFeature);
+ std::dynamic_pointer_cast<SketchPlugin_Feature>(aCurFeature);
if (aSPFeature.get()) {
bool isAxiliary =
aSPFeature->boolean(SketchPlugin_SketchEntity::AUXILIARY_ID())->value();