Aller au contenu

Description de calque


Messages recommandés

Posté(e)

Bonjour,

 

Ma question: dans un dessin existant, est-il possible de remplir la propriété "Description" de plusieurs calques existants par la propriété "Description" de ces mêmes calques contenue dans un prototype?

 

Voici pourquoi:

Afin de faciliter la tâche des nouveaux dessinateurs, nous avons dernièrement décider de rempli la description des calques que l'on retrouve dans le gestionnaire des propriétés des calques de nos prototypes. Le nom de nos calques est "codé", donc pas toujours évident à comprendre.

 

Avant d'aller plus loin dans cette requête, j'ai fait des tests, tous non concluant.

 

• J'ai essayé le convertisseur de calque: la couleur, le type de ligne, l'épaisseur de ligne sont modifiés mais pas la description… (pourquoi ne pas y avoir penser ici…la transparence y est…)

 

• J'ai essayé de vérifier les standards: ici non plus on ne prend pas en compte la description des calques.

 

• J'ai essayé un script avec "_-layer _m…." qui habituellement recrée le calque et écrase les propriétés existantes d'un calque, mais pas pour la description. La formulation du script diffère si le calque est existant ou pas et diffère également si le calque a déjà ou non une description…

 

• J'ai essayé le Design Center: Les nouveaux calques arrivent avec leurs propriétés y compris la description, mais la description des calques existants ne change pas .

 

Les calques dont les dessinateurs ont besoin ne sont pas contenus dans les prototypes de départ mais créés au fur et à mesure des besoins.

 

Les lignes, les textes, les tableaux et les symboles sont dessinés sur leurs calques respectifs et c'est à partir de ses dessins (un par spécialité) que les palettes ont été créées.

 

Même si, aujourd'hui, j'ajoute une description aux calques de ces prototypes-spécialités, lorsque j'insère un blocs ou dessine un ligne, la description du calque n'y est pas.

 

Idéalement, j'aurais pensé à un bouton ou à une commande que l'usager activerait au besoin pour faire "écrire" les descriptions de calques manquantes ou modifiées.

 

