Aller au contenu

[Résolu] Petit problème d'échelle de bloc


Messages recommandés

Posté(e)

Bonjour à tous.

 

Voilà, aujourd'hui, je tente de réinsérer des blocs en conservant leur échelle respective, seulement voilà, j'ai "logiquement" tout mes blocs en mètre.

 

Ce lisp remplace les bloc "incrémentés" par MicroStation. Et oui, MicroStation créé des blocs incrémentés lors de la sauvegarde sous DWG, par exemple, j'ai un bloc nommé "EGO72", et bien MS créé des blocs "EGO72_1" "EGO72_2" "..." Mais lorsque j'insers ce bloc (par exemple), il se retrouve avec des tailles différentes pour les mêmes échelles...

 

Voici le dessin ET le lisp et voici le lisp seul :

(defun c:PbEchelBloc (/)
 (setq Select nil)
 (setq LstBlk '(("EGO72_*" . "EGO72")
                ("VEG52_*" . "VEG52")
                ("VEG82_*" . "VEG82")
               )
 ) ;_ Fin de setq
;;; Début de la boucle
 (foreach PosLstBlk LstBlk
   (setq n 0)
   (if (setq Select (ssget "_X" (list (cons 0 "INSERT") (cons 2 (car PosLstBlk)))) ;_ Fin de ssget
       ) ;_ Fin de setq
     (while (setq ent (ssname Select n))
       (setq elst  (entget ent)
             Coord (cdr (assoc 10 elst))
             EchX  (cdr (assoc 41 elst))
             EchY  (cdr (assoc 42 elst))
             Rot   (cdr (assoc 50 elst))
             Calq  (cdr (assoc 8 elst))
             n     (1+ n)
       ) ;_ Fin de setq
       (setvar "clayer" Calq)
       (command "_erase" ent "")
       (setq Coord (strcat (rtos (car Coord) 2 3) "," (rtos (cadr Coord) 2 3)) ;_ Fin de strcat
       ) ;_ Fin de setq
       (setq Rot (+ Rot (/ pi 2)))
       (command "-inserer" (cdr PosLstBlk) "_non" Coord EchX EchY (angtos Rot 2 3)) ;_ Fin de command
     ) ;_ Fin de while
   ) ;_ Fin de if
 ) ;_ Fin de foreach
) ;_ Fin de defun
;|«Visual LISP© Format Options»
(150 2 40 2 T "Fin de " 100 9 0 0 0 nil nil nil T)
;*** NE PAS AJOUTER de texte au-dessous du commentaire! ***|;

 

Si quelqu'un a une astuce, un conseil ou une idée, je suis preneur...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Posté(e)

Salut,

 

Je ne vois rien d'incorrect dans ton LISP si ce n'est que tu arrondis les coordonnées du point d'insertion en les convertissant en chaîne alors que tu peux très bien passer directement le point (liste de nombre) à la fonction command.

 

Le problème vient du facteur d'échelle de conversion d'unité : le bloc d'origine est en pouce, l'unité d'insertion est le mètre d'où un facteur d'unité de 39.3701 affiché dans les propriétés (1 pouce / 0.0254 mètre = 39.3701).

 

Tu peux récupérer cette valeur

- soit en Visual LISP avec

(vla-get-InsUnitsFactor (vlax-ename->vla-object ent))

- soit avec getpropertyvalue

(getpropertyvalue (getpropertyvalue ent "BlockTableRecord") "UnitFactor")

ou, plus simplement :

(getpropertyvalue ent "BlockTableRecord/UnitFactor")

 

Arrivé à ce niveau, il serait temps d'essayer d'éviter d'utiliser command et d'utiliser plutôt entmake ou entmod (très intéressant dans ce cas).

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

Posté(e)

Bonjour (gile), et merci pour ces conseils.

 

Étant pressé, j'ai ajouté une boucle pour vérifier la valeur de l'échelle du bloc :

        (if (> EchX 100)
         (setq EchX (/ EchX 1000)
               EchY (/ EchY 1000)
               )
         )

Je sais, ce n'est pas joli, mais c'est de mon niveau :( (pour l'instant)...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é