Aller au contenu

Touan

Membres
  • Compteur de contenus

    2
  • Inscription

  • Dernière visite

Touan's Achievements

Newbie

Newbie (1/14)

0

Réputation sur la communauté

  1. Touan

    entmod sans aucun effet

    Bonjour à tous et merci pour vos retours riches en informations. Désolé pour la réponse tardive mais j'ai été rattrapé par le boulot et la livraison de plans est passée prioritaire donc l'optimisation attendra hélas ... Je continue donc pour le moment avec l'ancienne version qui fonctionne avec _chprop. J'ai cependant bien pris note de toutes vos remarques et tâcherait d'appliquer vos conseils pour la suite. Je ne connaissait pas (setpropertyvalue) qui a l'air très intuitive pour la modification rapide de propriété d'un objet. Pour les variables locales, je ne les déclarait pas car j'avais pour habitude de tester mes routines directement dans la ligne de commande Autocad et de tester mes variables pour étudier le fonctionnement. Une fois mon code fonctionnel, il faudrait que je m'efforce à déclarer mes variables en locale :P Et j'avoue ne pas encore avoir pris le temps d'essayer le VLIDE... Promis je m'y mets dès que possible. Concernant les messages sur le bon déroulement de mes routines, j'ai pris l'habitude de le faire sur les plus petites mais celle-ci fait partie d'un ensemble d'une vingtaine de routines (déplacement de blocs, substitution de blocs, changement de calques, forçage des couleurs et type de ligne, ...) qui s’exécutent en chaîne à partir d'une commande. Il y a bien un message de confirmation à la fin. Cependant, c'est vrai qu'il serait pas mal d'ajouter un récap de toutes les opérations effectuées à la fin. Pour les "sous-routines", c'est une des optimisations que j'aimerais apporter à tout mon code car il est vrai que beaucoup de choses se répètent (ayant développé chaque routines unes à unes sur le tas). Pour en revenir à mon soucis, j'ai remarqué par hasard en écrivant une autre routine, que mes entmod (même avec entupd) ne fonctionnaient pas sur les LWPOLYLINE mais que les POLYLINE (j'ai bien élargi mes filtres de SSGET). J'effectue donc un _convertpoly avant et cela semble me régler le soucis. Cela vous semble normal? Ça m'intrigue vraiment... Merci encore à vous. Très bonne soirée et bon confinement!
  2. Bonjour tout le monde, Ceci est mon premier message sur le forum que je consulte énormément depuis le début de mon apprentissage d'AutoLISP et j'y trouve la plupart du temps une réponse à mes problèmes mais là j'avoue que je butte. Pour la petite histoire, je dois développer une série de routines permettant d'automatiser au maximum la transformation de nos plans vers une charte client. Parmi ces routines, j'en ai une qui doit exploser des blocs pour en récupérer les polylignes, les joindre et les mettre dans les bons calques, types de lignes et couleur. J'ai réussi dans un premier jet à le faire en passant par des command _explode/_pedit /_chprop, et j'essaye d'optimiser mon code afin d'éviter de passer par des command. J'en arrive donc à ce code qui s’exécute mais qui ne prends pas en compte mes modifications de couleur et de type de ligne. Mes append/subst sont bien appliqués à mes elist mais le entmod "n'a pas l'air de fonctionner". (defun c:SOGCLIENT-BLK-EXP2() ;;Fonction de décomposition des blocs puis jointure + modification des calques, types de lignes et couleur (setq lst '( ;; Liste des blocs à exploser avec nouveau type de ligne, couleur et calque (((0 . "INSERT") (2 . "GU15") (8 . "AEP_SYM")) ("z_lz" 150 "OD--D_LI")) (((0 . "INSERT") (2 . "GU15") (8 . "RESDIV_SYM")) ("z_lz" 7 "OD--D_LI")) ) ) (foreach n lst ;; Pour chaque type de bloc de lst ... (if (setq ss (ssget "X" (car n))) ;; ... on crée une ss de ces blocs... (repeat (setq i (sslength ss)) ;; ... puis on répète autant de fois qu'il y a de ce bloc ... (setq ssent (ssadd)) ;; création d'une nouvelle ss (vide) (ssadd (setq ent (ssname ss (setq i (1- i)))) ssent) ;; on ajoute a cette ss le dernier bloc de la liste des mêmes blocs (setq *LastEnt* (entlast)) ;; *LastEnt* = dernière entité créée dans le dessin (command "_explode" ss "") ;; Retourne une erreur alors que tout fonctionne... (setq ss2 (ssadd)) ;; création d'une nouvelle ss (vide) (if (setq en (entnext *LastEnt*)) ;; en = entité qui suit *LastEnt* (while en (setq ss2 (ssadd en ss2) en (entnext en)) ;; on rempli ss2 de toutes les entités qui suivent *LastEnt* (issues du burst du bloc) ) ) (setq *LastEnt* (entlast)) ;; *LastEnt* = dernière entité créée dans le dessin (command "PEDITACCEPT" "1") ;; on enlève le message davertissement "pas des polylignes..." (command "_pedit" "m" ss2 "" "j" "" "") ;; on joint les entités de la ss2 (les éléments issus du burst) (setq ss2 (ssadd)) ;; création d'une nouvelle ss (vide) (if (setq en (entnext *LastEnt*)) (while en (setq ss2 (ssadd en ss2) en (entnext en)) ;;on ajoute à ss2 les nouveaux éléments créés (issus des jointures) ) ) (repeat (setq i2 (sslength ss2)) ;; ... puis on répète autant de fois qu'il y a de nouveaux éléments créés (setq e1 (ssname ss2 (setq i2 (1- i2)))) ;; e1 = dernier élément de la ss (setq e1p (entget e1)) ;; e1p = propriété de e1 (setq layer (caddr (cadr n))) ;; layer = nouveau calque à attribuer (setq ltype (car (cadr n))) ;; ltype = nouveau type de ligne à attribuer (setq color (cadr (cadr n))) ;; color = nouvelle couleur à attribuer (setq e1p (subst (cons 8 layer) (assoc 8 e1p) e1p)) (if (= (assoc 62 e1p) nil) (setq e1p (append (list (cons 62 color)) e1p)) ;;insertion couleur forcée dans les propriétés de l'entité du bloc CLIENT (cas où la pl était en couleur "ducalque") (setq e1p (subst (cons 62 color) (assoc 62 e1p) e1p)) ;;modification de la couleur forcée dans les propriétés de l'entité du bloc CLIENT (cas où la pl était déja en couleur forcée) ) (if (= (assoc 6 e1p) nil) (setq e1p (append (list (cons 6 ltype)) e1p)) ;;insertion du ltype forcé dans les propriétés de l'entité du bloc CLIENT (cas où la pl était en ltype "ducalque") (setq e1p (subst (cons 6 ltype) (assoc 6 e1p) e1p)) ;;modification du ltype forcé dans les propriétés de l'entité du bloc CLIENT (cas où la pl était déja en ltype forcée) ) (entmod e1p) ) ) ) ) (princ) ) J'en profite aussi pour vous demander si vous auriez des alternatives à l'utilisation des _explode et _pedit afin d'exploser les blocs et joindre les polylignes issues de ces décompositions? Je vous remercie d'avance et j'espère que ma demande reste clair. Touan
×
×
  • 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é