Matt666 Posté(e) le 28 février 2019 Posté(e) le 28 février 2019 Bonjour à tous, Petite question à priori assez simple, je ne vois pas comment faire :Sur Autocad, lorsqu'on demande à l'utilisateur de sélectionner une ou plusieurs entités, on peut afficher l'entité sous la souris en surbrillance ou en pointillés.J'aimerais contrôler cette surbrillance pour n'afficher que les entités d'un type particulier (bloc ou ligne par exemple) en pointillés.Avez-vous une solution, idéalement compatible entsel et ssget ?Merci à vous. "Chacun compte pour un, et nul ne compte pour plus d'un."
Vincent P. Posté(e) le 28 février 2019 Posté(e) le 28 février 2019 Salut Matt666 Regarde du coté de REDRAW.Je l'ai utilisé dans un de mes lisp où je sélectionne des fenêtres (FMULT) ;;-------------------------------------------------------------------------------------------;; ;;-------------------------------------- Par Vincent P. -------------------------------------;; ;; Créé un champ automatique affichant l'échelle d'une fenêtre dans un cartouche ou un texte ;; ;;-------------------------------------------------------------------------------------------;; (vl-load-com) (defun c:EchCart (/ fen cart id ech ctab) (setq ctab (getvar "Ctab")) ; trouve le nom de la présentation courante (setq fen (ssget "_A" (list (cons 0 "VIEWPORT") (cons 410 ctab)))) ; selectionne toutes les fenêtres de la présentation courante (if (= (sslength fen) 2) ; si la selectione n'a qu'une fenêtre (progn ; oui (redraw (ssname fen 0) 3) ; surbrillance de la fenettre (princ "\nFenêtre auto-selectionnée") ) (progn ; non (princ "\nSelectionner une Fenêtre") (while (null (setq fen (ssget "_:S:E" '((0 . "VIEWPORT"))))) ; selection manuelle de la fenêtre (princ "\nCe n'est pas une fenêtre")) )) (redraw (ssname fen 0) 3) ; surbrillance de la fenettre (setq id (vla-get-ObjectID (vlax-ename->vla-object (ssname fen 0))) ; isoler l'ID de la fenêtre ech (strcat "1/%<\\AcExpr (1000/%<\\AcObjProp Object(%<\\_ObjId " ; créer le champ de l'échelle (itoa id) ">%).CustomScale \\f \"%lu2%qf2816\">%) \\f \"%lu2%zs12%th39\">%")) (if (setq cart (car (entsel "\nSelectionner un cartouche"))) ; si mauvaise selection (progn ; si bonne selection (setpropertyvalue cart "ECHELLE" ech) ; insérer le champ dans l'attribut Echelle du cartouche (command "METTREAJOURCHAMP" cart "")) ; mise à jour des champs du cartouche (command "-TEXTMULT" (getpoint) "L" 0 (strcat "Echelle : " ech " eme") "") ; création d'un texte contenant l'échelle ) (redraw (ssname fen 0) 4) ; suprime la surbrillance de la fenêtre (princ) ) Lispeur éternel débutant! Autocad Map3D 2023 Covadis-Autopist 18.2
Matt666 Posté(e) le 28 février 2019 Auteur Posté(e) le 28 février 2019 Salut Vincent, et merci pour ta réponse. redraw fonctionne si une entité est sélectionnée, or là ce sont les entités qui sont sous le pointeur, avant clic gauche de sélection.Mais peut être couplé avec un grread, je vais creuser un peu merci. "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 28 février 2019 Auteur Posté(e) le 28 février 2019 C'est bon j'ai trouvé comment faire, merci à vous. C'est encore à l'état d'ébauche, si ça intéresse quelques-uns je ettrai le bout de code. "Chacun compte pour un, et nul ne compte pour plus d'un."
didier Posté(e) le 28 février 2019 Posté(e) le 28 février 2019 Coucou TOUT ce qui est échangé sur ce site intéresse quelqu'un et si ce n'est pas aujourd'hui demain ce sera le casJe t'invite à déposer ce que tu as trouvé, à moins que tu travailles pour la NASA ou le FBI bien sûr, et tu feras progresser quelqu'un qui n'aurait peut-être pas eu l'idée de poser la question Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Matt666 Posté(e) le 28 février 2019 Auteur Posté(e) le 28 février 2019 Dac, je finis un truc pas clair avec sssetfirst qui n'affiche pas les poignées à la fin et je vous présente le petit. "Chacun compte pour un, et nul ne compte pour plus d'un."
Matt666 Posté(e) le 28 février 2019 Auteur Posté(e) le 28 février 2019 Voici donc le bout de code, sous forme de fonction.;Name: entself ;Version: 1.0 ;Bcad Version: After V8 ;Date: 20190228 ;Description: Invite utilisateur de sélection unique (comme entsel), avec filtre sur type d'entité et sur aperçu en surbrillance ; Arguments : ; str : Message d'invite ; lst : Liste des types d'entités à filtrer ; Ex : (entself "Sélectionner les entités : " '("INSERT" "LINE")) ;History: ; v1.0 20190228 1ère version (defun entself ( str lst / *error* osmode key e loop) (vl-load-com) ;Fonction d'erreur (defun *error* (msg) (if (and msg (/= msg "Fonction annulée") (/= msg "Function cancelled") (/= msg "quit / exit abort") ) (princ (strcat (if (= "fr_FR" (getvar 'locale)) "\nErreur: " "\Error: ") msg)) ) (setvar 'osmode osmode) (vla-endUndoMark acdoc) (princ) ) (vla-startUndoMark (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))) (setq loop T osmode (getvar 'osmode)) (princ str) (setvar 'osmode 0) (sssetfirst nil nil) (while (and (setq key (grread T 12 2)) (/= (car key) 3) loop) (cond ((= 5 (car key)) (if e (redraw e 4)) (if (setq e (nentselp (cadr key))) (progn (if (eq 4 (length e)) (setq e (last (last e))) (setq e (car e)) ) (if (vl-position (cdr (assoc 0 (entget e))) lst) (redraw e 3) (setq e nil) ) ) ) ) ((eq 11 (car key)) (if e (redraw e 4)) (setq e nil loop nil) ) ((equal key '(2 13)) (if e (redraw e 4)) (setq loop nil) ) ) ) (if e (sssetfirst nil (ssadd e (ssadd)))) (*error* nil) e ) Dites moi ce que vous en pensez. Ca fonctionne sur BricsCAD, je ne garantis rien sur AutoCAD. "Chacun compte pour un, et nul ne compte pour plus d'un."
didier Posté(e) le 1 mars 2019 Posté(e) le 1 mars 2019 Coucou MerciPas disponible car beaucoup de boulot mais on te tiendra au courant Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
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