Merci `a l'avance à ceux qui auront une solution!

 

Karmélie

Posté(e)

Bonsoir,

 

Comme tu as déjà essayé beaucoup de choses, on dirait qu'il ne reste plus que le Lisp... <_<

 

Voici un exemple qui irait piocher les descriptions dans un fichier texte :

 

(defun c:LAYDESC ( / sep f l flst i lay descr )

 ; Caractère de séparation entre le nom de calque et la description dans le fichier texte:
 (setq sep ";")

 (vl-load-com)
 
 (setq flst '()
       f (getfiled "" "" "txt;csv;prn" 4))
 (if (and f (setq f (open f "r")))
   (progn
     (while (setq l (read-line f))
       (setq flst (cons l flst))
     )
     (close f)
     (setq flst (reverse flst))
   )
 )
 
 (if flst
   (foreach l flst
     (setq i (vl-string-search sep l)
           lay (substr l 1 i)
           descr (substr l (+ i 2)))
     (if (setq lay (tblobjname "LAYER" lay))
       (progn
         (setq lay (vlax-ename->vla-object lay))
         (vla-put-description lay descr)
         (princ (strcat "\nDescription du calque " (vla-get-name lay) " modifiée."))
       )
     )
   );foreach
 )
 
 (princ)
)

 

Structure du fichier txt:

0;description du calque 0
calque A;description du calque A
calque B;description du calque B
calque C;description du calque C

Posté(e)

As tu regardé ce qu'on pouvait faire avec les normes CAO? Commande NORMES.

Posté(e)

hello

je pense comme Eric...

pour compléter sa réponse ça donnerait ça :

_-layer onlys "nom_du_calque" _d "description"

si tu utilises excel avec une colonne par mot (ici on aura 2 colonnes var il n'y a que 2 variables) avec une colonne pour CONCATENER tu n'auras qu'à recopier ça dans un script... très facile

++

Phil

Projeteur Revit Indépendant - traitement des eaux/CVC

Posté(e)

Très bonne idée en effet.

Mais si aucun des calques n'a de description au départ, ça fera planter le script...

 

Voici un autre Lisp, qui va directement chercher les descriptions dans un fichier DWT:

 

(defun opendbx(dwg / dbx)
; par Patrick_35
 (if (< (atoi (substr (getvar "ACADVER") 1 2)) 16)
   (setq dbx (vlax-create-object "ObjectDBX.AxDbDocument"))
   (setq dbx (vlax-create-object (strcat "ObjectDBX.AxDbDocument." (substr (getvar "ACADVER") 1 2))))
 )
 (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-open (list dbx dwg)))
   nil
   dbx
 )
)

(defun c:LAYDESC ( / template f dbxlayers dbxl l )

 ; Nom du gabarit contenant les descriptions de calques
 (setq template "test.dwt")

 (vl-load-com)
 
 (if (setq f (opendbx (strcat (getenv "TemplatePath") "\\" template)))
   (progn
     (setq dbxlayers (vla-get-layers f))
     (vlax-for dbxl dbxlayers
       (if (setq l (tblobjname "LAYER" (vla-get-name dbxl)))
         (progn
           (setq l (vlax-ename->vla-object l))
           (vla-put-description l (vla-get-description dbxl))
         )
       )
     )
     (vlax-release-object f)
   )
 )
 
 (princ)
)

Posté(e)
Très bonne idée en effet.

Mais si aucun des calques n'a de description au

départ, ça fera planter le script...

 

Pour le fun, toujours en script

On créer un calque avec une description (comme ça pas de blocage), on supprime toute les descriptions puis on supprime le calque créé au début.

 

Comme ça, ça devrait fonctionner.

 

Ce qui donne :

 

-calque n "lecalqueaeric" s "cestmoncalque"
"lecalqueaeric"
s 
*
o 

-purger ca "lecalqueaeric"
n

Posté(e)

As tu regardé ce qu'on pouvait faire avec les normes CAO? Commande NORMES.

 

Bonjour Patrick

 

Les Normes ne prennent pas en charge les descriptions de calques (mes 2 premiers tests)

 

Merci de l'idée

Posté(e)

Bonjour,

 

Et pourquoi ne pas créer un script avec la commande _-layer et l'option description.

Soit

 

-_layer _d

 

Ca permet de remplir la description d'un calque.

 

Bonjour Eric,

 

_-layer _S et non pas _-layer _d, mais je sais. Toutefois, tel que décrit dans mon 3ieme test, il faudrait que j'insère dans le dessin, tous les calques de la spécialité avec la description déjà remplie (insertion dégroupé du prototype).

Les calques existants ne sont pas pris en considération, donc les descriptions ne sont pas remplis et avec le avec un script _-Layer _s, la question n'est pas la même si la description existe ou non.... Avec un script, je ne peux pas faire vérifier si le champs est rempli ou pas.

 

Merci

Posté(e)

L'idée serait peut être avant, de remettre les description à 0 avec un script du genre

 

-calque s

*

o

 

Il faurait

1. Insérer le prototype avec tous les calques

2. Remplir tous avec *

3. Remplir chacun avec les vrais descriptions

4. Purger les calques inutilisés...

 

J'essaie ça

 

Karmélie

Posté(e)

En script, l'idée d'Eric est de créer un calque "bidon" avec une description, avant de remettre toutes les descriptions à 0.

Ainsi on est sûr que le message de confirmation pour la modification de la description va s'afficher, et on peut le prévoir dans le script.

Il suffit ensuite de purger ce calque inutile, puis de renseigner les descriptions des calques, en sachant qu'il n'y aura plus de demande de confirmation qui ferait dérailler le script.

Exemple:

 

; On crée un calque bidon
_-layer
_n
"calquebidon"
; on change sa description
_d
calque bidon
"calquebidon"
; puis on vide les descriptions de tous les calques
_d

*
; on répond à la demande de confirmation, et on termine la commande.
_y

; On purge le calque bidon.
_-purge
_la
"calquebidon"
_n
; On renseigne les bonnes descriptions des calques.
_-layer
_d
description du calque 0
"0"
_d
description du calque A
"calque A"
_d
description du calque B
"calque B"
_d
description du calque C
"calque C"

;fin

Posté(e)

En script, l'idée d'Eric .....

 

J'étais déjà arrivée à quelque chose de semblable, mais la gestion des "spécialités" me semblait assez compliquée.

 

Pas besoin de chercher plus loin que le LSP du post #9 :D Merci Bryce et Patrick_35 (ça semble si facile...)

Un seul fichier DWT avec tous les calques et leur description, un petit bouton (le même pour tous) et tout le monde est heureux.

 

Je songe même à le mettre au démarrage...

 

Merci à tous,

 

Karmélie

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

Bonjour,

 

J'aime beaucoup le lisp inscrit par bryce au post #2.

 

 

Ma question: Y aurait-il un moyen pour attribuer un chemin affin que le lisp retrouve automatiquement le fichier txt auquel il se rapporte sans ouvrir une boite de dialogue?

 

cela me serait tres utile merci!

Posté(e)

Bonjour,

 

On peut bien sûr fixer le chemin du fichier directement dans le programme :

 

(defun c:LAYDESC ( / sep f l flst i lay descr )

 ; Caractère de séparation entre le nom de calque et la description dans le fichier texte:
 (setq sep ";")
 ; Emplacement du fichier contenant les descriptions (attention à bien doubler les \ !)
 (setq f "C:\\temp\\descriptions.txt")

 (vl-load-com)
 
 (setq flst '() )
 (if (setq f (open f "r"))
   (progn
     (while (setq l (read-line f))
       (setq flst (cons l flst))
     )
     (close f)
     (setq flst (reverse flst))
   )
 )
 
 (if flst
   (foreach l flst
     (setq i (vl-string-search sep l)
           lay (substr l 1 i)
           descr (substr l (+ i 2)))
     (if (setq lay (tblobjname "LAYER" lay))
       (progn
         (setq lay (vlax-ename->vla-object lay))
         (vla-put-description lay descr)
         (princ (strcat "\nDescription du calque " (vla-get-name lay) " modifiée."))
       )
     )
   );foreach
 )
 
 (princ)
)

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é