Toon posts:

[DotNet] Dynamic Properties

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0Henk 'm!

Anoniem: 334914

Topicstarter
Hi All,

Ik Heb een probleem met het volgende:
Is Het mogelijk om in (managed) c++/ c#, iets te creeren zoals dynamic properties, zodat het mooi te voorschijn komt in een property grid. Hiervoor gebruikte ik wxWidgets om een property grid te vullen, dit ging als volgt:

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
bool alLimitBox::getAnimatableData( alAnimatableData *inOutPtr )
{
    if(inOutPtr)
    {

        alAnimationData *posData = new alAnimationData();
        size_t offset = OFFSET_OF(alLimitBox, m_firstTime);
        
        posData->setData(&m_position, AL_SCENENODE_DATA_TYPE_DOUBLE_3, wxT("Position"));
        inOutPtr->addData(posData);
        
        alAnimationData *scaleData= new alAnimationData();
        scaleData->setData(&m_scale, AL_SCENENODE_DATA_TYPE_DOUBLE_3, wxT("Scale") );
        inOutPtr->addData(scaleData);
        
        alAnimationData *rotData= new alAnimationData();
        rotData->setData(&m_rotation, AL_SCENENODE_DATA_TYPE_DOUBLE_3, wxT("Rotation") );
        inOutPtr->addData(rotData);

        return true;
    }
    return false;
}

Met deze structuur kon ik automatisch een property grid/tree control vullen en direct aanpassen in wxWidgets, hence the pointer naar t adress van de members. Maar hoe ik dit doe in een dotnet omgeving blijft me een raadsel, ik heb uiteraard lopen zoeken hierop. Maar alle info die ik tegenkwam was dat ik met MSIL zou moeten gaan lopen 'spelen', iets wat ik denk dat niet nodig is. Nu moet ik elke keer een dotNet object aanmaken, voor een 'scenenode' dat sowieso al bestaat in de c++ versie, beetje dubbelop werk.

Dus elke help is meer dan welkom.

Acties:
  • 0Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Vanaf .net 4.0 heb je sowieso dynamic types, maar daarvoor kun je gewoon gebruik maken van bijvoorbeeld een indexer property, al weet ik niet precies hoe een property grid daar mee om gaat.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0Henk 'm!

Anoniem: 334914

Topicstarter
Woy schreef op zondag 26 juni 2011 @ 10:42:
Vanaf .net 4.0 heb je sowieso dynamic types, maar daarvoor kun je gewoon gebruik maken van bijvoorbeeld een indexer property, al weet ik niet precies hoe een property grid daar mee om gaat.
Mijn vaardigheden met dotnet, zijn op zn zachts gezegd middelmatig, nog niet heel erg lang geleden ermee begonnen, het was meer een gui technisch gezien de beste keuze. Maar het zou toch mogelijk moeten zijn om een object direct in een propertygrid te moeten plaatsen, en t grid te vullen, met behulp van een intptr?

Right now code ik de properties van bijvoorbeel een vector3 met de hand.

Acties:
  • 0Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 23-05 20:03
Ik weet niet precies wat je bedoelt maar je kunt in C#.NET een property grid vullen door gewoon de SelectedObject property te gebruiken. Wijs daar een object aan toe en de property gird toont de properties en hun waarden.

Mijn iRacing profiel


Acties:
  • 0Henk 'm!

Anoniem: 334914

Topicstarter
NickThissen schreef op zondag 26 juni 2011 @ 10:55:
Ik weet niet precies wat je bedoelt maar je kunt in C#.NET een property grid vullen door gewoon de SelectedObject property te gebruiken. Wijs daar een object aan toe en de property gird toont de properties en hun waarden.
At compile time weet het programma niet wat voor type property het kan worden

Acties:
  • 0Henk 'm!

  • NickThissen
  • Registratie: November 2007
  • Laatst online: 23-05 20:03
Dan ben ik je helemaal kwijt, geen idee meer wat je dan wil :p Ken ook geen C++ dus je code zegt me niks.

Je kunt proberen een anonymous type aan te maken en die te tonen in de property grid. Lang geleden eens geprobeerd en ik geloof dat dat lukte (had ik eigenlijk niet meteen verwacht) maar ik weet het niet meer zeker.
Misschien zoiets:
code:
1
2
3
4
5
var obj = new { Position = new Point(35,10),
                Rotation = 58.32,
                Scale = 4 };
                
propertyGrid1.SelectedObject = obj;

Mijn iRacing profiel


Acties:
  • 0Henk 'm!

Anoniem: 334914

Topicstarter
sigh,

hoe moeilijk kan t zijn, ik breek hier al een dag mn hoofd op, enige wat ik wil is dat er een string field wordt getoond, maat daaronder zn member variables. In een geval van een vector3 dus x, y, z

C++:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public ref class alPointCloudPropertiesDotNet
{
public:

    alPointCloudPropertiesDotNet(alSvoTree *treePtr);
    ~alPointCloudPropertiesDotNet(){}


    [Category("\r\r\r\rNode Information")]
    property String^ Name
    {
        String^ get();
    }       
    [Category("\r\r\rObject Transform")]
    property alVector3DotNet^ Position
    {
        alVector3DotNet^ get(); 
        void set( alVector3DotNet^ val );       
    }
    [Category("\r\r\rObject Transform")]
    property alVector3DotNet^ Scale
    {
        alVector3DotNet^ get();
        void set( alVector3DotNet^ val );
    }
    [Category("\r\r\rObject Transform")]
    property alVector3DotNet^ Rotation
    {
        alVector3DotNet^ get();
        void set( alVector3DotNet^ val );
    }
    /*[Category("\r\rColor")]
    [DisplayName("Object Color")]
    property Color color
    {
        Color get();
        void set( Color val );  
    }*/
    


private:

    void                        doAction();

    alSceneNode*                m_nodePtr;
    alVector3DotNet^            m_position;
    alVector3DotNet^            m_rotation;
    alVector3DotNet^            m_scale;
    System::Drawing::Color      m_color;

};


Hier is een dotnet voorbeeld, alSceneNode* wordt gewijzigd, maar ja die alVector3DotNet lijken mij overbodig...

[Edit] Note to self, misschien kan ik een intPtr gebruiken, wist niet dat ze bestonden in dotnet;)

[Voor 3% gewijzigd door Anoniem: 334914 op 27-06-2011 09:28]

Pagina: 1


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee