DenisHen Posté(e) le 20 février 2017 Posté(e) le 20 février 2017 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)
(gile) Posté(e) le 20 février 2017 Posté(e) le 20 février 2017 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
(gile) Posté(e) le 20 février 2017 Posté(e) le 20 février 2017 Ou peut-être simplement en changeant l'unité d'insertion de ton fichier (actuellement INSUNITS est à 1, soit "pouces")... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 21 février 2017 Auteur Posté(e) le 21 février 2017 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)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant