Aller au contenu

Je bloque encore !!!


Messages recommandés

Posté(e)

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 !!!

 

Posté(e)

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...

Posté(e)

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 !!!

Posté(e)

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...

Posté(e)
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

Posté(e)

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

Posté(e)

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...

Posté(e)
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 ...

 

@+

Posté(e)

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 DuCalque

Si 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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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

Posté(e)

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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é