Aller au contenu

Extraire les infos d\'un calque


LUDWIG

Messages recommandés

Bonjour,

 

Je crée une commande pour déplacer des entités sur un calque indicé "FDP" (ex : de calque "ELECTRICITE" vers "ELECTRICITE_FDP). Le calque d'origine doit être conservé.

 

Le programme fonctionne (exceptionnel pour moi !). Sauf que les calques créés sont tous en "ducalque" et "blanc".

 

Quelqu'un pourrait me donner une piste pour extraire les données de couleur, d'épaisseur, de type de ligne et éventuellement les états actif/geler/verrouiller...

 

Merci d'avance.

 

 

 

;****************************************

; Déplacer entité sur calque indicé "FDP"

;****************************************

(defun c:FDP ( / compteur sélection nombre_entité nom_entité list_propr_entité calque_entité Nouv_nom_calque)

(graphscr)

(prompt "\nChoisir les entité(s) à mettre sur un calque indicé FDP")

(setq compteur 0)

(setq sélection (ssget))

(setq nombre_entité (sslength sélection))

(repeat nombre_entité

(setq list_propr_entité (entget (setq nom_entité (ssname sélection compteur))))

(setq calque_entité (cdr (assoc 8 list_propr_entité)))

(setq Nouv_nom_calque (strcat calque_entité "_FDP"))

(command "-calque" "nouv" Nouv_nom_calque "")

(command "chprop" nom_entité "" "ca" Nouv_nom_calque "")

(setq compteur (1+ compteur))

)

(prin1)

)

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir Ludwig,

c'est génial hein, quand les premiers programmes fonctionnent,

on se sent le roi du monde,

tu as raison de perséverer car d'autres satisfactions t'attendent.

ton souci d'aujourd'hui sera résolu ci-après :

 

(setvar "cmdecho" 0)

(prompt "\nChoisir les entités à mettre sur un calque indicé FDP")

(setq jeu (ssget)

n 0)

(repeat (sslength jeu)

(setq ent (ssname jeu n)

list_ent (entget ent)

cal_ent (cdr (assoc 8 list_ent))

Coul_Ent (cdr(assoc 62 list_ent))

Cal2_Ent (strcat cal_ent "_FDP")

TL_Ent (cdr(assoc 6 list_ent))

)

(command "_-layer" "_N" Cal2_Ent "")

(command "chprop" ent ""

"_LA" Cal2_Ent

"")

(if coul_ent

(command "chprop" ent ""

"_CO" Coul_Ent

"")

)

(if TL_Ent

(command "chprop" ent ""

"_LT" TL_Ent

"")

)

 

 

 

(setq n (+ 1 n))

)

n'hésite pas à poser des questions,

on peut faire plus "propre" en utilisant ENTMOD

mais je t'en parlerai plus tard,

on apprend à marcher et plus tard

on apprend à courir

amicalement

ps : tu as remarqué que j'ai "simplifié" le nom des variables,

on n'est pas payé à la ligne ...

 

Lien vers le commentaire
Partager sur d’autres sites

Salut et merci mais...

 

Je n'y arrive pas !!!

 

Dans ton code :

Coul_Ent (cdr(assoc 62 list_ent))

TL_Ent (cdr(assoc 6 list_ent))

 

Coul_Ent et TL_Ent sont la couleur et le type de ligne de l'entité. Moi, il me faudrait la couleur et le type de ligne DU CALQUE DE L'ENTITE.

 

J'ai essayé :

(setq Coul_Ent (cdr (assoc 62 (entget cal_ent))))

(setq TL_Ent (cdr (assoc 6 (entget cal_ent))))

 

Mais ça ne fonctionne pô !!! Help !!!

 

PS0 : Dans la fin d eton programme, tu modifies la couleur et le type de ligne de l'objet. Ce n'est pas ce que je veux faire. Je veux modifier la couleur et type de ligne du calque de l'objet. Mais mon PS, c'est surtout que jene comprends pas la syntaxe de if : (If Coul_Ent (command...)) . Je n'y vois pas d'expression conditionnellle (j'ai l'habitude de if (valeur si vrai ; valeur si faux). Est-ce que If Coul_Ent signifie "Si Coul_Ent existe" ???

 

PS1 : je n'ai pa pu m'empêcher de zieuter dans l'aide pour ENTMOD et je crois comprendre que c'est pour modifier les propriétés (XDATA) des entités directement. Mais tu as raison, je vais d'abord apprendre "à marcher"

 

PS2 : c'est quoi comme nationalité ce forum ? Car l'heure des messages que je postes n'est pas du tout la même que mon "heure système". Ou alors le changement d'heure n'a pas eu lieu ?

 

[Edité le 10/11/2004 par LUDWIG]

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Salut Ludwig

 

Essaye plutôt avec ceci ;)

 

(setq dxf_ent (entget (car (entsel))))

(setq nam_lay (cdr (assoc 8 dxf_ent)))

(setq def_lay (tblsearch "LAYER" nam_lay))

 

(cdr (assoc 70 def_lay)) ;Etat du calque gelé ou verrouillé

(cdr (assoc 62 def_lay)) ;Numéro de la couleur du calque, si négatif:calque eteint

(cdr (assoc 6 def_lay)) ;Type de ligne du calque

 

Voir l'aide pour informations complémentaire sur les code 70 62 et 6

Bruno V.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Merci Bonuscad !

 

Ca marche maintenant ! Quoique la solution que j'avais apportée ne POUVAIT pas marcher car j'avais fait une erreur de variable. Il faudrait que je vois si ça marche avec la méthode précédente maintenant.

 

Bon, donc voici le programme :

;****************************************

; -- Déplacer entité sur calque indicé --

;****************************************

; By Ludwig DESMIER qui est tout fier de sa réussite !!!

 

(defun c:FDP ( / cmd n jeu ind nb ent prop calque TL CO GEL Nouv DEF)

 

; cmd : valeur de la variable cmdecho / n : le compteur / jeu : le jeu de sélection / ind : l'indice ajouté aux nouveaux calques

; nb : le nombre d'entités dans le jeu de sélection / ent : le nom de l'entité en cours

; prop : la liste des propriétés de l'entité en cours / calque/TL/CO/GEL : nom/Type de ligne/Couleur/Etat de l'entité en cours

; Nouv : le nouveau nom de calque de l'entité en cours / DEF : table de définition du calque

 

(graphscr)

(setq cmd (getvar "CMDECHO"))

(setvar "CMDECHO" 0)

 

(prompt "\nChoisissez les entité(s) à mettre sur un calque indicé")

(setq n 0)

(setq jeu (ssget))

(setq ind (getstring T "\nDonnez le nom de l'indice (_FDP)"))

(If (= ind "") (setq ind "_FDP"))

(setq nb (sslength jeu))

(repeat nb

(setq prop (entget (setq ent (ssname jeu n))))

(setq calque (cdr (assoc 8 prop)))

(setq DEF (tblsearch "LAYER" calque))

(setq TL (cdr (assoc 6 DEF)))

(setq CO (cdr (assoc 62 DEF)))

;(setq GEL (cdr (assoc 70 DEF))) l'entité selectionnée n'est forcément pas gelée.

(setq Nouv (strcat calque ind))

(command "-calque" "nouv" Nouv "CO" CO Nouv "TL" TL Nouv "")

(command "chprop" ent "" "ca" Nouv "")

(setq n (1+ n))

)

(prin1)

(setvar "CMDECHO" cmd)

)

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

Encore modifié :

 

;****************************************

; -- Déplacer entité sur calque indicé --

;****************************************

; By Ludwig DESMIER qui est tout fier de sa réussite !!!

 

(defun c:FDP ( / cmd n jeu ind nb ent prop calque TL CO GEL Nouv DEF)

 

; cmd : valeur de la variable cmdecho / n : le compteur / jeu : le jeu de sélection / ind : l'indice ajouté aux nouveaux calques

; nb : le nombre d'entités dans le jeu de sélection / ent : le nom de l'entité en cours

; prop : la liste des propriétés de l'entité en cours / calque/TL/CO/GEL : nom/Type de ligne/Couleur/Etat de l'entité en cours

; Nouv : le nouveau nom de calque de l'entité en cours / DEF : table de définition du calque

 

(graphscr)

(setq cmd (getvar "CMDECHO"))

(setvar "CMDECHO" 0)

 

(prompt "\nChoisissez les entité(s) à mettre sur un calque indicé")

(setq n 0)

(setq jeu (ssget))

(setq ind (getstring T "\nDonnez le nom de l'indice (_FDP)"))

(If (= ind "") (setq ind "_FDP"))

(setq nb (sslength jeu))

(repeat nb

(setq prop (entget (setq ent (ssname jeu n))))

(setq calque (cdr (assoc 8 prop)))

(setq DEF (tblsearch "LAYER" calque))

(setq TL (cdr (assoc 6 DEF)))

(setq CO (cdr (assoc 62 DEF)))

;(setq GEL (cdr (assoc 70 DEF))) l'entité selectionnée n'est forcément pas gelée.

(setq Nouv (strcat calque ind))

(If (=(tblsearch "LAYER" Nouv) nil) (command "-calque" "nouv" Nouv "CO" CO Nouv "TL" TL Nouv ""))

(command "chprop" ent "" "ca" Nouv "")

(setq n (+ 1 n))

)

(setvar "CMDECHO" cmd)

(prin1)

)

 

(prompt "\nFDP : Déplacer sur un calque identique mais indicé")

 

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

hello Ludwig,

je viens t'apporter une information car tu dis :

;(setq GEL (cdr (assoc 70 DEF))) l'entité selectionnée n'est forcément pas gelée.

 

méfie toi de ça, car si tu ajoute l'option "x" au ssget par exemple :

(setq JeuSel (ssget "x"))

ce jeu de sélection va "scanner" tout le fichier et contiendra

MÊME LES ENTITES SUR UN CALQUE GELE.

ça peut être quelquefois utile.

 

bonne continuation

 

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é