Aller au contenu

Messages recommandés

Posté(e)

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

Posté(e)

(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)
)

Posté(e)

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 ?

Posté(e)
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.

  • Upvote 1

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

Posté(e)

(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)
)

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é