Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

dans AutoCAD la touche 'Suppr' du clavier lance la commande suivante :

_.erase a condition d'avoir déjà sélectionné un objet.

Existe t-il une méthode pour redéfinir cette commande (lancer la même commande 'effacer' de la barre d'outils

'modifications')

Le but est d'éviter d'effacer certains blocs d'un dessin (dommage qu'on ne puissance pas les verrouiller à la sélection sans utiliser le principe des calques)

J'ai essayé la variable 'PICKFIRST' à 0, mais cela se répercute sur toutes les commandes.

Merci d'avance

Phil

Posté(e)

Salut,

 

Je ne comprends pas bien la question...

C’est un peu mal formulé en effet, mais je pense qu’il est fait allusion à l’absence de validation de la sélection lorsqu’une commande est lancé sur des objets sélectionnés au moyen des "grippes".

 

De mémoire je n’ai pas connaissance d’astuces simple à par redéfinir en Lisp la commande _erase pour proposer la validation des objets "grippés" avant d’effacer ou pas la sélection..

 

A+

Apprendre => Prendre => Rendre

Posté(e)

je pense qu’il est fait allusion à l’absence de validation de la sélection lorsqu’une commande est lancé sur des objets sélectionnés au moyen des "grippes".

 

Certes, mais:

 

Existe t-il une méthode pour redéfinir cette commande (lancer la même commande 'effacer' de la barre d'outils

'modifications')

 

Or il n'y a pas non plus de validation quand on utilise la commande 'effacer' de la barre d'outils 'modifications'... <_< <_<

Posté(e)
Or il n'y a pas non plus de validation quand on utilise la commande 'effacer' de la barre d'outils 'modifications'...

 

Oui tout à fait d’accord, c’est pour cela que je pense que c’est mal formulé, car comme la plupart des utilisateurs lorsqu’il passe par l’icône la sélection est sans doute faite après, alors qu’avec la touche suppr c’est le contraire, ce qui laisse croire que le comportement de la commande est différent.

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Rebonjour,

peut être pas clair en effet

Pour résumer :

* la touche 'Suppr' lance la commande par défaut '_.erase' (avec sélection des objets avant)

* le bouton 'effacer' de la barre d'outils "modifications' lance la commande '_erase' (avec sélection des objets avant ou apres)

 

de mémoire

le caractère '_' appel la commande dans une autre langue et '.' la commande de base (non redéfinie)

Donc le but c'est de pouvoir redéfinir le touche 'Suppr' comme le bouton 'effacer' (avec defun)

a+

Phil

Posté(e) (modifié)

Bonjour,

 

Je viens de voir ta réponse, finalement ce n’étais pas si obscure que cela, je pense plutôt que c’est moi qui était complétement passé à côté du sujet.. Donc en reprenant le problème depuis le départ.

Le but est d'éviter d'effacer certains blocs d'un dessin (dommage qu'on ne puissance pas les verrouiller à la sélection sans utiliser le principe des calques)

Ne sachant pas comment paramétrer la touche Suppr, ceci devrait fonctionner pour les problèmes de sélections avant pour la touche 'Suppr' et le bouton 'effacer' .

 

Dans le code personnalise la ligne suivante

'("TOTO" "TATA" "MomBloc")

Par la liste des blocs que tu souhaites protéger.

(or *commandreactor*
   (setq *commandreactor*
          (vlr-command-reactor  nil '((:vlr-commandWillStart . commandWillStartcallback)))
   )
)
(defun commandWillStartcallback	(rea lst / ss)
 (if (and (= (car lst) "ERASE") (setq ss (cadr (ssgetfirst))))
   (progn
     (mapcar
'(lambda (x / dxf)
   (if
     (and
       (= (type (setq x (cadr x))) 'ENAME)
       (= (cdr (assoc 0 (setq dxf (entget x)))) "INSERT")
       (member (cdr (assoc 2 dxf)) '("TOTO" "TATA" "MomBloc"))
     )
      (ssdel x ss)
   )
 )
(ssnamex ss)
     )
     (sssetfirst nil ss)
   )
 )
)

 

Voilà si cela peut t’inspirer..

A+

 

Edit1: Simplifié le code

Edit2: Corrigé coquille

Modifié par VDH-Bruno

Apprendre => Prendre => Rendre

Posté(e)

Bonjour,

Merci pour ta réponse

Cela m'inspire effectivement

C'est assez complexe pour moi.

Mais dois-je intégrer ce code dans 'acaddoc.lsp' par exemple, avec adaptation de la ligne.

a+

Phil

Posté(e)

Bonjour,

 

Mais dois-je intégrer ce code dans 'acaddoc.lsp' par exemple, avec adaptation de la ligne.

Eventuellement oui, tu peux également en chargement automatique via Outils->AutoLISP->Charger une application… puis le bouton contenue pour les applications chargés au démarrage.

Ce qui compte c’est que le code soit chargé (donc le réacteur d’évènement) dans la session de dessin courante.

 

Ps : J’ai une peu simplifier le code donné précédemment, je me suis aperçu que j’avais réécrit la fonction member.

A+

Apprendre => Prendre => Rendre

Posté(e)

Coucou

 

si j'ai bien compris ce qui absolument pas certain

c'est ce que je crains :

des gens grippent les objets et ENSUITE lance une commande

à mes yeux ce n'est oas une bonne chose (pour rester dans l'euphémisme)

 

il est bien plus précis de lancer la commande

et seulement ensuite de sélectionner les objets concernés

ça peut vous sembler identique mais l'approche est vraiment différente

 

amicalement

Posté(e)

Bonjour Didier,

 

il est bien plus précis de lancer la commande

et seulement ensuite de sélectionner les objets concernés

ça peut vous sembler identique mais l'approche est vraiment différente

Etant un utilisateur d’AutoCAD de longue dates, tu prêche un convaincu, mais dans ce cas le but du jeu consiste empêcher l’effacement de certains type de blocs (sans passer par le verrouillage des calques).

 

De façon simple l’opération consiste à redéfinir la commande _erase sauf que lorsqu’elle est appelé par la touche suppr, elle est précédé du point _.erase (ce qui rend caduc la redéfinition de commande).

 

Ne connaissant pas la solution sous AutoCAD pour redéfinir la touche suppr, et ne pouvant raisonnablement pas empêché sont utilisation (à moins de l’ôter du clavier), j’ai suggéré une solution avec un réacteur pour filtrer les sélections avant(gripper) dans le cas où la commande erase est appelé (c’était également pour moi l’occasion de m’exercer un peu dans ce domaine).

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Bonjour,

 

il est bien plus précis de lancer la commande

et seulement ensuite de sélectionner les objets concernés

 

Ah bon... et concrètement, en quoi est-ce plus précis ?! :huh:

A part une différence "philosophique", les deux méthodes donnent le même résultat (c'est une certitude), et il n'y en a pas une qui serait meilleure que l'autre (c'est juste mon avis). ;)

Posté(e)

Rebonjour,

Merci Bruno pour le résumé de mon problème car c'est exactement ça.

Je constate un inconvéniant sur l'utilisation d'un réacteur, il désactive les poignées dans la

sélection quelque soit la commande.

La touche suppr n'efface plus les blocs filtrés mais le bouton 'effacer' de la barre d'outils

les efface encore.

bref c'est pas gagné

a+

Phil

Posté(e)

Bonjour,

 

Je constate un inconvéniant sur l'utilisation d'un réacteur, il désactive les poignées dans la sélection quelque soit la commande

Oupss, désolé une coquille dans le code, c’est corrigé plus haut...

 

La touche suppr n'efface plus les blocs filtrés mais le bouton 'effacer' de la barre d'outils les efface encore.

Normal, je n’avais pas traité le cas de la sélection après car comme indiqué dans ma prose précédente, l’opération peut aisément être réalisé en redéfinissant la commande effacer sur le principe suivant :

(defun c:EFFACER ()
 (command "_.erase"
   (ssget '((-4 . "<NOT") (-4 . "<AND") (0 . "INSERT") (2 . "TOTO,TATA,MomBloc") (-4 . "AND>") (-4 . "NOT>")))
   ""
 )
 (princ)
)

 

Pour rendre la redéfinition de la commande effacer possible il faut supprimer la définition de l’actuel définition par la séquence suivante :

(command "_.undefine"  "EFFACER")

 

En général pour plus de sureté on intègre ce type d’instructions dans la fonction S::STARTUP que l’on définit dans le acaddoc.lsp, comme ceci par exemple :

;; S::STARTUP (Définie ou modifie la fonction) 
;; Permet à de redéfinir la commande interne effacer par celle définie précédemment par c:
(if S::STARTUP
 (setq S::STARTUP
        (append S::STARTUP
                '((command "_.undefine"  "EFFACER") (princ))
        )
 )
 (defun-q S::STARTUP ()
          (command "_.undefine"  "EFFACER")
          (princ)
 )
)

 

Voilà sinon sur le même modèle que précédemment une variation peut être plus simple de la fonction commandWillStartcallback

(defun commandWillStartcallback	(rea lst)
 (if (and (= (car lst) "ERASE") (cadr (ssgetfirst)))
   (sssetfirst nil (ssget "_I" '((-4 . "<NOT") (-4 . "<AND") (0 . "INSERT") (2 . "TOTO,TATA,MomBloc") (-4 . "AND>") (-4 . "NOT>"))))    
 )
)

Dans la fonction de sélection c’est l’expression codé en dure (2 . "TOTO,TATA,MomBloc") qu’il faut personnaliser.

 

Tout ceci est un principe général à terme l’idéal étant de substituer l’ expression "TOTO,TATA,MomBloc" par une variable globale que tu paramétrera suivant les blocs à verrouiller (et/ou à déverouillé).

 

A+

Apprendre => Prendre => Rendre

Posté(e)

Bonjour,

 

Bonjour,

 

Ah bon... et concrètement, en quoi est-ce plus précis ?! :huh:

A part une différence "philosophique", les deux méthodes donnent le même résultat (c'est une certitude), et il n'y en a pas une qui serait meilleure que l'autre (c'est juste mon avis). ;)

 

Alors loin de moi l’idée de déclencher une polémique mais comme je suis de l’avis de Didier et qu’il n’est plus trop présent sur le forum, je vais tenter de développé à sa place, après j’espère être à la hauteur niveau argumentaire.. :rolleyes:

 

Historiquement sous AutoCAD jusqu’à la Release 12 ou 11 je ne sais plus bien, il n’y avait qu’un mode de fonctionnement lancement de la commande puis sélection des objets. Ce mode fonctionne très bien, depuis toujours et avec toutes les commandes AutoCAD quelques soit le type de lancement : Menu déroulant, Icones, Ligne de commande, macro diésel etc..

 

Alors que pour la méthode sélection puis lancement de la commande, ce n’est pas compatible avec toutes les commandes AutoCAD, dans certain cas cela vient de la commande et sa logique, dans d’autres cas c’est de veilles commandes dont le code n’a jamais dû être mis à niveau, ce qui pose parfois des problèmes de cohérences entre les commandes et qui me fait préférer l’autre méthode..

 

 

A titre d’illustration quelques exemples parmi d’autres pour lesquels la sélection avant n’est pas possible:

 

La plupart des commandes AutoCAD nécessitant une sélection unique du type _break (coupure) _dimcenter (Marque centrale) alors que l’effort de mise à niveau a été réalisé pour la commande _offset (décaler).

 

Les commandes demandant de spécifier une source particulière avant de s’appliquer à plusieurs objets (là on comprend la limitation) du type _join (joindre).

 

Les commandes demandant le choix d’une option avant de s’appliquer (comme la plupart des commandes dont on peut désactiver la boite de dialogue) comme par exemple _-dimstyle (modifie les styles de cotes).

 

A ces exemples on peut ajouter les erreurs de macro dans les barres d’outils de certaines commandes, des macro de menu déroulant non compatible avec ce type de sélection, et la plupart des Lisps qui font l’impasse sur ce mode de sélection même si j’ai remarqué que tu y prêtais attention dans les tiens.

 

C’est cela qui fait dire à certains utilisateurs que la sélection avant manque un peu homogénéité dans son comportement et la différence n’est pas seulement philosophique, bien qu’il n’y ai rien de catastrophique non plus..

 

Cordialement,

Apprendre => Prendre => Rendre

Posté(e)

Salut

Tout à fait d'accord avec l'explication très précise de VDH-B

Très belle explication!!

C'est un gros problème (la sélection) lors de formation

Tiens je pense de suite à la commande décalé..............................

Faites l’essai, sélectionnez une ligne prenez la commande décalé tapez la valeur et que se passe t'il?????

Bryce tu vois qu'il y a une ENORME différence

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

Bonjour,

 

Bruno, je suis tout à fait d'accord pour qu'on dise qu'il est préférable de lancer d'abord la commande, pour la bonne et simple raison que ça fonctionne avec toutes les commandes, tandis que la sélection d'abord ne fonctionnera pas avec quelques commandes (en général pour des raisons logiques: étirer par ex.).

Je le précise d'ailleurs systématiquement en formation.

Au passage, parmi tes exemples la commande Joindre permet maintenant de sélectionner d'abord. ;)

 

Mais de là à dire que c'est une mauvaise façon de faire, ou que ce serait "moins précis", je ne suis pas d'accord.

Ce serait un peu comme de dire qu'il ne faut pas changer un objet de calque via la palette Propriétés ou le contrôle des calques, mais qu'il faut taper la commande CHANGER parce que c'est plus précis... <_<

Pour les commandes qui le permettent, le résultat est exactement le même.

 

Faites l’essai, sélectionnez une ligne prenez la commande décalé tapez la valeur et que se passe t'il?????

AutoCAD demande de "choisir un point sur le côté à décaler", normal...

Bryce tu vois qu'il y a une ENORME différence

Ben non, je ne vois rien de spécial...

Posté(e)

Au passage, parmi tes exemples la commande Joindre permet maintenant de sélectionner d'abord. ;)

Merci pour l’info, peut-être qu’un jour je gouterai de nouveau aux joies de la nouveauté :rolleyes: bien que cela n’en prenne pas le chemin… <_<

Bruno (Toujours sous AutoCAD 2007 :unsure: )

Apprendre => Prendre => Rendre

Posté(e)

 

Je le précise d'ailleurs systématiquement en formation.

 

 

Salut

Alors c'est une mauvaise façon de voir les choses surtout en formation, ce n'est pas la logique d'AutoCAD,

Comment explique tu la commande étirer en formation??blink.gif (commande déjà assez dure à expliquer)

Avec la méthode de sélection avant commande cela n'est pas possible.

 

Moi aussi des fois je sélectionne avant de prendre la commande, mais je connais quelle commande va se comportée correctement.

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e) (modifié)

Salut

Alors c'est une mauvaise façon de voir les choses surtout en formation

Ça c'est ce qu'on appelle avoir du tact ! :D

Je crois que tu n'as pas bien compris ce que j'ai écrit :

 

je suis tout à fait d'accord pour qu'on dise qu'il est préférable de lancer d'abord la commande, pour la bonne et simple raison que ça fonctionne avec toutes les commandes, tandis que la sélection d'abord ne fonctionnera pas avec quelques commandes (en général pour des raisons logiques: étirer par ex.).

Je le précise d'ailleurs systématiquement en formation.

Modifié par bryce
Posté(e)

Re,

tandis que la sélection d'abord ne fonctionnera pas avec quelques commandes (en général pour des raisons logiques: étirer par ex.).

Pour le gag, je m’aperçois que je suis finalement pas si malheureux avec ma version 2007, car la fonction étirer fonctionne très bien chez moi en sélection avant.. :D :D :D

 

Bruno

(Ps: Bryce désolé de t’avoir entrainé malgré moi dans cette polémique…)

Apprendre => Prendre => Rendre

Posté(e)

Pour le gag, je m’aperçois que je suis finalement pas si malheureux avec ma version 2007, car la fonction étirer fonctionne très bien chez moi en sélection avant.. :D :D :D

 

Je te rassure, ça fonctionne aussi sur les versions plus récentes ! (à condition de faire une fenêtre de capture avant de lancer la commande).

Mais c'est quand même plus limité qu'en lançant la commande d'abord (impossible d'utiliser un polygone de capture par ex.).

 

(Ps: Bryce désolé de t’avoir entrainé malgré moi dans cette polémique…)

Pas de problème. ;)

Posté(e)

Ça c'est ce qu'on appelle avoir du tact ! :D

(en général pour des raisons logiques: étirer par ex.).<br style="background-color: rgb(243, 249, 246); color: rgb(28, 40, 55); line-height: 19px; ">Je le précise d'ailleurs systématiquement en formation.

 

Désolé pour le tact!

Je n'avais pas vu l'exemple pour étirer!blink.gif

 

 

 

 

 

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

J'utilise la sélection avant la commande simplement pour avoir le menu contextuel. Je pense que les "anciens", comme moi, doivent lancer la commande avant la sélection ;).

 

J'ai remarqué que les nouvels utilisateurs d'AutoCAD utilisent beaucoup le menu contextuel pour les commandes de base et la touche "suppr" pour effacer. Je trouve qu'ils sont moins rapide que moi (commande au clavier + sélection :D )

Utilisateur AutoCAD (intensif) depuis la version 11 sous DOS

Utilisateur 3ds Max (occasionnel... dommage) depuis la version 2013 (version Design)

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é