Aller au contenu

Problème de création de calque si certain calque existe déjà


Messages recommandés

Posté(e)

Bonjour à tous,

C’est mon premier post dans ce forum :D au sujet d’un lisp, ci-joint, dont j’ignore l’auteur.

Ce lisp sert à charger des calques, il fonctionne très bien, sauf que, quand un des calques du fichier "txt" existe déjà dans le "dwg", le lisp s’arrête et ne me charge pas les autres.

Quelqu’un aurait-il une solution pour une correction du lisp ?

 

Merci d’avance

Calques-Base.lsp

Calques-Base.txt

Posté(e)

Salut,

 

J'ai juste ajouté un test pour évaluer si le calque existe déjà (non testé).

Ce LISP pourrait facilement être optimisé.

 

;| Fonction Calques-Base
;   Description : Fonction qui crée la liste des couches contenues dans le fichier Calques-Base.txt. 
  
 Variables locales : 
 f-cou-stan : du fichier des couches standards 
 n-fich-cou : nom interne du fichier 
 li : lignes du fichier 
 nom-cou : nom de la couche 
 couleur : couleur de la couche 
 typel : type de ligne de la couche 
 de : description de la couche 
|; 

(defun c:Calques-Base ( / f-cou-stan li nom-cou couleur typel de) 
 (setvar "cmdecho" 0) 
 (setq f-cou-stan (findfile "C:\\Program Files\\Autodesk\\AutoCAD 2017\\Support\\Lisp\\Calques-Base.TXT")) 
 (if (not f-cou-stan) 
   (progn 
     (alert "Le fichier Calques-Base.TXT est introuvable") 
     (exit) 
   ) 
 ) 
 (setq n-fich-cou (open f-cou-stan "r")) 
 (setq li (read-line n-fich-cou)) 
 (while li 
   (setq li (read li)) 
   (setq nom-cou (car li)) 
   (if (null (tblsearch "LAYER" nom-cou))
     (progn
       (setq couleur (cadr li)) 
       (setq typel (caddr li)) 
       (setq de (cadddr li)) 
       (command "_.-layer" "_n" nom-cou "_c" couleur nom-cou "_lt" typel nom-cou "s" de nom-cou "") 
     )
   )
   (setq li (read-line n-fich-cou)) 
 ) 
 (close n-fich-cou) 
 (alert "Les Calques de Base ont été créées") 
 (princ) 
)

  • Upvote 1

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

Posté(e)

Salut Gile,

 

Super merci c'est exactement ça :D

