-// Copyright (C) 2020 CEA/DEN, EDF R&D
+// Copyright (C) 2020-2024 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 <FeaturesPlugin_Fillet1D.h>
-#include <FeaturesPlugin_Tools.h>
#include <GeomAlgoAPI_Fillet1D.h>
#include <GeomAlgoAPI_MapShapesAndAncestors.h>
#include <ModelAPI_AttributeSelectionList.h>
#include <ModelAPI_AttributeString.h>
#include <ModelAPI_Events.h>
+#include <ModelAPI_Tools.h>
+
+void sendMessageWithFailedShapes(const ListOfShape& theVertices)
+{
+ std::shared_ptr<ModelAPI_ShapesFailedMessage> aMessage(
+ new ModelAPI_ShapesFailedMessage(Events_Loop::eventByName(EVENT_OPERATION_SHAPES_FAILED)));
+ aMessage->setShapes(theVertices);
+ Events_Loop::loop()->send(aMessage);
+}
FeaturesPlugin_Fillet1D::FeaturesPlugin_Fillet1D()
{
removeResults(aResultIndex);
}
+void FeaturesPlugin_Fillet1D::attributeChanged(const std::string& theID)
+{
+ if (theID == CREATION_METHOD()) {
+ // creation method is changed, drop failed vertices and send the message
+ removeResults(0);
+ sendMessageWithFailedShapes(ListOfShape());
+ }
+}
+
bool FeaturesPlugin_Fillet1D::baseShapes(ListOfShape& theWires, MapShapeSubs& theWireVertices)
{
std::set<GeomShapePtr, GeomAPI_Shape::Comparator> aProcessedWires;
int aNbSel = aSelList->size();
for (int ind = 0; ind < aNbSel; ++ind) {
AttributeSelectionPtr aCurSel = aSelList->value(ind);
- GeomShapePtr aWire = aCurSel->context()->shape();
+ GeomShapePtr aWire = aCurSel->value();
+ if (!aWire.get() && aCurSel->context().get())
+ aWire = aCurSel->context()->shape();
if (aProcessedWires.find(aWire) != aProcessedWires.end())
continue;
return false;
}
-
// keep the sequence of wires and fillet vertices stable
theWires.push_back(aWire);
for (GeomAPI_WireExplorer anExp(aWire->wire()); anExp.more(); anExp.next()) {
if (isSendMessage) {
// send message to highlight the failed vertices
- std::shared_ptr<ModelAPI_ShapesFailedMessage> aMessage(
- new ModelAPI_ShapesFailedMessage(Events_Loop::eventByName(EVENT_OPERATION_SHAPES_FAILED)));
- aMessage->setShapes(myFailedVertices);
- Events_Loop::loop()->send(aMessage);
+ sendMessageWithFailedShapes(myFailedVertices);
}
static const std::string THE_PREFIX = "Fillet1D";
ResultBodyPtr aResult = document()->createBody(data(), theResultIndex);
ListOfShape anOriginal;
anOriginal.push_back(theWire);
- FeaturesPlugin_Tools::loadModifiedShapes(aResult, anOriginal, ListOfShape(),
- aFilletBuilder, aFilletBuilder->shape(), THE_PREFIX);
+ ModelAPI_Tools::loadModifiedShapes(aResult, anOriginal, ListOfShape(),
+ aFilletBuilder, aFilletBuilder->shape(), THE_PREFIX);
setResult(aResult, theResultIndex);
// store new edges generated from vertices
for (ListOfShape::const_iterator anIt = theVertices.begin(); anIt != theVertices.end(); ++anIt)