PDA

Voir la version complète : Python : mise à jour de BaseDraw



oli_d
04/01/2014, 11h56
Bonjour et bonne année à tous !

J'ai un problème qui me prend la tête depuis quelques heures, je fais un script qui modifie la définition du rendu en fonction d'une échelle et du cube sélectionné et qui zoome sur ce dernier.

Au rendu cela marche, mais impossible de mettre à jour la vue correctement. J'ai tout essayé (enfin sûrement pas vu que ça marche pô) au rendu tout baigne, mais dans la vue il me garde les anciens paramètre de rendu

Un bout de code pour mieux expliquer (mettre une caméra en vue de haut active pour le rendu avant):



#!/usr/bin/env python
# -*- coding: utf-8 -*-
import c4d
from random import randint


def main():

#modification aléatoire de la définition du rendu
rd = doc.GetActiveRenderData()
res = rd[c4d.RDATA_PIXELRESOLUTION_VIRTUAL]
xres = randint(800,3000)
yres = randint(800,3000)
rd[c4d.RDATA_XRES] = xres
rd[c4d.RDATA_YRES] = yres
rd.Message(c4d.MSG_UPDATE)

# récupération des données de la fenêtre de rendu
bd = doc.GetRenderBaseDraw()
dimension = bd.GetSafeFrame()
left, top, right, bottom = dimension["cl"], dimension["ct"], dimension["cr"], dimension["cb"]
mini = c4d.Vector(left,top,0)
maxi = c4d.Vector(right,bottom,0)

#spline qui devrait représenter la diagonale de la zone à rendre
res = c4d.SplineObject(2,c4d.SPLINETYPE_LINEAR)
pts = [bd.SW(mini),bd.SW(maxi)]
res.SetAllPoints(pts)
res.Message(c4d.MSG_UPDATE)
doc.InsertObject(res)

c4d.EventAdd()

if __name__=='__main__':
main()

Ce code modifie aléatoirement la définition du rendu et devrait insérer une spline qui représente la diagonale de la partie rendu de la fenêtre.

Si vous modifiez manuellement le réglages de rendus largeur ou hauteur et que vous relancez le code sans la partie du haut cela fonctionne, mais dès que l'on modifie le renderData pas de mise à jour de la vue...

J'ai tenté différents trucs dans Message(), c4d.DrawViews(), c4d.EventAdd() mais sans succès.

Est ce que quelqu'un aurait une idée ?

César Vonc
04/01/2014, 12h57
J'avais eu le même problème, sans succès, j'ai juste remarqué que cela venait de la caméra de la vue qui avait les mauvaises proportions, car en rendu, cela semble automatiquement corrigé.

oli_d
04/01/2014, 15h06
Idem chez moi et c'est bizarre parce que la bordure teintée elle se met à jour, mais pas les données de BaseDraw