- // Set features where the parameter is used
- const std::set<std::shared_ptr<ModelAPI_Attribute>>& aRefs = aParam->data()->refsToMe();
- std::set<std::shared_ptr<ModelAPI_Attribute> >::const_iterator aIt;
- for(aIt = aRefs.cbegin(); aIt != aRefs.cend(); aIt++) {
- std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
- FeaturePtr aReferenced = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
- if (aReferenced.get()) {
- QStringList aValNames;
- aValNames << aReferenced->data()->name().c_str();
-
- AttributeDoublePtr aDouble = std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aAttr);
- if (aDouble.get()) {
- aValNames << aDouble->text().c_str();
- aValNames << QString::number(aDouble->value());
- } else {
- AttributeIntegerPtr aInt = std::dynamic_pointer_cast<ModelAPI_AttributeInteger>(aAttr);
- if (aInt.get()) {
- aValNames << aInt->text().c_str();
- aValNames << QString::number(aInt->value());
+QList<QStringList> ParametersPlugin_WidgetParamsMgr::
+ featuresItems(const QList<FeaturePtr>& theFeatures, QList<FeaturePtr>& theFeatureList) const
+{
+ QList<QStringList> aItemsList;
+ ResultParameterPtr aParam;
+ foreach(FeaturePtr aParameter, theFeatures) {
+ aParam = std::dynamic_pointer_cast<ModelAPI_ResultParameter>(aParameter->firstResult());
+ const std::set<std::shared_ptr<ModelAPI_Attribute>>& aRefs = aParam->data()->refsToMe();
+ std::set<std::shared_ptr<ModelAPI_Attribute> >::const_iterator aIt;
+ for(aIt = aRefs.cbegin(); aIt != aRefs.cend(); aIt++) {
+ std::shared_ptr<ModelAPI_Attribute> aAttr = (*aIt);
+ FeaturePtr aReferenced = std::dynamic_pointer_cast<ModelAPI_Feature>(aAttr->owner());
+ if (aReferenced.get() && (aReferenced != aParameter)) {
+ if (aReferenced->getKind() == ParametersPlugin_Parameter::ID()) {
+ // Find referenced feature Recursive
+ QList<FeaturePtr> aList;
+ aList.append(aReferenced);
+ QList<QStringList> aItems = featuresItems(aList, theFeatureList);
+ aItemsList.append(aItems);
+ } else {
+ if (!theFeatureList.contains(aReferenced)) {
+ QStringList aValNames;
+ aValNames << aReferenced->data()->name().c_str();
+
+ AttributeDoublePtr aDouble =
+ std::dynamic_pointer_cast<ModelAPI_AttributeDouble>(aAttr);
+ if (aDouble.get()) {
+ aValNames << aDouble->text().c_str();
+ aValNames << QString::number(aDouble->value());
+ } else {
+ AttributeIntegerPtr aInt =
+ std::dynamic_pointer_cast<ModelAPI_AttributeInteger>(aAttr);
+ if (aInt.get()) {
+ aValNames << aInt->text().c_str();
+ aValNames << QString::number(aInt->value());
+ }