Aller au contenu

Améliorer la commande " _HideObjects"


Messages recommandés

Posté(e)

Salut à tous,

 

Y aurait-il un moyen d'améliorer la commande _HideObjects?

 

En effet, lorsqu'on masque des objets, ceux-ci sont inactif à l'affichage mais ils restent sélectionnables. De ce fait, si on masque certains objets et lance la commande EFFACER puis TOUT, AutoCAD sélectionne tous les objets, même ceux qui sont masqués.

De ce fait, lorsqu'on valide une deuxième fois, on efface aussi les objets masqués. Or si on les a masqué, c'est peut-être aussi pour ne pas les voir mais aussi, ne pas les sélectionner.

 

Par conséquent, serait-il possible de masquer des objets et faire en sorte qu'ils ne soient pas sélectionnables?

 

Je précise que je ne souhaite pas geler ou inactiver des calques mais bien masquer ou isoler des objets qui peuvent être sur plusieurs calques.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Bonjour,

 

Étant un vieux de la vieille, je préfère l'ancienne méthode (peu connue) qui s'appuie sur le code DXF 60 qui rends les objets invisibles.

A la différence de _HideObjects qui masque les objets sur la session en cours. Jouer sur le code 60 reste d'une session à l'autre. (après l'enregistrement du dessin).

 

Malheureusement aucune commande standard ne donne accès à cette fonctionnalité très ancienne d' Autocad, obliger de recourir à la programmation.

Pour ma part j'ai deux boutons associés à ces bouts de code lisp: e_off / e_on.

 

(defun c:e_off ( / js_off n ent dxf_ent )
 (princ "\nChoix des entités à inactiver: ")
 (setq js_off (ssget) n 0)
 (cond
(js_off
 	(repeat (sslength js_off)
   	(setq
     	ent (ssname js_off n)
     	dxf_ent (entget ent)
   	)
   	(if (not (member '(60 . 0) dxf_ent))
     	(entmod (append dxf_ent '((60 . 1))))
     	(entmod (subst '(60 . 1) '(60 . 0) dxf_ent))
   	)
   	(setq n (1+ n))
 	)
)
(T
 	(princ "\nSélection vide.")
)
 )
 (princ)
)
(defun c:e_on ( / js_off n js_swap n_swap ent ent_dxf js_on nb)
 (setq js_off (ssget "_X" '((60 . 1))) n 0)
 (cond
(js_off
 	(setq js_swap (ssget "_X"  '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))) n_swap 0)
 	(cond
   	(js_swap
     	(repeat (sslength js_swap)
       	(setq ent (ssname js_swap n_swap))
       	(redraw ent 2)
       	(setq n_swap (1+ n_swap))
     	)
   	)
 	)
 	(repeat (sslength js_off)
   	(setq ent (ssname js_off n))
   	(setq dxf_ent (entget ent))
   	(entmod (subst '(60 . 0) '(60 . 1) dxf_ent))
   	(entupd ent)
   	(setq n (1+ n))
 	)
 	(princ "\nChoix des entités à réactiver: ")
 	(setq js_on (ssget) n 0)
 	(cond
   	(js_on
     	(repeat (sslength js_on)
       	(if (ssmemb (ssname js_on n) js_off)
         	(setq js_off (ssdel (ssname js_on n) js_off))
       	)
       	(setq n (1+ n))
     	)
     	(cond
       	(js_off
         	(setq nb 0)
         	(repeat (sslength js_off)
           	(setq ent (ssname js_off nb))
           	(setq dxf_ent (entget ent))
           	(if (not (member '(60 . 0) dxf_ent))
             	(entmod (append dxf_ent '((60 . 1))))
             	(entmod (subst '(60 . 1) '(60 . 0) dxf_ent))
           	)
           	(entupd ent)
           	(setq nb (1+ nb))
         	)
         	(cond
           	(js_swap
             	(setq n_swap 0)
             	(repeat (sslength js_swap)
               	(setq ent (ssname js_swap n_swap))
               	(redraw ent 1)
               	(setq n_swap (1+ n_swap))
             	)
           	)
         	)
       	)
       	(T
         	(princ "\nAucune entité à réactivée!")
       	)
     	)
   	)
   	(T
     	(princ "\nSélection vide.")
   	)
 	)
)
(T
 	(princ "\nAucune entité à réactivée!")
)
 )
 (princ)
)

Avec cette méthode il est facile d'exclure les objets invisibles d'une sélection, par exemple:

(sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut Bonuscad,

 

Merci pour le lisp smile.gif

 

Cepndant, j'ai dû louper un truc car quand je fais: effacer -> tout > entrer, j'efface tout, même les objets masqués.

 

J'ai pourtant coller dans la ligne de commandes:

 

(sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))

 

avant d'effacer mes objets.

 

Où est-ce que j'ai pu foirer? unsure.gif

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Posté(e)

Bonjour Steven,

 

N'ayant pas de version récente d'AutoCAD, je n'ai jamais travaillé avec la commande _HideObjects, donc comme BonusCAD j'utilise le code DXF60 et qq ligne de lisp. La version donné par BonusCAD est bonne (comme toujours avec ses codes lisp).

 

 

Cepndant, j'ai dû louper un truc car quand je fais: effacer -> tout > entrer, j'efface tout, même les objets masqués.

 

J'ai pourtant coller dans la ligne de commandes:

 

(sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))

 

avant d'effacer mes objets.

 

Où est-ce que j'ai pu foirer?

 

Peut être ici, si on travaille avec une sélection précédent

 

Commande: (sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))

 

Choix des objets: tout

72 trouvé(s)

 

Choix des objets:

 

(nil <Selection set: e5>)

 

Commande: ef

EFFACER 72 trouvé(s)

 

Ou comme ceci si on travaille avec la commande puis la sélection:

Commande: ef

EFFACER

Choix des objets: tout

78 trouvé(s)

 

Choix des objets: s

 

Supprimer les objets: (ssget "_X" '((60 . 1)))

<Selection set: 13d>

6 trouvé(s), 6 supprimé(s), 72 au total

 

Salutations Bruno

Apprendre => Prendre => Rendre

Posté(e)

Bruno m'a devancé...

(sssetfirst nil (ssget '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))

doit être utilisé comme les grips (verbe -> action) et non dans le sens classique des commande Autocad (action -> verbe)

 

Cette ligne de sélection en lisp te laisse le choix des objets en mode unique, fenêtre ou capture conjugés.

 

Si tu veux l'équivalent de "effacer" "tout" en excluant les objets invisibles, tu peux utiliser l'équivalent:

(sssetfirst nil (ssget "_X" '((-4 . "<NOT") (60 . 1) (-4 . "NOT>"))))

En résumé, lancer la sélection puis l'action désiré (effacer, déplacer, copier, etc...)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Salut.

 

A la différence de _HideObjects qui masque les objets sur la session en cours. Jouer sur le code 60 reste d'une session à l'autre. (après l'enregistrement du dessin).

Pour une fois que je peut apprendre un truc à un ancien : même si ça ne résout pas le problème soulevé par Steven, la variable OBJECTISOLATIONMODE permet de gérer l'enregistrement ou pas de l'état d'isolation des objets d'une session à l'autre.

 

Cordially.

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Posté(e)

Salut.

 

 

Pour une fois que je peut apprendre un truc à un ancien : même si ça ne résout pas le problème soulevé par Steven, la variable OBJECTISOLATIONMODE permet de gérer l'enregistrement ou pas de l'état d'isolation des objets d'une session à l'autre.

 

Cordially.

 

Hé oui, tu m'apprends quelque chose...

Si jusqu'à la version 2002 je connaissais à peu près toutes les variables de tête, ce n'est plus le cas aujourd'hui !

Beaucoup se plaignent qu 'Autocad n'offre pas beaucoup d'évolution au cours des versions, par contre aux niveaux des variables, ça a été la profusion (comme la multiplication des petits pains). En plus maintenant ces variables ont souvent des noms à rallonge qu'il est difficile à mémoriser.

 

Donc je peux en apprendre tous les jours sur ces variables,c'est la que le mémo de Christian (Rebcao) est utile.

 

Et là je ne parle que des variables système car j'ai abandonné de me pencher sur les variables d'environnement où il y en a une foultitude (voir setenv et getenv)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

L'aventage des noms à rallonge c'est quant-même que c'est plus facile de les retrouver ou découvrir par simple recherche filtrée "variable" dans l'aide officielle. Y'a pleins de trucs qui vont pas avec todesk, mais leur aide est bien foutue, dans l'ensemble ^^

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Posté(e)

, mais leur aide est bien foutue, dans l'ensemble ^^

 

:blink:

Ca a dépendu du millésime <_>

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Heu... oui, effectivement. Depuis le temps que je parcourt celle de la 2018 j'en oublie le sac de nœuds de la 2015. Et j'en connais pas de plus anciennes...

Je suis dysorthographique alors lâchez-moi les basques avec ça, je fait déjà de mon mieux.
Membre d'Extinction Rebellion, car pour sauver le monde il n'est jamais trop tard, amour et rage !
Pour écrire un vraie point médian (e·x·e·m·p·l·e) [Alt + 0183] ou ajout d'un raccourci clavier personnalisé (ex. [AltGr + ;])

Utilisateur d'AutoCAD 2021 sous Windows 10

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é