Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

 

Est-il possible d'isoler un calque sans cliquer dessus, juste en écrivant son nom dans la ligne de commande ?

J'ai fait des recherches sans rien trouver, mais je m'étonne qu'une requête si simple n'ai jamais été demandée.

Sapin

Posté(e)

Re,

 

Dans le même esprit, j'ai fait une macro avec laquelle je souhaite que mon calque CONT soit isolé avec mon calque HACH, HACH est courant, et lance la fonction hachure, mais ce que je n'arrive pas à faire c'est cliquer sur plusieurs contours avant de rétablir l'état de calque précédent. angry.gif

 

^C^C_-Color;ducalque;_-Linetype;A;;;_-lweight;ducalque;LWDISPLAY;0;-calque;L;01_HACH_BBSG;e;01_HACH_BBSG;co;252;01_HACH_BBSG;tl;continuous;;;-calque;in;~01_CONT_BBSG;;;-h;;\;_layerp;

 

Sapin

Posté(e)

Bonjour,

 

C'est le moment de te lancer avec un Lisp simple. ;)

Par exemple:

(defun c:HH ( / )
 (setvar "CECOLOR" "ByLayer")
 (setvar "CELTYPE" "ByLayer")
 (setvar "CELWEIGHT" -1)
 (setvar "LWDISPLAY" 0)
 (command "-CALQUE" "L" "01_CONT_BBSG" "E" "01_CONT_BBSG" "IN" "~01_CONT_BBSG" "L" "01_CONT_BBSG" "E" "01_HATCH_BBSG" "CO" 252 "01_HATCH_BBSG" "TL" "Continuous" "01_HATCH_BBSG" "")
 (command "-HACHURES")
 (while (> (getvar "CMDACTIVE") 0)
   (command pause)
 )
 (command "_LAYERP")
 (princ)
)

Posté(e)

Héhéhé ! tongue.gif

 

Il n'y a aucun moyen de faire ça en macro ? c'est un peu la loose quand même !

Autrement, c'est vrai que ça n'a pas l'air compliqué lorsque ce sont des opérations de commandes.

juste comme ça, sans bouquin ça à l'air de ressembler à :

defun c:name : nom du prog, ça OK

(/) : pas de variables en jeu ?

CECOLOR : 256 pour dire ducalque ?

celtype :idem

celweight :idem

command : je reprend mon script macro, adapté en écriture pour le lisp

while: pause ? cela sous entends que contrairement au script, un lisp permet d'attendre d'avoir fini avec une boite de dialogue et reprendre sa lecture après ?

(princ) : c'est fini ?

Sapin

Posté(e)

Oui, c'est ça. :)

Utilisé de manière basique, le Lisp te permet de faire la même chose que des macros, mais avec plus d'interactivité.

Ici par exemple, on lance la commande Hachures, puis la boucle while permet de mettre en pause tant qu'une commande est active (variable CMDACTIVE > 0), ce qui n'est pas possible avec une simple macro.

  • 3 mois après...
Posté(e)

Re,

 

Je sais que ça fait un petit bail depuis la dernière réponse, mais en me replongeant dans ce bout de code super amateur, il y a un truc que je pige pas : Pourquoi lorsque la commande _hatch est lancée, je ne peux que sélectionner mes polylignes-contour une par une ? comment activer la fenêtre de capture ? dans le même esprit, je n'arrive pas non plus à faire que les hachures soient séparées.

 

Merci pour votre aide

 

(defun c:HHBBSG150 ( / ) (setvar "CECOLOR" "ByLayer")[/size]
 (setvar "CELTYPE" "ByLayer")
 (setvar "CELWEIGHT" -1)
 (setvar "LWDISPLAY" 0)
 (command "-CALQUE" "L" "01_VOI_CONT_P_BBSG_150KG" "E" "01_VOI_HACH_P_BBSG_150KG" "IN" "~01_VOI_CONT_P_BBSG_150KG" "N" "")
(command "_hatch" "_solid")
(while (> (getvar "CMDACTIVE") 0)
   (command pause)
 )
 (command "_LAYERP")
 (princ)) 
HHBBSG150

 

 

Sapin

Posté(e)

Bonjour grand_sapin,

 

Tu as un soucis dans le choix des options de la commande hachure.

Lance la commande -hatch pour afficher les options dans la ligne de commande.

Tu obtiendras alors la ligne

(command "_hatch" "_P" "_solid" "_s")

 

