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

Discussion: Sélectionner n poly sur n

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

    Sélectionner n poly sur n



    v 1.0

    Voici un script python sélectionnant les polygones à intervalle régulier à partir d'une sélection continue.



    Code PHP:
    import c4d
    from c4d import gui
    from c4d
    .utils import Neighbor

    # v1.0 -  César Vonc - http://code.vonc.fr

    class Dialogue(gui.GeDialog) :
        
    annuler True
        a 
    1
        b 
    2
        dec 
    0
        
        def CreateLayout
    (self) :
            
    self.GroupBegin(10c4d.BFH_SCALEFIT23)
            
    self.GroupBorderSpace(700700)
            
    self.AddStaticText(20c4d.BFH_SCALEFIT00"Sélectionner :")
            
    self.AddEditNumberArrows(30c4d.BFH_SCALEFIT)
            
    self.AddStaticText(21c4d.BFH_SCALEFIT00"Sur :")
            
    self.AddEditNumberArrows(31c4d.BFH_SCALEFIT)
            
    self.AddStaticText(22c4d.BFH_SCALEFIT00"Décalage :")
            
    self.AddEditNumberArrows(32c4d.BFH_SCALEFIT)
            
    self.GroupEnd()
            
    self.AddDlgGroup(c4d.DLG_OK|c4d.DLG_CANCEL)
            return 
    True
        
        def InitValues
    (self) :
            
    self.SetTitle("Sélectionner n poly sur n")
            
    self.SetLong(3011)
            
    self.SetLong(3121)
            return 
    True
        
        def Command
    (selfidmsg) :
            if 
    id == :
                
    self.annuler False
                self
    .self.GetLong(30)
                
    self.self.GetLong(31)
                
    self.dec self.GetLong(32)
                
    self.Close()
            if 
    id == :
                
    self.Close()
            return 
    True

    def verif
    (plibs) :
        if 
    not bs.IsSelected(p) : return False
        
    if li.IsSelected(p) : return False
        
    return True

    def bi_voisin
    (pplibsn) :
        
    pol op.GetPolygon(pp)
        
    pa None
        pb 
    None
        
        nab 
    n.GetNeighbor(pol.apol.bpp)
        if 
    verif(nablibsis True :
            
    pa nab
        
        nbc 
    n.GetNeighbor(pol.bpol.cpp)
        if 
    verif(nbclibsis True :
            if 
    pa is None pa nbc
            
    else : pb nbc
        
        ncd 
    n.GetNeighbor(pol.cpol.dpp)
        if 
    verif(ncdlibsis True :
            if 
    pa is None pa ncd
            
    else : pb ncd
        
        nda 
    n.GetNeighbor(pol.dpol.app)
        if 
    verif(ndalibsis True :
            if 
    pa is None pa nda
            
    else : pb nda
        
        
    return papb

    def mono_voisin 
    (pplibsn) :
        
    pol op.GetPolygon(pp)
        
        
    nab n.GetNeighbor(pol.apol.bpp)
        if 
    verif(nablibsis True : return nab
        
        nbc 
    n.GetNeighbor(pol.bpol.cpp)
        if 
    verif(nbclibsis True : return nbc
        
        ncd 
    n.GetNeighbor(pol.cpol.dpp)
        if 
    verif(ncdlibsis True : return ncd
        
        nda 
    n.GetNeighbor(pol.dpol.app)
        if 
    verif(ndalibsis True : return nda
        
        
    return None
        
    def selnsn
    () :
        if 
    not op: return
        if 
    op.GetType() != c4d.Opolygon: return
        
        
    bs op.GetPolygonS()
        if 
    bs.GetCount() < : return
        
        
    dial Dialogue()
        
    dial.Open(c4d.DLG_TYPE_MODAL)
        if 
    dial.annuler is True : return
        
        
    nbp op.GetPolygonCount()
        
        
    doc.StartUndo()
        
    doc.AddUndo(c4d.UNDOTYPE_CHANGE_SELECTIONop)
        
    pp 0;
        
    li bs.GetClone()
        
    li.DeselectAll()
        
    ordre = []
        
        for 
    isel in enumerate(bs.GetAll(nbp)):
            if 
    not sel: continue
            
    pp i
            
    break
        
        
    Neighbor()
        
    n.Init(op)
        
        
    papb bi_voisin(pplibsn)
        if 
    pp != None :
            
    li.Select(pp)
            
    ordre.append(pp)
        if 
    pa != None :
            
    li.Select(pa)
            
    ordre.append(pa)
        
        
    po mono_voisin(palibsn)
        while (
    po != None) :
            
    li.Select(po)
            
    ordre.append(po)
            
    po mono_voisin(polibsn)
        
        
        
    ordre2 = []
        if 
    pb != None :
            
    li.Select(pb)
            
    ordre2.append(pb)
            
    po mono_voisin(pblibsn)
        else : 
    po None
        
    while (po != None) :
            
    li.Select(po)
            
    ordre2.append(po)
            
    po mono_voisin(polibsn)
        
        
    ordre.reverse()
        
    ordre.extend(ordre2)
        
        
    0
        jmax 
    len(ordre)
        
    bs.DeselectAll()
        
    dial.a
        b 
    dial.b
        
    if (dial.dial.a) : a
        dec 
    dial.dec b
        
        
    while (jmax) :
            for 
    k in xrange(a) :
                
    dec
                
    if >= jmax : break
                
    bs.Select(ordre[s])
            
    += b
        
        doc
    .EndUndo()
        
    c4d.EventAdd()

    if 
    __name__=='__main__':
        
    selnsn() 
    Lien alternatif
    Fichiers attachés Fichiers attachés
    Dernière modification par César Vonc ; 10/05/2012 à 11h35.

  2. #2
    Gourou Avatar de lenogre
    Date d'inscription
    août 2002
    C4D version
    R20 Studio
    OS
    OS 10.12.6
    Messages
    4 366
    Je suis admiratif de ton travail mais un plug déjà existant fait la même chose : Ça s'appelle SelectLoop, en fait y a 2 fonctions :
    - sélectionner une boucle de façon un peu différente à c4d
    - sélectionner 1 poly sur 2, sur 3 ou encore 2 polys sur 2, etc

    http://www.biomekk.com/index.php?itm=13
    Tout ce que j'écris est à prendre au 15e degré. Car comme dit le proverbe chinois : Quand le dragon d'or, le ragondin ; voilà qui devrait faire taire les critiques et me mettre à l'abri d'attaques frontales.

  3. #3
    Gourou Avatar de César Vonc
    Date d'inscription
    avril 2006
    C4D version
    Autre
    OS
    Windows 10
    Messages
    2 483
    Merci Lenogre.
    Oui, c'est après l'avoir essayé que j'ai voulu faire le mien. SelectLoop ne permet de sélectionner que UN polygone sur n (avec n limité à 10), ce qui m'a un poil déçu.

    Par ailleurs, mon script fonctionne à partir d'une sélection de polygones qui se suivent, donc pas forcément une boucle (image mise à jour).
    Dernière modification par César Vonc ; 10/05/2012 à 12h38.

  4. #4
    Vieux Croûton Avatar de Sir Gong
    Date d'inscription
    juillet 2002
    C4D version
    R19 Studio
    OS
    10.13.4 High Sierra
    Messages
    10 353
    Billets dans le blog
    2
    Merci beaucoup César, je teste dès que je peux.
    ÷ R19 Studio ÷ cacahuètes ÷

  5. #5
    Gourou Avatar de Teutch
    Date d'inscription
    décembre 2008
    C4D version
    R10
    OS
    Vista 32bit
    Messages
    2 651
    César, tu es un chef !
    Cinema 4D R10 de base, sur ordi de base (PC RIP - décembre 2008 - février 2017 ), avec cerveau de base...

  6. #6
    Gourou Avatar de tabou
    Date d'inscription
    juin 2002
    C4D version
    R21 Perpétuelle
    OS
    OS X 10.13.6
    Messages
    2 272
    Génial, je vais pouvoir remplacer SelectLoop que je trouve pas très pratique à utiliser.

    Merci César

Discussions similaires

  1. [Question] Modeling Akira's cell - questions low poly/high poly/hyper nurbs
    Par wil dans le forum Nouveaux membres
    Réponses: 49
    Dernier message: 10/04/2013, 16h18
  2. Tut'Minutes© - Plug de detection de collision poly/poly
    Par GaazMaster dans le forum Xpresso/Programmation
    Réponses: 0
    Dernier message: 29/06/2006, 01h50
  3. selectionner les poly par une couleur d'éclairage
    Par Chipster3D dans le forum Nouveaux membres
    Réponses: 9
    Dernier message: 20/01/2006, 18h44
  4. Sélectionner un segment
    Par smateo dans le forum Général Cinema 4D
    Réponses: 16
    Dernier message: 26/08/2004, 17h38
  5. plug de detection de collision poly/poly
    Par tarlack dans le forum Plugins
    Réponses: 6
    Dernier message: 03/06/2004, 14h55

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