Bred Posté(e) le 8 octobre 2007 Posté(e) le 8 octobre 2007 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...
Bred Posté(e) le 8 octobre 2007 Auteur Posté(e) le 8 octobre 2007 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...
(gile) Posté(e) le 8 octobre 2007 Posté(e) le 8 octobre 2007 Salut, Curieusement, il faut "supprimer" ActiveViewport avant de fair quoi que ce soit. voir ce sujet Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 8 octobre 2007 Auteur Posté(e) le 8 octobre 2007 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...
Bred Posté(e) le 8 octobre 2007 Auteur Posté(e) le 8 octobre 2007 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...
Bred Posté(e) le 9 octobre 2007 Auteur Posté(e) le 9 octobre 2007 ... ç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...
(gile) Posté(e) le 9 octobre 2007 Posté(e) le 9 octobre 2007 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
Bred Posté(e) le 9 octobre 2007 Auteur Posté(e) le 9 octobre 2007 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...
Messages recommandé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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant