Aller au contenu

Coordonnées dans Espace Papier de l\'origine du SCU d\'une fenêtre.


Bred

Messages recommandés

 

Routine inutile : Voir Réponse 2.

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

Salut,

Ci-dessous une routine permettant de retourner les coordonnées en Espace Papier de l'origine d'une fenêtre.

Utilité : Pouvoir situé un objet contenu dans une fenêtre afin de le "travailler" en espace papier (ex : entourer l'objet sur une fenêtre)

 

Le code fonctionne pour des vues Parrallèles (droite, gauche, etc....)

 

Maitre lispeur, à vos clavier, démonter/simplifier/perfectionner moi tout ça !!! ;) merci !

 

(defun Get-Coord-SCU-Fen_Esp-Pap (/ sel id_fenetre Coord_centre_fenetre/SCU coord_centre_fenetre Sens_vue
			  Ech_Fen Coord_centre_fenetre/SCU)

 (if (= (getvar "TILEMODE") 1)
   (princ "\n ** Cette commande n'est valable que dans l'espace papier. **")
   (progn
  (if (= (getvar "CVPORT") 1)
    (progn
      (while
	(not (and (setq sel (car (entsel "\n Sélectionner une fenêtre :")))
		  (or (equal (cdr (assoc 0 (entget sel))) "VIEWPORT")
		      (equal (cdr (assoc 0 (entget (cdr (assoc 330 (entget sel)))))) "VIEWPORT")
		      )
		  )
	     )
	)
      (setq sel (entget sel)
	    id_fenetre (cdr (assoc 69 sel)))
      (if (= id_fenetre nil)
	(progn
	  (setq sel (entget (cdr (assoc 330 sel)))
		id_fenetre (cdr (assoc 69 sel)))
	)
	)	
      (command "_.MSPACE")
      (setvar "CVPORT" id_fenetre)
      )
    )

  (setq Coord_centre_fenetre/SCU (getvar "VIEWCTR"))
  
  (command "_.PSPACE")

  (setq coord_centre_fenetre (cdr (assoc 10 sel))
	Sens_vue (cdr (assoc 16 sel))
	Ech_Fen (/(cdr (assoc 41 sel))(cdr (assoc 45 sel)))
	Coord_centre_fenetre/SCU (list (* Ech_Fen (car Coord_centre_fenetre/SCU))
				       (* Ech_Fen (cadr Coord_centre_fenetre/SCU))
				       (* Ech_Fen (caddr Coord_centre_fenetre/SCU))))
    (cond
      ((equal sens_vue '(0.0 -1.0 0.0));VF
       (Setq Coord-SCU-Fen_Esp-Pap (list (- (car coord_centre_fenetre)(car Coord_centre_fenetre/SCU))
					 (- (cadr coord_centre_fenetre)(caddr Coord_centre_fenetre/SCU)))))
      ((equal sens_vue '(-1.0 0.0 0.0));VG
       (Setq Coord-SCU-Fen_Esp-Pap (list (+ (car coord_centre_fenetre)(cadr Coord_centre_fenetre/SCU))
					 (- (cadr coord_centre_fenetre)(caddr Coord_centre_fenetre/SCU)))))
      ((equal sens_vue '(1.0 0.0 0.0));VD
       (Setq Coord-SCU-Fen_Esp-Pap (list (+ (car coord_centre_fenetre)(* (cadr Coord_centre_fenetre/SCU) -1))
					 (- (cadr coord_centre_fenetre)(caddr Coord_centre_fenetre/SCU)))))
      ((equal sens_vue '(0.0 0.0 1.0));VH
       (Setq Coord-SCU-Fen_Esp-Pap (list (- (car coord_centre_fenetre)(car Coord_centre_fenetre/SCU))
					 (- (cadr coord_centre_fenetre)(cadr Coord_centre_fenetre/SCU)))))
      ((equal sens_vue '(0.0 0.0 -1.0));VB
       (Setq Coord-SCU-Fen_Esp-Pap (list (+ (car coord_centre_fenetre)(car Coord_centre_fenetre/SCU))
					 (- (cadr coord_centre_fenetre)(cadr Coord_centre_fenetre/SCU)))))
      )
     )
   )
 Coord-SCU-Fen_Esp-Pap
 )

 

Pour le tester : lancer "test"

(defun c:test (/ pt)
 (setq pt (Get-Coord-SCU-Fen_Esp-Pap))
 (if pt
   (command "_circle" pt 2))
 (princ)
)

[Edité le 25/11/2006 par Bred]

 

[Edité le 25/11/2006 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

J'ai édité la routine ci-dessous :

 

- J'ai modifié le code pour la selection de la fenêtre (sur une proposition de (gile) )

 

- Je viens de découvrir la raison du rappel de la variable en fin de routine.... mieux vaut tard que jamais !!! (j'ai pas mal de routine à modifié, moi, maintenant !!!)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Je ne comprends pas bien ce que tu veux faire, mais la fonction trans permet de traduire des coordonnées dans des systèmes de coordonnées spécifiques à l'espace papier.

 

Par exemple, dans une fenêtre active d'une présentation, on spécifie le centre d'un cercle :

 

(setq cen (getpoint))

 

On peut traduire les coordonnées de cen dans le système de coordonnées de la fenêtre active de la présentation (Display Coordinates System DCS). Il faut qu'une fenêtre soit toujours active :

 

(setq cen_vp (trans cen 0 2))

 

Ensuite, de retour dans l'espace papier, on peut traduire ces coordonnées dans le système de coordonnées de l'espace papier :

 

(setq cen_ps (trans cen_vp 2 3))

 

(command "_.point" "_non" cen_ps) dessine un point dans l'espace papier, au centre du cercle.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Et bien je vais me suicider !!!... :P

En 3 lignes tu flingues toute ma routine...

 

... Je vais passer un bon dimanche, moi !!!

 

 

 

 

 

[Edité le 21/12/2006 par Bred]

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

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é