Project

General

Profile

Actions

Support Request #14314

closed

Question about the IProperties Interface

Added by hidden almost 3 years ago. Updated almost 3 years ago.

Status:
Closed
Priority:
Normal
Customer:
AUDI
Department:
Requester's Priority:
Normal
Support Level:
2nd Level
Resolution:
Solved Issue
Product Issue Numbers:
Affected Products:
Platform:
Windows 10 64bit
Topic:
ADTF::SDK
FAQ Links:

Description

Supportanfrage

Hallo,

da wir ADTF3 Properties mit einen Generator generieren benutzen wir das IPorperties Interface.
Etwas schade finde ich noch, dass Min, Max, DisplayName, Description, IsChangeable, etc. noch nicht wirklich funktionieren.
Aber das ist ja scheinbar im ADTF-IProperties-Interface nicht verfügbar.
Wird das in Zukunft möglich sein, so wie in ADTF2?

Mit freundlichen Grüßen

i. A. Jonas Tratz
ASAP Engineering GmbH

Lösung:

Min/Max, DisplayName und Value Lists werden bereits unterstützt. Über das property_variable<> template auch sehr komfortabel mit
property_variable<>::SetValidRange()
property_variable<>::SetValueList()
property_variable<>::SetDisplayName()

Ansonsten musst du das selber über die entsprechenden Sub-Properties abbilden:

template <typename T>
tVoid set_valid_range(IProperties& oSubProperties, const T& xMin, const T& xMax)
{
    set_property<T>(oSubProperties,
                    detail::tReservedProperties::strRangeMin,
                    xMin);
    set_property<T>(oSubProperties,
                    detail::tReservedProperties::strRangeMax,
                    xMax);
}

Noch ein Nachtrag bzgl. Property Variables:

Ich möchte im Filter eben nicht das RegisterPropertyVariable() benutzten, sondern "direkt" auf den Properties arbeiten.

z.B. in meinen Filter Konsturktor:

...
cPropertiesTestFilter::cPropertiesTestFilter(): m_pProps(NULL)
{
    object_ptr<IProperties> pProperties;
    THROW_IF_FAILED(GetProperties(pProperties));
    m_pProps = new properties::cGeneratedProperties(*pProperties);
}
...

