Jump to content
TChadail

Positionner une fenêtre

Recommended Posts

Hello,

 

Un truc que j'aime bien, c'est de stocker la position dans un fichier .ini, pour qu'elle soit conservée d'une session de 3dsmax à l'autre.

Un exemple tiré d'un de mes outils, à transposer avec tes propres variables:

 

En début de script, je définis des variables:
vRayQC_pos_x = getinisetting "$plugcfg\\\\vRayQC.ini" "vRayQCSettings" "pos_x" as integer
vRayQC_pos_y = getinisetting "$plugcfg\\\\vRayQC.ini" "vRayQCSettings" "pos_y" as integer
 
Quand le floater est créé, il l'est en fonction des positions x et y stocké dans le fichier ini:
 
createDialog Dial_vRayQC 250 300 vRayQC_pos_x vRayQC_pos_y
 
Enfin, quand le floater est fermé, on stocke la position dans le ini:
on Dial_vRayQC close do
(
setinisetting "$plugcfg\\\\vRayQC.ini" "vRayQCSettings" "pos_x" ((GetDialogPos Dial_vRayQC).x  as string)
setinisetting "$plugcfg\\\\vRayQC.ini" "vRayQCSettings" "pos_y" ((GetDialogPos Dial_vRayQC).y  as string)
)

Tu peux aussi fixer "en dur" tes positions x et y, au lieu d'en faire des variables ;)

 

Share this post


Link to post
Share on other sites

Après que Nico m'est demandé de stocker la position de mon autosave, voilà ma méthode:

 

en deux parties (avec un fichier .ini bien sur):

on rollout open do
(
    try(SetDialogPos rollout (execute (getIniSetting <INI Filename> <section_string> "dialogPos"))) catch()
)
on rollout moved pos do 
(
    setIniSetting <INI Filename> <section_string> "dialogPos" (pos as string)
) 

En gros je stock la position a chaque fois que je déplace ma fenetre dans le fichier ini et je la load quand j'ouvre le rollout.

Avantage par rapport à la méthode de Nico c'est que je n'ai pas besoin de variable et le code est plutôt succinct...

 

 

EDIT: J'ai mis à jour le code pour ne pas laisser l'erreur (histoire d'éviter que d'autre fasse la même, sait-on jamais...)

Share this post


Link to post
Share on other sites
Non mais quel "crâneur" !   :-P

 

 

Le tout en filant du code qui va te donner une jolie erreur, c'est beau :D

du coup rectification:

on rollout open do
(
    try(SetDialogPos rollout (execute (getIniSetting <INI Filename> <section_string> "dialogPos"))) catch()
)

juste histoire d'éviter qu'à la première ouverture il balance une erreur puisqu'il n'y a pas encore de position sauvegarder...

Share this post


Link to post
Share on other sites

Hello,

 

J'ai inclus le code de Nico en 1ère ligne de mon .mcr mais ça ne fonctionne pas ... Je lance le script, déplace la fenêtre, ferme le script, relance le script: il réapparait en plein milieu, la position n'a pas été sauvegardée ni loadée :(

Ce que je pige pas c'est le fichier .ini: il pré existe ? Ou il faut d'abord le créer à la main ?

Merci

Share this post


Link to post
Share on other sites
Ce que je pige pas c'est le fichier .ini: il pré existe ? Ou il faut d'abord le créer à la main ?

 

tu te le crée.

 

Petite question je vois que vous utilisez des .ini a tour de bras ^^

(pour stoker les "états" de l'application ou des donner simple je suis daccord sur le fais que ce soit super efficace)

 

Mais quid des données plus complexes? j'ai chercher pour d'autres formats genre xml, yaml ou json et j'ai un peut fais choux blanc ^^'

Mon petit doigt me dit que dotNet est indispensable pour ce genre de chose ....

 

Des infos ?

Share this post


Link to post
Share on other sites

Ah ah ! Ah oui ... facile à dire  :)

Je mets quoi dedans ?

"SetDialogPos Rollout [x,y]" ... ça va marcher ? (peux pas tester max mouline)

 

tu stock t position dans l'ini

[ScriptA]
x=...
y=...

et tu les choppe 

getINISetting "c:/script position" "ScriptA" "x"

regarde le poste de nico ^^

Share this post


Link to post
Share on other sites

De ce que j'en sais oui dans tous les cas si tu veux aller au dela du .ini pour des truc un poil complexe, le xml fonctionne très bien avec maxscript en passant pat dotnet.

De toute façon, dotnet est clairement le présent de 3ds max, que ce soit en maxscript, via c# ou autre... Apparemment même MCG à été dev en C# !

 

J'ai inclus le code de Nico en 1ère ligne de mon .mcr mais ça ne fonctionne pas ... Je lance le script, déplace la fenêtre, ferme le script, relance le script: il réapparait en plein milieu, la position n'a pas été sauvegardée ni loadée  :(

Ce que je pige pas c'est le fichier .ini: il pré existe ? Ou il faut d'abord le créer à la main ?

Merci

 

Intérressant. Normalement si le fichier ini n'exite pas, maxscript le créer pour toi avec "setIniSetting". Si ce n'est pas le cas, c'est très souvent lié à des problèmes de droits d'admin (et la dessus, mxs ne te préviendras pas, ca marche... ou pas XD).

Du coup si ça ne te le créer pas, je te conseille d'utiliser un autre emplacement...

De manière générale, évite "C:\Program Files\Autodesk\3ds Max XXXX\" et préfère "C:\Users\[uSER]\AppData\Local\Autodesk\3dsMax\[XXXX] - [XX]bit\ENU\scripts\" ($userScripts => http://docs.autodesk.com/3DSMAX/15/ENU/MAXScript-Help/index.html?url=files/GUID-705ADA79-8521-448A-A7A3-68117AA8A973.htm,topicNumber=d30e697134) puisque peut importe les droits admin, tout le monde peut accéder à ce dossier (à ma connaissance)

 

Perso, j'utilise un dossier que je créer dans "C:\Users\[uSER]\Documents\3dsMax\" pour stocker mon fichier ini, tout simplement car ce dossier est commun à n'importe quelle version de 3ds max, donc tu conserveras tes préférences dans tous les version de max que tu as sur ton ordi, plutôt pratique :)

Share this post


Link to post
Share on other sites

De ce que j'en sais oui dans tous les cas si tu veux aller au dela du .ini pour des truc un poil complexe, le xml fonctionne très bien avec maxscript en passant pat dotnet.

De toute façon, dotnet est clairement le présent de 3ds max, que ce soit en maxscript, via c# ou autre... Apparemment même MCG à été dev en C# !

 

Yep je viens de trouver ^^, ct pas si compliquer que ça pour xml mais vu que le xml me pique les yeux (comme le mxs :D ) je vais continuer a chercher du coté de JSON.

http://www.newtonsoft.com/json

 

Tout depend de ce que tu veux faire après ?

 

Bah un  exporter en fait donc j'ai besoin de stocker des données.

Share this post


Link to post
Share on other sites

Je posais cette question, car dans pas mal de cas le .ini est utilisé pour l'initialitation ds programmes (windows, php, mysql, ... )

Tout comme le .xml qui est utilisé pour de la bdd et du temporel type edl, aaf. Mais aussi de la données pur et dur (ex : point cache 3dsmax, lié à un fbx ou non.) suite de tables, courbes, LUT, stock de preset UI via AC3 aussi...

 

Bah un  exporter en fait donc j'ai besoin de stocker des données.

 

Exporter, genre (objet, geo, mat) sur threeJS, webGL ? effectivement le json est préférable. Après concernant les conversions tout dépend de ton WF.

Share this post


Link to post
Share on other sites

Je posais cette question, car dans pas mal de cas le .ini est utilisé pour l'initialitation ds programmes (windows, php, mysql, ... )

Tout comme le .xml qui est utilisé pour de la bdd et du temporel type edl, aaf. Mais aussi de la données pur et dur (ex : point cache 3dsmax, lié à un fbx ou non.) suite de tables, courbes, LUT, stock de preset UI via AC3 aussi...

 

Ouai l'ini a part dans max je  m'en sert rarement je préfère passer par du json/yaml histoire de pas avoir de pépin sur d'autre platform. Pareil pour tout ce qui est (sq, nosql) et tout ce que tu as indiqué, yaml/json ^^

J'ai rien contre le xml mais quand je peut l’éviter, je l'évite XD.

 

Exporter, genre (objet, geo, mat) sur threeJS, webGL ? effectivement le json est préférable. Après concernant les conversions tout dépend de ton WF.

 

 

Un truc tout simple et a titre d'exercice, un exporter de camera ^^. j'en ai fait un rapido en python sous max et j'essaye de pondre la mm chose en mxs.

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Who's Online   0 Members, 0 Anonymous, 7 Guests (See full list)

    There are no registered users currently online

×
×
  • Create New...