zebulon_ Posté(e) le 12 janvier 2010 Posté(e) le 12 janvier 2010 Bonjour, La question de l'affichage des types de lignes selon qu'on est en objet ou en présentation revient très souvent.Aussi, la réponse donnée le plus souvent est de changer la variable PSLTSCALE à la valeur 0, afin d'avoir des affichages qui ne tiennent pas compte des échelles des fenêtres FMULT. Personnellement, cette réponse ne me satisfait pas, parce que je fais fréquemment des fenêtres à des échelles très différentes sur le même plan (une au 1:10ème, l'autre au 1:200ème par exemple) et je souhaite que les tirets aient le même aspect sur toutes les fenêtres quelle que soit l'échelle de la fenêtre. Mon PSLTSCALE est donc toujours à 1 pour cette raison. Mon problème est, lorsque PSLTSCALE est à 1, qu'il est très difficile d'avoir un ECHLTP (LTSCALE) qui permet d'avoir quelque chose d'exploitable à la fois en espace papier et en espace objet. Afin d'y voir clair, je suis toujours obligé de changer la valeur de l'ECHLTP selon que je sois en espace papier ou en espace objet. Et ça me fatigue de changer et je voudrais que ça se fasse tout seul. Il y a très longtemps, lorsque Autocad n'avait encore qu'un seul espace papier, j'avais fais un simple bouton qui servait à changer d'espace et qui changeait à la fois la variable TILEMODE et la variable LTSCALE. Maintenant qu'il y a plusieurs espaces papiers, ce n'est évidemment plus suffisant. J'ai pensé que les réacteurs seraient un bon moyen pour me permettre d'avoir un ECHLTP différent selon l'espace de travail. ;;; Lisp à charger uniquement ... ne pas exécuter !!! (vl-load-com) (vlr-command-reactor "change layout" '((:vlr-commandEnded . EndChangeLayout))) (defun EndChangeLayout (calling-reactor endcommandInfo / thecommandend) (setq thecommandend (nth 0 endcommandInfo)) (if (= thecommandend "LAYOUT_CONTROL") (if (zerop (getvar "TILEMODE")) (setvar "LTSCALE" 5) ;; espace papier (setvar "LTSCALE" 0.5) ;; espace objet ) ) ) AmicalementVincent [Edité le 12/1/2010 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
ghostcao Posté(e) le 12 janvier 2010 Posté(e) le 12 janvier 2010 Merciiiii infiniment pour ce lisp !!!:)
lili2006 Posté(e) le 12 janvier 2010 Posté(e) le 12 janvier 2010 Bonsoir à toutes et tous, zebulon_, Comment fonctionne ton code exactement , Je veux dire, sur quel(s) paramètre(s) agit-il ? Peut-on alors le charger en toute quiétude sur le "acad.lsp" ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
zebulon_ Posté(e) le 13 janvier 2010 Auteur Posté(e) le 13 janvier 2010 Bonjour, Merciiiii infiniment pour ce lisp !!! Je commençais à m'inquiéter. Je me suis dit : "je suis le seul à travailler comme ça : c'est donc que c'est une mauvaise manière". C'est rare d'être seul à avoir raison. Je veux dire, sur quel(s) paramètre(s) agit-il ? Il s'agit d'un réacteur qui réagit à la commande "LAYOUT_CONTROL" qui s'exécute lorsqu'on clique sur les onglets "Objet", "Présentation1", "Présentation2" etc... et qu'on souhaite passer de l'espace objet à l'espace papier, ou d'un présentation à une autre. Personnellement, mon PSLTSCALE est toujours à 1 pour les raisons évoquées plus haut. Je ne fais varier que la variable LTSCALE (qui correspond à ECHLTP) suivant qu'on est en espace objet ou en espace papier. Et je ne fais surtout pas varier les échelles de type de ligne de chaque objet (cette propriété est toujours à 1 pour tous les objets dans mes fichiers), comme je vois souvent. Les valeurs que j'applique (5 en espace papier et 0.5 en espace objet) fonctionne bien chez moi, mais dépendent de beaucoup de paramètres (unités de travail, fichier AutoCAD.lin ou acadiso.lin, echelle moyenne utilisée etc) et sont obtenues de façon assez empirique. Peut-on alors le charger en toute quiétude sur le "acad.lsp" ?Personnellement, je mets ces lisp dans "Charger/Décharger les applications" / "Au démarrage". Tu vois, la petite valise en bas à droite de la boite de dialogue ? AmicalementVincent PS : en passant, je trouve que ce serait pas mal d'avoir un LTSCALE pour l'espace papier et un autre pour l'espace objet. Genre LTSCALEM et LTSCALEP. C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
lili2006 Posté(e) le 13 janvier 2010 Posté(e) le 13 janvier 2010 Bonsoir à toutes et tous, Merci de ce complément d'infos zebulon_, il ne me reste plus qu'à tester car je pense que l'on est nombreux à avoir ce "soucis" ( Je commençais à m'inquiéter. Je me suis dit : "je suis le seul à travailler comme ça : c'est donc que c'est une mauvaise manière". ) C'est rare d'être seul à avoir raison. Tu n'as pas tord, ;) Les valeurs que j'applique (5 en espace papier et 0.5 en espace objet) bien sur, modifiable dans le lisp en fonction des besoins,... A tester ! LTSCALEM et LTSCALEP. C'est à dire ? Merci encore, Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
zebulon_ Posté(e) le 14 janvier 2010 Auteur Posté(e) le 14 janvier 2010 Bonjour,C'est à dire ? Je me demandais s'il était possible pour Autodesk de prévoir 2 variables LTSCALE pour ses versions futures, l'une agissant sur l'espace papier, l'autre sur l'espace objet. Ce qui éviterait de devoir "bricoler" comme je le fais. AmicalementVincent [Edité le 14/1/2010 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
lili2006 Posté(e) le 14 janvier 2010 Posté(e) le 14 janvier 2010 Bonjour à toutes et tous, Ah oK ! LTSCALEspaceModèleet LTSCALEspacePapier. Je n'avais pas compris,... Merci pour ce complément d'information zebulon_,... (J'ai pas encore eu le tps de tester chez moi,..) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 14 janvier 2010 Posté(e) le 14 janvier 2010 Salut, Je trouve l'idée très intéressante.Il est assez facile de définir des espèces de variables système en LISP en enregistrant des valeurs dans la base de registre ou dans un dictionnaire (pour un enregistrement dans le dessin).Et de définir des commandes pour pouvoir modifier les valeurs de ces variables. Je fait donc une proposition "d'amélioration" : définition de deux "variables" LTSCALEM et LTSCALEP utilisée par un réacteur (j'utilise vlr-miscellaneous-reactor plutôt que vlr-command-reactor).Les "variables" sont initialisées à 5 et 0.5 par défaut. (vl-load-com) ;; Initalisation des valeurs pour LTSCALEM et LTSCALEP ;; si elle ne sont pas encore définies (or (vlax-ldata-get "Z_LTSCALE" "ltscalem") (vlax-ldata-put "Z_LTSCALE" "ltscalem" 0.5) ) (or (vlax-ldata-get "Z_LTSCALE" "ltscalep") (vlax-ldata-put "Z_LTSCALE" "ltscalep" 5) ) ;; Mise à jour de LTSCALE au chargement (setvar 'ltscale (if (= (getvar 'cvport) 1) (vlax-ldata-get "Z_LTSCALE" "ltscalep") (vlax-ldata-get "Z_LTSCALE" "ltscalem") ) ) ;; Définition du réacteur (vlr-miscellaneous-reactor nil '((:vlr-layoutSwitched . ltscaleCallback)) ) ;; fonction de rétro appel (defun ltscaleCallback (rea lst) (setvar 'ltscale (if (= (car lst) "Model") (vlax-ldata-get "Z_LTSCALE" "ltscalem") (vlax-ldata-get "Z_LTSCALE" "ltscalep") ) ) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acAllViewports) ) ;; Modification de la "variable" LTSCALEM (defun c:LTSCALEM (/ scl) (initget 6) (if (setq scl (getreal (strcat "\nEntrez une nouvelle valeur pour LTSCALEM (rtos (vlax-ldata-get "Z_LTSCALE" "ltscalem") 2 4) ">: " ) ) ) (progn (vlax-ldata-put "Z_LTSCALE" "ltscalem" scl) (if (/= 1 (getvar 'cvport)) (progn (setvar 'ltscale scl) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport ) ) ) ) ) (princ) ) ;; Modification de la "variable" LTSCALEP (defun c:LTSCALEP (/ scl) (initget 6) (if (setq scl (getreal (strcat "\nEntrez une nouvelle valeur pour LTSCALEP (rtos (vlax-ldata-get "Z_LTSCALE" "ltscalep") 2 4) ">: " ) ) ) (progn (vlax-ldata-put "Z_LTSCALE" "ltscalep" scl) (if (= 1 (getvar 'cvport)) (progn (setvar 'ltscale scl) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acAllViewports ) ) ) ) ) (princ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 14 janvier 2010 Auteur Posté(e) le 14 janvier 2010 Je trouve l'idée très intéressante.Cela me rassure définitivement ;) Je fait donc une proposition "d'amélioration"Magnifique. J'avais pensé à la même chose mais en faisant de simples (setq LTSCALEM 5) et (setq LTSCALEP 0.5), ce qui en aurait fait des variables non enregistrées. Mais c'est mieux de les sauvegarder avec vlax-ldata, de manière à ce que cela deviennent des variables enregistrées dans le dessin (par ailleurs, je préfère que les variables soient enregistrées dans le fichier plutôt que dans le registre). Et en prime, on a 2 commandes supplémentaires pour les modifier. Le choix du réacteur vlr-miscellaneous-reactor est, sans aucun doute, plus judicieux puisqu'il réagit à l'action "changer de présentation", quelle que soit la manière (en changeant la valeur de la variable TILEMODE par exemple). vlr-command-reactor ne réagit qu'à la commande LAYOUT_CONTROL. Si la communauté adopte cette façon de procéder, peut-être qu'un jour on trouvera ces variables dans autocad ? Merci pour cette contributionAmicalementVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 14 janvier 2010 Posté(e) le 14 janvier 2010 J'ai modifié le code pour ajouter des mises à jour automatiques en cas de changement de la valeur d'une variable. Une régénération semble inévitable pour afficher cette mise à jour. lili2006, Peut-on alors le charger en toute quiétude sur le "acad.lsp" ? À moins d'avoir mi la variable ACADLISPASDOC à 1, le fichier AutoCAD.lsp n'est chargé qu'un fois par session au démarrage d'AutoCAD.Il vaut donc mieux mettre la routine dans un fichier acadoc.lsp ou un fichier MNL du même nom que le fichier CUI principal pour que la routine soit chargée dans chaque document. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 14 janvier 2010 Auteur Posté(e) le 14 janvier 2010 Une régénération semble inévitable pour afficher cette mise à jour. Oui, d'ailleurs lorsqu'on utilise la commande ECHLTP, elle provoque une régénération. Alors que, si on change la variable LTSCALE, il n'y a pas de régénération. AmicalementVincent [Edité le 14/1/2010 par zebulon_] C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
lili2006 Posté(e) le 14 janvier 2010 Posté(e) le 14 janvier 2010 Re, J'ai bien pris note de tes commentaires gilles, Je testerai tout ça ce WE je pense,... Merci à tous deux, :D Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
zebulon_ Posté(e) le 19 janvier 2010 Auteur Posté(e) le 19 janvier 2010 Bonjour, au sujet des regen :(vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acActiveViewport)ne fait un regen que de l'espace papier et pas des fenêtres de l'espace papier. Ne faudrait-il pas remplacer acActiveViewport par acAllViewports dans la fonction ltscaleCallback ? Par ailleurs, il y a une inversion pour l'initialisation des variables. Au départ, j'avais mis LTSCALEP à 5 et LTSCALEM à 0.5. Depuis quelques jours, je ne pense plus aux ECHLTP. C'est les vacances ! ;) SalutationsVincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 19 janvier 2010 Posté(e) le 19 janvier 2010 Ne faudrait-il pas remplacer acActiveViewport par acAllViewports dans la fonction ltscaleCallback ? Tu as raison, je l'avais fait chez moi, j'ai oublié de corriger le code ici (je le fais immédiatement) . Par ailleurs, il y a une inversion pour l'initialisation des variables. Au départ, j'avais mis LTSCALEP à 5 et LTSCALEM à 0.5. Oups !...Mais ça n'a pas vraiment d'importance puisque ces valeurs sont paramétrables... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
CADZEB Posté(e) le 1 février 2010 Posté(e) le 1 février 2010 Bonjour, la fonction Callback fait un regen, même si on ne change pas la valeur de LTSCALE. Je m'explique : si on passe du Model à une présentation (ou inversement) le regen s'impose, mais si on passe d'une présentation à une autre le regen semble inutile. Si c'est inutile et que ça prend du temps, autant éviter de faire ce regen. Je propose de modifier la fonction callback de cette manière (defun ltscaleCallback (rea lst / oldLTSCALE) (setq oldLTSCALE (getvar "LTSCALE")) (setvar 'ltscale (if (= (car lst) "Model") (vlax-ldata-get "Z_LTSCALE" "ltscalem") (vlax-ldata-get "Z_LTSCALE" "ltscalep") ) ) (if (/= oldLTSCALE (getvar "LTSCALE")) (vla-regen (vla-get-ActiveDocument (vlax-get-acad-object)) acAllViewports) ) ) ou quelque chose du même style. AmicalementZebulon_
mateus Posté(e) le 5 mars 2013 Posté(e) le 5 mars 2013 Bonjour Gile J'ai trouver votre lisp intérésent, Car moi j'ai plus au moins le même problème, c'est à dire que je voudrais appliquer a ma fenêtre de présentation qui auront 3 type d'échelles 1/200; 1/500; 1/1000 avec 3 types de variable echltp (0.2= 1/200; 0.5=1/500; 1= 1/1000) Donc est-ce que c'est possible de faire un lisp qui activera automatiquement ces variable
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant