Aller au contenu

ZOOM SUR OBJET SELECTIONNE


lili2006

Messages recommandés

Salut,

 

Il serait temps de s'y mettre.

 

AutoLISP, en utilisant la fonction command est aussi simple que le script ou les macros mais plus facile à tester puisqu'il suffit d'entrer une expression en ligne de commande (ou dans la console de l'éditeur Visual LISP.

 

En macro, on écrirait :

^C^C_zoom;_object;_previous;;

 

En script :

_zoom _object _previous  

 

En LISP, tout simplement :

(command "_zoom" "_object" "_previous" "")

 

On pourra ensuite intégrer cette expression dans une définition de fonction :

(defun c:zop ()
 (command "_zoom" "_object" "_previous" "")
 (princ)
)

 

Dans tout les cas précédents, on suppose qu'un ou plusieurs objets sont sélectionnés et il y aura une erreur s'il n'y a aucune sélection précédente.

 

Avec la variable PICKFIRST à 1 si un jeu de sélection est actif, il sera automatiquement pris en compte par la commande. on peut donc supprimer les deux derniers arguments pour la fonction command ("_previous" et "") ainsi, si aucune sélection n'est active, l'utilisateur sera invité à finir la commande :

 

(defun c:zo ()
 (command "_zoom" "_object")
 (princ)
)

 

Il est quand même préférable que le programme ne se base pas sur la valeur supposée d'une variable. En LISP, il sera relativement aisé soit de savoir si une sélection est active (avec ssgetfirst) et sinon d'inviter l'utilisateur à sélectionner des objets.

 

(defun c:zo (/ ss)
 (if
   (or
     (setq ss (cadr (ssgetfirst))) 
     (setq ss (ssget)) 
   )
   (command "_zoom" "_object" ss "")
 )
 (princ)
)

 

Pour pousser encore, on peut éviter d'utiliser la commande native (voir ici)

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Merci Gilles,

 

Il serait temps de s'y mettre.

 

Ben, je suis bien d'accord avec ça,.... :cool:

 

Très bon premier exercice dans tous les cas,...

 

J'avais fini par trouver ça (Et encore, ça marchait pas !!!)=>

 

 'zoom;o

 

Avant de me rendre compte qu'il y avait une commande native ,..pfuuuuuuuuuuuuu

:o :exclam:

 

Commande: '_zoom

Spécifiez le coin d'une fenêtre, entrez un facteur d'échelle (nX ou nXP) ou

[Tout/Centre/DYnamique/ETendu/Précédent/Echelle/Fenêtre/Objet] : _o

Choix des objets: 1 trouvé(s)

Choix des objets:

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

On pourra ensuite intégrer cette expression dans une définition de fonction :

(defun c:zop ()
 (command "_zoom" "_object" "_previous" "")
 (princ)
)

 

Zoom Objet = Zop :D

 

bravo Gile ... on voit là ta délicatesse ou l'envie d'éviter les moqueries, au premier coup je me sis dis ...

"pourquoi zop ? Z pour zoom mais OP pour objet ???? j'aurais plutôt vu OB !"

 

et là, ce fut la révélation ... http://www.lidie.eu/3%20match/images/smiley_mdr.gif

Raph.

Celui qui pose une question est bête 5 minutes, celui qui n'en pose pas l'est toute sa vie !

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je m’immisce dans la discutions, car j’aime beaucoup ce genre de post et je trouve qu’on en apprend souvent beaucoup plus dans trois lignes de codes que dans 100…

 

Pour émuler encore un peu la routine, on peut raisonnablement imaginer que dans le cas d’une sélection précédente, il n’y a pas nécessité de la valider un peu comme dans le cas de la commande _erase.

 
(defun c:zo (/ ss)
 (if
   (or
     (if (cadr (ssgetfirst)) (setq ss (ssget ":L"))) 
     (setq ss (ssget)) 
   )
   (command "_zoom" "_object" ss "")
 )
 (princ)
)

 

 

Pour ce genre de petite fonction il n’est pas toujours nécessaire de la nommer, ou peut également en faire une fonction anonyme sous cette forme :

 
((lambda (ss) (command "_zoom" "_object" ss "") (princ))
 (if (cadr (ssgetfirst))
   (ssget ":L")
   (ssget)
 )
)

 

A lancer directement sur la ligne de commande ou à enregistrer dans un fichier puis à lancer par un simple glisser-déposé, à insérer dans une palette d’outil (à vérifier) ou plus simplement dans un bouton de commande.

 

 

 

Bon comme je suis également en plein apprentissage du Lisp, j’espère que Lili2006 ne m’en voudra pas trop si je profite de l’occasion ( occasion que j’attendais) pour me faire éclairer sur un point de détail concernant le comportement des fonctions ssgetfirst & ssget

 

Car même si les expressions :

(cadr (ssgetfirst)) ;retourne

(ssget) ;retourne

 

Retourne toutes 2 un jeu de sélection, j’avais déjà remarqué en les triturant qu’ils n’étaient pas de même valeurs, je m’explique :

-Pour (ssget) passé en argument, le jeu est considéré comme « clos » et ne nécessite pas de validation pour continuer l’exécution (d’ailleurs la validation à déjà eu lieu lors de sa création)

-Pour (cadr (ssgetfirst)) passé en argument, le jeu de sélection est considéré comme « ouvert » (cas du code proposé par (gile)) en ce sens que dans la fonction appelante la possibilité de le compléter est possible, sinon il faut le valider pour le clore et continuer l’exécution du programme.

 

Je crois par expérience avoir compris la différence de comportement entre les deux jeux de sélection retourné, par contre je comprends moins bien le fait qu’à l’évaluation des fonctions toutes deux retourne un jeu de sélection ou il n’est pas possible de distinguer leur spécificité.

 

Pour ce qui est de l’expression (ssget ":L") que j’ai utilisé et pour rendre à césar ce qui revient à césar je l’avais déjà remarqué dans des lignes de codes écrites par Patrick-35 (à qui je dis une fois de plus merci), si j’ai saisie l’intérêt que l’on pouvait faire de l’expression ":L" dans ssget je n’ai jamais trouvé de documentation la concernant alors si des fois ils en avaient d’autres que je devrais connaître...

 

Cordialement

VDH-Bruno

 

 

 

 

[Edité le 28/6/2011 par VDH-Bruno]

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Un extrait de l'aides 2004 pour repondre a ta derniere question

 

(ssget [sel-method] [pt1 [pt2]] [pt-list] [filter-list])

 

Selection sets can contain objects from both paper and model space, but when the selection set is used in an operation, ssget filters out objects from the space not currently in effect. Selection sets returned by ssget contain main entities only (no attributes or polyline vertices).

 

Arguments

 

sel-method

 

A string that specifies the object selection method. Valid selection methods are

 

C Crossing selection.

 

CP Cpolygon selection (all objects crossing and inside of the specified polygon).

 

F Fence selection.

 

I Implied selection (objects selected while PICKFIRST is in effect).

 

L Last visible object added to the database.

 

P Last selection set created.

 

W Window selection.

 

WP WPolygon (all objects within the specified polygon).

 

X Entire database. If you specify the X selection method and do not provide a filter-list, ssget selects all entities in the database, including entities on layers that are off, frozen, and out of the visible screen.

 

:E Everything within the cursor's object selection pickbox.

 

:N Call ssnamex for additional information on container blocks and transformation matrices for any entities selected during the ssget operation. This additional information is available only for entities selected via graphical selection methods such as Window, Crossing, and point picks.

 

Unlike the other object selection methods, :N may return multiple entities with the same entity name in the selection set. For example, if the user selects a subentity of a complex entity such as a BlockReference, PolygonMesh, or old style polyline, ssget looks at the subentity that is selected when determining if it has already been selected. However, ssget actually adds the main entity (BlockReference, PolygonMesh, an so on) to the selection set. The result could be multiple entries with the same entity name in the selection set (each will have different subentity information for ssnamex to report).

 

:S Allow single selection only.

 

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Concernant les modes de sélection utilisable avec ssget qui ne sont pas documentés, on peut trouver ici un message de alanjt assez exhaustif mais en anglais et parfois inexact.

 

Je ne parlerais donc que de ceux que j'utilise et dont je pense avoir compris le fonctionnement.

Certains modes requièrent un underscore comme préfixe d'autres peuvent s'en passer, personnellement, plutôt que d'essayer de retenir les uns et les autres, je l'utilise systématiquement.

 

(ssget "_A") fonctionne comme "_X", sans intervention de l'utilisateur, mais rejette les objets sur les calques gelés (les objets sur les calques inactifs sont dans les deux cas sélectionnés).

 

(ssget "_:L") rejette les objets sur des calques verrouillés, ne peut pas être utilisé avec les modes de sélection 'automatiques' "_A", "_I", "_L", "_P" ou "_X".

 

Le préfixe "_+." peut être utilisé avec d'autres modes de sélection interactifs pour forcer la sélection par point. Par exemple, combiné avec ":S" (sélection unique) il permet un comportement similaire à entsel.

 

Comme dit ci-dessus, certains modes de sélection peuvent être combinés avec d'autres, quelques exemples à tester :

 

(ssget "_:S:E") : sélection unique par point de tous les objets sous le curseur de sélection

(ssget _+.:S) : sélection unique par point d'un seul objet sous le curseur de sélection (comme entsel)

(ssget "_:S:L") : sélection unique par point, fenêtre ou capture des objets sur les calques non verrouillés

etc...

ne pas hésiter à faire de nombreux essais avec ces combinaisons ou d'autres...

 

Je n'ai jamais vraiment réussi à faire fonctionner certains autres modes sélection (ou à en comprendre le fonctionnement), qu'il soient renseignés (:N, :R, :U, :V) ou non (:P, :D, ...).

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

Merci (gile) pour ce complément d’information (très instructif comme d’habitude), concernant les modes de sélections non documentés je l’avais soupçonné par déduction, tu viens de me le confirmer, pour le underscore je l’avais déjà remarqué (et fait un parallèle avec l’internationalisation des commandes AutoCAD), sur l’emploi de l’opérande (+) j’ignorais cette possibilité ( à l’occasion j’en testais d’autres.. histoire de voir..).

 

ne pas hésiter à faire de nombreux essais avec ces combinaisons ou d'autres...
Hé bien moi qui croyait en avoir déjà pas mal testé, il y a quelques mois en pensant avoir fait un bon tour d’horizon.. Avec ces nouvelles possiblitées, me voilà reparti pour une belle série..

A+

 

 

[Edité le 30/6/2011 par VDH-Bruno]

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Salut VDH-Bruno

 

j’espère que Lili2006 ne m’en voudra pas trop si je profite de l’occasion ( occasion que j’attendais)

 

Au contraire, le but des posts c'est de faire avancer le shmilblick ! :D

 

Dans mon cas, il y a bien longtemps que je suis largué dans les explications mais qu'importe,je vous lis tout de même.... :o :cool:

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Dans mon cas, il y a bien longtemps que je suis largué dans les explications

 

Désolé lili2006 ce n’étais pas mon intention en intervenant sur ce post, sinon même si j’interviens peu sur ce forum et pas du tout sur les autres par manque de disponibilité, je vous lis également et j’ai pu constater ta grande maîtrise d’AutoCAD (bien meilleur que celle que j’ai des versions récentes). De plus la personnalisation (menu diesel script..) ne t’est pas étrangère non plus, donc en toute logique le Lisp est la prochaine étape :D (pour peu biensur que tu y trouve un intérêt suffisant pour y mobiliser le nombres d’heures nécessaire au démarrage).

 

A+ Bruno

 

Apprendre => Prendre => Rendre

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

 

ce n’étais pas mon intention en intervenant sur ce post,

 

Oui, je sais et ce n'est pas une critique (bien au contraire, cela fait vivre le forum,... :D ) mais plutôt un constat, :o

 

j’ai pu constater ta grande maîtrise d’AutoCAD

 

Ouh là, n'exagérons rien, plein de fonction ne me parle encore pas beaucoup,...(notamment en 3D,...)

 

le Lisp est la prochaine étape (pour peu biensur que tu y trouve un intérêt suffisant pour y mobiliser le nombres d’heures nécessaire au démarrage).

 

Et voilà, le pb, le temps à y consacrer,...

 

J'ai encore tellement de chose à apprendre avant,...Notamment sur covadis et Map dont je sors d'une formation très intéressante avec lovecraft (merci encore à lui pour sa très grande disponibilité et sa gentillesse,... ;) )

 

Mais je ne désespère pas et comme tu l'a très bien dis plus haut, ces "petits" sujets sont parfait pour débuter,...

 

@u plaisir,

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

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é