PDA

Voir la version complète : Sélectionner les polygones de même orientation



César Vonc
24/04/2012, 00h33
http://code.vonc.fr/details/s19-00.png

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 !

http://code.vonc.fr/details/s19-01.png




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()


Télécharger (http://code.vonc.fr/?a=19)

Fluffy
24/04/2012, 15h53
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?

Seb-bbl
24/04/2012, 18h20
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. ;)

user4D
24/04/2012, 23h01
Merci pour le partage César Vonc :icon_prie:

César Vonc
24/04/2012, 23h12
Ah oui, bonne idée !

J'ai joint une archive contenant le script et son icône.

Teutch
24/04/2012, 23h13
Euh, ben merci ! :icon_eek:

Là, ça tape ! :thumbup1:

catrax
25/04/2012, 09h08
Alors ça c'est un script utiles ! Merci.

Fredaubailly
25/04/2012, 09h52
Mortel !!!!
Bravo et merci pour le partage !

Wonders
25/04/2012, 11h54
Splendide !
Merci pour le script. :icon_prie:

Seb-bbl
25/04/2012, 12h25
Je l'ai ajouté à c4dextensions.info. Les autres vont suivre.
http://c4dextensions.info/index.php/blog/1-plugins/6-freebie-select-polygons-in-the-same-direction

César Vonc
25/04/2012, 14h49
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.

Seb-bbl
25/04/2012, 15h08
Trafic illimité ? Tu t'es fait rouler ! Le site n'a enregistré que 330 visites aujourd'hui ! :icon_mrgreen:

César Vonc
20/05/2012, 14h35
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 !