Aller au contenu

Récupérer les coordonnées de l’affichage actif


VDH-Bruno

Messages recommandés

Bonjour,

 

Une petite question en passant, comment en lisp feriez-vous pour récupérer les coordonnées (coin inférieur gauche et coin supérieur droit) de l’affichage actif sous AutoCAD ?

 

Je n’ai pas trouvé de solution direct (variable système), j’ai pondu quelque chose avec SCREENSIZE VIEWCTR et VIEWSIZ.. J’aurais bien comparé avec vos solutions au cas où il y aurait un moyen plus direct, au passage j’ai bien regardé du côté des variables système VSMIN et VSMAX mais je ne suis même pas sûr d’avoir compris ce qu’était « les coins de l'écran virtuel de la fenêtre courante »

 

Mon code :

;; VDH-Bruno
;; ------------------------------------------------------------------------------
;; retourne une liste de coordonnées 3D dans le SCU représentant respectivement:
;;      - le coin inférieur gauche de l'affichage actif
;;      - le coin supérieur droit de l'affichage actif
;; ------------------------------------------------------------------------------
;; Pour mémoire:
;;   Variable SCREENSIZE
;;     Stocke la taille de la fenêtre courante, en pixels (X et Y).
;;   Variable VIEWCTR
;;     Stocke le centre de la vue (coordonnées SCU) dans la fenêtre courante.
;;   Variable VIEWSIZE
;;     Hauteur de la vue affichée, mesurée en unités de dessin.
;; ------------------------------------------------------------------------------
;; Exemple:
;;     (coorAff)    -->    ((-3.6746 -3.19579 10.0) (3238.26 2595.22 10.0))

(defun coorAff ( / VIEWCTR VIEWSIZE SCREENSIZE)  
 (mapcar 'set '(VIEWCTR VIEWSIZE SCREENSIZE) (mapcar 'getvar '(VIEWCTR VIEWSIZE SCREENSIZE)))
 ((lambda (dimxy) (list (mapcar '- VIEWCTR dimxy) (mapcar '+ VIEWCTR dimxy)))
   (list (* VIEWSIZE (/ (car SCREENSIZE) (cadr SCREENSIZE) 2.)) (/ VIEWSIZE 2) 0.0)
 )
)

 

A+

 

(Edit du 30/08/2012: Modifié code passage des arguments en variables localisées)

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Pas d'autre moyen je crois.

Tout comme EXTMAX et EXTMIN, il doit s'gir de l'encombrement des objets. Sinon c'est pas clair non plus pour moi, ces VSMIN et MAX....

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

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

Bonjour,

 

Je ne vois pas trop ce que tu cherche à faire exactement, mais il me semble que tu te complique un peu.

 

Pour moi les variables Viewsize et viewctr sont suffisantes.

 

un exemple pour récuperer une vue d'un plan à l'autre.

 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Sauver la vue
