bbteddy Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 bonjour à toutes et à tous,J'ai un problème mais je améliore !!!! Voici mon code : (defun c:ccd () (setq selec(ssget)) (if selec (command "chprop" selec "" "co" "ducalque" "") (command "cecolor" "ducalque" ))) Donc si j'ai un objet sélectionné il me le change de couleur en "ducalque" et si je n'ai rien de sélectionné il me demande de valider la sélection vide pour changer en "ducalque" les futures éléments dessinés.Comment faire pour qu'il ne me demande pas de valider quand je n'ai rien de sélectionné ? merci d'avance !!!
Bred Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Salut,si j'ai bien compris : (defun c:ccd (/ selec) ; / selec : selec = nil (while (not selec) ; tant que selec = nil (setq selec (ssget)) (if selec (command "chprop" selec "" "co" "ducalque" "") (command "cecolor" "ducalque" ) ) ; fin de While ) (princ) ) Edit : j'ai mis un peu de commentaire pour expliquer. [Edité le 3/2/2010 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bbteddy Posté(e) le 3 février 2010 Auteur Posté(e) le 3 février 2010 Oula j'ai du mal m'exprimer : En fait je souhaite avoir 2 commandes sous le même raccourcie (ccd) : - quand un objet est sélectionné = changer la couleur de celui ci en du calque - et quand rien est sélectionné = rendre la couleur du calque courante BRED peut tu m'expliquer en détails les modifications apportés au code car j'ai l'impression que ca tourne en boucle !!!
bbteddy Posté(e) le 3 février 2010 Auteur Posté(e) le 3 février 2010 Nous avons écrit en même tant !!!
Bred Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Donc se que tu as écris fonctionne, sauf qu'il ne devais le faire qu'une fois, car dès que tu avais "remplis" la variable selec elle est toujours pour le dessin en cours, tans que tu ne la met pas à nil. Donc, sois tu fais un(setq selec nil)juste avant ton (if selec..... Sois tu "déclares" ta variable localement en faisant (defun c:ccd (/ selec).... ce qui "l'initialise à nil" Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bonuscad Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Comment faire pour qu'il ne me demande pas de valider quand je n'ai rien de sélectionné ? Pardon, mais je comprends pas bien.J'ai l'impression que tu souhaites ne pas avoir de validation des objets sélectionnés par (ssget) -> (boucles de ssget) "Choix des objets: " Si c'est le cas, avec (ssget) pas d'échappatoire, il faudrait peut être regarder avec (nentselp) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 tans que tu ne la met pas à nil. Bien que tu ais raison à propos de la variable locale, ce n'est pas ce qui peut bloquer son code. En effet (setq selec(ssget)): si rien n'est sélectionné, la variable se mettra à nil, donc écrasera la valeur de la variable prise à l'utilisation précédente et le control de (if) sera correct malgré tout. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Bred Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Oui, désolé, j'ai avancé sans regarder le 1er message.... :P Mais donc ton code fonctionne comme tu le veux !.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
bbteddy Posté(e) le 3 février 2010 Auteur Posté(e) le 3 février 2010 Oui, désolé, j'ai avancé sans regarder le 1er message.... :P Mais donc ton code fonctionne comme tu le veux !.... <acronym class=dict title= OUI mon code fonctionne très bien.MAIS quand aucun objet est sélectionné, il me demande d'en sélectionner ou de faire "entrée" ce que je voudrait c'est qu'il saute le ssget lorsqu'aucun objet n'est sélectionné avant le lancement de la commande. Ce qui m'éviterais de faire entrée. Vous allez penser "tout ca pour ca" oui je sais ..... mais j'essaie de comprendre et tout seul c'est pas simple ... @+
bonuscad Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 En fait je souhaite avoir 2 commandes sous le même raccourcie (ccd) :- quand un objet est sélectionné = changer la couleur de celui ci en du calque- et quand rien est sélectionné = rendre la couleur du calque courante Une alternative avec les GRIPS Si les objets qui ont leur poignées actives, alors change leur couleur en DuCalqueSi aucune poignée activée, alors couleur courante en DuCalque (defun c:ccd ( / ) (if (ssget "_I") (command "_.chprop" "_color" "ByLayer" "") (command "_.cecolor" "256" ) ) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Salut Je te propose une version "un peu plus poussée" avec les command qui n'apparaissent plus ainsi qu'une internationalisation des commandes avec leurs options. (defun c:ccd(/ cmd selec) (setq cmd (getvar "cmdecho")) (setvar "cmdecho" 0) (if (setq selec (ssget)) (command "_.chprop" selec "" "_color" "bylayer" "") (setvar "cecolor" "bylayer" ) ) (setvar "cmdecho" cmd) (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
bbteddy Posté(e) le 3 février 2010 Auteur Posté(e) le 3 février 2010 MERCI encore à vous Bonuscad, t'as solution me plait beaucoup peut tu m'expliquer (ssget "_I"). Patrick peux tu me décoder un peu ton lisp merci @bientôt
bonuscad Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Je ne peux que te traduire (si c'est ton soucis) l'option concernée de l'aide en ligne du développeur. I Implied selection (objects selected while PICKFIRST is in effect). En Français l'option reste "I" (pour "Implicite"), je conseille l'usage de "_I" quand même. Dans ce cas (ssget) renvoie la sélection implicite, pour peu que PICKFIRST soit actif (valeur à 1).Renvoie nil si les conditions ne sont pas requises. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Patrick_35 Posté(e) le 3 février 2010 Posté(e) le 3 février 2010 Le lisp avec les commentaires (defun c:ccd(/ cmd selec) ;; Sauvegarder la variable autocad cmdecho (setq cmd (getvar "cmdecho")) ;; Définir la variable cmdecho à 0 (setvar "cmdecho" 0) ;; sélection imbriqué dans un test if (if (setq selec (ssget)) ;; Oui, changer la couleur de la sélection (_.chprop=changer _color=couleur bylayer=ducalque) (command "_.chprop" selec "" "_color" "bylayer" "") ;; Non, la couleur courant devient ducalque (setvar "cecolor" "bylayer" ) ) ;; remettre la variable autocad cmdecho dans son état initial (setvar "cmdecho" cmd) ;; silence (princ) ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
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