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

Discussion: Cadre paramétrable - Xpresso comment agir sur une sélection de polygones

  1. #1
    Touriste
    Date d'inscription
    janvier 2013
    C4D version
    R15 Visualize
    OS
    Mac OSX 10.8.2 - Intel i5
    Messages
    5

    Cadre paramétrable - Xpresso comment agir sur une sélection de polygones

    Bonjour à tous,
    un problème pour moi.
    Il s'agit de faire 1 cadre paramétrable en longueur et largeur (sans déformation) piloté par des données utilisateurs (cf fichier joint)
    J'ai imaginé pouvoir piloter ma sélection de polygones, glissée/déposée dans le Gestionnaire Xpresso, en la déplaçant sur l'axe des y par ex.

    Et là surprise. En entrée et sortie de mon noeud je n'ai que 3 possibilités : activé / caractéristiques de base / et objet.
    Quelqu'un peut m'aider sur le sujet (en espérant que je suis sur le bon groupe).
    Merci
    NB: solutions sans mograph SVP (Visualize oblige !)

    Dernière modification par JIMYAR ; 22/10/2014 à 13h11.

  2. #2
    Gourou Avatar de tabou
    Date d'inscription
    juin 2002
    C4D version
    R21 Perpétuelle
    OS
    OS X 10.13.6
    Messages
    2 272
    Pour modifier la géométrie avec Xpresso il faut utiliser le nœud polygone (ou point selon le cas), ce qui peut être laborieux si il y a de nombreux polys à contrôler.
    Pour faire un cadre le plus simple c'est d'utiliser une extrusion contrôlée avec deux splines rectangles dont les dimensions seront pilotées par les DU.

  3. #3
    Touriste
    Date d'inscription
    janvier 2013
    C4D version
    R15 Visualize
    OS
    Mac OSX 10.8.2 - Intel i5
    Messages
    5
    J'ai opté pour la version spline comme suggérée très justement par Tabou, ça fonctionne bien (pourquoi j'y ai pas pensé !)
    Par contre je ne serai pas opposé à une aide sur le noeud polygone dont tu parles (pas trouvé sur le forum pour l'instant). Dans tous les cas merci bien !

  4. #4
    Gourou Avatar de tabou
    Date d'inscription
    juin 2002
    C4D version
    R21 Perpétuelle
    OS
    OS X 10.13.6
    Messages
    2 272
    Le nœud polygone ne permet pas d'agir directement sur celui ci. En fait il est utile pour récupérer l'index des points qui le définissent et les injecter dans des nœuds point qui eux permettent d'agir sur la position, donc pour bouger un quad il faudra utiliser 4 nœuds point.

    Pour connaitre l'index d'un polygone il faut afficher le gestionnaire de structure et le passer en mode polygones (il est en mode point par défaut).
    Le poly sélectionné dans la vue apparait en surbrillance dans le gestionnaire de structure, ce qui permet de repérer facilement le n° d'indice qui est affiché dans la colonne de gauche. Il y a d'ailleurs un menu qui permet d'accéder directement au premier poly sélectionné, pratique quand il y en a des centaines.

    Sinon ce nœud sert aussi à récupérer le nombre de polys composant un objet. Il sort aussi le centre et la normale d'un poly, utiles par exemple pour fixer et orienter un objet à la surface du poly.

  5. #5
    Pilier Avatar de Machaon
    Date d'inscription
    juin 2006
    C4D version
    R9
    OS
    XP
    Messages
    639
    Très bien décrit Tabou les noeuds point et polygone.

    Si tu me le permets je joins un lien sur un p'tit tuto vidéo (court et didactique) décrivant parfaitement ce que tu expliques pour que JIMYAR visualise bien le sujet et comprenne également toute la difficulté de gestion de ces 2 noeuds dans son futur projet.
    https://www.youtube.com/watch?v=DGicx8FXufU

    En bonus pour JIMYAR le lien de la bible d'Xpresso (bible est un bien grand mot mais ce guide présente les prérequis à l'utilisation d'Xpresso). Bible que JIMYAR a peut-être déjà lu !
    http://frenchcinema4d.fr/downloads.php?do=file&id=608

  6. #6
    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,

    La solution de tabou est sans aucun doute la plus simple et la meilleure, mais j’ai quand même essayé de le faire avec des sélections de polygones. Voici ce que ça donne (avec deux noeuds python):



    La sélection du bas :



    Pour modifier l’épaisseur du cadre, le but est de pouvoir faire une mise à l’échelle sur cet axe :



    Afin que les points les plus bas restent à zero et que la mise à l’échelle s’effectue vers le haut.



    ‘bottom’ (en haut à gauche) est le tag de sélection de polygones. Il est relié au noeud python BoundingBox qui calcule la bounding box de la sélection (taille et centre).
    Le centre est déplacé en fonction d’un vecteur (‘axis’), c’est le même fonctionnement que dans l’outil de sélection ou AxisCenter avec :
    -1 = -100%
    0 = 0%
    0.5 = 50%
    1 = 100%

    Ici, il est relié à une constante (0, -1, 0) pour placer l’axe tout en bas de la bounding box en Y, et au milieu en X et en Z.

    Maintenant que l’on a la taille et la position de la sélection, on peut modifier la composante qui nous intéresse.
    Le bas du cadre reste toujours à la même position, on relie donc l’ancienne position à la nouvelle (‘pos’ -> ‘pos’).
    Pour la taille, il faut décomposer le vecteur en 3 réels (Vector2Reals), garder les anciens X et Z et choisir notre taille en Y (la donnée utilisateur “Thickness Y”).

    ‘enable’ est relié à une constante qu’il est conseillé de mettre à False (pour désactiver l’xpresso) lors de modifications dans les connexions. Si, par exemple, le port ‘pos’ ou ‘size’ du noeud ‘TransformSelection’ n’est pas relié, c’est un vecteur (0, 0, 0) par défaut qui est pris en compte, ce qui n’est pas forcément souhaitable.

    Pour la barre de droite :




    Ici on place l’axe tout à droite, soit 100% en X = (1, 0, 0). Pour la position on divise par deux la longueur. Il n’y a pas besoin de soustraire la moitié de l’épaisseur étant donné que l’axe est à 100 % en X.

    Le fichier : http://www.xsyann.com/fc4d/frame_xpresso.c4d.zip

    J’ai ajouté un exemple avec un slider pour contrôler la taille d’une sélection de polygones sur notre ami Fred (avec son nez, restons correct ).





    Avec l’axe en (0, 0, 1).

    En ce qui concerne le python, pour calculer la bounding box :

    Code PHP:
    import c4d

    def getPoints
    (objpolygons):
        
    points dict([(pointobj.GetPoint(point)) for poly in polygons for point in [poly.apoly.bpoly.cpoly.d]])
        return 
    points

    def splitVectors
    (vectors):
        
    xy= [], [], []
        for 
    v in vectors:
            
    x.append(v.x)
            
    y.append(v.y)
            
    z.append(v.z)
        return 
    xyz

    def getBoundingBox
    (objpointsaxis):
        
    xysplitVectors(points.values())
        
    min_posmax_pos c4d.Vector(min(x), min(y), min(z)), c4d.Vector(max(x), max(y), max(z))
        
    possize = (min_pos max_pos) / 2.0max_pos min_pos
        
    return pos + (axis ^ (size 2.0)), size

    def main
    ():
        global 
    possize
        obj 
    selection.GetObject()
        
    bs selection.GetBaseSelect()
        
    selected = [obj.GetPolygon(i) for is in enumerate(bs.GetAll(obj.GetPolygonCount())) if s]
        
    possize getBoundingBox(objgetPoints(objselected), axis


    Pour modifier une sélection de polygones :

    Code PHP:
    import c4d

    DELTA 
    0.01

    def getPoints
    (objpolygons):
        
    points dict([(pointobj.GetPoint(point)) for poly in polygons for point in [poly.apoly.bpoly.cpoly.d]])
        return 
    points

    def splitVectors
    (vectors):
        
    xy= [], [], []
        for 
    v in vectors:
            
    x.append(v.x)
            
    y.append(v.y)
            
    z.append(v.z)
        return 
    xyz

    def mapVector
    (vwfunc):
        return 
    c4d.Vector(func(v.xw.x), func(v.yw.y), func(v.zw.z))

    def getBoundingBox(objpoints):
        
    xysplitVectors(points.values())
        
    min_posmax_pos c4d.Vector(min(x), min(y), min(z)), c4d.Vector(max(x), max(y), max(z))
        return (
    min_pos max_pos) / 2.0max_pos min_pos

    def transformPoints
    (objpointscenteroffsetscale):
        for 
    ipoint in points.iteritems():
            
    obj.SetPoint(i, ((point center) ^ scale) + center offset)

    def transformPolygonSelection(objbspossizeaxis):
        
    selected = [obj.GetPolygon(i) for is in enumerate(bs.GetAll(obj.GetPolygonCount())) if s]
        
    points getPoints(objselected)
        
    centerpoly_size getBoundingBox(objpoints)
        
    center += (axis ^ (poly_size 2.0))
        
    offset pos center
        scale 
    mapVector(sizepoly_sizelambda xymax(xDELTA) / y)
        
    transformPoints(objpointscenteroffsetscale)
        
    obj.Message(c4d.MSG_UPDATE)

    def main():
        if 
    not enable or not selection:
            return
        
    transformPolygonSelection(selection.GetObject(), selection.GetBaseSelect(), possizeaxis

  7. #7
    Dépendant
    Date d'inscription
    octobre 2011
    C4D version
    R15 Studio
    OS
    Win7 64 bits
    Messages
    404
    Haha le killer

  8. #8
    Touriste
    Date d'inscription
    janvier 2013
    C4D version
    R15 Visualize
    OS
    Mac OSX 10.8.2 - Intel i5
    Messages
    5
    Vraiment grands remerciements à tous, effectivement j'ai bien eu en main la "Bible Xpresso" très instructive, mais pour les débutants pas évident de voir les tenants/aboutissants, donc parfait Machaon pour la piste du petit tuto qui est simple et très efficace.

    Pour ce qui est du "killer xs_yann" merci d'avoir planché sur le pb original de la question.
    Si j'ai compris les grandes lignes, il par contre me falloir 1 peu de tps pour tout décortiquer mais c hyper instructif et ça marche bien aussi.

    En fait je me rends compte maintenant que je me suis fixé 1 projet qui me semble difficilement accessible pour le moment :
    il s'agissait de faire une brise soleil (à lamelles orientables) entièrement paramétrable (cf capture)



    Du coup je ne suis peut-être plus sur la bonne discussion (la problématique du cadre ayant été résolue) !!! qu'en disent Mrs les modérateurs ?
    En tout cas mes plus vifs remerciement pour toutes les réponses si pertinentes

  9. #9
    Gourou Avatar de Realzeb
    Date d'inscription
    octobre 2003
    C4D version
    R14 Studio
    OS
    OSX 10.8.4
    Messages
    3 715
    Si ça peut t'aider en quelque chose, j'ai fait un store il y a quelque temps :

    http://frenchcinema4d.fr/showthread....=1#post1036643

    • Mon très vieux site : http://frapatsai.free.fr
    • Mon WIP : Robotiquement vôtre / Roberta : http://frenchcinema4d.fr/showthread....eus-in-Machina
    • Mon WIP : Curiosity on Mars : http://frenchcinema4d.fr/showthread....=1#post1013768

  10. #10
    Gourou Avatar de geantvert
    Date d'inscription
    mai 2007
    C4D version
    R15 Studio
    OS
    OScours
    Messages
    2 319
    Ce genre de question donne envie de tester sois même
    La solution de master xs-yann, et en reprenant l'idée de Tabou, voila ce que j'aurais fait en xpresso.
    J'utilise juste le plugin smart outline pour l’épaisseur.

Discussions similaires

  1. [Problème] Sélection impossible de certains polygones
    Par fredosega dans le forum Nouveaux membres
    Réponses: 8
    Dernier message: 25/10/2014, 19h17
  2. [Problème] Mélange textures sur sélection de polygones...
    Par Phi² dans le forum Textures
    Réponses: 4
    Dernier message: 30/06/2012, 19h52
  3. Vray et la sélection de polygones
    Par walien dans le forum V-Ray
    Réponses: 1
    Dernier message: 13/11/2011, 11h13
  4. Sélection de polygones aléatoires
    Par TicTac dans le forum Modélisation
    Réponses: 4
    Dernier message: 13/08/2006, 11h44
  5. Bug : Sélection de polygones Hair
    Par phanault dans le forum Hair
    Réponses: 14
    Dernier message: 08/01/2006, 18h05

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