(defun c:SVU		nil
(vl-registry-write
"HKEY_CURRENT_USER\\Software\\Perso"
"Reg-ViewSize"
(rtos (getvar "viewsize"))
)
(vl-registry-write
"HKEY_CURRENT_USER\\Software\\Perso"
"Reg-ViewCtr"
(lst2str (trans (getvar "viewctr") 1 0) ";")
)
(princ)
)

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Restaurer la vue
(defun c:RVU  	nil
(vl-cmdf "_zoom" "_c" 
(trans (mapcar 'atof (str2lst (vl-registry-read "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewCtr") ";")) 0 1) 
(atof (vl-registry-read "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewSize"))
)
(princ)
)

Lien vers le commentaire
Partager sur d’autres sites

Si je ne me trompe...

D'après ce que j'ai compris

 

VSMIN et VSMAX sont les limites qu'Autocad est capable de gérer à l'affichage sans provoquer de régénération de celui-ci.

 

EXTMIN et EXTMAX sont les limites calculés par Autocad pour obtenir toutes les entités graphique à l'écran lors d'un zoom étendu, cela rejoint Tramber.

Pour un zoom total, je crois bien que celui est géré par LIMMIN et LIMMAX.

 

Passer par les variables que tu as citées sont en effet (à ma connaissance) le seul moyen.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Tramber et BonusCAD,

Merci du retour et de la confirmation, c’est la trace du zoom dynamique qui m’avait laissé croire qu’il y avait peut-être des variables qui m’avait échappé.. Pour VSMIN et VSMAX j'étais encore loin de me douter..

 

Fraid, merci pour les codes

Je ne vois pas trop ce que tu cherche à faire exactement,

Ho tout un tas de truc comme par exemple, dessiner un cadre représentant ce qu’il y a l’affichage écran.

(apply 'command (cons "_rectang" (coorAff)))

Ou faire une sélection par capture sur ce qui est présent à l’affichage dans la vue active.

(sssetfirst nil (apply 'ssget (cons "_C" (coorAff))))

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Pour le fun et le partage une variante (pas forcément plus performante) au code proposé précédemment, mais différente pour ceux que cela intéresse.. (en exploitant une fois de plus les valeurs limites d’AutoCAD).

 

_$ (mapcar 'cadr (cdr (last (ssnamex (ssget "_C" '(-1e99 -1e99) '(1e99 1e99))))))
((-32.2888 5793.86 0.0) (6455.64 5793.86 0.0) (6455.64 1750.41 0.0) (-32.2888 1750.41 0.0))
_$ 

Renvoie la liste des 4 sommets définissant la vue active.

Nota : Il faut tout de même un objet à sélectionner dans la vue active pour ne pas se voir retourner nil. Au besoin pensez préalablement à en créer un.

 

 

Sinon au passage j’ai encore quelques soucis avec certaines variables, actuellement le plus criant concerne VIEWTWIST qui si j’en crois l’aide retourne un réel représentant l'angle de basculement de vue pour la fenêtre courante.

 

Sauf que quelque chose doit m’échapper lorsque j’essaye de faire parler cette valeur "supposé angulaire" sur ma calculatrice, je n’arrive pas à la faire coïncider avec quelque chose qui me parle..

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Pour la variable VIEWTWIST, celle-ci est en corrélation avec la commande VUEDYN (_DVIEW) et l'option "Basculer" ("_Twist"), l'aide ne t'en dira guère plus...

 

Personnellement je me suis servi rarement de cette variable sauf pour faire basculer une vue dans une fenêtre depuis l'espace papier (passer de portrait à paysage par exemple) un peu à la façon de MVSetup après avoir mis beaucoup d'option.

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

j'ai ce vieux bout de code tout moche qui me donne les 4 coins dans le scu général

(setq screen (getvar "screensize"))
(setq ratio (/ (car screen) (cadr screen)))
(setq cen (getvar "viewctr"))
(setq cen (trans cen 1 0))
(setq angle_rad (getvar "viewtwist"))
(setq angle_rad (- (* 2 pi) angle_rad))
(setq h (getvar "viewsize"))
(setq w (* h ratio))
(setq bottomLeft (polar (polar cen (+ angle_rad pi) (/ w 2)) (- angle_rad (/ pi 2)) (/ h 2)))
(setq bottomRight (polar (polar cen angle_rad (/ w 2)) (- angle_rad (/ pi 2)) (/ h 2)))
(setq upperRight (polar (polar cen angle_rad (/ w 2)) (+ angle_rad (/ pi 2)) (/ h 2)))
(setq upperLeft (polar (polar cen (+ angle_rad pi) (/ w 2)) (+ angle_rad (/ pi 2)) (/ h 2)))

Aide au téléchargement du cadastre dgfip-download-helper
Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0
Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

bonuscad, merci du retour et de l'explication "étymologique" du _DVIEW option _Twist en VIEWTwist, pour la petite histoire je me suis intéressé à cette variable, un peu dans le même contexte que tu décris cas des basculements ou rotation de vue dans une fenêtre de l’espace papier avec la commande VUEDYN (_DVIEW) ou REPERE (_PLAN).

 

Vincentp010, rassure toi à mes yeux le beau code et celui qui fonctionne après et accessoirement seulement je parle plus volontiers de style dans code de type procédural, impératif, fonctionnel, plutôt que d'un code moche ou pas moche qui est totalement subjectif.. ;)

 

Sinon après vérification la définition que tu donnes (-(* 2 pi) (getvar "viewtwist")) pour le calcul de l’angle me semble correcte (même si il m'avait semblé l’avoir vérifié), en tout cas c’est ce que je recherchais et je t’en remercie.

 

A+

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

  • 4 mois après...

HELLO

 

bonne année, voeux, santé

 

comme le bout de code ma servie

je fais suite

 

ceux qui on ecrit se code le reconnaitront, pas dure pour ce début d'année

 

mise a jour

 

espace objet

espace papier

 

;;;;;;;;;;;;;;
;; copie la vue d une fenetre a l autre : espace objet
;;;;;;;;;;;;;;

(defun c:cvu nil
 (getpoint "\nCLIQUER DANS LA FENETRE DE BASE :")
 (vl-registry-write "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewSize" (rtos (getvar "viewsize")))
 (vl-registry-write "HKEY_CURRENT_USER\\Software\\Perso"
                    "Reg-ViewCtr"
                    (lst2str (trans (getvar "viewctr") 1 0) ";")
 )
 (getpoint "\nCLIQUER DANS LA FENETRE A METRE A JOUR SUIVANT LA FENETRE DE BASE")
 (vl-cmdf "_zoom"
          "_c"
          (trans (mapcar 'atof (str2lst (vl-registry-read "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewCtr") ";"))
                 0
                 1
          )
          (atof (vl-registry-read "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewSize"))
 )
 (princ)
)

;;;;;;;;;;;;;;
;; copie la vue d une fenetre a l autre  : espace papier
;;;;;;;;;;;;;;

(defun c:cvup nil
 (getpoint "\nZOOMER ET CLIQUER DANS LA FENETRE DE BASE :")
 (command "espaceo")
 (vl-registry-write "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewSize" (rtos (getvar "viewsize")))
 (vl-registry-write "HKEY_CURRENT_USER\\Software\\Perso"
                    "Reg-ViewCtr"
                    (lst2str (trans (getvar "viewctr") 1 0) ";")
 )
 (command "espacep")
 (getpoint "\nZOOMER ET CLIQUER DANS LA FENETRE A METRE A JOUR SUIVANT LA FENETRE DE BASE")
 (command "espaceo")
 (vl-cmdf "_zoom"
          "_c"
          (trans (mapcar 'atof (str2lst (vl-registry-read "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewCtr") ";"))
                 0
                 1
          )
          (atof (vl-registry-read "HKEY_CURRENT_USER\\Software\\Perso" "Reg-ViewSize"))
 )
 (command "espacep")
 (command "zoom" "et")
 (princ)
)

 

 

merci

a+

phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

  • 3 ans aprè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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é