Aller au contenu

ECHELLE PLUS


Messages recommandés

Invité ingoenius
Posté(e)

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 ;-)

 

 

 

Posté(e)

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...

Posté(e)

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

Invité ingoenius
Posté(e)

MERCI ,

meme l'impossible avec gile est possible :-)

ca va etre trés utile ;-)

:D

Posté(e)

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

Posté(e)

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

Posté(e)

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.

 

@+

Posté(e)

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

Posté(e)

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/

Posté(e)

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

Posté(e)

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)

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 ;-)

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é