Boutique Cinema 4D
Affichage des résultats 1 à 11 sur 11

Discussion: C++ : Fichiers RES et String non pris en compte

  1. #1
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483

    C++ : Fichiers RES et String non pris en compte

    Salut,

    Je me suis fait une nouvelle installation du système avec Win 7, C4D R13 à R17 et Visual Studio Express 2013 pour me renouer avec le C++.

    Je n'ai eu aucun soucis à compiler les exemples du SDK de la R17 du premier coup après avoir tout installé (miracle), ni même mon nouveau module qui utilise la base de l'exemple Oatom, en suivant cette doc : https://developers.maxon.net/?p=81 .

    Il apparaît bien dans C4D, génère bien un cube, mais on dirait que le fichier res de la description n'est pas chargé, ni le titre de l'objet qui se trouve dans c4d_strings.

    En Python ça marchait très bien, mais là, j'ai juste l'icône de l'objet, pourtant j'ai bien mis le bon nom dans l'attribut description de RegisterObjectPlugin, je pige pas.


    C'est sûrement une erreur toute bête mais je trouve pas.


    Voici comment se présente mon projet dans Visual Studio :

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Image2.jpg 
Affichages :	25 
Taille :		460,5 Ko 
ID : 			16250


    Ce que j'ai dans C4D, seul le code fonctionne bien, pas de description ni de nom :

    Cliquez sur l'image pour la voir en taille réelle 

