Aller au contenu

Mettre l'échelle X et Y à 1 de différents blocs via ligne de commande


openit

Messages recommandés

Bonjour,

 

Je me lance, je cherche une solution à mon problème...

 

Pour expliquer un peu le contexte, je suis occupé à mettre en place un transfert de plan d'un logiciel autre vers autocad et je rencontre un problème dans la série de commandes que j'utilise.

Je me retrouve avec des blocs avec des échelles X Y Z différentes et je voudrais toutes les mettre à 1 pour que une fois les blocs placés dans mon gabarit ils aient la bonne taille. Je ne sais pas le réaliser durant l'export.

 

Je peux facilement le faire depuis la fenêtre des propriétés après avoir fait la sélection des blocs mais je voudrais faire la même chose via ligne de commande ou vba ou lisp (le problème c'est que je ne trouve pas la commande pour faire ça) afin d'automatiser un peu...

 

Une idée?

Lien vers le commentaire
Partager sur d’autres sites

hello Openit

 

voici un lisp pour mettre a l'echelle positive que tu veux sur tous les blocs sélectionnés

 

 

; ----------------------------------
; CHANGEMENT D'ECHELLE DES BLOCS
; ----------------------------------


(defun c:echb_TOUT_POSITIF (/ bl)
 (setvar "cmdecho" 0)
 (setvar "dimzin" 0)
 (prompt "\nCLIQUER SUR LE BLOC OU LES BLOCS POUR LE CHANGEMENT D'ECHELLE :")
 (setq bl nil)
 (while (null bl) (setq bl (ssget (list (cons 0 "insert,AEC_MVBLOCK_REF")))))
 (setq echx 1)
 (initget (+ 2))
 (setq echx (getreal (strcat "\nECHELLE X <" (rtos echx 2 10) ">: ")))
 (if (null echx)
   (setq echx 1)
 )
 (setq echy 1)
 (initget (+ 2))
 (setq echy (getreal (strcat "\nECHELLE Y <" (rtos echy 2 10) ">: ")))
 (if (null echy)
   (setq echy echx)
 )
 (setq echz 1)
 (initget (+ 2))
 (setq echz (getreal (strcat "\nECHELLE Z <" (rtos echz 2 10) ">: ")))
 (if (null echz)
   (setq echz echx)
 )
 (setq compt 0)
 (setq com (sslength bl))
 (while (< compt com)
   (if (= (cdr (assoc 0 (entget (ssname bl compt)))) "INSERT")
     (progn (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                               'xeffectivescalefactor
                               echx
            )
            (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                               'yeffectivescalefactor
                               echy
            )
            (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                               'zeffectivescalefactor
                               echz
            )
            (entmod (entget (ssname bl compt)))
            (command-s "_attsync" "_n" (cdr (assoc 2 (entget (ssname bl compt)))))
     )
   )
   (if (= (cdr (assoc 0 (entget (ssname bl compt)))) "AEC_MVBLOCK_REF")
     (progn (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalex echx)
            (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scaley echy)
            (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalez echz)
     )
   )
   (setq compt (1+ compt))
 )
 (prompt "\n")
 (setvar "dimzin" 8)
)

 

 

et si des fois ton bloc de base avait une echelle négative parce qu'il y avait eu un miroir

 

(defun c:echb_GARDER_NEGATIF (/ bl)
 (setvar "cmdecho" 0)
 (setvar "dimzin" 0)
 (prompt "\nCLIQUER SUR LE BLOC OU LES BLOCS POUR LE CHANGEMENT D'ECHELLE :")
 (setq bl nil)
 (while (null bl) (setq bl (ssget (list (cons 0 "insert,AEC_MVBLOCK_REF")))))
 (setq echx 1)
 (initget (+ 2))
 (setq echx (getreal (strcat "\nECHELLE X <" (rtos echx 2 10) ">: ")))
 (if (null echx)
   (setq echx 1)
 )
 (setq echy 1)
 (initget (+ 2))
 (setq echy (getreal (strcat "\nECHELLE Y <" (rtos echy 2 10) ">: ")))
 (if (null echy)
   (setq echy echx)
 )
 (setq echz 1)
 (initget (+ 2))
 (setq echz (getreal (strcat "\nECHELLE Z <" (rtos echz 2 10) ">: ")))
 (if (null echz)
   (setq echz echx)
 )
 (setq compt 0)
 (setq com (sslength bl))
 (while (< compt com)
   (if (= (cdr (assoc 0 (entget (ssname bl compt)))) "INSERT")
     (progn (if (minusp (vlax-get-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                           'xeffectivescalefactor
                        )
                )
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                 'xeffectivescalefactor
                                 (- echx)
              )
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                 'xeffectivescalefactor
                                 echx
              )
            )
            (if (minusp (vlax-get-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                           'yeffectivescalefactor
                        )
                )
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                 'yeffectivescalefactor
                                 (- echy)
              )
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                 'yeffectivescalefactor
                                 echy
              )
            )
            (if (minusp (vlax-get-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                           'zeffectivescalefactor
                        )
                )
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                 'zeffectivescalefactor
                                 (- echz)
              )
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt)))))
                                 'zeffectivescalefactor
                                 echz
              )
            )
            (entmod (entget (ssname bl compt)))
            (command-s "_attsync" "_n" (cdr (assoc 2 (entget (ssname bl compt)))))
     )
   )
   (if (= (cdr (assoc 0 (entget (ssname bl compt)))) "AEC_MVBLOCK_REF")
     (progn (if (minusp (vlax-get-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalex))
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalex (- echx))
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalex echx)
            )
            (if (minusp (vlax-get-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scaley))
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scaley (- echy))
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scaley echy)
            )
            (if (minusp (vlax-get-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalez))
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalez (- echz))
              (vlax-put-property (vlax-ename->vla-object (cdr (car (entget (ssname bl compt))))) 'scalez echz)
            )
     )
   )
   (setq compt (1+ compt))
 )
 (prompt "\n")
 (setvar "dimzin" 8)
)

 

 

a+

Phil

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Merci Phil

 

Alors ça fonctionne, j'ai tenté un peu de modifier pour s'approcher de ce que je voulais mais j'ai du me perdre en route...

Je voudrais ne pas devoir sélectionner les blocs mais qu'ils soient tous sélectionnés (car dans le plan, il y a trop de blocs à sélectionner) et si je sélectionne tout (ctrl a) et bien ça ne marche pas.

Serait-il possible d'y apporter cette modification?

 

J'étais partis sur qqchose comme (ssget "_X" '((0. "INSERT") (2. *)))

Lien vers le commentaire
Partager sur d’autres sites

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é