Aller au contenu

Messages recommandés

Posté(e)

Bonjour,

1)Je tourne en rond pour arriver à modifier la table de certains layers d'un dwg dans leur couleur suivant des critères de recherche de couleur et avec une couleur de remplacement .

exemple : si les couleurs 2 50 et 51 sont trouvées ,alors tous les layers correspondant à

ces couleurs sont transformés en couleur 7 .

(sans tenir compte des xrefs et blocs)

cela fait 2 jours que j'écris des routines différentes sans succès alors je sature et comme

je suis à droite et à gauche je fais appel à vous .

 

merci

 

Autre point recherché ,je n'ai rien trouvé sur le site ,c'est une vérification des noms des

types de lignes présents dans un DWG et correspondant à l'acad.lin ,si les noms ne

sont pas trouvés dans l'acad.lin alors on les transforment en "CACHE" que l'on charge au préalable avant.

Le 2eme point je le signale pour gagner du temps au cas ou quelqu'un aurait quelque-chose.

 

merci.....à plus

 

 

 

 

Posté(e)

Salut,

 

Pour la première question, si j'ai bien compris :

 

(setq lay (tblnext "LAYER" T))
(while lay
 (if (member (cdr (assoc 62 lay)) '(2 50 51))
   (command "_.-layer" "_color" 7 (cdr (assoc 2 lay)) "" "")
 )
 (setq lay (tblnext "LAYER"))
) 

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

Posté(e)

Pour bien faire, si tu veux aussi traiter les calque INACTIFS :

 

(setq lay (tblnext "LAYER" T))
(while lay
 (if (member (cdr (assoc 62 lay)) '(2 50 51))
   (command "_.-layer" "_color" 7 (cdr (assoc 2 lay)) "" "")
 )
 (if (member (cdr (assoc 62 lay)) '(-2 -50 -51))
   (command "_.-layer" "_color" -7 (cdr (assoc 2 lay)) "" "")
 )
 (setq lay (tblnext "LAYER"))
) 

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

Posté(e)

Pour Patrick_35

 

J'ai essayé, bien sûr, mais il m'a semblé que çà ne fonctionnait pas avec les tables.

 

Pour sergeluc,

 

Je n'ai aps bien compris la deuxiéme question mais voici quelques lignes de code qui pouront peut-être t'aider :

 

Pour récupérer la liste des types de lignes du fichier AutoCAD.lin :

 

(setq lin_file (open
	 "C:\\Documents and Settings\\\\Application Data\\Autodesk\\AutoCAD 2007\\R17.0\\fra\\support\\acad.lin"
	 "r"
       )
     line     (read-line lin_file)
)
(while line
 (if (= (substr line 1 1) "*")
   (setq lin_lst
   (cons (substr line
		 (+ 2 (vl-string-position (ascii ",") line))
		 (- (strlen line)
		    (vl-string-position (ascii ",") line)
		    1
		 )
	 )
	 lin_lst
   )
   )
 )
 (setq line (read-line lin_file))
)
(close lin_file) 

 

Pour récupérer la liste des types de lignes du dwg courant :

 

(setq lt (tblnext "ltype" T))
(while lt
 (setq lt_lst (cons (cdr (assoc 3 lt)) lt_lst)
lt (tblnext "ltype")
)
 ) 

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

Posté(e)

J'ai essayé, bien sûr, mais il m'a semblé que çà ne fonctionnait pas avec les tables.

Ca dépend, mais pour les calques, c'est exact

Qu'importe, le voici en vlisp

(setq lays (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))
(vlax-for lay lays
 (if (member (vla-get-color lay) '(2 50 51))
   (vla-put-color lay 7)
 )
)

 

@+

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)

(gile) et Patrick_35 je vous remercie.

 

J'ai focalisé sur des équivalences (eq et =) au lieu d'utiliser "member" .

 

Pour la 2eme question je vais m'en sortir avec ce que tu as mis (gile) .

Le but est de comparer les 2 listes de types de lignes et de changer celles du dwg non reconnues par l'acad.lin .

(cette fois çi je ne vais pas oublier "member"

 

J'avoue quand relisant mon message d'origne j'ai du mal comprendre la 2eme question .

milles excuses ....(trop pressé)

 

patrick_35 "vlax-for " est-il équivalant à "foreach" ?

 

encore merci à tous les deux .

Posté(e)

Pour sergeluc,

 

"vlax-for " est-il équivalant à "foreach" ?

 

Çà fonctionne effectivement de la même façon, mais pour des collections (tables) à la place des listes, voir ici.

 

NOTA : Pour les types de lignes, dans le dessin courant, il y a un type "Solid line" (continuous) qui n'existe pas dans les fichier *.lin, il peut être prudent de faire un (vl-remove "Solid line" lt_lst) où lt_lst est la liste acquise avec (tblnext ... avant de comparer les listes.

 

Pour Patrick_35

 

Ca dépend, mais pour les calques, c'est exact

 

C'est ce que je voulais dire, j'utilise (entmod) avec les blocs, par exemple. Mais la supériorité du vlisp est, dans ce cas (changement de propriétés), largement évidente ! Je n'y avais tout simplement pas pensé, manque d'habitude.

 

Merci à vous deux, j'en ai encore appris un peu plus ...

 

[Edité le 5/5/2006 par (gile)]

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

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é