Nom : 		Image1.jpg 
Affichages :	17 
Taille :		367,9 Ko 
ID : 			16249


    Les fichiers sources :

    main.h

    Code PHP:
    #ifndef MAIN_H__
    #define MAIN_H__

    Bool EnregistreProc3Durale(void);

    #endif // MAIN_H__ 

    main.cpp

    Code PHP:
    #include "c4d.h"
    #include "main.h"

    Bool PluginStart(void)
    {
        if (!
    EnregistreProc3Durale())
        return 
    false;
      return 
    true;
    }

    void PluginEnd(void)
    {
    }

    Bool PluginMessage(Int32 idvoid *data)
    {
      return 
    false;


    vonc_proc3durale.cpp

    Code PHP:
    #include "c4d.h"
    #include "c4d_symbols.h"
    #include "vonc_proc3durale.h"
    #include "main.h"

    class Proc3DuraleObjet : public ObjectData
    {
    public:
        
    virtual Bool Init(GeListNodenode);

        
    virtual BaseObjectGetVirtualObjects(BaseObjectopHierarchyHelphh);
        
    virtual Bool Message(GeListNodenodeInt32 typevoidt_data);

        static 
    NodeDataAlloc(void) { return NewObjClear(Proc3DuraleObjet); }
    };

    Bool Proc3DuraleObjet::Init(GeListNodenode)
    {
        
    //BaseObject*         op    = (BaseObject*)node;
        //BaseContainer* data = op->GetDataInstance();
        
    return true;
    }

    Bool Proc3DuraleObjet::Message(GeListNodenodeInt32 typevoidt_data)
    {
        if (
    type == MSG_DESCRIPTION_VALIDATE) {
            
    BaseContainerdata = ((BaseObject*)node)->GetDataInstance();
        }
        return 
    true;
    }

    BaseObjectProc3DuraleObjet::GetVirtualObjects(BaseObjectopHierarchyHelphh)
    {
        
    BaseObjectorig op->GetDown();

        if (!
    orig) return nullptr;

        
    Bool dirty false;
        
    BaseObjectmain nullptr, *res op->GetAndCheckHierarchyClone(hhorigHIERARCHYCLONEFLAGS_ASPOLY, &dirtynullptrfalse);

        if (!
    dirty) return res;
        if (!
    res) return nullptr;

        
    main BaseObject::Alloc(Ocube);
        if (!
    main) goto error;

        
    blDelete(res);
        return 
    main;

    error:
        
    blDelete(res);
        
    blDelete(main);
        return 
    nullptr;
    }

    #define MODULE_ID 1035788

    //----------------------------------------------------------------------------------------
    ///    Plugin help support callback. Can be used to display context sensitive help when the
    /// user selects "Show Help" for an object or attribute. <B>Only return true for your own
    /// object types</B>. All names are always uppercase.
    /// @param[in] opType                            Object type name, for example "OATOM".
    /// @param[in] baseType                        Name of base object type that opType is derived from, usually the same as opType.
    /// @param[in] group                            Name of group in the attribute manager, for example "ID_OBJECTPROPERTIES".
    /// @param[in] property                        Name of the object property, for example "ATOMOBJECT_SINGLE";
    /// @return                                                True if the plugin can display help for this request.
    //----------------------------------------------------------------------------------------
    static Bool Proc3DuraleAide(const StringopType, const StringbaseType, const Stringgroup, const Stringproperty)
    {
        
    // Make sure that your object type name is unique and only return true if this is really your object type name and you are able to present a decent help.
        
    if (opType == "vonc_proc3durale") {
            
    GeOutString("If you implement custom object help, please use something better than GeOutString."GEMB_OK);
            return 
    true;
        }
        else {
            
    // You might handle more than one of your object/command/plugin types in one delegate ...
        
    }
        return 
    false;
    }

    Bool EnregistreProc3Durale(void)
    {
        if (
    RegisterPluginHelpDelegate(MODULE_IDProc3DuraleAide) == false) return false;

        return 
    RegisterObjectPlugin(MODULE_IDGeLoadString(VONC_PROC3DURALE_NOM), OBJECT_GENERATOR OBJECT_INPUTProc3DuraleObjet::Alloc"vonc_proc3durale"AutoBitmap("vonc_proc3durale.tif"), 0);


    res/c4d_symbols.h

    Code PHP:
    enum
    {
        
    VONC_PROC3DURALE_NOM                1000,
        
    _DUMMY_ELEMENT_
    }; 

    res/strings_fr/c4d_strings.str

    Code PHP:
    STRINGTABLE
    {
        
    VONC_PROC3DURALE_NOM    "Proc3Durale 2";


    res/strings_fr/description/vonc_proc3durale.str

    Code PHP:
    STRINGTABLE vonc_proc3durale
    {
        
    vonc_proc3durale                        "Proc3Durale 2";
        
        
    VONC_PROC3DURALE_PREC                    "Subdivision (Vue)";
        
    VONC_PROC3DURALE_MAT                    "Mati_re";
        
    VONC_PROC3DURALE_PRECR                    "Subdivision (Rendu)";
        
    VONC_PROC3DURALE_BORDS                    "Bordures";
        
    VONC_PROC3DURALE_LISSAGE                "Lisser";
        
    VONC_PROC3DURALE_LISSITE                "It_rations";
        
    VONC_PROC3DURALE_LUMI                    "Luminosit_";
        
    VONC_PROC3DURALE_INV                    "Inverser";
        
    VONC_PROC3DURALE_BORIG                    "Rigidit_ des bordures";
        
    VONC_PROC3DURALE_BORPHONG                "Cassure Phong des bordures";
        
    VONC_PROC3DURALE_TAILLE                    "Taille";
        
    VONC_PROC3DURALE_DECALAGE                "D_calage";
        
    VONC_PROC3DURALE_ECHELLE                "_chelle";
        
    VONC_PROC3DURALE_ANIME                    "Anim_";
        
    VONC_PROC3DURALE_MAJAUTO                "Actualisation auto";
        
    VONC_PROC3DURALE_MAJ                    "Actualiser";


    res/description/vonc_proc3durale.h

    Code PHP:
    #ifndef _vonc_proc3durale_H_
    #define _vonc_proc3durale_H_

    enum
    {
        
    VONC_PROC3DURALE_PREC                1000,
        
    VONC_PROC3DURALE_MAT                1001,
        
    VONC_PROC3DURALE_PRECR                1002,
        
    VONC_PROC3DURALE_BORDS                1003,
        
    VONC_PROC3DURALE_LISSAGE            1004,
        
    VONC_PROC3DURALE_LISSITE            1005,
        
    VONC_PROC3DURALE_LUMI                1006,
        
    VONC_PROC3DURALE_INV                1007,
        
    VONC_PROC3DURALE_BORIG                1008,
        
    VONC_PROC3DURALE_BORPHONG            1009,
        
    VONC_PROC3DURALE_TAILLE                1010,
        
    VONC_PROC3DURALE_DECALAGE            1011,
        
    VONC_PROC3DURALE_ECHELLE            1012,
        
    VONC_PROC3DURALE_ANIME                1013,
        
    VONC_PROC3DURALE_MAJAUTO            1014,
        
    VONC_PROC3DURALE_MAJ                1015
    };

    #endif 

    res/description/vonc_proc3durale.res

    Code PHP:
    CONTAINER vonc_proc3durale
    {
        
    NAME vonc_proc3durale;
        INCLUDE 
    Obase;

        
    GROUP ID_OBJECTPROPERTIES
        
    {
            
    VECTOR VONC_PROC3DURALE_TAILLE            UNIT METER; }
            
    VECTOR VONC_PROC3DURALE_DECALAGE        UNIT METER; }
            
    VECTOR VONC_PROC3DURALE_ECHELLE            UNIT PERCENT; }
            
    SEPARATOR LINE; }
            
    REAL VONC_PROC3DURALE_PREC                UNIT METERMIN 1.0; }
            
    REAL VONC_PROC3DURALE_PRECR                UNIT METERMIN 1.0; }
            
    SEPARATOR LINE; }
            
    GROUP {
                
    COLUMNS 3;
                
    BUTTON VONC_PROC3DURALE_MAJ            { }
                
    BOOL VONC_PROC3DURALE_MAJAUTO        { }
                
    BOOL VONC_PROC3DURALE_ANIME            { }
            }
            
    SEPARATOR LINE; }
            
    REAL VONC_PROC3DURALE_LUMI                UNIT PERCENTMIN -100.0MAX 100.0STEP 1.0CUSTOMGUI REALSLIDER; }
            
    BOOL VONC_PROC3DURALE_INV                { }
            
    SEPARATOR LINE; }
            
    BOOL VONC_PROC3DURALE_BORDS                { }
            
    BOOL VONC_PROC3DURALE_BORPHONG            { }
            
    SEPARATOR LINE; }
            
    REAL VONC_PROC3DURALE_LISSAGE            UNIT PERCENTMIN 0.0MAX 100.0STEP 1.0CUSTOMGUI REALSLIDER; }
            
    LONG VONC_PROC3DURALE_LISSITE            MIN 0; }
            
    REAL VONC_PROC3DURALE_BORIG                UNIT PERCENTMIN 0.0MAX 100.0STEP 1.0CUSTOMGUI REALSLIDER; }
            
    SEPARATOR LINE; }
            
    SEPARATOR LINE; }
            
    SHADERLINK VONC_PROC3DURALE_MAT            { }
        }


  2. #2
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Je changerais le nom du fichier res si j'étais toi. Quand tu lances la commande registerObjectPlugin tu lui spécifie le nom du fichier res. (comme tu sais)

    Je sais pas comment il vas réagir quand tu fais un include vonc_proc3durale
    Lequel il vas prendre ? celui de ton programme ou celui de l'interface. (puisque tu as un vonc_proc3durale.cpp et un vonc_proc3durale.h dans ton répertoire source)

    Il y a un façon de nommer tes fichiers dans c4d tu devrais utiliser Ovoncproc3durale.res, .h et .str


    Quand j'ai le même type de soucis c'est que le nom de fichier sur le disque ne corresponds pas à celui que j'ai donné dans le fichier c++ (majuscule/minuscule, orthographe)
    Dernière modification par valkaari ; 27/09/2015 à 19h43.

  3. #3
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Oui en effet, j'ai remplacé par Ovoncproc3durale les fichiers res, h et str.

    Hélas le problème persiste.

    Même le GeLoadString(VONC_PROC3DURALE_NOM) ne semble pas charger le titre dans c4d_strings.str, qui ne dépend pas du nom donné pour les fichiers de description.

  4. #4
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Je supprimerais le c4d_symbol.h de ton projet. Le projet est configuré pour aller chercher dans le répertoire res.

    sinon je vois pas trop mis à part un problème dans l'arborescence du répertoire res


    et t'as même pas un message d'insulte dans la console ?

  5. #5
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    D'accord pour le .h.


    Eh non, rien du tout dans la console. : /


    J'espère que c'est pas lié à la R17. En même temps j'ai pu compiler les exemples du SDK donc il n'y a priori pas de soucis de ce côté là.


    C'est bête d'être bloqué sur ça.

  6. #6
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Sinon envoie moi ton projet. C'est surement un truc tout con à coté duquel t'es passé 50 fois sans le voir. (comme tous les problèmes à la con qu'on rencontre quand on code)


    ceci dit me semble que s'il ne trouve pas le fichier de langue, il met "stringnotfound" ce qu'il ne mets même pas.....
    Dernière modification par valkaari ; 28/09/2015 à 21h01.

  7. #7
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Oui, d'habitude C4D hésite pas à hurler quand quelque chose ne va pas. Là, je suis offensé par son silence méprisant. : p

    Merci pour ton temps sur le problème, voici l'archive. ^^


    PS : Dans le Init, j'ai laissé deux GeOutString qui affichent à l'écran le nom censé être chargé du module.
    Fichiers attachés Fichiers attachés
    Dernière modification par César Vonc ; 28/09/2015 à 22h59.

  8. #8
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    ben voilà la solution était là mais en fait non ^^


    dans ton fichier main.cpp (que je n'avais même pas regardé)


    Code:
    Bool PluginMessage(Int32 id, void *data)
    {
        switch (id)
        {
        case C4DPL_INIT_SYS:
            if (!resource.Init())
                return false;        // don't start plugin without resource
    
    
        }
    
    
      return false;
    }

    Je comprends ça comme le fait de dire à cinema4D d'attendre d'avoir charger les fichiers ressources de tous les plugins. Mais officiellement j'en sais rien ^^

  9. #9
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Alors là je trouve ça fourbe car dans le main.cpp des exemples du SDK, tout en haut est écrit, en commentaire, à quoi ressemble un module vierge, or le PluginMessage renvoie juste false.


    Bon, certes j'aurais dû copier un exemple complet. : p



    En tout cas bravo et merci infiniment Val, ça marche impec, maintenant !

  10. #10
    Pilier Avatar de xs_yann
    Date d'inscription
    février 2005
    C4D version
    R19 Studio
    OS
    Mac OS X 10.13
    Messages
    1 990
    Salut,

    C'est vrai que l'exemple donné dans cinema4dsdk est mauvais.
    En fait quand tu inclus c4d.h, il inclus lui même c4d_resource.h qui déclare une variable globale resource de la classe GeResource :

    Code PHP:
    extern GeResource resource
    https://developers.maxon.net/docs/Ci...source_8h.html

    Il faut initialiser cet object avec Init(const Filename & path, Bool regardIsStopped = true) ou Init().

    Mais le main du SDK n'est pas tout à fait mieux parce qu'il serait plus logique de faire :

    Code PHP:
    Bool PluginStart()
    {
        if (!
    resource.Init())  // don't start plugin without resource
            
    return false;

        if (!
    EnregistreProc3Durale())
            return 
    false;

        return 
    true;
    }

    Bool PluginMessage(Int32 idvoid *data)
    {
        return 
    false;

    Comme indiqué ici :
    https://developers.maxon.net/docs/Ci...a920545afdbbda

    Et si tu utilises PluginMessage, selon la doc le code devrait être :

    Code PHP:
    Bool PluginMessage(Int32 idvoid *data)
    {
        switch (
    id)
        {
        case 
    C4DPL_INIT_SYS:
            
    resource.Init();
            return 
    true;
        }
        return 
    false;

    Puisque la valeur de retour ne sert pas à charger ou non le plugin mais à dire si le message a été utilisé.

  11. #11
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    et soudain une lumière ...


    C'est vrai que si c'est à ce point obligatoire, le mettre dans PluginStart me semble bien plus logique. En plus le commentaire "don't startplugin without ressource" prends tout son sens.

    Mais alors il semblerait qu'ils aient déplacé cette ligne dans Message() ...


    Est ce qu'on devrait pas ouvrir un "problème" sur github ?
    https://github.com/PluginCafe/cinema4d_cpp_sdk
    Dernière modification par valkaari ; 30/09/2015 à 00h43.

Discussions similaires

  1. [Problème] Ref object pas pris en compte par le Plugin transform
    Par Nytoway dans le forum Nouveaux membres
    Réponses: 1
    Dernier message: 22/02/2013, 00h01
  2. client pas pris en compte
    Par geantvert dans le forum Net Server et Client - Team Render
    Réponses: 5
    Dernier message: 29/05/2012, 15h10
  3. Couche Alpha non pris en compte - URGENT
    Par Huv dans le forum Textures
    Réponses: 11
    Dernier message: 06/10/2004, 13h07
  4. 'String Resource not found'...
    Par rybal dans le forum Général Cinema 4D
    Réponses: 1
    Dernier message: 01/04/2004, 17h08
  5. modification string...
    Par Ariel dans le forum Xpresso
    Réponses: 11
    Dernier message: 27/10/2003, 21h47

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •  
Mediaworks - Logiciels 3D | Design Internet - Creation site internet