#include "FeaturesAPI_SharedFaces.h"
-#include <FeaturesPlugin_SharedFaces.h>
-#include <ModelAPI_AttributeDoubleArray.h>
+#include <FeaturesPlugin_GroupSharedFaces.h>
#include <ModelHighAPI_Services.h>
#include <ModelHighAPI_Tools.h>
}
//=================================================================================================
-FeaturesAPI_SharedFaces::FeaturesAPI_SharedFaces(const std::shared_ptr<ModelAPI_Feature>& theFeature,
+FeaturesAPI_SharedFaces::FeaturesAPI_SharedFaces(
+ const std::shared_ptr<ModelAPI_Feature>& theFeature,
const ModelHighAPI_Selection& theobject,
- const double theTransparency,
+ const ModelHighAPI_Integer& theTransparency,
const std::string & theNameGroup)
:ModelHighAPI_Interface(theFeature)
{
if (initialize()) {
fillAttribute(theobject, myobjectselected);
fillAttribute(theTransparency, mytransparency);
- if (theNameGroup != "") {
- fillAttribute(true,
- feature()->boolean(FeaturesPlugin_SharedFaces::CREATE_GROUP_ID()));
- fillAttribute(theNameGroup, mygroupname);
- }
+ fillAttribute(theNameGroup, mygroupname);
execute();
}
}
const std::string& aDocName = theDumper.name(aBase->document());
AttributeSelectionPtr anAttrObject;
- anAttrObject = aBase->selection(FeaturesPlugin_SharedFaces::OBJECT_ID());
+ anAttrObject = aBase->selection(FeaturesPlugin_GroupSharedFaces::OBJECT_ID());
theDumper << aBase << " = model.getSharedFaces(" << aDocName << ", " << anAttrObject;
- theDumper << ", " << aBase->integer(FeaturesPlugin_SharedFaces::TRANSPARENCY_ID());
-
- if (aBase->boolean(FeaturesPlugin_SharedFaces::CREATE_GROUP_ID())->value())
- theDumper << ", " << aBase->string(FeaturesPlugin_SharedFaces::GROUP_NAME_ID());
-
+ theDumper << ", " << aBase->integer(FeaturesPlugin_GroupSharedFaces::TRANSPARENCY_ID());
+ theDumper << ", " << aBase->string(FeaturesPlugin_GroupSharedFaces::GROUP_NAME_ID());
theDumper << ")" << std::endl;
}
//=================================================================================================
SharedFacesPtr getSharedFaces(const std::shared_ptr<ModelAPI_Document>& thePart,
const ModelHighAPI_Selection& theobject,
- const double theTransparency,
+ const ModelHighAPI_Integer& theTransparency,
const std::string & theNameGroup)
{
- FeaturePtr aFeature = thePart->addFeature(FeaturesPlugin_SharedFaces::ID());
+ FeaturePtr aFeature = thePart->addFeature(FeaturesPlugin_GroupSharedFaces::ID());
SharedFacesPtr aSharedFaces;
#include "FeaturesAPI.h"
-#include "FeaturesPlugin_SharedFaces.h"
+#include "FeaturesPlugin_GroupSharedFaces.h"
+#include <ModelHighAPI_Integer.h>
#include <ModelHighAPI_Interface.h>
#include <ModelHighAPI_Macro.h>
FEATURESAPI_EXPORT
explicit FeaturesAPI_SharedFaces(const std::shared_ptr<ModelAPI_Feature>& theFeature,
const ModelHighAPI_Selection& theobject,
- const double theTransparency,
- const std::string & theNameGroup);
+ const ModelHighAPI_Integer& theTransparency,
+ const std::string & theNameGroup);
/// Destructor.
FEATURESAPI_EXPORT
virtual ~FeaturesAPI_SharedFaces();
- INTERFACE_3(FeaturesPlugin_SharedFaces::ID(),
- objectselected, FeaturesPlugin_SharedFaces::OBJECT_ID(),
+ INTERFACE_3(FeaturesPlugin_GroupSharedFaces::ID(),
+ objectselected, FeaturesPlugin_GroupSharedFaces::OBJECT_ID(),
ModelAPI_AttributeSelection,
/** object selected*/,
- transparency, FeaturesPlugin_SharedFaces::TRANSPARENCY_ID(),
+ transparency, FeaturesPlugin_GroupSharedFaces::TRANSPARENCY_ID(),
ModelAPI_AttributeInteger,
/** transparency*/,
- groupname, FeaturesPlugin_SharedFaces::GROUP_NAME_ID(),
+ groupname, FeaturesPlugin_GroupSharedFaces::GROUP_NAME_ID(),
ModelAPI_AttributeString,
/** group name*/)
FEATURESAPI_EXPORT
SharedFacesPtr getSharedFaces(const std::shared_ptr<ModelAPI_Document>& thePart,
const ModelHighAPI_Selection& theObject,
- const double theTransparency = 0.0,
- const std::string & theNameGroup = "");
+ const ModelHighAPI_Integer& theTransparency,
+ const std::string & theNameGroup);
#endif // FeaturesAPI_SharedFaces_H_
# additional include directories
INCLUDE_DIRECTORIES( ${PROJECT_SOURCE_DIR}/src/GeomDataAPI
${PROJECT_SOURCE_DIR}/src/Locale
- ${PROJECT_SOURCE_DIR}/src/PrimitivesPlugin
${QT_INCLUDES})
# additional preprocessor / compiler flags
FeaturesPlugin_Fillet1D.h
FeaturesPlugin_Measurement.h
FeaturesPlugin_SharedFaces.h
+ FeaturesPlugin_CommonSharedFaces.h
+ FeaturesPlugin_GroupSharedFaces.h
FeaturesPlugin_FusionFaces.h
FeaturesPlugin_RemoveResults.h
FeaturesPlugin_Chamfer.h
FeaturesPlugin_Fillet1D.cpp
FeaturesPlugin_Measurement.cpp
FeaturesPlugin_SharedFaces.cpp
+ FeaturesPlugin_CommonSharedFaces.cpp
+ FeaturesPlugin_GroupSharedFaces.cpp
FeaturesPlugin_FusionFaces.cpp
FeaturesPlugin_RemoveResults.cpp
FeaturesPlugin_Chamfer.cpp
fillet_widget.xml
fillet1d_widget.xml
measurement_widget.xml
- sharedFaces_widget.xml
+ shared_Faces_widget.xml
+ shared_Faces_macro_widget.xml
fusion_faces_widget.xml
chamfer_widget.xml
copy_widget.xml
--- /dev/null
+// Copyright (C) 2018-2020 CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "FeaturesPlugin_CommonSharedFaces.h"
+
+#include <ModelAPI_AttributeSelection.h>
+#include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_Attribute.h>
+
+#include <ModelAPI_Data.h>
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Validator.h>
+#include <Locale_Convert.h>
+
+#include <GeomAlgoAPI_CompoundBuilder.h>
+
+#include <Config_PropManager.h>
+
+#include <GeomAlgoAPI_ShapeTools.h>
+#include <GeomAlgoAPI_SharedFaces.h>
+#include <GeomAPI_ShapeIterator.h>
+#include <ModelAPI_Tools.h>
+#include <iomanip>
+#include <sstream>
+
+
+//=================================================================================================
+void FeaturesPlugin_CommonSharedFaces::updateFaces()
+{
+ AttributeSelectionPtr ancompSolidAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelection>(attributObject());
+
+ AttributeSelectionListPtr aFacesListAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>
+ (attributListFaces());
+
+ if (aFacesListAttr->isInitialized())
+ aFacesListAttr->clear();
+
+ GeomShapePtr aShape = ancompSolidAttr->value();
+ if (aShape.get() && ancompSolidAttr->context().get()) {
+
+ aShape = ancompSolidAttr->context()->shape();
+ if (aShape) {
+ std::string anError;
+ ListOfShape aFaces;
+ ListOfShape theShapes;
+
+ theShapes.push_back(aShape);
+ if (!GetSharedFaces(theShapes,
+ aFaces,
+ false,
+ anError))
+ setError("Error in GetSharedFaces calculation :" + anError);
+
+ aFacesListAttr->setSelectionType("face");
+
+ ListOfShape::const_iterator anIt = aFaces.cbegin();
+ for(; anIt != aFaces.cend(); ++anIt) {
+
+ GeomShapePtr aFacePtr = *anIt;
+
+ if (!aFacePtr.get()) {
+ setError("GetSharedFaces : An invalid face found " + anError);
+ }
+ aFacesListAttr->append( ancompSolidAttr->context(), aFacePtr);
+ }
+ std::stringstream alabel;
+ alabel << "Number of shared faces : " << aFacesListAttr->size();
+ AttributeStringPtr aNumberFacesAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeString>
+ (attributNumberFaces());
+ aNumberFacesAttr->setValue( alabel.str() );
+
+ }
+ }
+}
+
+//=================================================================================================
+void FeaturesPlugin_CommonSharedFaces::setFacesGroup(const std::wstring& theName )
+{
+ std::vector<int> aColor;
+ ResultGroupPtr aGroup = document()->createGroup(data());
+ // clean the result of the operation
+ aGroup->data()->setName(theName);
+ aGroup->store(GeomShapePtr());
+
+ // shapes containing in group
+ ListOfShape aFaces;
+ AttributeSelectionListPtr aFacesListAttr =
+ std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>
+ (attributListFaces());
+
+ for (int anI =0; anI< aFacesListAttr->size(); anI++) {
+ AttributeSelectionPtr aAtt = aFacesListAttr->value(anI);
+ aFaces.push_back( aAtt->value() );
+ }
+ GeomShapePtr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aFaces);
+
+ aGroup->store(aCompound);
+ aColor = {255,0,0};
+ setResult(aGroup);
+ ModelAPI_Tools::setColor( lastResult(),aColor);
+}
+
--- /dev/null
+// Copyright (C) 2018-2020 CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef FeaturesPlugin_CommonSharedFaces_H_
+#define FeaturesPlugin_CommonSharedFaces_H_
+
+#include "FeaturesPlugin.h"
+#include <ModelAPI_Attribute.h>
+#include <ModelAPI_Feature.h>
+#include <ModelAPI_ResultGroup.h>
+
+#include <GeomAPI_IPresentable.h>
+#include <GeomAPI_IScreenParams.h>
+
+
+/// \class FeaturesPlugin_CommonSharedFaces
+/// \ingroup Plugins
+/// \brief Feature to check the shared faces of solid
+
+class FeaturesPlugin_CommonSharedFaces : public ModelAPI_Feature
+{
+public:
+
+ /// Performs the algorithm and stores results it in the data structure.
+ FEATURESPLUGIN_EXPORT virtual void execute(){};
+
+ /// Return Attribut values of result.
+ virtual AttributePtr attributObject() = 0;
+
+ /// Return Attribut values of result.
+ virtual AttributePtr attributListFaces() = 0;
+
+ /// Return Attribut values of result.
+ virtual AttributePtr attributNumberFaces() = 0;
+
+ protected:
+ FeaturesPlugin_CommonSharedFaces() {}
+
+ //Set group of faces
+ void setFacesGroup(const std::wstring& theName );
+
+ // Update the list of faces
+ void updateFaces();
+
+};
+
+#endif
--- /dev/null
+// Copyright (C) 2018-2020 CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#include "FeaturesPlugin_GroupSharedFaces.h"
+
+#include <ModelAPI_AttributeSelection.h>
+#include <ModelAPI_AttributeSelectionList.h>
+#include <ModelAPI_AttributeBoolean.h>
+#include <ModelAPI_AttributeString.h>
+#include <ModelAPI_AttributeInteger.h>
+#include <ModelAPI_Attribute.h>
+
+#include <ModelAPI_Data.h>
+#include <ModelAPI_Session.h>
+#include <ModelAPI_Validator.h>
+#include <Locale_Convert.h>
+
+#include <GeomAlgoAPI_CompoundBuilder.h>
+
+#include <Config_PropManager.h>
+#include <ModelAPI_ResultBody.h>
+#include <GeomAlgoAPI_ShapeTools.h>
+#include <GeomAPI_ShapeIterator.h>
+#include <ModelAPI_Tools.h>
+#include <iomanip>
+#include <sstream>
+
+//=================================================================================================
+FeaturesPlugin_GroupSharedFaces::FeaturesPlugin_GroupSharedFaces()
+{
+}
+
+//=================================================================================================
+void FeaturesPlugin_GroupSharedFaces::initAttributes()
+{
+ // attribute for object selected
+ data()->addAttribute(OBJECT_ID(), ModelAPI_AttributeSelection::typeId());
+ AttributeSelectionListPtr aList = std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>(
+ data()->addAttribute(LIST_FACES_ID(), ModelAPI_AttributeSelectionList::typeId()));
+
+ data()->addAttribute(NUMBER_FACES_ID(), ModelAPI_AttributeString::typeId());
+ data()->addAttribute(TRANSPARENCY_ID(), ModelAPI_AttributeInteger::typeId());
+ data()->addAttribute(GROUP_NAME_ID(), ModelAPI_AttributeString::typeId());
+
+}
+
+
+//=================================================================================================
+AttributePtr FeaturesPlugin_GroupSharedFaces::attributObject()
+{
+ return attribute(OBJECT_ID());
+}
+
+//=================================================================================================
+AttributePtr FeaturesPlugin_GroupSharedFaces::attributListFaces()
+{
+ return attribute(LIST_FACES_ID());
+}
+
+//=================================================================================================
+AttributePtr FeaturesPlugin_GroupSharedFaces::attributNumberFaces()
+{
+ return attribute(NUMBER_FACES_ID());
+}
+
+//=================================================================================================
+void FeaturesPlugin_GroupSharedFaces::execute()
+{
+ if ( selectionList(LIST_FACES_ID())->isInitialized()
+ && string(GROUP_NAME_ID())->value() != "") {
+ AttributeStringPtr aNameAtt = string( GROUP_NAME_ID() ) ;
+ std::wstring aNameFace = aNameAtt->isUValue() ?
+ Locale::Convert::toWString(aNameAtt->valueU()) :
+ Locale::Convert::toWString(aNameAtt->value());
+
+ if (lastResult().get())
+ eraseResultFromList(lastResult());
+ setFacesGroup(aNameFace);
+
+ } else {
+ if (lastResult().get()) {
+ eraseResultFromList(lastResult());
+ }
+
+ }
+ if (selection(OBJECT_ID())->isInitialized()) {
+ AttributeSelectionPtr ancompSolidAttr = selection(OBJECT_ID());
+ ResultPtr aResult = ancompSolidAttr->context();
+
+ double aTranparency = integer(TRANSPARENCY_ID())->value()/100.0;
+ ModelAPI_Tools::setTransparency(aResult, aTranparency);
+
+ ResultBodyPtr aResultBody = std::dynamic_pointer_cast<ModelAPI_ResultBody>(aResult);
+ std::list<ResultPtr> allRes;
+ ModelAPI_Tools::allSubs(aResultBody, allRes);
+ std::list<ResultPtr>::iterator aRes;
+ for(aRes = allRes.begin(); aRes != allRes.end(); aRes++) {
+ ModelAPI_Tools::setTransparency(*aRes, aTranparency);
+ }
+ }
+}
+
+//=================================================================================================
+void FeaturesPlugin_GroupSharedFaces::attributeChanged(const std::string& theID)
+{
+ if (theID == OBJECT_ID()) {
+ updateFaces();
+ }
+}
\ No newline at end of file
--- /dev/null
+// Copyright (C) 2018-2020 CEA/DEN, EDF R&D
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2.1 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+//
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
+//
+
+#ifndef FeaturesPlugin_GroupSharedFaces_H_
+#define FeaturesPlugin_GroupSharedFaces_H_
+
+#include <FeaturesPlugin_CommonSharedFaces.h>
+
+/// \class FeaturesPlugin_GroupSharedFaces
+/// \ingroup Plugins
+/// \brief Feature to check the shared faces of solid
+
+class FeaturesPlugin_GroupSharedFaces : public FeaturesPlugin_CommonSharedFaces
+{
+public:
+ inline static const std::string& ID()
+ {
+ static const std::string MY_ID("Shared_faces");
+ return MY_ID;
+ }
+
+ /// \return the kind of a feature.
+ virtual const std::string& getKind()
+ {
+ return ID();
+ }
+
+ /// Attribute name for object selected.
+ inline static const std::string& OBJECT_ID()
+ {
+ static const std::string MY_OBJECT_ID("main_object");
+ return MY_OBJECT_ID;
+ }
+
+ /// Attribute name for number of faces.
+ inline static const std::string& NUMBER_FACES_ID()
+ {
+ static const std::string MY_NUMBER_FACES_ID("number_shared_faces");
+ return MY_NUMBER_FACES_ID;
+ }
+
+ /// Attribute name for z coodinate.
+ inline static const std::string& LIST_FACES_ID()
+ {
+ static const std::string MY_LIST_FACES_ID("faces");
+ return MY_LIST_FACES_ID;
+ }
+
+ /// Attribute name for transparency.
+ inline static const std::string& TRANSPARENCY_ID()
+ {
+ static const std::string MY_TRANSPARENCY_ID("transparency");
+ return MY_TRANSPARENCY_ID;
+ }
+
+ /// Attribute name for group name.
+ inline static const std::string& GROUP_NAME_ID()
+ {
+ static const std::string MY_GROUP_NAME_ID("group_name");
+ return MY_GROUP_NAME_ID;
+ }
+
+ /// Performs the algorithm and stores results it in the data structure.
+ FEATURESPLUGIN_EXPORT virtual void execute();
+
+ /// Request for initialization of data model of the feature: adding all attributes
+ FEATURESPLUGIN_EXPORT virtual void initAttributes();
+
+ /// Called on change of any argument-attribute of this object
+ /// \param theID identifier of changed attribute
+ FEATURESPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
+
+ /// Use plugin manager for features creation
+ FeaturesPlugin_GroupSharedFaces();
+
+ private:
+
+ /// Return Attribut values of object.
+ virtual AttributePtr attributObject();
+
+ /// Return Attribut values of list of faces.
+ virtual AttributePtr attributListFaces();
+
+ /// Return Attribut values of number of faces.
+ virtual AttributePtr attributNumberFaces();
+
+};
+
+#endif
#include <FeaturesPlugin_Intersection.h>
#include <FeaturesPlugin_Measurement.h>
#include <FeaturesPlugin_SharedFaces.h>
+#include <FeaturesPlugin_GroupSharedFaces.h>
#include <FeaturesPlugin_MultiRotation.h>
#include <FeaturesPlugin_MultiTranslation.h>
#include <FeaturesPlugin_Partition.h>
return FeaturePtr(new FeaturesPlugin_Measurement);
} else if (theFeatureID == FeaturesPlugin_SharedFaces::ID()) {
return FeaturePtr(new FeaturesPlugin_SharedFaces);
+ } else if (theFeatureID == FeaturesPlugin_GroupSharedFaces::ID()) {
+ return FeaturePtr(new FeaturesPlugin_GroupSharedFaces);
} else if (theFeatureID == FeaturesPlugin_RemoveResults::ID()) {
return FeaturePtr(new FeaturesPlugin_RemoveResults);
} else if (theFeatureID == FeaturesPlugin_Chamfer::ID()) {
#include "FeaturesPlugin_SharedFaces.h"
+#include <FeaturesPlugin_GroupSharedFaces.h>
#include <ModelAPI_AttributeSelection.h>
#include <ModelAPI_AttributeSelectionList.h>
#include <ModelAPI_AttributeBoolean.h>
ModelAPI_Session::get()->validators()->registerNotObligatory(getKind(), GROUP_NAME_ID());
}
+
+//=================================================================================================
+AttributePtr FeaturesPlugin_SharedFaces::attributObject()
+{
+ return attribute(OBJECT_ID());
+}
+
+//=================================================================================================
+AttributePtr FeaturesPlugin_SharedFaces::attributListFaces()
+{
+ return attribute(LIST_FACES_ID());
+}
+
+//=================================================================================================
+AttributePtr FeaturesPlugin_SharedFaces::attributNumberFaces()
+{
+ return attribute(NUMBER_FACES_ID());
+}
+
//=================================================================================================
void FeaturesPlugin_SharedFaces::execute()
{
- if (boolean(CREATE_GROUP_ID())->value()
- && selectionList(LIST_FACES_ID())->isInitialized()
- && string(GROUP_NAME_ID())->value() != "") {
- AttributeStringPtr aNameAtt = string( GROUP_NAME_ID() ) ;
- std::wstring aNameFace = aNameAtt->isUValue() ?
- Locale::Convert::toWString(aNameAtt->valueU()) :
- Locale::Convert::toWString(aNameAtt->value());
-
- if (myGroup.get())
- eraseResults();
- setFacesGroup(aNameFace);
+ if (boolean(CREATE_GROUP_ID())->value()) {
- } else {
- if (myGroup.get()) {
- eraseResults();
- myGroup.reset();
+ if ( string(GROUP_NAME_ID())->value() != ""
+ && selectionList(LIST_FACES_ID())->isInitialized()) {
+
+ if (lastResult().get()) {
+ eraseResultFromList(lastResult());
+ }
+
+ if (!myCreateGroupFeature.get())
+ createGroup();
+ updateGroup();
}
+ } else {
+ if (selectionList(LIST_FACES_ID())->isInitialized()) {
+
+ if (myCreateGroupFeature.get()) {
+ myCreateGroupFeature->eraseResults();
+ SessionPtr aSession = ModelAPI_Session::get();
+ DocumentPtr aDoc = aSession->activeDocument();
+ aDoc->removeFeature(myCreateGroupFeature);
+ myCreateGroupFeature.reset();
+ }
+
+ if (lastResult().get())
+ eraseResultFromList(lastResult());
+ setFacesGroup(L"Group_SharedFaces");
+ }
}
+
if (selection(OBJECT_ID())->isInitialized()) {
AttributeSelectionPtr ancompSolidAttr = selection(OBJECT_ID());
ResultPtr aResult = ancompSolidAttr->context();
void FeaturesPlugin_SharedFaces::attributeChanged(const std::string& theID)
{
if (theID == OBJECT_ID()) {
- AttributeSelectionPtr ancompSolidAttr = selection(OBJECT_ID());
-
- GeomShapePtr aShape = ancompSolidAttr->value();
- if (aShape.get() && ancompSolidAttr->context().get()) {
-
- aShape = ancompSolidAttr->context()->shape();
- if (aShape) {
- std::string anError;
- ListOfShape aFaces;
- ListOfShape theShapes;
-
- theShapes.push_back(aShape);
- if (!GetSharedFaces(theShapes,
- aFaces,
- false,
- anError))
- setError("Error in GetSharedFaces calculation :" + anError);
-
- AttributeSelectionListPtr aFacesListAttr =
- std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>
- (attribute(LIST_FACES_ID()));
-
- if (aFacesListAttr->isInitialized())
- aFacesListAttr->clear();
- aFacesListAttr->setSelectionType("face");
+ updateFaces();
+ if (myCreateGroupFeature.get())
+ updateGroup();
+ }
+}
- ListOfShape::const_iterator anIt = aFaces.cbegin();
- for(; anIt != aFaces.cend(); ++anIt) {
- GeomShapePtr aFacePtr = *anIt;
+//=================================================================================================
+void FeaturesPlugin_SharedFaces::createGroup()
+{
+ SessionPtr aSession = ModelAPI_Session::get();
- if (!aFacePtr.get()) {
- setError("GetSharedFaces : An invalid face found " + anError);
- }
- aFacesListAttr->append( ancompSolidAttr->context(), aFacePtr);
- }
- std::stringstream alabel;
- alabel << "Number of shared faces : " << aFacesListAttr->size();
- string(NUMBER_FACES_ID() )->setValue( alabel.str() );
+ DocumentPtr aDoc = aSession->activeDocument();
- }
- }
+ if (aDoc.get()) {
+ myCreateGroupFeature = aDoc->addFeature(FeaturesPlugin_GroupSharedFaces::ID());
}
}
//=================================================================================================
-void FeaturesPlugin_SharedFaces::setFacesGroup(const std::wstring& theName )
+void FeaturesPlugin_SharedFaces::updateGroup()
{
- std::vector<int> aColor;
- myGroup = document()->createGroup(data());
- // clean the result of the operation
- myGroup->data()->setName(theName);
- myGroup->store(GeomShapePtr());
-
- // shapes containing in group
- ListOfShape aFaces;
- AttributeSelectionListPtr aFacesListAttr =
- std::dynamic_pointer_cast<ModelAPI_AttributeSelectionList>
- (attribute(LIST_FACES_ID()));
-
- for (int anI =0; anI< aFacesListAttr->size(); anI++) {
- AttributeSelectionPtr aAtt = aFacesListAttr->value(anI);
- aFaces.push_back( aAtt->value() );
- }
- GeomShapePtr aCompound = GeomAlgoAPI_CompoundBuilder::compound(aFaces);
- myGroup->store(aCompound);
- aColor = {255,0,0};
- setResult(myGroup);
- ModelAPI_Tools::setColor( lastResult(),aColor);
+ myCreateGroupFeature->string(FeaturesPlugin_GroupSharedFaces::GROUP_NAME_ID())
+ ->setValue( string(GROUP_NAME_ID())->value());
-}
+ myCreateGroupFeature->selection(FeaturesPlugin_GroupSharedFaces::OBJECT_ID())
+ ->setValue( selection(OBJECT_ID())->context() ,
+ selection(OBJECT_ID())->value() );
+
+ myCreateGroupFeature->integer(FeaturesPlugin_GroupSharedFaces::TRANSPARENCY_ID())
+ ->setValue( integer(TRANSPARENCY_ID())->value());
+ myCreateGroupFeature->execute();
+}
\ No newline at end of file
#ifndef FeaturesPlugin_SharedFaces_H_
#define FeaturesPlugin_SharedFaces_H_
-#include "FeaturesPlugin.h"
-#include <ModelAPI_Feature.h>
-#include <ModelAPI_ResultGroup.h>
-
-#include <GeomAPI_IPresentable.h>
-#include <GeomAPI_IScreenParams.h>
-#include <GeomAlgoAPI_Box.h>
+#include <FeaturesPlugin_CommonSharedFaces.h>
/// \class FeaturesPlugin_SharedFaces
/// \ingroup Plugins
/// \brief Feature to check the shared faces of solid
-class FeaturesPlugin_SharedFaces : public ModelAPI_Feature
+class FeaturesPlugin_SharedFaces : public FeaturesPlugin_CommonSharedFaces
{
public:
inline static const std::string& ID()
{
- static const std::string MY_ID("Shared_faces");
+ static const std::string MY_ID("Shared_faces_macro");
return MY_ID;
}
/// \param theID identifier of changed attribute
FEATURESPLUGIN_EXPORT virtual void attributeChanged(const std::string& theID);
+ /// Reimplemented from ModelAPI_Feature::isMacro(). Returns true.
+ FEATURESPLUGIN_EXPORT virtual bool isMacro() const { return true; }
+
/// Use plugin manager for features creation
FeaturesPlugin_SharedFaces();
private:
- //Set group of faces
- void setFacesGroup(const std::wstring& theName );
+ /// Return Attribut values of object.
+ virtual AttributePtr attributObject();
+
+ /// Return Attribut values of list of faces.
+ virtual AttributePtr attributListFaces();
+
+ /// Return Attribut values of number of faces.
+ virtual AttributePtr attributNumberFaces();
+
+ /// Create group
+ void createGroup();
+
+ /// Update group
+ void updateGroup();
+
+ /// Feature to create group
+ FeaturePtr myCreateGroupFeature;
- ResultGroupPtr myGroup;
};
#endif
</feature>
</group>
<group id="Face">
- <feature id="Shared_faces" title="Check shared faces" tooltip="Check the shared faces" auto_preview="true"
+ <feature id="Shared_faces_macro" title="Check shared faces" tooltip="Check the shared faces" auto_preview="true"
icon="icons/Features/shared_shapes.png" helpfile="checkSharedFaceFeature.html">
- <source path="sharedFaces_widget.xml"/>
+ <source path="shared_Faces_macro_widget.xml"/>
+ </feature>
+ <feature id="Shared_faces" title="Check shared faces" tooltip="Check the shared faces" auto_preview="true"
+ icon="icons/Features/shared_shapes.png" helpfile="checkSharedFaceFeature.html" internal="1">
+ <source path="shared_Faces_widget.xml"/>
</feature>
</group>
</workbench>
--- /dev/null
+<source>
+ <shape_selector id="main_object"
+ label="Object"
+ tooltip="Select a object"
+ shape_types="compsolid compsolid object"
+ default=""
+ geometrical_selection="true">
+ <validator id="PartSet_DifferentObjects"/>
+ <validator id="GeomValidators_ShapeType" parameters="compsolid,compound"/>
+ </shape_selector>
+ <groupbox title="Shared faces">
+ <label id="number_shared_faces"/>
+ <multi_selector id="faces"
+ label="Liste of faces :"
+ icon=""
+ shape_types="faces"
+ Block_selection = "true"
+ use_choice="false">
+ <validator id="PartSet_DifferentObjects"/>
+ <validator id="GeomValidators_ShapeType" parameters="faces"/>
+ </multi_selector>
+ </groupbox>
+ <integervalue id="transparency"
+ label="Transparency"
+ min="0"
+ max="100"
+ step="10"
+ default="50">
+ </integervalue>
+ <optionalbox id="create_group" title="Create group" show_title="true">
+ <stringvalue id="group_name" label="Group Name"/>
+ <label/>
+ </optionalbox>
+</source>
--- /dev/null
+<source>
+ <shape_selector id="main_object"
+ label="Object"
+ tooltip="Select a object"
+ shape_types="compsolid compsolid object"
+ default=""
+ geometrical_selection="true">
+ <validator id="PartSet_DifferentObjects"/>
+ <validator id="GeomValidators_ShapeType" parameters="compsolid,compound"/>
+ </shape_selector>
+ <groupbox title="Shared faces">
+ <label id="number_shared_faces"/>
+ <multi_selector id="faces"
+ label="Liste of faces :"
+ icon=""
+ shape_types="faces"
+ Block_selection = "true"
+ use_choice="false">
+ <validator id="PartSet_DifferentObjects"/>
+ <validator id="GeomValidators_ShapeType" parameters="faces"/>
+ </multi_selector>
+ </groupbox>
+ <integervalue id="transparency"
+ label="Transparency"
+ min="0"
+ max="100"
+ step="10"
+ default="50">
+ </integervalue>
+ <stringvalue id="group_name" label="Group Name"/>
+</source>