Bred Posté(e) le 22 novembre 2006 Posté(e) le 22 novembre 2006 Salut,Je bute sur un problème : je n'arrive pas à laisser la main en lisp à l'utilisateur afin qu'il puisse rendre une fenêtre courante (dans l'espace papier), afin de faire une selection à l'interieur... J'ai essayé (maladroitement) : (princ "\nSélectionner des Objets dans une fenêtre :") [b](command pause pause)[/b] (setq sel (ssget)) " (command pause pause) " ... était dans le but de laisser la possibilité du double clic ... Ah oui, j'ai essayé aussi : (setq sel (entget (car (entsel)))) (setq id_fenetre (cdr (assoc 69 sel))) (setvar "CVPORT" id_fenetre) (command "_.MSPACE") ... mais autocad refuse de me changer "CVPORT" (certainement à cause d'une "commande active"....) merci de votre aide ! [Edité le 22/11/2006 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 23 novembre 2006 Posté(e) le 23 novembre 2006 Salut, (setq AcDoc (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-put-ActiveSpace AcDoc acPaperSpace) (if (setq sel (ssget "_:S:E" '((0 . "VIEWPORT")))) (progn (setq vpobj (vlax-ename->vla-object (ssname sel 0))) (vla-Display vpobj :vlax-true) (vla-put-MSpace AcDoc :vlax-true) (vla-put-ActivePViewport AcDoc vpobj) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 24 novembre 2006 Auteur Posté(e) le 24 novembre 2006 merci (gile) !!!(je suis désolé de mon retard...) Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 24 novembre 2006 Auteur Posté(e) le 24 novembre 2006 Salut,(gile), ta routine fonctionne.... mais après plusieur test 2 choses me dérange : - J'utilise personnellement de moins en moins souvent la fonction "ssget" pour le choix d'objet unitaire car on ne peut pas mettre de texte explicatif, donc je fais des "entsel" que je test en boucle... - Ta routine me gène au niveau visuel : la fenêtre est bien courante, mais on ne le vois pas visuelement : le cadre n'est pas "épaissi"... J'ai donc bidouillé un truc qui à l'air de fonctionner : (setq sel nil) (while (= sel nil) (while (= sel nil) (setq sel (entsel "\n Sélectionner une fenêtre :"))) (setq sel (entget (car sel))) (if (not (equal (cdr (assoc 0 sel)) "VIEWPORT")) (progn (if (not (equal (cdr (assoc 0 (entget (cdr (assoc 330 sel))))) "VIEWPORT")) (setq sel nil) ) ) ) ) (setq id_fenetre (cdr (assoc 69 sel))) (command "_.MSPACE") (setvar "CVPORT" id_fenetre) ... je ne suis pas trés content (et d'autre vont m'en faire la remarque ... ;) ) d'utiliser un "(command..." ... si vous avez l'équivalent, je suis preneur !!! Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 24 novembre 2006 Posté(e) le 24 novembre 2006 Salut, Tu peux mettre un message avant de faire le (ssget ...), l'vantage du (ssget ...) c'est de pouvoir utiliser des filtres. avec (entsel ...) tu peux faire une boucle plus concise : (while (not (setq sel (car (entsel "\n Sélectionner une fenêtre :"))))) et pour remplacer le filtre sur le type d'entité : (while (not (and (setq sel (car (entsel "\n Sélectionner une fenêtre :"))) (equal (cdr (assoc 0 (entget sel))) "VIEWPORT") ) ) ) [Edité le 24/11/2006 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 24 novembre 2006 Auteur Posté(e) le 24 novembre 2006 Re,- Pour SSget, j'écris souvent un texte avant, mais au final on à toujours "Choix des objets:", ce qui n'est pas trés explicite... (mais peut être que quelqu'un aurait dans ces cartons une fonction de selection de groupe plus personnalisable ??? ;) ) - OK pour la boucle plus concise (merci) - Par contre, j'ai un doute sur un truc :ton (while (not (and (setq sel (car (entsel "\n Sélectionner une fenêtre :"))) (equal (cdr (assoc 0 (entget sel))) "VIEWPORT") ) ) )ne fonctionne que pour des fenêtre rectangulaires, tandis que(setq sel nil) (while (= sel nil) (while (not (setq sel (car (entsel "\n Sélectionner une fenêtre :"))))) (setq sel (entget sel)) (if (not (equal (cdr (assoc 0 sel)) "VIEWPORT")) (progn (if (not (equal [b](cdr (assoc 0 (entget (cdr (assoc 330 sel))))) "VIEWPORT"))[/b] (setq sel nil) ) ) ) )fonctionne aussi pour les fenêtres polygonales, etc... (dxf 330 de l'entité cherche une "VIEWPORT" joint). Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 25 novembre 2006 Posté(e) le 25 novembre 2006 Re, (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" ) ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Bred Posté(e) le 25 novembre 2006 Auteur Posté(e) le 25 novembre 2006 Réponse à 6h47...Tu es un lève tôt !!! merci pour ta solution ! 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