Aller au contenu

Fenêtres de présentation, translation espace objet


Zeberb

Messages recommandés

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.

Lien vers le commentaire
Partager sur d’autres sites

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))
       )
   )
)

----------------------------------------------------------------------

Site: https://www.g-eaux.fr

Blog: http://g-eaux.over-blog.com

Lien vers le commentaire
Partager sur d’autres sites

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...

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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.

Lien vers le commentaire
Partager sur d’autres sites

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

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité