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

Discussion: commencer un projet de programmation sous C4D en lien avec une base de données

  1. #1
    Touriste
    Date d'inscription
    août 2011
    C4D version
    R12 Studio
    OS
    macosx
    Messages
    2

    commencer un projet de programmation sous C4D en lien avec une base de données

    Bonjour à tous et à toutes, je suis nouveau dans ce forum et novice en C4D. Je découvre ce site et je vous félicite pour la qualité des infos que l'on peut y trouver. Je travaille dans le domaine du paysage et je souhaite utiliser C4D dans cet objectif.

    Je cherche à réaliser un import d'objets (points) provenant d'une base de données et les remplacer par des objets 3D (arbres) sous C4D. Dans cette base de données figure les coordonnées XYZ de chacun des points. Un ami avec qui je travaille sur ce projet est programmeur dans un tout autre domaine que le graphisme; il me propose de réaliser çà en (C++, objective-C), cependant il aurait besoin des API de C4D pour pouvoir l'interfacer.

    Savez vous si l'on peut se procurer ces API et pensez vous que c'est une démarche qui peut aboutir? ou faut-il se tourner vers le SDK et réaliser des plugins ou autres avec un autre langage de programmation (python) ? .

    j'espère avoir été clair et ne pas avoir fait trop d'erreurs dans les termes employés.

    merci de vos réponses

  2. #2
    Gourou Avatar de valkaari
    Date d'inscription
    mai 2009
    C4D version
    Autre
    OS
    OSX / windows
    Messages
    2 949
    Bonjour,

    Pour ce qui est de la programmation, les seuls trucs dispo sont LA
    Pour les questions de ce type tu as aussi ce forum

    Donc il faudrait utiliser le SDK et faire un plugin. Mais attention, il y a beaucoup de type de plugins. Tu peux très bien créer un plugins d'import de type de fichier personnaliser qui seront en fait une extraction de ta base de données.
    Ou alors effectivement, directement communiquer avec la base. Dans ce cas, tu peux faire un plugin de type "Command" qui te permettra d'avoir une fenêtre pour choisir tes paramètres pour chercher dans la base et générer tes arbres.

    Le plugin command peut aussi générer des plugins de type "object" qui pourrait te permettre de modifier le type d'arbre, le nombre, une probabilité d'existence ou pas.

    Bref il y a plusieurs possibilités.

    Le seul problème dans c4d c'est la création d'interface perso. Si tu veux créer tes propres éléments, ça devient vite très pénible quand c'est pas tout simplement impossible. (mais les possibilités restent nombreuses hein)


    Bref, il faudrait déjà que tu précises un tout petit peu comment tu imagines l'utilisation de ton outils pour qu'on puisse t'aiguiller sur les bons terme.

    voili voilà


    edit :
    tu peux utiliser python ou c++ uniquement.

  3. #3
    Touriste
    Date d'inscription
    août 2011
    C4D version
    R12 Studio
    OS
    macosx
    Messages
    2
    Bonjour valkaari et merci pour ta réponse:
    Voilà quelques précisions:

    L’idée à terme est bien de pouvoir communiquer avec la base de données. Cette base de données étant mise à jour régulièrement par des inventaires de terrain.
    L’objectif du plug, est de permettre l’import des points dans C4D et de les transformer en objets (instances?) La représentation de l'object se baserait sur un champ (ou plusieurs) définit dans la BD. ex essence d'arbre (érable, frêne, tilleul etc) et de lui appliquer une symobologie prédéfinie (objet 3d Tilleul,erable etc...) dans une bibliothèque que je suis en train de construire. Dans un second temps, la taille de l’arbre 3D se baserait également sur la taille de l’arbre réel (éléments définit également dans la BD).
    Faire du code pour lire et interpréter la BD ne semble pas être un gros problème, la partie que nous ne maîtrisons pas encore concerne la création des objets (instances) dans C4D et le lien avec une bibliothèque prédéfinie.
    Si tu connais des exemples de plug-in qui ressemble de près ou de loin à ça, je suis preneur! Sinon je vais commencer à éplucher les liens que tu m’as transmis et je ne manquerai pas de vous tenir informé de l'avancée de mes travaux.

  4. #4
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    Salut romain,

    je travaille également dans le domaine du paysage et je développe ce type d'outils.

    Je pense que même un "simple" script python pourrait faire amplement l'affaire. Si tu m'envoie par MP un exemple de ta base de données en format texte je peux te donner un exemple de code source qui pourra faire gagner du temps à ton collègue.

    Si il veux vraiment se lancer dans le SDK en c++ il faut charger la doc chez Maxon, ce qui vaut également pour le python (http://www.maxon.net/fr/support/plugin-cafe.html) Ensuite il y a deux trois posts sous la rubrique programmation du forum où il y a des exemples.

    Pour info je développe actuellement ce type de chose mais en lisant directement des formats de fichier de sig (systèmes d'information géographique) qui permettent justement de lier des données géométriques (spatiale) à des données alpha-numériques.

  5. #5
    Pilier Avatar de oli_d
    Date d'inscription
    avril 2004
    C4D version
    Autre
    OS
    MacOS X
    Messages
    707
    ci-dessous un exemple de script python testé uniquement sur mac et sur la R13 de c4d (edit: fonctionne sur r12 mac également)

    Le code est à coller dans le gestionnaire de script du menu script (r13, pour r12 menu python) puis exécuter, et choisir le fichier .txt.
    Il génère un objet neutre contenant les instances, et un autre dans lequel il n'y a plus qu'à glisser un arbre source (il faut qu'il fasse 10m de haut pour que l'échelle des instance soit bonne).
    Les données sont stockées sous forme de données utilisateur pour chaque instance (attention tout est en format texte, les nombres ne sont pas utilisables tel quel, c'est juste pour l'exemple)

    Si questions -> 3615 code oli_d

    Code PHP:
    import c4d
    from c4d import gui

    """script pour l'import de donnees depuis un fichier texte avec separations tabulateurs
    teste sur mac avec un fichier type :
    ObjectID    NOM_BOTA    NOMVOIE    HAUTEUR    coord_x    coord_y
    27966    Acer negundo     ALL GRANDE     6    884102.479    119124.068
    27967    Acer negundo     ALL GRANDE     9    884202.579    119224.068
    """

    ORIGINE c4d.Vector(884000,0,119000)

    #constantes pour la position des differents champs
    #attention le premier champ = 0

    CHAMP_NOM =1

    CHAMP_POS_X 
    4
    CHAMP_POS_Y 
    5

    CHAMP_HAUTEUR 
    3


    def lire_fichier
    (chemin):
        
    f=open(chemin,"r")
        
        
    #recuperation de la ligne des noms des champs
        
    test f.readline()
        
    noms test.split('\t')

        
    #creation de l'objet neutre contenant les instances
        
    res c4d.BaseObject(c4d.Onull)
        
    res.SetName('instances')
        
    line f.readline()
        
        
    #creation d'un objet neutre pour la source des instances
        
    srce c4d.BaseObject(c4d.Onull)
        
    srce.SetName('source')
        
        
    #lecture de toutes les lignes
        
    while line:
            
    lst line.split('\t')
            
    #pour chaque ligne on cree un objet instance
            
    objc4d.BaseObject(c4d.Oinstance)
            
            
    #exemple pour assigner chaque valeur sous forme de donnee utilisateur
            
    for i,v in enumerate(lst):
                
    bc c4d.GetCustomDatatypeDefault(c4d.DTYPE_STRING#create default container
                
    bc[c4d.DESC_NAME] = noms[i]                    #rename the entry
                
    element obj.AddUserData(bc)     #add userdata container
                
    obj[element] = v                         #assign a value

            #exemple pour renommenr chaque instance par le nom de l'arbre    
            
    obj.SetName(lst[CHAMP_NOM])

            
    #exemple pour positionner l'instance
            
    pos c4d.Vector(0)
            
    pos.float(lst[CHAMP_POS_X])
            
    pos.float(lst[CHAMP_POS_Y]) #attention dans c4d la hauteur est en Y
            
    obj.SetAbsPos(pos ORIGINE#vaut mieux centrer les objet dans la scene
                                         #en coordonnees normales c'est un peu dur a gerer dans C4D
            
            #exemple pour regler l'echelle en partant du principe que l'arbre source fait 10 m de haut
            
    scale c4d.Vector(float(lst[CHAMP_HAUTEUR])/10)
            
    obj.SetAbsScale(scale)
            
            
            
    #definition de l'objet source de l'instance 
            #[c4d.INSTANCEOBJECT_LINK] est obtenu en faisant glisser le champ de l'objet en question dans l'editeur de script
            
    obj[c4d.INSTANCEOBJECT_LINK] = srce
                
            
    #insertion de l'instance dans notre objet neutre principal
            
    obj.InsertUnder(res)
            
            
    line f.readline()
        
        
    f.close()
        
        
    #insertion des deux objets neutres dans le document
        
    doc.InsertObject(srce)    
        
    doc.InsertObject(res)

        
    c4d.EventAdd()

        
    if 
    __name__=='__main__':
        
    chemin c4d.storage.LoadDialog()
        
    lire_fichier(chemin)
        
    #fonction pour rafraichir l'affichage
        
    c4d.EventAdd() 
    Dernière modification par oli_d ; 09/11/2011 à 05h57.

Discussions similaires

  1. Quand s'arrêter avec Allplan et commencer avec C4D
    Par lorenzo lux dans le forum Nouveaux membres
    Réponses: 1
    Dernier message: 24/08/2005, 20h04
  2. Base de données motion capture
    Par NumZ dans le forum Animation
    Réponses: 5
    Dernier message: 21/09/2004, 11h14
  3. lien direct avec photoshop
    Par atypik dans le forum Compatibilité
    Réponses: 1
    Dernier message: 20/09/2003, 13h58
  4. dynamics et lien avec la timeline!
    Par sven dans le forum Animation
    Réponses: 2
    Dernier message: 19/03/2003, 10h25

Les tags pour cette discussion

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