Aller au contenu

Coordonnée Point SCG dans fenêtre


Bred

Messages recommandés

Salut,

je n'arrive pas à trouver mon erreur.

J'ai fait des routines me permettant de retourner les coordonnées d'un point pris dans une fenêtre non active en espace papier en coordonnées SCG...

 

Et bien, ça fonctionne... pas tout le temps....

Si je change de selction de point selectionné, le lancement du test est faux la première fois, puis tant que je ne change pas de fenêtre ça à l'ai juste.....

 

merci de votre aide...

 

(defun c:test ()
(setq p (getpoint "\n Choisir un point :"))

(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-put-ActiveSpace AcDoc acPaperSpace)
(setq fen (Pt->Fen p))

(trans-ptEP->ptEO p fen)
)

; Valeur +Grande ou égale et +Petite ou égale que
; 2<=50<=90 -> (<=val<= 2 50 90) => T
; 45<=48<=48 -> (<=val<= 45 48 48) => T
(defun <=val<= (val- val val+)
 (if (and (> val val-)
   (< val val+)) t
   (if (or (equal val val-)
    (equal val val+)) t))
)


; routine de récupération de coordonnées de point
; dans l'espace papier transformer en espace objet.
(defun trans-ptEP->ptEO (pt fen / ACDOC VPOBJ P)
 (setq p (trans pt 3 2)
AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-put-ActiveSpace AcDoc acPaperSpace)  
 (vla-Display fen :vlax-true)
 (vla-put-MSpace AcDoc :vlax-true)
 (vla-put-ActivePViewport AcDoc fen)
 (setq p (trans p 2 0))  
 (vla-put-MSpace AcDoc :vlax-false)
 p  
)

; Routine de récupération de le fenêtre contenant le point.
(defun Pt->Fen (pt / I MAXPT MINPT SEL-F VLA-FEN VLA-FEN-OK)
 (setq sel-F (ssget "_X" '((0 . "VIEWPORT,*POLYLINE,SPLINE,ELLIPSE,CIRCLE,REGION"))))
 (repeat (setq i (sslength sel-F))
   (setq vla-fen (vlax-ename->vla-object (ssname sel-F (setq i (1- i)))))
   (vla-GetBoundingBox vla-fen 'minPt 'maxPt)
   (setq minPt (vlax-safearray->list minPt)
  maxPt (vlax-safearray->list maxPt))
   (if (and (<=val<= (car minPt) (car pt) (car maxPt))
     (<=val<= (cadr minPt) (cadr pt) (cadr maxPt)))
     (setq Vla-fen-OK vla-fen))
   )
 Vla-fen-OK
)

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

En approfondissant mes test, je pense avoir mis le doigt sur le problème : mais ce n'est pas logique :

 

Ceci

; routine de récupération de coordonnées de point
; dans l'espace papier transformer en espace objet.
(defun trans-ptEP->ptEO (pt fen / ACDOC VPOBJ P)
(setq p (trans pt 3 2)
AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vla-put-ActiveSpace AcDoc acPaperSpace)
(vla-Display fen :vlax-true)
(vla-put-MSpace AcDoc :vlax-true)
(vla-put-ActivePViewport AcDoc fen)
(setq p (trans p 2 0))
(vla-put-MSpace AcDoc :vlax-false)
p
)

Active la fenêtre précedement activer... au prmier changement de fenêtre..... puis après cela prends la bonne (fen)

on dirait que (vla-put-ActivePViewport AcDoc fen) ne fonctionne pas à la première utilisation ...

 

:casstet:

 

[Edité le 8/10/2007 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

Wow ! ?....

c'est des ActivePViewport...

c'est le cas aussi ?

(parceque j'ai beau tourner le code dans n'importe quel sens, mettre

(vla-delete (vla-get-ActivePViewport (vla-get-ActiveDocument (vlax-get-acad-object))))

au début, rien n'y fait...

(j'ai une erreur :

erreur: Erreur Automation Echec de QueryInterface IDispatch

 

[Edité le 8/10/2007 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 honte mais voilà une solution pour que ça fonctionne :

 

; routine de récupération de coordonnées de point
; dans l'espace papier transformer en espace objet. ;(setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
(defun trans-ptEP->ptEO (pt fen / ACDOC P)
 [b](Correct-bug-recup-trans-ptEP->ptEO fen)[/b]
 (setq p (trans pt 3 2)
AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-put-ActiveSpace AcDoc acPaperSpace)  
 (vla-Display fen :vlax-true)  
 (vla-put-MSpace AcDoc :vlax-true)  
 (vla-put-ActivePViewport AcDoc fen)  
 (setq p (trans p 2 0))  
 (vla-put-MSpace AcDoc :vlax-false)
 p  
)

[b]; Routine pour correction bug (???)
(defun Correct-bug-recup-trans-ptEP->ptEO (fen / ACDOC)  
 (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-put-ActiveSpace AcDoc acPaperSpace)  
 (vla-Display fen :vlax-true)  
 (vla-put-MSpace AcDoc :vlax-true)  
 (vla-put-ActivePViewport AcDoc fen)  
 (vla-put-MSpace AcDoc :vlax-false)[/b]
)

 

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

... ça fonctionne mais je trouve ça d'un laid !!!!

si vous avez une solution, n'hésitez pas !

moi, je continues à chercher, mais sans aucun résultat .....

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,

 

Il me semble que tu fais deux fois la même chose. Une fois avant (setq p (trans pt 3 2), puis une autre fois avant (setq p (trans p 2 0)), pourquoi ne pas regrouper les deux trans ?

 

(defun trans-ptEP->ptEO	(pt fen / ACDOC P)
 (setq	AcDoc (vla-get-ActiveDocument (vlax-get-acad-object)))
 (vla-put-ActiveSpace AcDoc acPaperSpace)
 (vla-Display fen :vlax-true)
 (vla-put-MSpace AcDoc :vlax-true)
 (vla-put-ActivePViewport AcDoc fen)
 [b](setq p (trans (trans pt 3 2) 2 0))[/b]
 (vla-put-MSpace AcDoc :vlax-false)
 p
) 

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

Lien vers le commentaire
Partager sur d’autres sites

Hey !

mais ça fonctionne !!!

pourquoi ne pas regrouper les deux trans ?

parceque je pensaiq être obligé de faire le (trans pt 3 2) en espace papier, puis activer la fenêtre et faire le (setq p (trans p 2 0)) ....

Génial !

merci, comme d'habitude !

:D :D :D

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é