openit Posté(e) le 24 janvier 2019 Posté(e) le 24 janvier 2019 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? Citer
PHILPHIL Posté(e) le 24 janvier 2019 Posté(e) le 24 janvier 2019 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 Citer FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
openit Posté(e) le 24 janvier 2019 Auteur Posté(e) le 24 janvier 2019 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. *))) Citer
Messages recommandés