Je ne ni connais pas grand chose au lisp :( ¨

Quand tu dis facilement optimisé, que peut-on faire de plus ? :blink:

 

Meilleures salutation

Nen

  • Upvote 1
  • 1 mois après...
Posté(e)

Bonjour le forum,

 

J'avais posté cette demande suite à un problème qui été résolu par Gile, merci :D .

 

J'ai une autre question suite à la création de calque avec mes deux fichiers lsp et txt(ci-joint) :blink: .

 

Est-il possible de mettre une couleur rvb dans la partie "couleur" de mon fichier txt ?

 

("nom calque" "couleur" "type ligne" "description")

 

Merci d'avance

Meilleures salutations

Posté(e)

Salut,

 

Pour ce faire, il faut que le programme puisse déterminer si telle ligne du fichier texte donne une couleur de l'index ou une couleur RVB, parce que les options de la commande sont différentes.

 

Si le format de ton fichier texte est :

("001 PLAN BASE" "7" "continuous" "PLAN BASE")
("002 TRAME PLAN" "7" "continuous" "TRAME PLAN")
("003 GRILLE" "255,0,0" "continuous" "GRILLE")

Tu peux utiliser wcmatch pour tester le type de couleur :

(if (wcmatch couleur "#*,#*,#*")
 (command "_.layer" "_new" nom-cou "_color" "_true" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
 (command "_.layer" "_new" nom-cou "_color" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
)

 

PS : j'ai mis les noms des options en entier pour que le code soit plus lisible.

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

Posté(e)

Salut,

 

Merci pour ton message.

 

Si j'ai bien compris je place ce code:

(if (wcmatch couleur "#*,#*,#*")
 (command "_.layer" "_new" nom-cou "_color" "_true" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
 (command "_.layer" "_new" nom-cou "_color" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
)

Juste avant "(if (not f-cou-stan)" ?

;| Fonction Calques-Base
;   Description : Fonction qui crée la liste des couches contenues dans le fichier Calques-Base.txt. 
  
 Variables locales : 
 f-cou-stan : du fichier des couches standards 
 n-fich-cou : nom interne du fichier 
 li : lignes du fichier 
 nom-cou : nom de la couche 
 couleur : couleur de la couche 
 typel : type de ligne de la couche 
 de : description de la couche 
|; 

(defun c:Calques-Base ( / f-cou-stan li nom-cou couleur typel de) 
 (setvar "cmdecho" 0) 
 (setq f-cou-stan (findfile "C:\\Program Files\\Autodesk\\AutoCAD 2017\\Support\\Lisp\\Calques-Base.TXT")) 
 (if (not f-cou-stan) 
   (progn 
     (alert "Le fichier Calques-Base.TXT est introuvable") 
     (exit) 
   ) 
 ) 
 (setq n-fich-cou (open f-cou-stan "r")) 
 (setq li (read-line n-fich-cou)) 
 (while li 
   (setq li (read li)) 
   (setq nom-cou (car li)) 
   (if (null (tblsearch "LAYER" nom-cou))
     (progn
       (setq couleur (cadr li)) 
       (setq typel (caddr li)) 
       (setq de (cadddr li)) 
       (command "_.-layer" "_n" nom-cou "_c" couleur nom-cou "_lt" typel nom-cou "s" de nom-cou "") 
     )
   )
   (setq li (read-line n-fich-cou)) 
 ) 
 (close n-fich-cou) 
 (alert "Les Calques de Base ont été créées") 
 (princ) 
)

Posté(e)

Si j'ai bien compris je place ce code:

(if (wcmatch couleur "#*,#*,#*")
 (command "_.layer" "_new" nom-cou "_color" "_true" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
 (command "_.layer" "_new" nom-cou "_color" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
)

Juste avant "(if (not f-cou-stan)" ?

 

Non, tu n'as pas bien compris.

(if (wcmatch couleur "#*,#*,#*")

teste si la variable couleur contient une chaîne avec : un ou plusieurs chiffres, une virgule, un ou plusieurs chiffres, une virgule, un ou plusieurs chiffres. Autrement le format pour une couleur vraie (de "0,0,0" à "255,255,255"). Voir l'aide pour wcmatch.

Et suivant le résultat du test lance la commande pour une couleur "vraie" (RVB) ou une couleur de l'index.

 

Donc, où dois-tu placer le code ?

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

Posté(e)

J'ai réussi à le placer au bon endroit :D

;| Fonction Calques-Base-SIS
;   Description : Fonction qui crée la liste des couches contenues dans le fichier Calques-Base-SMEC.txt. 
  
 Variables locales : 
 f-cou-stan : du fichier des couches standards 
 n-fich-cou : nom interne du fichier 
 li : lignes du fichier 
 nom-cou : nom de la couche 
 couleur : couleur de la couche 
 typel : type de ligne de la couche 
 de : description de la couche 
|; 

(defun c:SMEC ( / f-cou-stan li nom-cou couleur typel de) 
 (setvar "cmdecho" 0) 
 (setq f-cou-stan (findfile "C:\\Program Files\\Autodesk\\AutoCAD 2017\\Support\\Lisp\\Calques-Base-SMEC.TXT")) 
 (if (not f-cou-stan) 
   (progn 
     (alert "Le fichier Calques-Base-SMEC.TXT est introuvable") 
     (exit) 
   ) 
 ) 
 (setq n-fich-cou (open f-cou-stan "r")) 
 (setq li (read-line n-fich-cou)) 
 (while li 
   (setq li (read li)) 
   (setq nom-cou (car li)) 
   (if (null (tblsearch "LAYER" nom-cou))
     (progn
       (setq couleur (cadr li)) 
       (setq typel (caddr li)) 
       (setq de (cadddr li)) 
       (if (wcmatch couleur "#*,#*,#*")
 		(command "_.layer" "_new" nom-cou "_color" "_true" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
 		(command "_.layer" "_new" nom-cou "_color" couleur nom-cou "_ltype" typel nom-cou "_description" de nom-cou "")
) 
     )
   )
   (setq li (read-line n-fich-cou)) 
 ) 
 (close n-fich-cou) 
 (alert "Les Calques de Base du bureau DAO du SMEC ont été créées\n\nToni t'est trop fort !!!") 
 (princ) 
)

 

Par contre il me crée bien le premier calque avec la couleur "44,186,131" par contre calque suivant qui a la couleur 5 et j'ai ce message:

 

Couleur non valide. Entrez trois valeurs comprises entre 0 et 255, séparées par une virgule.
; erreur: Fonction annulée

Posté(e)

Salut Gile,

 

Merci pour ton aide et tes messages :)

 

En effet je les ai remplacé par ton nouveau code et cella fonctionne impeccable :D

 

Merci encore ;)

Meilleures salutations

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é