PDA

Voir la version complète : Répartition de points sur une spline



blackbuzuk
02/11/2016, 00h28
Bonjour tout le monde !
Question de béotien : existe-t-il un moyen simple pour répartir harmonieusement des points le long d'une spline ?
J'ai subdivisé ma spline pour avoir plus de points, mais la répartition ne me convient pas (plus de points proche de ceux existant auparavant, moins entre deux).

César Vonc
02/11/2016, 07h52
Salut,

Avec ta spline originale, fenêtre d'attributs, change l'interpolation en uniforme.

Ensuite, clic droit sur ta spline dans la liste des objets > Convertir en objet.

Aurety
02/11/2016, 12h07
Salut César, j'en profite pour te proposer une idée de plugin/déformateur.. Dans Houdini, on a un node "resampling" qui permet de changer "dynamiquement" le nombre de points, l'écart entre ces points, la façon qu'ils se distribuent sur la courbe.. Ce serait envisageable d'avoir un tag ou un déformateur pour réecrire la courbe de la spline "à la volée".
Dans les faits, on peut trouver un "moyen" de faire ça, avec une mospline et en clonant des neutres sur une spline référence, et on trace le cloneur en mode "connecter les objets" mais c'est galère à mettre en place..

César Vonc
02/11/2016, 15h41
Un peu comme si tu pouvais couper & dissoudre à la volée les points de la spline ?

gr4ph0s
02/11/2016, 18h47
Y'a moyen que tu postes ton setup Aurety?
Après passer par mograph n'est pas la façon la plus optimisé mais la plus simple à mettre en place

[EDIT]
Voila un petit script a mettre dans le script manager.
Et ensuite selectionne ta spline et change le points_need avec le nombre de points que tu veux.
Bon ta pas le côté dynamique bien sur pour le moment.


import c4d


def MakeEditable(op):
op = c4d.utils.SendModelingCommand(
command = c4d.MCOMMAND_MAKEEDITABLE,
list = [op],
mode = c4d.MODELINGCOMMANDMODE_EDGESELECTION,
doc = doc )
return op[0]


def main():
per_segment = True
points_need = 20

spline = doc.GetActiveObject()
if spline is None:
return True

moSpline = c4d.BaseObject(440000054) #On créer une mospline
moSpline[c4d.MGMOSPLINEOBJECT_MODE] = 1 #Spline
moSpline[c4d.MGMOSPLINEOBJECT_SPLINE_MODE] = 2 #generation mdoe = Even
moSpline[c4d.MGMOSPLINEOBJECT_SOURCE_SPLINE] = spline #Source spline

point_count = 0
if per_segment:
seg_count = spline.GetSegmentCount()
if not seg_count:
seg_count = 1
point_count = seg_count * points_need
else:
point_count = points_need

moSpline[c4d.MGMOSPLINEOBJECT_SPLINE_COUNT] = point_count #Count
moSpline.InsertAfter(spline)
c4d.EventAdd()

test = MakeEditable(moSpline)
test.InsertAfter(spline)
c4d.EventAdd()
if __name__=='__main__':
main()