Zeberb Posté(e) le 19 juin 2019 Posté(e) le 19 juin 2019 Salut à tous J'aurais besoin d'un petit programme. Voici mon souci.Je possède un fichier DWG de cadastre avec de nombreux plans et donc de nombreux onglets de présentation et de nombreuses fenêtres de présentation.Suite à un changement de système de coordonnées dans mon espace objet, je dois à l'intérieur de chaque fenêtre de présentation effectuer une translation bien définie et toujours la même. Mon rêve absolu serait d'avoir un Lisp qui puisse effectuer cela en passant automatiquement d'une fenêtre à l'autre de la première à la dernière dans l'ensemble de mes onglets de présentation. Merci d'avance. Citer
GEGEMATIC Posté(e) le 19 juin 2019 Posté(e) le 19 juin 2019 Salut,j'ai 2 versions,une toute simple que je te poste tout de suite,et une autre qui fonctionne avec un recalage d'helmert (reversible),par saisie de point et stockage dans un fichier ini, ou en utilisant un fichier CLD de Covadis.mais là c'est plus lourd, il faut avoir PowerClic pour le dépendances.a+gégé ;;************************************************************************** ;;§/zoom/saisit un zoom panoramique pour la mise à jour de plusieurs fenêtres /none ;;sert à recaler les fenêtre de l'espace papier (defun c:saisit_pan ( / pb pf) ;;var globales : real-pb real-pf (if (= (getvar "tilemode") 0) (command "_mspace") ) (setq pb (getpoint "Zoom panoramique 1er point")) (setq pf (getpoint pb "Zoom panoramique 2eme point")) (setq real-pb (pw_scu2scg pb)) (setq real-pf (pw_scu2scg pf)) (command "_pan" pb pf) ) ;;************************************************************************** ;;§/zoom/suite à c:saisit_pan, permet de mettre à jour plusieurs fenêtre /none ;;sert à recaler les fenêtre de l'espace papier suite à une transaltion de plan ;;accepte les scu multiples ; (defun c:ajour_pan ( / sel lsel nvport eg l) (command "_pspace") (prompt "\nChoisissez les fenêtres à mettre à jour") (setq sel (ssget '((0 . "VIEWPORT")))) ;; (setq lsel (pw_listsel sel)) (setq lsel (LM:ss->ent sel)) ;;var globales : fen-aro fen-dep cg-ref cg-base (foreach l lsel (setq eg (entget l)) (setq ovp (vlax-ename->vla-object l)) (setq locked (vla-get-DisplayLocked ovp)) (vla-put-DisplayLocked ovp :vlax-false ) (setq nvport (cdr (assoc 69 eg))) (command "_mspace") (setvar "cvport" nvport) ;;translate (command "_PAN" (pw_scg2scu real-pb) (pw_scg2scu real-pf)) (vla-put-DisplayLocked ovp locked ) ) ) ;;lee mac programming: ;;http://lee-mac.com/selectionsettolist.html (defun LM:ss->ent ( ss / i l ) (if ss (repeat (setq i (sslength ss)) (setq l (cons (ssname ss (setq i (1- i))) l)) ) ) ) Citer ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Tramber Posté(e) le 19 juin 2019 Posté(e) le 19 juin 2019 Sinon tu scriptes, du genre :CVPORT 3 -PAN 0,0 500,400 CVPORT 4 -PAN 0,0 500,400 CVPORT 5 -PAN 0,0 500,400 ...C'est plutôt super facile, il suffit de lancer le script en se placant d'abord dans une fenêtre ;)C'est moins puissant qu'un lisp mais c'est fabriqué en quelques secondes avec Excel... Citer Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Zeberb Posté(e) le 24 juin 2019 Auteur Posté(e) le 24 juin 2019 Merci pour vos contributions.Peut-être aurais-je du apporter d'autres précisions: - Je travaille avec Autocad Civil 3D 2019,- Les fenêtres de présentation sont verrouillées (besoin de déverrouiller puis reverrouiller) et ne sont pas orientées dans le SCG. J'ai essayé d'enregistrer le code de Gégé dans un fichier Lisp. Je peux le charger, le lancer, mais ça plante avec le code erreur: no function definition: PW_SCU2SCG. Merci d'avance pour vos éclaircissements. Citer
PHILPHIL Posté(e) le 24 juin 2019 Posté(e) le 24 juin 2019 hello Zeberd Gile m'avait ecrit un lisp pour le déplacement dans des fenêtres on sélectionne une fenêtre de base, puis les fenetres dans lesquelles faire des déplacement s avec "PAN", puis ca retourne dans la fenetre de base pour pointer les deux points du "PAN". et ensuite le "PAN" se fait tout seul inconvénient les points ne sont pas enregistrer quelque part.si on doit dézoomer pour sélectionner les fenetres, il faut pas oublier de rezoomer sur la fenetre de base pour pouvoir bien sélectionner les deux points de bases. et comme les points ne sont pas enregistrés,c'est pas facile de retrouver les points de base des fois dans d'autres fenetres de autres présentations, surtout si celles ci ne sont pas cadrés au meme endroit je l'utilise quand je veux déplacer les entités dans des fichiers de sous traitant qui bossent a "32153.145687452, 452163.451236466 klm" du point zero,zero, en déplaceant tout d'une intersection de files au point "0,0,0" ;;; ;; deplacement -PAN dans des fenetres selectionnees ;;; (defun c:dfxybase (/ vp1 ss p1 p2 n) (and (or (/= (getvar 'ctab) "Model") (prompt "\nCommande non accessible en espace objet")) (vl-cmdf "_pspace") (princ "\nSélectionnez la fenêtre référence") (setq vp1 (ssget "_:S:E" '((0 . "VIEWPORT")))) (setq vp1 (ssname vp1 0)) (princ "\nSélectionnez les fenêtres") (setq ss (ssget '((0 . "VIEWPORT")))) (or (ssdel vp1 ss) t) (setq p3 (getpoint "\nZOOMER ET POINTER LA FENETRE POUR LES POINTS DE BASE : ")) (vl-cmdf "_mspace") (setvar 'cvport (cdr (assoc 69 (entget vp1)))) (vl-cmdf "_pan" (setq p1 (getpoint "\nSpécifiez le point de base: ")) (setq p2 (getpoint p1 "\nSpécifiez le deuxième point: ")) ) (setq n 0) (while (setq vp (ssname ss n)) (setq ena (vlax-ename->vla-object (cdr (assoc -1 (entget vp))))) (vla-put-displaylocked ena 0) (setvar 'cvport (cdr (assoc 69 (entget vp)))) (vl-cmdf "_pan" p1 p2) (vla-put-displaylocked ena -1) (setq n (1+ n)) ) (vl-cmdf "_pspace") ) (princ) ) j'ai ma version qui enregistre les déplacements suivant "X" et "Y" du SCG dans "ACAD.cfg" ca sous entend dans ton cas ZEBERD de connaitre avec 8 chiffres apres la virgule les valeurs "X" et "Y" entres tes deux points de déplacement (defun c:dfxy (/ vp ss n) (setvar "cmdecho" 0) (setq fealpha (atof (getcfg "APPDATA/FEALPHA"))) (setq febeta (atof (getcfg "APPDATA/FEBETA"))) (initget 4) (setq tmp1 (getdist (strcat "\nENTRER LA VALEUR DE FE_ALPHA ( SUR X ) <" (rtos fealpha 2 8) ">: "))) (if tmp1 (setq fealpha tmp1) ) (initget 4) (setq tmp2 (getdist (strcat "\nENTRER LA VALEUR DE FE_BETA ( SUR Y ) <" (rtos febeta 2 8) ">: "))) (if tmp2 (setq febeta tmp2) ) (and (or (/= (getvar 'ctab) "Model") (prompt "\nCommande non accessible en espace objet")) (vl-cmdf "_pspace") (princ "\nSélectionnez les fenêtres") (setq ss (ssget '((0 . "VIEWPORT")))) (vl-cmdf "_mspace") (setq n 0) (while (setq vp (ssname ss n)) (setq ena (vlax-ename->vla-object (cdr (assoc -1 (entget vp))))) (vla-put-displaylocked ena 0) (setvar 'cvport (cdr (assoc 69 (entget vp)))) (command-s "scu" "") (vl-cmdf "_pan" (strcat (rtos fealpha 2 8) "," (rtos febeta 2 8)) "0,0") (command-s "scu" "p") (vla-put-displaylocked ena -1) (setq n (1+ n)) ) (vl-cmdf "_pspace") ) (setcfg "APPDATA/FEALPHA" (rtos fealpha 2 8)) (setcfg "APPDATA/FEBETA" (rtos febeta 2 8)) ;;; (setvar "cmdecho" 1) (princ) ) a+ ps : merci a Gile phil Citer FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
Messages recommandés