TEX Posté(e) le 5 mai 2023 Posté(e) le 5 mai 2023 Bonjour, Je voudrais me servir du Lisp DYN2STAT, mais par contre je voudrais qu'il ne me change pas le nom de mes blocs. Mes blocs s'appellent CHAMBRE , et quand j'utilise le Lisp ,cela 'incrémente le mon du bloc avec un tiret bas =>CHAMBRE_1 Merci, Cordialement Citer
JPhil Posté(e) le 5 mai 2023 Posté(e) le 5 mai 2023 Est-ce possible de nous partager le code du lisp DYN2STAT ? 1 Citer
TEX Posté(e) le 5 mai 2023 Auteur Posté(e) le 5 mai 2023 (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) ;; GetItem (gile) ;; Retourne le vla-object de l'item s'il est présent dans la collection (ou nil) ;; ;; Arguments ;; col : la collection (vla-object) ;; name : le nom de l'objet (string) ou son indice (entier) (defun gc:GetItem (col name / obj) (vl-catch-all-apply (function (lambda () (setq obj (vla-Item col name)))) ) obj ) ;; DYN2STAT ;; Converti les blocs dynamiques sélectionnés en blocs statiques (defun c:DYN2STAT (/ s) (if (ssget '((0 . "INSERT"))) (progn (vla-StartUndoMark *acdoc*) (setq s (vla-get-ActiveSelectionSet *acdoc*)) (vl-catch-all-apply (function (lambda (/ i n) (vlax-for b s (if (= (vla-get-IsDynamicBlock b) :vlax-true) (progn (setq i 1) (while (gc:GetItem *blocks* (setq n (strcat (vla-get-EffectiveName b) "_" (itoa i)))) (setq i (1+ i)) ) (Vla-ConvertToStaticBlock b n) ) ) ) ) ) ) (vla-Delete s) (vla-EndUndoMark *acdoc*) ) ) (princ) ) Citer
JPhil Posté(e) le 5 mai 2023 Posté(e) le 5 mai 2023 La réponse à la question est ici : (gc:GetItem *blocks* (setq n (strcat (vla-get-EffectiveName b) "_" (itoa i)))) En supprimant cette partie "_" (itoa i) il n'y aura plus d'incrémentation. Mais comme c'est lié à un bloc dynamique, il y a peut-être une raison pour que le nom du bloc soit incrémenté. Et la raison se trouve au début du programme : Converti les blocs dynamiques sélectionnés en blocs statiques Donc au final, pas sûr que le programme DYN2STAT soit adapté à ton besoin. Peux-tu nous dire ce que tu veux faire avec ton bloc Chambre ? Ton bloc Chambre, il est dynamique ou pas ? Citer
(gile) Posté(e) le 5 mai 2023 Posté(e) le 5 mai 2023 Il y a 1 heure, TEX a dit : Je voudrais me servir du lisp DYN2STAT, mais par contre je voudrais qu'il ne me change pas le nom de mes bloques. Comme tu le sais certainement, un nom de bloc (comme un nom de calque, de style de texte, etc.) doit être unique dans le dessin. Quand on modifie les propriétés d'un bloc dynamique, AutoCAD crée une nouvelle définition de bloc anonyme (*Uxxx) parce que ce bloc ne peut avoir le même nom que le bloc dynamique non modifié. Le LISP ne peut pas nommer des blocs différents avec le même nom que le bloc de base. 1 Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
TEX Posté(e) le 5 mai 2023 Auteur Posté(e) le 5 mai 2023 (vl-load-com) (or *acad* (setq *acad* (vlax-get-acad-object))) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument *acad*))) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) ;; GetItem (gile) ;; Retourne le vla-object de l'item s'il est présent dans la collection (ou nil) ;; ;; Arguments ;; col : la collection (vla-object) ;; name : le nom de l'objet (string) ou son indice (entier) (defun gc:GetItem (col name / obj) (vl-catch-all-apply (function (lambda () (setq obj (vla-Item col name)))) ) obj ) ;; DYN2STAT ;; Converti les blocs dynamiques sélectionnés en blocs statiques (defun c:DYN2STAT (/ s) (if (ssget '((0 . "INSERT"))) (progn (vla-StartUndoMark *acdoc*) (setq s (vla-get-ActiveSelectionSet *acdoc*)) (vl-catch-all-apply (function (lambda (/ i n) (vlax-for b s (if (= (vla-get-IsDynamicBlock b) :vlax-true) (progn (setq i 1) (while (gc:GetItem *blocks* (setq n (strcat (vla-get-EffectiveName b) "_" (itoa i)))) (setq i (1+ i)) ) (Vla-ConvertToStaticBlock b n) ) ) ) ) ) ) (vla-Delete s) (vla-EndUndoMark *acdoc*) ) ) (princ) ) Citer
TEX Posté(e) le 5 mai 2023 Auteur Posté(e) le 5 mai 2023 oK OK ,c est bien ce que je pensais .. Merci beaucoup et bon week end Cordialement Tex Citer
Messages recommandés