TChadail 797 Report post Posté(e) November 13, 2015 Bonjour à tous, J'aimerais savoir quel code ajouter pour que la fenêtre de mon script se place à un endroit précis de mon écran plutôt qu'en plein milieu de celui ci ? Merci ! Citer Share this post Link to post Share on other sites
Nicolas Caplat 2,757 Report post Posté(e) November 13, 2015 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 1 Sphonx reacted to this Citer Share this post Link to post Share on other sites
SugaR 635 Report post Posté(e) November 13, 2015 Si jamais tu veux aussi repositionner ta fenêtre à un autre moment que lors de la creation: SetDialogPos Rollout [x,y] 1 Nicolas Caplat reacted to this Citer Share this post Link to post Share on other sites
TChadail 797 Report post Posté(e) November 15, 2015 Merci les gars, je vais tester ça. Bizarre je n'ai pas été notifié de vos réponses. Citer Share this post Link to post Share on other sites
SugaR 635 Report post Posté(e) November 26, 2015 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...) 2 Nicolas Caplat et TChadail reacted to this Citer Share this post Link to post Share on other sites
Nicolas Caplat 2,757 Report post Posté(e) November 26, 2015 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... Non mais quel "crâneur" ! Citer Share this post Link to post Share on other sites
SugaR 635 Report post Posté(e) November 26, 2015 Non mais quel "crâneur" ! Le tout en filant du code qui va te donner une jolie erreur, c'est beau 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... 1 TChadail reacted to this Citer Share this post Link to post Share on other sites
TChadail 797 Report post Posté(e) December 11, 2015 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 Citer Share this post Link to post Share on other sites
popol 517 Report post Posté(e) December 11, 2015 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 ? Citer Share this post Link to post Share on other sites
TChadail 797 Report post Posté(e) December 11, 2015 tu te le crée. Ah ah ! Ah oui ... facile à dire Je mets quoi dedans ? "SetDialogPos Rollout [x,y]" ... ça va marcher ? (peux pas tester max mouline) Citer Share this post Link to post Share on other sites
popol 517 Report post Posté(e) December 11, 2015 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 ^^ Citer Share this post Link to post Share on other sites
TChadail 797 Report post Posté(e) December 11, 2015 Ok merci popol: j'essaierai de faire comme tu dis. Citer Share this post Link to post Share on other sites
Miaz3 512 Report post Posté(e) December 11, 2015 'Mon petit doigt me dit que dotNet est indispensable pour ce genre de chose .... Tout depend de ce que tu veux faire après ? Citer Share this post Link to post Share on other sites
SugaR 635 Report post Posté(e) December 11, 2015 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 1 TChadail reacted to this Citer Share this post Link to post Share on other sites
popol 517 Report post Posté(e) December 12, 2015 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 ) 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. Citer Share this post Link to post Share on other sites
Miaz3 512 Report post Posté(e) December 12, 2015 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. Citer Share this post Link to post Share on other sites
popol 517 Report post Posté(e) December 12, 2015 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. Citer Share this post Link to post Share on other sites
TChadail 797 Report post Posté(e) December 12, 2015 Mais mais ... mais qu'est ce qu'ils racontent ?! Lol, merci les gars, je vais voir si ça résoud mon problème Citer Share this post Link to post Share on other sites