PDA

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



César Vonc
23/04/2012, 23h33
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, 14h53
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, 17h20
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, 22h01
Merci pour le partage César Vonc :icon_prie:

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

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

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

Là, ça tape ! :thumbup1:

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

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

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

Seb-bbl
25/04/2012, 11h25
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, 13h49
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, 14h08
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, 13h35
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 !