benutzte ich meine Klasse die Properties anhand eines Input Files generiert:
...
class cGeneratedProperties
    {
    public:
        /// The IProperties on which the properties will be set on and read from.
        adtf::base::IProperties&  m_oProperties; 

    public:
        cGeneratedProperties(adtf::base::IProperties& oProperties) : m_oProperties(oProperties)
        {
            Setup(m_oProperties);
        }

        virtual ~cGeneratedProperties() {};

        /**
         * Stores the IProperties as member var for later usage and sets the properties on this.
         */
        tVoid Setup(adtf::base::IProperties& oProperties)
        {
            m_oProperties = oProperties;

            m_oProperties.SetProperty(adtf::base::property<tInt>("propertyName", 1));

Hier hätte ich gerne eine Zeile wie in ADTF2 um mit NSSUBPROP_DISPLAYNAME den Display name zu setzen:

//Damals in ADTF2:
m_pConfig->SetProperty(adtf::base::property<tChar*> (adtf_util::cString::Format("%s%s", "propertyName", NSSUBPROP_DISPLAYNAME).GetPtr(), "Input::GridMap::Layer"));
//ADTF3 Wunschverhalten:
m_oProperties.SetProperty(adtf::base::property<tChar*> (adtf_util::cString::Format("%s%s", "propertyName", NSSUBPROP_DISPLAYNAME).GetPtr(), "Input::GridMap::Layer"));

Zum lesen benutzte ich folgendes, welches einwandfrei funktioniert.

...
  tVoid GetProperties()
        {

            m_oProperties.GetProperty("propertyName", m_oIntProperty_tmp);
            nProp1 = m_oIntProperty_tmp.GetValueT();
...
tResult cPropertiesTestFilter::Init(tInitStage eStage) 
{
    if (eStage == StageNormal)
    {
        m_pProps->GetProperties();
        LOG_INFO("Prop 1 =  %u\n", m_pProps->nProp1);

Die Frage wäre also, kann ich, wenn ich direkt auf den Properties arbeite, dort Sachen wie Min, Max, DisplayName, Description, IsChangeable, etc. setzen?
Oder brauche ich dafür immer eine property_variable?


wie oben in meinem Code Snippet beschrieben musst du die passenden SubProperties setzen:

    object_ptr<IProperties> pProperties;
    THROW_IF_FAILED(GetProperties(pProperties));
    set_property_by_path<tInt32>(*pProperties, "myprop1", 123);
    set_property_by_path<tInt32>(*pProperties, (std::string("myprop1/") + adtf::base::giant::detail::tReservedProperties::strRangeMin).c_str(), 0);
    set_property_by_path<tInt32>(*pProperties, (std::string("myprop1/") + adtf::base::giant::detail::tReservedProperties::strRangeMax).c_str(), 200);

Eine kleine Frage hintendran, ich habe versucht "custom subproperties" zu erstellen, um quasi "changeable" properties abzubilden:

  adtf::base::set_property_by_path<tBool>(m_oProperties, (std::string("myprop1").append("/#__is_changeable")).c_str(), tTrue);

diese werden in ADTF3.10 nicht angezeigt, gibt es dazu eine Möglichkeit, damit man dies sehen kann?


Alles was mit "#__ "anfängt wird nicht in die plugin description geschrieben, nimm einfach einen anderen Namen für die Subproperty.


Files

image001.png (16.8 KB) image001.png hidden, 2021-05-17 07:00
Actions #1

Updated by hidden almost 3 years ago

  • Project changed from Public Support to 4
  • Description updated (diff)
  • Status changed from New to In Progress
  • Customer set to AUDI
  • Topic set to ADTF::Common
  • Affected Products ADTF 3.12.2 added
  • Platform Windows 10 64bit added
Actions #3

Updated by hidden almost 3 years ago

Hi Jonas,

also Min/Max, DisplayName und Value Lists werden bereits unterstützt. Über das property_variable<> template auch sehr komfortabel mit
property_variable<>::SetValidRange()
property_variable<>::SetValueList()
property_variable<>::SetDisplayName()

Ansonsten musst du das selber über die entsprechenden Sub-Properties abbilden:

template <typename T>
tVoid set_valid_range(IProperties& oSubProperties, const T& xMin, const T& xMax)
{
    set_property<T>(oSubProperties,
                    detail::tReservedProperties::strRangeMin,
                    xMin);
    set_property<T>(oSubProperties,
                    detail::tReservedProperties::strRangeMax,
                    xMax);
}

Grüße,

Martin

Actions #4

Updated by hidden almost 3 years ago

  • Status changed from In Progress to Customer Feedback Required
  • Topic changed from ADTF::Common to ADTF::SDK
Actions #5

Updated by hidden almost 3 years ago

Hallo zusammen,

danke für die schnelle und ausführlichen Antworten.

Ich möchte im Filter eben nicht das RegisterPropertyVariable() benutzten, sondern "direkt" auf den Properties arbeiten.

z.B. in meinen Filter Konsturktor:

...
cPropertiesTestFilter::cPropertiesTestFilter(): m_pProps(NULL)
{
    object_ptr<IProperties> pProperties;
    THROW_IF_FAILED(GetProperties(pProperties));
    m_pProps = new properties::cGeneratedProperties(*pProperties);
}
...

benutzte ich meine Klasse die Properties anhand eines Input Files generiert:
...
class cGeneratedProperties
    {
    public:
        /// The IProperties on which the properties will be set on and read from.
        adtf::base::IProperties&  m_oProperties; 

    public:
        cGeneratedProperties(adtf::base::IProperties& oProperties) : m_oProperties(oProperties)
        {
            Setup(m_oProperties);
        }

        virtual ~cGeneratedProperties() {};

        /**
         * Stores the IProperties as member var for later usage and sets the properties on this.
         */
        tVoid Setup(adtf::base::IProperties& oProperties)
        {
            m_oProperties = oProperties;

            m_oProperties.SetProperty(adtf::base::property<tInt>("propertyName", 1));

Hier hätte ich gerne eine Zeile wie in ADTF2 um mit NSSUBPROP_DISPLAYNAME den Display name zu setzen:

//Damals in ADTF2:
m_pConfig->SetProperty(adtf::base::property<tChar*> (adtf_util::cString::Format("%s%s", "propertyName", NSSUBPROP_DISPLAYNAME).GetPtr(), "Input::GridMap::Layer"));
//ADTF3 Wunschverhalten:
m_oProperties.SetProperty(adtf::base::property<tChar*> (adtf_util::cString::Format("%s%s", "propertyName", NSSUBPROP_DISPLAYNAME).GetPtr(), "Input::GridMap::Layer"));

Zum lesen benutzte ich folgendes, welches einwandfrei funktioniert.

...
  tVoid GetProperties()
        {

            m_oProperties.GetProperty("propertyName", m_oIntProperty_tmp);
            nProp1 = m_oIntProperty_tmp.GetValueT();
...
tResult cPropertiesTestFilter::Init(tInitStage eStage) 
{
    if (eStage == StageNormal)
    {
        m_pProps->GetProperties();
        LOG_INFO("Prop 1 =  %u\n", m_pProps->nProp1);

Die Frage wäre also, kann ich, wenn ich direkt auf den Properties arbeite, dort Sachen wie Min, Max, DisplayName, Description, IsChangeable, etc. setzen?
Oder brauche ich dafür immer eine property_variable?

Viele Grüße
Jonas

Actions #6

Updated by hidden almost 3 years ago

Hi Jonas,

wie oben in meinem Code Snippet beschrieben musst du die passenden SubProperties setzen:

    object_ptr<IProperties> pProperties;
    THROW_IF_FAILED(GetProperties(pProperties));
    set_property_by_path<tInt32>(*pProperties, "myprop1", 123);
    set_property_by_path<tInt32>(*pProperties, (std::string("myprop1/") + adtf::base::giant::detail::tReservedProperties::strRangeMin).c_str(), 0);
    set_property_by_path<tInt32>(*pProperties, (std::string("myprop1/") + adtf::base::giant::detail::tReservedProperties::strRangeMax).c_str(), 200);

Grüße,

Martin

Actions #7

Updated by hidden almost 3 years ago

Hi Martin,

perfekt! - Vielen Dank das funktioniert wunderbar.

Viele Grüße
Jonas

Actions #8

Updated by hidden almost 3 years ago

  • Status changed from Customer Feedback Required to To Be Closed
  • Resolution set to Solved Issue
Actions #9

Updated by hidden almost 3 years ago

  • Subject changed from Frage zu ADTF3-IProperties-Interface to Question about properties interface
  • Description updated (diff)
Actions #10

Updated by hidden almost 3 years ago

  • Subject changed from Question about properties interface to Question about the IProperties Interface
Actions #11

Updated by hidden almost 3 years ago

Hallo zusammen,

noch eine kleine Frage hintendran, ich habe versucht "custom subproperties" zu erstellen, um quasi "changeable" properties abzubilden:

  adtf::base::set_property_by_path<tBool>(m_oProperties, (std::string("myprop1").append("/#__is_changeable")).c_str(), tTrue);

diese werden in ADTF3.10 nicht angezeigt, gibt es dazu eine Möglichkeit, damit man dies sehen kann?

Viele Grüße
Jonas

Actions #12

Updated by hidden almost 3 years ago

  • Status changed from To Be Closed to In Progress
Actions #14

Updated by hidden almost 3 years ago

Hi Jonas,

alles was mit "#__ "anfängt wird nicht in die plugin description geschrieben, nimm einfach einen anderen Namen für die Subproperty.

Grüße,

Martin

Actions #15

Updated by hidden almost 3 years ago

Hi Martin,

vielen Dank! Ticket kann jetzt wirklich geschlossen werden :)

Viele Grüße
Jonas

Actions #16

Updated by hidden almost 3 years ago

  • Project changed from 4 to Public Support
  • Status changed from In Progress to To Be Closed
  • Private changed from Yes to No
Actions #17

Updated by hidden almost 3 years ago

  • Status changed from To Be Closed to Closed
Actions #18

Updated by hidden almost 3 years ago

  • Description updated (diff)
Actions

Also available in: Atom PDF