v1.1
Voici un script Python sélectionnant tous les polygones ayant la même orientation que le polygone sélectionné.
Avec une valeur de tolérance pour une utilisation plus souple !
TéléchargerCode PHP:
import c4d
import math
from c4d import gui, Vector
from c4d.utils import GetAngle
from math import isnan
# César Vonc - v 1.1
class Dialogue(gui.GeDialog) :
annuler = True
tolerance = 0
def CreateLayout(self) :
self.GroupBegin(10, c4d.BFH_SCALEFIT, 1, 2)
self.AddEditNumberArrows(11, c4d.BFH_SCALEFIT)
self.AddButton(12, c4d.BFH_SCALEFIT, initw = 100, inith = 20, name = "Valider")
self.GroupEnd()
return True
def InitValues(self) :
self.SetTitle("Tolérance")
self.SetDegree(11, 0)
return True
def Command(self, id, msg) :
if id == 12 :
self.annuler = False
self.tolerance = self.GetReal(11)
self.Close()
return True
def recup_norm(index) :
poly = op.GetPolygon(index)
pA = op.GetPoint(poly.a)
pB = op.GetPoint(poly.b)
pC = op.GetPoint(poly.c)
pD = op.GetPoint(poly.d)
normale = (pA - pC).Cross(pB - pD)
normale.Normalize()
return normale
def verif(va, vb, tol) :
angle = GetAngle(va, vb)
if isnan(angle) : return True
if tol >= angle : return True
else : return False
def main() :
if not op : return
if op.GetType() != c4d.Opolygon : return
bs = op.GetPolygonS()
nbsel = bs.GetCount()
if nbsel == 0 : return
dial = Dialogue()
dial.Open(c4d.DLG_TYPE_MODAL)
if dial.annuler is True : return
nbpol = op.GetPolygonCount()
normale_ref = Vector(0, 0, 0)
doc.StartUndo()
doc.AddUndo(c4d.UNDOTYPE_CHANGE_SELECTION, op)
for index, selec in enumerate(bs.GetAll(nbpol)) :
if not selec: continue
normale = recup_norm(index)
normale_ref += normale
normale_ref.Normalize()
tolerance = dial.tolerance
for i in xrange(nbpol) :
normale = recup_norm(i)
if verif(normale_ref, normale, tolerance) is True :
bs.Select(i)
doc.EndUndo()
c4d.EventAdd()
if __name__=='__main__':
main()
Dernière modification par César Vonc ; 20/05/2012 à 13h28. Motif: Mise à jour v1.1
Ouh, fichtrement utile, ça.
Un grand merci!!!
Avec tous ces scripts que vous nous pondez depuis un moment, je me demande si on ne devrait pas les référencer correctement dans les ressources du site?
Fluffy mais costaud...www.fluffy4d.com
Oui, d'une part. D'autre part, je vais les référencer aussi sur c4dextensions, commence à y avoir un joli vivier ici !
Par contre, je pense qu'il serait pas mal de générer les fichiers .py et icône, tout le monde ne sait pas comment utiliser un script d'après des lignes de codes.
Ah oui, bonne idée !
J'ai joint une archive contenant le script et son icône.
Euh, ben merci !
Là, ça tape !
Cinema 4D R10 de base,sur ordi de base(PC RIP - décembre 2008 - février 2017 ), avec cerveau de base...
Alors ça c'est un script utiles ! Merci.
C'est en pratiquant que l'on apprend...
Mortel !!!!
Bravo et merci pour le partage !
Splendide !
Merci pour le script.
Je l'ai ajouté à c4dextensions.info. Les autres vont suivre.
http://c4dextensions.info/index.php/...same-direction
Aïe, le nombre de visite a explosé et mon site, hébergé chez OVH, a carrément planté... « trafic illimité » qu'ils m'ont dit, tu parles !
Édition : ça a l'air d'aller mieux, cliquez avec douceur. ^^
Re-Édition : Ah ben non. Le serveur semble instable, je vais aller gueuler un coup.
Dernière modification par César Vonc ; 25/04/2012 à 14h09.
Trafic illimité ? Tu t'es fait rouler ! Le site n'a enregistré que 330 visites aujourd'hui !
Tiens, j'ignore ce qu'il se passe sur c4dextensions.info mais tout a l'air d'avoir changé, je ne retrouve plus ce que tu avais ajouté, Seb.
Petite correction du script (v1.1) : la fonction GetAngle() me renvoyait parfois NaN quand elle comparait deux vecteurs quasi identiques... étrange.
En tout cas, je recommande vivement cette mise à jour !