Magazine | Boutique
Contact | Publicité
Actualités Logiciéls Tutoriéls Galeries Concours Forums WIP Emplois Boutique

 

ramses2028 Work In Progress : alchimiste, Cetras, neibaf63 et 16 utilisateurs inconnus

 Mot :   Pseudo :  
 
Bas de page
Auteur
 Sujet :

update Xref?

 
n°2928
matgap
Posté le 02-09-2008 Ã  18:19:17  profilanswer
 

Bonjour!
Je recherche un moyen de mettre à jour mes Xrefs en Maxscript, mais je ne trouve pas. Même le BlurScript ne fonctionne pas:
 
(
xrefs.updateChangedXRefs
)
 
J'ai essayé plusieurs choses mais ca ne marche pas.
Si vous connaissez un moyen de faire ces mises à jour grace à un seul clic, n'hésitez pas!
Je vous remercie!

(Publicité)
n°2930
Malikarn
Posté le 02-09-2008 Ã  21:04:32  profilanswer
 

salut
bah... pour les objects XRef tu as tout simplement :

Code :
  1. UpdateXRef <$monXref>


Où $monXref est ton xref dans la scene. Le $ est obligatoire hein pour accéder aux noeuds :)
 
Apres tu peux te faire une macro du genre (en pseudo code)
- j'ai une boucle qui parcours tous les noeuds de ma scène
- je fous les noeuds de type classof = XRefObjecs dans un array
- je crées une fonction mappée qui invoque UpdateXRef sur chacun de ces objets
 
Puis tu fous ca dans un bouton en personnalisant l iu de max (tu crees une nouvelles barre d'outil et tu mets ce script dans un bouton sur la barre.
 
+++

n°2937
matgap
Posté le 03-09-2008 Ã  11:06:09  profilanswer
 

Moi pour l'instant j'ai ce code là que j'ai mis à jour avec ta réponse, et ca ne marche pas:
 
XrefBind = getcurrentselection()
XrefCount = xrefs.getXRefFileCount()
 
for i = 1 to XrefCount do  
(
 CurrXRef = xrefs.getXRefFile i
 
 for o in XrefBind do
 (
  if o == CurrXRef.parent do
  (
   UpdateXRef $CurrXRef
  )
 )
)
 
ps: Mes Xrefs sont parentés à des Box dans ma scène. Je sélectionne ces Box et c'est là que je veux les "Updater".
ps2: Ce code marche pour afficher ou masquer mes Xrefs. J'ai juste changé la ligne "UpdateXRef $CurrXRef".


Message édité par matgap le 03-09-2008 Ã  11:10:32
n°2938
matgap
Posté le 03-09-2008 Ã  12:45:39  profilanswer
 

Je viens de trouver! Il ne fallait pas que je mette le "$",
 
XrefBind = getcurrentselection()
XrefCount = xrefs.getXRefFileCount()
 
for i = 1 to XrefCount do  
(
 CurrXRef = xrefs.getXRefFile i
 
 for o in XrefBind do
 (
  if o == CurrXRef.parent do
  (
   UpdateXRef CurrXRef
  )
 )
)  
 
 
Merci beaucoup!

n°2941
Malikarn
Posté le 03-09-2008 Ã  13:14:44  profilanswer
 

re
oula non attention !
Déjà il faut savoir si on parle de File Xref ou de object XRef. Ca se ressemble mais c'est pas tout à fait la même chose. Je pensais que tu parlais d'object XRef et manifestement il s'agit de File XRef. Quoi qu'il en soit il y a une faute dans ton script. Tu ne peux pas écrire :

Code :
  1. UpdateXRef $CurrXRef


car CurrXRef n'est pas un noeud de la scène, c'est une variable déclarée un peu plus haut dans ton script qui contient un pointeur vers un fileXRef. Donc le $ est inutile. Admettons que l'objet Box01 soit un objectXRef, là tu peux écrire

Code :
  1. UpdateXRef $Box01


avec le dollar donc...  
 
Ensuite deuxième chose si tu ne sélectionnes pas d'XRef ce script ne peut pas marcher. Or justement tu ne souhaites pas en sélectionner directement mais plutôt des boites. Il faut donc rajouter une méthode pour décrire cet aspect des choses. Pour cela il faut créer une boucle récurrente qui va collecter la sélection et tous ses enfants dans XRefBind avant de transmettre ce dernier au reste du code :  
 

Code :
  1. XRefBind = GetCurrentSelection()
  2. /*******************************************/
  3. i = 1
  4. While i <= XRefBind.count do
  5. (
  6.         Local Children = XRefBind.Children
  7.         if Children[1] != undefined do (For C in Children do AppendIfUnique XRefBind C)
  8.         i += 1
  9. )
  10. /*******************************************/
  11. XrefCount = xrefs.getXRefFileCount()


 
Donc là c'est très simple, place le code entre les étoiles entre la déclaration de [i]XRefBind et celle de XRefCount. Voici ce que je fais :
Je crée une boucle while qui inspecte chaque noeud contenu dans XRefBind et ajoute a ce même XRefBind tous les enfants de ces noeuds. XRefBind grossit, la boucle while se poursuit jusqu'à avoir épuisé toutes les générations (les enfants des enfants des enfants etc...)
XRefBind ressort de là rempli avec non seulement la sélection mais tous les enfants de la sélection si ils existent évidemment. Je te laisserai t'assurer que le script ne crash pas si la sélection est vide... :/
 
Pour finir note que la méthode "AppendIfUnique" ne fonctionne que sous max 2008/09. Si tu as une version antérieur il faut que tu télécharges et installe les extensions AVG pour maxscript par Borislav Petrov. C'est gratuit.
 
++

n°2942
Malikarn
Posté le 03-09-2008 Ã  13:16:37  profilanswer
 

:) posté trop tard  
oui le $ etait de trop, mais la deuxieme version prend mieux en charge les hiérarchie que le .parent qui se limite aux hiérarchies de 1er degré.
 
+++


Aller à :
Ajouter une réponse
 

WWW.3DVF.COM
| A Propos | Contact | Copyrights | Publicité |
© Copyright 2000-2007 3DVF - Tous droits réservés
Site Meter - tracker