sergeluc Posté(e) le 4 mai 2006 Posté(e) le 4 mai 2006 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 commeje 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 destypes de lignes présents dans un DWG et correspondant à l'acad.lin ,si les noms nesont 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
(gile) Posté(e) le 4 mai 2006 Posté(e) le 4 mai 2006 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
(gile) Posté(e) le 4 mai 2006 Posté(e) le 4 mai 2006 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
Patrick_35 Posté(e) le 4 mai 2006 Posté(e) le 4 mai 2006 (gile)Tu pourrais faire mieux avec un entmod plutôt qu'avec un command ;). Ce serait plus "lispien" @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
(gile) Posté(e) le 4 mai 2006 Posté(e) le 4 mai 2006 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
Patrick_35 Posté(e) le 4 mai 2006 Posté(e) le 4 mai 2006 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 exactQu'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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
sergeluc Posté(e) le 4 mai 2006 Auteur Posté(e) le 4 mai 2006 (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 .
(gile) Posté(e) le 5 mai 2006 Posté(e) le 5 mai 2006 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
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant