Aller au contenu

Selection dans fenêtre (papier)


Messages recommandés

Posté(e)

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...

Posté(e)

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

Posté(e)

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...

Posté(e)

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...

Posté(e)

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

Posté(e)

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...

Posté(e)

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

Posté(e)

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...

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é