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

Discussion: [Résolu] SplineObject - modifier le nombre de segments

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

    [Résolu] SplineObject - modifier le nombre de segments

    Bonjour à tous,

    Je suis entrain d'écrire un plug pour pouvoir importer des données depuis des fichiers .shp (fichiers de ArcInfo logiciel de SIG de la maison ESRI).

    Le but de ce plug est de pouvoir créer automatiquement des maquettes 3D de territoire, en générant automatiquement les volumes bâtis et la végétation à la bonne hauteur en se basant sur des modèles numériques de surface et de terrain.

    Je butte sur un tout petit problème pour les bâtiments, j'ai parfois besoin de créer d'après les données du fichier shp des Splines comprenant plusieurs segments.

    En lisant la doc il faut théoriquement procéder de la même manière que l'ajout de points, c'est à dire en utilisant la classe VariableChanged .
    Code:
    main(doc,op)
    {
    	if(!instanceof(op,SplineObject))return;//si l'objet n'est pas une Spline on quitte
    
    	var nbSeg = op->GetSegmentCount();//on récupère le nombre de segments initial
    	var nbPt = op->GetPointCount();
    	var nbSegNew=2;
    
    	var tbl =new(array,nbSegNew); //on crée un tableau de la taille du nombre de segments
    	tbl[0]=2; // dans chaque case on donne le nombre de points par segments
    	tbl[1]=nbPt-tbl[0]; // le total des cases doit correspondre au nombre total de point de la spline
    
    
    	var vc = new(VariableChanged);// on crée une instance de VC
    	if(!vc) return FALSE;
    
    	vc->Init(nbSeg,nbSegNew);//on initialise avec le nbre de nouveaux segments
    
    	var ok = op->MultiMessage(MSG_SEGMENTS_CHANGED,vc);//on envoie le changement à l'objet et aux tags
    
    	ok= op->SetSegments(tbl);//on initialise les segments d'après notre tableau
    
    	op->Message(MSG_UPDATE);
    	
    }
    Ce code ne fonctionne pas, le premier "ok" indique vrai mais pas le second .... :coup:

    Si j'essaie de prendre le même principe pour ajouter des points à la spline, cela fonctionne.

    Est-ce que l'un des rares adeptes du COFFEE du forum (Yann si tu m'écoutes :lol aurait déjà eu ce problème et aurait une solution ?

    D'avance merci

    PS: si cela intéresse quelqu'un j'ai déjà développé un plug qui à l'air de fonctionner et qui permet de générer des modèles de terrain d'après des données ASCII.


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

    Re*: SplineObject - modifier le nombre de segments

    (Yann si tu m'écoutes :lol
    Hein? on m'appelle?

    J'ai testé avec l'exemple du SDK voici ce à quoi j'arrive (avec ça tu peux ajouter des segments à une spline) :
    Code:
    main(doc,op) {
    	var vc = new(VariableChanged);
    	var cnt = op->GetPointCount();
    	var tab = new(array,cnt+3); // pour ajouter 3 points
    	vc->Init(cnt,cnt+3);
    	op->MultiMessage(MSG_POINTS_CHANGED,vc);
    	op->SetSegments(tab);
    }
    A toi de rajouter les tests(iinstanceof et tous ça) :wink:
    Normalement si tu entre les positions de tes points dans tab ça devrait le faire. :wink:

    Bon courage,
    :odile:

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

    Re : SplineObject - modifier le nombre de segments

    Merci Yann,

    Mais pour les points je n'ai aucun problème,c'est vraiment pouvoir faire des splines multisegments, et ton bout de code ne fonctionne apparemment pas. La fonction SetSegments() permet d'affecter les points aux différents segments qui doivent être créer avant (comme pour les points, tu dois d'abord modifier le nombre de points, puis tu peux les positionner)

    Mais en fait je viens de me rendre compte que le principe fonctionne sur une spline où il y a déjà plusieurs segments . C'est apparemment du à un tag invisible(type n° 5675 ???) qui est présent sur les splines multisegments et pas sur les autres. Reste à trouver comment l'appliquer sur ma spline... J'explore maintenant AllocVariableTag(); il y apparemment un "Segment data tag" qui pourrait peut-être faire l'affaire.

    la suite au prochain épisode ...

  4. #4
    Dépendant
    Date d'inscription
    janvier 2003
    C4D version
    R14 Prime
    Messages
    449

    Re*: SplineObject - modifier le nombre de segments

    Il suffit de lui attribuer un tag « SegmentTag » et ton vœux sera exaucé.

    Code:
     var tsegment = AllocTag(Tsegment) ;
     maSpline->InsertTag(tsegment,NULL) ;

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

    Re : SplineObject - modifier le nombre de segments

    Ca marche ! :bounce:

    Merci infiniment Maître Majoul !!! :prie:

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