Invité ingoenius Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Souvent je reçois des dessin dans les quelle je dois changer l'échelle (ex pour passer de unité en mm en m)la commande échelle ne réduit pas les cotes etc etc J'aimerai avoir une commande d'échelle "globale" qui réduise tous les objet sélectionnés (meme les texts les cotes avec leur pointe de flèche etc) existe peut-etre quelqu'un qui as déjà créé cette commande? merci a tous ;-)
x_all Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 quand tu fait echelle/tout 0.01 (par exemple) par rapport à 0,0,0, tout se réduit... sauf que les cotes gardent leur style originel... donc tu sélectionne tout ce qui "dépasse" et tu y applique un style de cote approprié... je ne suis pas sur qu'on puisse faire un lisp pour ça... surtout sans avoir le style de cote qui correspond à ce que tu attend... si tu veux que les cotes se réduisent, il faudrai les exploser..... pas bien... quelques trucs sur autocad
(gile) Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Salut, Un petit truc vite fait (pas testé en profondeur) pour changer d'échelle tout l'espace objet (defun c:scalems (/ *error* scl ss n dim dscl) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "\nErreur " msg)) ) (setvar "cmdecho" echo) (princ) ) (setq echo (getvar "cmdecho")) (if (setq scl (getreal "\nFacteur d'échelle: ")) (progn (setvar "cmdecho" 0) (command "_.scale" "_all" "" '(0 0 0) scl) (setvar "dimscale" (* scl (getvar "dimscale"))) (setvar "textsize" (* scl (getvar "textsize"))) (if (setq ss (ssget "_X" '((0 . "DIMENSION") (410 . "Model")))) (repeat (setq n (sslength ss)) (setq dim (ssname ss (setq n (1- n)))) (or (setq dscl (cdr (assoc 1040 (cdadr (assoc -3 (entget dim '("ACAD")))) ) ) ) (setq dscl 1) ) (command "_.dimoverride" "dimscale" (* dscl scl) "" dim "") ) ) (setvar "cmdecho" echo) ) ) (princ) ) [Edité le 25/8/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
x_all Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 ha yes.... dimscale.... j'avais pas penser a utiliser ça... du coup, encore un lips à supergille que je vais mettre dans mes utilitaires... merci :) quelques trucs sur autocad
Invité ingoenius Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 MERCI , meme l'impossible avec gile est possible :-) ca va etre trés utile ;-) :D
(gile) Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 La routine n'était pas vraiment au point si l'échelle de certaines cotes avait été forcée.J'ai aussi ajouté la mise à jour de TEXTSIZE, supprimé les echos sur la ligne de commande et mis une redéfinition de *error*. [Edité le 25/8/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
(gile) Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Comme ça semblait en intéresser plus d'un, j'ai essayé de finaliser la routine.Le passage à Visual LISP devrait en rendre l'exécution plus rapide qu'avec la fonction command.J'ai aussi ajouté plus de contrôles. ;;; SCMLMS (gile) ;;; Change l'échelle globale de l'espace objet (defun c:SclMs (/ *error* scl mspace blk lst) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (or *blocks* (setq *blocks* (vla-get-Blocks *acdoc*))) (or *layers* (setq *layers* (vla-get-Layers *acdoc*))) (defun *error* (msg) (or (= msg "Fonction annulée") (princ (strcat "Erreur: " msg)) ) (vla-EndUndoMark *acdoc*) (princ) ) (vl-load-com) (if (setq scl (getreal "\nSpécifiez le facteur d'échelle: ")) (progn (vla-StartUndoMark *acdoc*) (layerunlockall T) (setq mspace (vla-get-ModelSpace *acdoc*) blk (vla-add *blocks* (vlax-3d-point '(0 0 0)) "SclMsTempBlock") ) (vlax-for o mspace (setq lst (cons o lst))) (vlax-invoke *acdoc* 'CopyObjects lst blk) (setq ref (vla-InsertBlock mspace (vlax-3d-point '(0 0 0)) "SclMsTempBlock" scl scl scl 0.0 ) ) (vla-explode ref) (mapcar 'vla-delete (cons ref lst)) (vla-delete blk) (if (ssget "_X" '((0 . "DIMENSION,LEADER"))) (progn (vlax-for o (setq ss (vla-get-ActiveSelectionSet *acdoc*)) (ScaleDim o scl) ) (vla-delete ss) ) ) (setvar "dimscale" (* scl (getvar "dimscale"))) (setvar "textsize" (* scl (getvar "textsize"))) (layerunlockall nil) (vla-EndUndoMark *acdoc*) ) ) (princ) ) ;; ScaleDim (gile) ;; Change l'échelle globale d'une cote ;; ;; Arguments ;; dim : la cote (vla-object) ;; scl : le facteur d'échelle (defun ScaleDim (dim scl / typ val lst pos) (vla-getXdata dim "ACAD" 'typ 'val) (if typ (progn (setq lst (mapcar (function (lambda (x y) (cons x (vlax-variant-value y)) ) ) (vlax-safearray->list typ) (vlax-safearray->list val) ) ) (if (setq pos (vl-position '(1070 . 40) lst)) (setq lst (subst-i (cons 1040 (* scl (cdr (nth (1+ pos) lst)))) (1+ pos) lst ) ) (setq lst (append '((1001 . "ACAD") (1000 . "DSTYLE") (1002 . "{") (1070 . 40) ) (list (cons 1040 scl)) (cddddr lst) ) ) ) ) (setq lst (list '(1001 . "ACAD") '(1000 . "DSTYLE") '(1002 . "{") '(1070 . 40) (cons 1040 scl) '(1002 . "}") ) ) ) (vla-setXData dim (vlax-safearray-fill (vlax-make-safearray vlax-vbInteger (cons 0 (1- (length lst))) ) (mapcar 'car lst) ) (vlax-safearray-fill (vlax-make-safearray vlax-vbVariant (cons 0 (1- (length lst))) ) (mapcar 'cdr lst) ) ) ) ;;; LayerUnLockAll (gile) ;;; Déverrouille tous les calques ;;; ou re-verrouille les claques précédemmment déverouillés ;;; ;;; Argument : T ou nil ;;; ;;; Utilisation : ;;; (LayerUnLockAll T) déverrouille tous les calques verrouillés ;;; (LayerUnLockAll nil) re-verrouille les calques déverrouillés (defun-q layerunlockall (flag / lst lay) (setq lst nil) (if flag (vlax-for l *layers* (and (= (vla-get-Lock l) :vlax-true) (setq lst (cons (vla-get-name l) lst)) (vla-put-Lock l :vlax-false) ) ) (progn (foreach n lst (and (setq lay (GetItem *layers* n)) (vla-put-Lock lay :vlax-true) ) ) (setq lst nil) ) ) (setq layerunlockall (cons (car layerunlockall) (cons (list 'setq 'lst (list 'quote lst)) (cddr layerunlockall) ) ) ) lst ) ;; SUBST-I (gile) ;; Remplace l'élément à l'indice spécifié par un nouvel élément (defun subst-i (new ind lst) (if (or (zerop ind) (null lst)) (cons new (cdr lst)) (cons (car lst) (subst-i new (1- ind) (cdr lst))) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Bonsoir à toutes et tous, Ouuuuuf ! Merci, :P Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lesourd2 Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Salut Hou la! le pere "GILE" est lancé.Mais ou s'arretera t-il (pourvu qu'il ne s'arrete pas en si bon chemin d'ailleurs)Oui çela va en interesser plus d'un,et moi le premier .MERCI BEAUCOUP. @+
(gile) Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Attention, c'est loin d'être parfait les définitions de blocs ne sont pas mise à l'échelle (on peut le faire avec edit_bloc) et il reste sûrement d'autres imperfections. D'autre part, je pense qu'il est possible d'obtenir le même résultat en insérant le fichier en tant que bloc dans un dessin vierge après avoir judicieusement paramétré les variables INSUNITSDEFSOURCE et INSUNITSDEFTARGET Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lili2006 Posté(e) le 25 août 2008 Posté(e) le 25 août 2008 Re, Je suis d'accord à 80 % avec toi (gile)( En ce qui concerne "INSUNITSDEFSOURCE et INSUNITSDEFTARGET", à moins que je ne sache bien les paramétrer,....???) , mais les 20 % restant, c'est vraiment la galère quand ça bug, surtout avec les cotes !Je trouve que cette routine fonctionne pas si mal (maxi 10 tests), tiens un constat => Quand on met une échelle très petite (0.00001), il ne reste presque plus rien du dessin au final,.. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
BIM G CO Posté(e) le 26 août 2008 Posté(e) le 26 août 2008 Cher lili2006, Les 20% sur lesquelles "tu galères" c'est peut être aussi une histoire de ECHLTP aussi ! Car de mon coté, mis à part les andouilles qui dessinent leur plans au demi-hectomètre çà marche pas mal. Dessinateur AutoCAD, Modeleur BIM, consultant informatique logiciels métier Lenovo ThinkStation P330 i9 9900K 32Gb RAM 512 SSD + 1To GstarCAD, Fisa-CAD, Revit, FisaBIM CVC, Microsoft Office PlaquetteDeplianteMars2024.pdf
lili2006 Posté(e) le 26 août 2008 Posté(e) le 26 août 2008 Bonsoir à toutes et tous, Je ne savais pas que la variable "ECHLTP" avait également de l'influence sur les objets, blocs, textes,cotes,... !!?? mis à part les andouilles qui dessinent leur plans au demi-hectomètre çà marche pas mal. J'en rencontre malheureusement aussi,... Merci de ta réponse Maximilien, je vais regarder cette variable de plus près,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Invité ingoenius Posté(e) le 27 août 2008 Posté(e) le 27 août 2008 L' idéale maintenant serait de modifier l'excellent début de gile, de façon a prendre en compte tous les objet de l'espace objet (cotes, annotation échelle de type de ligne, bloc mis a l'échelle par rapport a leur point d'insertion etc ) le tout avec une sélection d'objet demandé avant et pas d'office sur tout l'espace objet quoi-en pensez vous?merci a tous ;-)
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