Vérifie aussi la commande -calque car elle pose un problème chez moi avec tes options.

 

Pour obtenir des hachures séparées, il faut modifier la variable HPSEPARATE. Tu vas pouvoir en apprendre un peu plus sur lisp. :D

 

Avant la commande hachure, ajoute les 2 lignes suivantes :

(setq h_sep (getvar 'HPSEPARATE)

Enregistre la valeur actuelle de la variable HPSEPARATE sous la variable h_sep à ajouter au début du programme. (/ hsep)

 

(setvar "HPSEPARATE" 1)

Met la valeur de la variable à 1

 

Puis après la boucle (While ...) la ligne :

 

(setvar "HPSEPARATE" h_sep)

Remet la valeur de la variable à sa position d'origine.

 

Olivier

Posté(e)

Merci Olivier,

 

malheureusement, je suis un cas assez désespéré, et la routine mise à jour ne fonctionne pas. Enfin, elle n'est pas prise en compte, : erreur: Fonction annulée

 

c'est bien comme ça qu'il fallait l'écrire ? je suis sûr qu'il y a une parenthèse qui foire

 

(defun c:HHBBSG150 ( / ) (setvar "CECOLOR" "ByLayer")
 (setvar "CELTYPE" "ByLayer")
 (setvar "CELWEIGHT" -1)
 (setvar "LWDISPLAY" 0)
 (command "-CALQUE" "L" "01_VOI_CONT_P_BBSG_150KG" "E" "01_VOI_HACH_P_BBSG_150KG" "IN" "~01_VOI_CONT_P_BBSG_150KG" "N" "")
 (setq h_sep (getvar 'HPSEPARATE)
 (setvar "HPSEPARATE" 1)
 (command "_hatch" "_P" "_solid" "_s")
(while (> (getvar "CMDACTIVE") 0)
   (command pause)
 )
 (setvar "HPSEPARATE" h_sep)
 (command "_LAYERP")
 (princ)))
HHBBSG150

Posté(e)

Comme déjà dit, j'ai une erreur sur la commande -calque qui vient du "N" en fin de ligne.

Cela lance une demande de nouveau calque qui plante le programme.

 

La nouvelle erreur viens de moi, comme tu le fait remarquer, il manque une parenthèse à la fin de la ligne : (setq h_sep (getvar 'HPSEPARATE))

 

N'oublis pas d'ajouter la nouvelle variable au début du programme.

 

Olivier

Posté(e)

Super ! tout fonctionne.

 

Pour info, le "N" sert à ça :

Entrez une option [?/Etablir/CHoisir/Nouv/Renommer/ACtif/INactif/COuleur/TLigne/EPaisseurl/TRANsparence/MAtériau/Tracé/Geler/Libérer/Verrouiller/Déverrouiller/étAt/deScription/RApprocher]: IN
Entrer la liste des noms de calque de désactiver ou <sélection d'objets>: ~01_VOI_CONT_P_BBSG_150KG Voulez-vous réellement désactiver "01_VOI_HACH_P_BBSG_150KG" (le calque COURANT)? <N> N 

et voici donc le code fini (si l'on peut dire !)

(defun c:HHBBSG150 ( / h_sep ) (setvar "CECOLOR" "ByLayer")
 (setvar "CELTYPE" "ByLayer")
 (setvar "CELWEIGHT" -1)
 (setvar "LWDISPLAY" 0)
 (command "-CALQUE" "L" "01_VOI_CONT_P_BBSG_150KG" "E" "01_VOI_HACH_P_BBSG_150KG" "IN" "~01_VOI_CONT_P_BBSG_150KG" "N" "")
 (setq h_sep (getvar 'HPSEPARATE))
 (setvar "HPSEPARATE" 1)
 (command "_hatch" "_P" "_solid" "_s")
(while (> (getvar "CMDACTIVE") 0)
   (command pause)
 )
 (setvar "HPSEPARATE" h_sep)
 (command "_LAYERP")
 (princ))

Merci encore

 

Sapin

Posté(e)

Bonjour,

 

désolé de remettre une Nième fois ce sujet en avant, mais je ne pige pas pourquoi quand je lance les hachures via le code, je n'ai pas de fenêtre de capture de mes polylignes, alors que quand je passe par la ligne de commande tout va bien. Y a-t-il une variable dans le coup à prendre en compte ?

 

D'avance merci

Sapin

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é