Voir la version complète : python et spline help
salut
encore moi :icon_mrgreen:
je voudrait récupéré les coordonnées d'un point d'une spline paramétrique ( attention un point quelconque de la spline par un point )
avant en coffee il fallait utiliser "Getobjectspline" ( si mes souvenir son bon ) pour "convertir" cette spline paramétrique en spline et ainsi pouvoir récupéré sa longueur ou les coordonnées d'un point situer à 30 % par exemple .
en fouillant je pense que ce se trouve en python dans la partie "C4d.utils.splinelenghdata" mais j'arrive pas a voir comment ca s'utilise :icon_pleure: :icon_pleure:
si une bonne âme passe par ici et m'aider ( j'ai vraiment du mal avec la doc et son utilisation )
un petit exemple me ferrait du bien pour comprendre mais toute aide serra la bienvenue avidement
paspas qui vous remercie
valkaari
16/11/2011, 14h58
J'ai pas vraiment testé mais j'ai pas souvenir d'avoir galéré comme un fou avec le C++
essayes de voir avec
GetSplinePoint(t[, segment=0])
Get the spline point at a position along the given segment.
Parameters:
t (float) – The position 0.0<=t<=1.0 along the segment.
segment (int) – The segment
Return type:
Vector
Returns:
The spline point
Pour la longueur de la spline, faut l'initialiser peut être ?
hello et encore merci
voici ce que me dit la console python
AttributeError: 'c4d.BaseObject' object has no attribute 'GetSplinePoint'
je sais je suis une buse en python :icon_pleure:
paspas
ps je pense que ce code ne marche pas avec les splines paramétriques ( expérience en coffee)
valkaari
16/11/2011, 17h18
après une petite recherche sur le forum plugincafé
http://www.plugincafe.com/forum/forum_posts.asp?TID=5860
Il faut du coup passer par le cache de l'objet on dirait. (j'ai pas tout spécialement compris non plus ^^)
si tu mets une DU sur un python generator ce bout de code permet de changer la position du cube sur la spline qui se trouve en enfant.
(c'est clair comme de l'eau de roche)
import c4d
from c4d.utils import SplineHelp
#Welcome to the world of Python
def main():
cube = c4d.BaseObject(c4d.Ocube)
spline = op.GetDown()
if not spline.CheckType(c4d.Ospline):
globals()["spline"] = spline.GetCache()
shelp = SplineHelp()
shelp.InitSpline(spline)
pos = shelp.GetPosition(op[c4d.ID_USERDATA,1])
cube.SetRelPos(pos)
return cube
edit : le IF est juste là pour vérifier si c'est PAS un objetspline, sinon il prends la spline directement, il faut un autre test (comme sur le lien du forum que j'ai donné) pour vérifier si c'est ni un objet spline, ni une fois le cache récupéré un objet spline. Dans ce cas, faut se barrer vite avant de tout planter ^^
J'avais pas suivi mais si jamais la fonction BaseList2D.GetRealSpline() peut également être ton amie.
Le code de Val revu avec cette fonction(pour un générateur avec n'importe quel type de spline en enfant:
import c4d
from c4d.utils import SplineHelp
#Welcome to the world of Python
def main():
if op.GetDown():
spline = op.GetDown().GetRealSpline()
if spline:
cube = c4d.BaseObject(c4d.Ocube)
shelp = SplineHelp()
shelp.InitSpline(spline)
pos = shelp.GetPosition(op[c4d.ID_USERDATA,1])
cube.SetRelPos(pos)
return cube
merci merci grâce a vous deux je progresse :)
oli - j'ai effectivement utilise cette fonction pour récupéré la position de ma spline (cette méthode était également dans un des lien de valkirie)
(voire application dans le calendrier de l'avent )
merci encore
valkaari
23/11/2011, 00h18
bon faut passer par le spline help
Autant ce code sur un tag python (donc sur une spline ou une primitive spline) fonctionne bien sous R12, autant sour R13 il mets une erreur sur le nombre de segment.
import c4d
from c4d import utils
from c4d.utils import SplineHelp, SplineLengthData
def main():
obj = op.GetObject()
rs = obj.GetRealSpline()
if rs is None:
print 'Not a Spline'
return False
sdata = SplineLengthData()
sdata.Init(rs,0)
pos = rs.GetSplinePoint(0.5,0)
sdata.Free()
print pos
oli en R12
il me donne
AttributeError: 'c4d.SplineObject' object has no attribute 'GetPosition'
paspas
Je viens de tester en r12 mon code fonctionne, cela doit bien être l'objet SplineHelp qui doit appeler la méthode GetPoint() pas le SplineObject
Powered by vBulletin® Version 4.2.1 Copyright © 2024 vBulletin Solutions, Inc. Tous droits réservés