Aller au contenu

Modification echelle de type de ligne en masse


Fruity

Messages recommandés

Bonjour

Alors depuis quelques jours, je m'embête à faire ca a la main (et souvent je dois faire ca par catégorie d'objet), et c'est le genre de chose qui doit être facile a programmer:

Modifier l’échelle de type de ligne de tous les objets présent sur le plan.

Quelqu'un saurait?

 

Merci

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Je ne sais pas si j'ai bien compris la question, mais en passant par la palette des propriétés, c'est possible non?

d156.jpg

 

Tu fais un Ctrl+A, et tu mets la valeur que tu veux à la place de *Varie*

www.cad-is.fr
Autocad Map 2021 - Covadis/Autopiste V18.0c
Pisser sous la douche ne suffira pas
Lien vers le commentaire
Partager sur d’autres sites

Bonjour

Alors depuis quelques jours, je m'embête à faire ca a la main (et souvent je dois faire ca par catégorie d'objet), et c'est le genre de chose qui doit être facile a programmer:

Modifier l’échelle de type de ligne de tous les objets présent sur le plan.

Quelqu'un saurait?

 

Merci

Bonjour,

 

Si tu veux modifier seulement l'échelle de l'ensemble des polylignes de ton fichier, moi j'aurais utilisé la commande "sélection rapide", tu indiques les objets à sélectionner soit dans ton cas les polylignes, toutes les polylignes de ton fichier vont s'afficher avec les grips, tu vas alors dans propriété et tu changes le rapport d'échelle, tout simplement.

A+

Phil

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Ou bien Mr Open-Mind desire une routine Lisp/VLisp ("ScaleLineTypes" ??)

qui multiplie par un facteur xx.yy

TOUTES les echelles LOCALES de type de ligne des objets graphiques !?

 

ET on ne touche surtout pas a ECHLTP/LTSCALE !

 

Ce qui peut etre TRES PRATIQUE !

 

MERCI Gilles, Bye, lecrabe

 

PS: Ci-apres l'excellente routine "ScaleLineTypes" de Maitre Gilles ...

 


;; 
;; Routine: ScaleLineTypes  by GC for Patrice
;; 

(defun c:ScaleLineTypes    (/ ss i scl dxf)
 (prompt "\nSelectionnez les Objets ou Entree pour Tous : ")
 (setq ss (cond ((ssget)) ((ssget "X"))))
 (initget 7)
 (setq scl (getreal "\nEntrez le Facteur de Changement RELATIF du Facteur d Echelle LOCAL: "))
 (repeat (setq i (sslength ss))
   (setq dxf (entget (ssname ss (setq i (1- i)))))
   (if    (setq lts (assoc 48 dxf))
     (entmod (subst (cons 48 (* scl (cdr lts))) lts dxf))
     (entmod (append dxf (list (cons 48 scl))))
   )
 )
 (princ)
)

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Merci pour vos réponses.

 

Bonjour,

Je ne sais pas si j'ai bien compris la question, mais en passant par la palette des propriétés, c'est possible non?

d156.jpg

 

Tu fais un Ctrl+A, et tu mets la valeur que tu veux à la place de *Varie*

 

C'est ainsi que je fais, cependant, la plupart du tps, la ligne est grisée et je dois alors filtrer par type d'objet (ligne, puis arc, puis polyligne, etc.) pour changer la valeur. Ce qui est long. D'autant plus quand le fichier est lourd. Sans parler du risque de plantage à faire une sélection complète.

D'où ma demande d'une commande qui automatiserait tout ca.

 

Quant à la routine "ScaleLineTypes" , j'ai un doute. Si j'ai bien compris, on applique un même facteur à l'ensemble des objets. Mais quand différentes échelles locales existent sur un dessin, la différence resterait après avoir appliqué un facteur.

 

CHPROP, ca avait l'air pas mal, mais ca revient à modifier par la fenêtre de propriétés, et ca ne fonctionne pas quand celle-ci est grisée.

Lien vers le commentaire
Partager sur d’autres sites

HELLO

 

j'ai modifie un lisp pour changer la hauteur des texte, en changement de l'echelle des lignes ou polyligne

 

ca sous entend de choisir les entités quand meme

 

 

tu sélectionnes les entité lignes ou polyligne

ou un CTR+A pour tout sélectionner

 

tu appuies sur

"+" augmente l'échelle de type de ligne de 0.1

ou "-" diminue l'échelle de type de ligne de 0.1

ou "0" sort du lisp

 

a+

 

Phil

 

 

 

;;;------------------------------------------------------------------
;;;CHANGE L ECHELLE DES TYPE DE LIGNE OU POLYLIGNE AVEC LES TOUCHES + OU -  EJECT AVEC 0
;;;  +  = touche N°43
;;;  -  = touche N°45
;;;  0  = touche N°48
;;;  enter  = touche N°13
;;;------------------------------------------------------------------

(defun C:CECT (/ ENTX)
 (setvar "cmdecho" 0)
 (setq ENTX NIL)
 (prompt "\nSELECTIONNER LE(S) LIGNE(S) POLYLIGNE(S) A MODIFIER :")
 (while (null ENTX) (setq ENTX (ssget '((0 . "LINE,LWPOLYLINE")))))
 (setq COM (sslength ENTX))
 (setq BOUCLE1 1)
 (while (= BOUCLE1 1)
   (initget "0 + -")
   (prompt "\nSELECTIONNER LE TYPE D'ACTION DESIRE ( 0 + - ) ")
   (setq ACTION (grread NIL 4 0))
   (if (= (cadr ACTION) 43)
     (progn (setq COMPT 0)
            (while (< COMPT COM)
              (setq ECHELLETYPELINE (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname ENTX COMPT))))) 'LinetypeScale))
              (vla-put-LinetypeScale (vlax-ename->vla-object (cdr (car (entget (ssname ENTX COMPT)))))
                              (+ (ROUND-PREC ECHELLETYPELINE 1) 0.1)
              )
              (setq COMPT (1+ COMPT))
            )
            (if (= COM 1)
              (prompt
                (strcat "\nL'ECHELLE DE LA LIGNE, POLYLIGNE EST DE < " (rtos (+ (ROUND-PREC ECHELLETYPELINE 1) 0.1) 2 1) " >: ")
              )
              (prompt "\nL'ECHELLE DES LIGNES, POLYLIGNES A AUGMENTEE DE 0.1 :")
            )
     )
   )
   (if (= (cadr ACTION) 45)
     (progn (setq COMPT 0)
            (setq CHANG 0)
            (while (< COMPT COM)
              (setq ECHELLETYPELINE (vlax-get-property (vlax-ename->vla-object (cdr (assoc -1 (entget (ssname ENTX COMPT))))) 'LinetypeScale))
              (if (> (- (ROUND-PREC ECHELLETYPELINE 1) 0.1) 0)
                (progn (vla-put-LinetypeScale (vlax-ename->vla-object (cdr (car (entget (ssname ENTX COMPT)))))
                                       (- (ROUND-PREC ECHELLETYPELINE 1) 0.1)
                       )
                       (setq CHANG (1+ CHANG))
                )
                (progn (prompt "\nL'ECHELLE DE LA LIGNE, POLYLIGNE N'A PAS ETE CHANGE CAR DEVENU NEGATIVE :"))
              )
              (setq COMPT (1+ COMPT))
            )
            (if (> COM 1)
              (progn (if (> CHANG 0)
                       (prompt "\nL'ECHELLE DES LIGNES, POLYLIGNES A DIMINUEE DE 0.1 :")
                     )
              )
              (progn
                (if (> CHANG 0)
                  (prompt
                    (strcat "\nL'ECHELLE DE LA LIGNE, POLYLIGNE EST DE < " (rtos (- (ROUND-PREC ECHELLETYPELINE 1) 0.1) 2 1) " >: ")
                  )
                  (prompt (strcat "\nL'ECHELLE DE LA LIGNE, POLYLIGNE EST DE < " (rtos (ROUND-PREC ECHELLETYPELINE 1) 2 1) " >: "))
                )
              )
            )
     )
   )
   (if (= (cadr ACTION) 48)
     (setq BOUCLE1 0)
   )
 )
 (princ)
)

;;; ROUND-PREC Arrondit à la valeur la plus proche en fonction de prec
;;; (round pi 2) -> 3.14
;;; (round pi 5) ->3.14159
;;; (round 5456.50 0) -> 5457
;;; (round 5456.50 -1) -> 5460

(defun round-prec (num prec /)
 (setq rslt (/ (fix (+ (* num (expt 10.0 prec)) (/ (abs num) (* 2 num)))) (expt 10.0 prec)))
 (if (< 0 prec)
   rslt
   (fix rslt)
 )
)

Autodesk Architecture 2023 sous windows 11 64

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

Lien vers le commentaire
Partager sur d’autres sites

Merci mais ca ne marche pas. Enfin si mais les différences restent.

Un objet qui est à un 10 , un autre à 5, après utilisation de ce lisp, on se retrouve avec 6 et 1 par exemple. L'écart reste inchangé.

Là où je souhaiterai tout mettre à la même valeur.

 

ps: et il faudrait que ca fonctionne sur les arcs, les cercles, etc... enfin tout)

Lien vers le commentaire
Partager sur d’autres sites

  • 10 mois après...

Coucou

Allez ! on va appeler les vieux à la rescousse...

Ils passent leur temps à bloquer les sites porno ces derniers temps,

Un peu de lisp va leur dégourdir les doigts...

 

Essaie-ça :

 

Amicalement

(defun c:Ch-F-LT ( / ssets acadDocument newsset n item NF) 
 (vl-load-com)
 (setq NF (getreal "\nNouveau Faceur d'échelle du type de ligne : "));NF pour Nouveau Facteur
 (setq acadDocument (vla-get-activedocument (vlax-get-acad-object)))
 (setq ssets (vla-get-selectionsets acadDocument))
 (setq newsset (vla-add ssets "JeuSel"))
 (vla-selectOnScreen newsset)
 (setq n 0)
 (repeat (vla-get-count newsset)
(setq item (vla-item newsset n))
(setq check (vlax-property-available-p item "LinetypeScale" T))
(if check
 	(vlax-put-property item 'LinetypeScale NF)
 	);if
(setq n (1+ n))
);repeat
 (vla-delete (vla-item ssets "JeuSel"))
 (princ)
)

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

hello

un lisp à 2 balles (pcq court et très efficace)

;;;echelle type de ligne = 1
(defun c:ech(/ doc ele obj)
 (setq doc (vla-get-activedocument (vlax-get-acad-object)))
 (vla-startundomark doc)
 (vlax-for ele (vla-get-blocks doc)
   (vlax-for obj ele
     (vl-catch-all-apply 'vla-put-linetypescale (list obj 1.0))
   )
 )
 (vla-endundomark doc)
 (princ)
)

++

Phil

  • Upvote 1

Projeteur Revit Indépendant - traitement des eaux/CVC

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Et avec la bonne vieille commande CHANGER ? ça donne une petite MACRO toute simple qui va traiter l'ensemble des OBJETS du dessin :

 

^c^c_CHANGE;_ALL;;_P;_E;0;_T;0;;

 

_E = Elévation

 

_T = Hauteur Z

 

 

Christian

Formateur, Consultant Expert AutoCAD, REVIT MEP, INVENTOR, télécharger , des Outils AutoCAD...

cad123 @ wanadoo.fr (enlever les espaces de part et d'autre de @)

Lien vers le commentaire
Partager sur d’autres sites

le problème quand on fait Ctrl A ou Chprop, c'est quand il y a des blocs dans la sélection j'avais récupérer un bout de code pour sortir ces derniers de la sélection

(defun c:moinsbloc ()
(sssetfirst nil (ssget '((-4 . "<NOT") (0 . "INSERT") (-4 . "NOT>"))))
)

après tu passe tout à 1 puis la routine qui applique un facteur multiplicateur fait des miracles

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...
  • 1 an après...

Hello

 

Ou bien Mr Open-Mind desire une routine Lisp/VLisp ("ScaleLineTypes" ??)

qui multiplie par un facteur xx.yy

TOUTES les echelles LOCALES de type de ligne des objets graphiques !?

 

ET on ne touche surtout pas a ECHLTP/LTSCALE !

 

Ce qui peut etre TRES PRATIQUE !

 

MERCI Gilles, Bye, lecrabe

 

PS: Ci-apres l'excellente routine "ScaleLineTypes" de Maitre Gilles ...

 

 

C'est ce qu'il me fallait depuis des années. Je ne l'avais pas trouvé, faute de l'avoir cherché !!

 

 

En effet très pratique :

Quand on insère un bloc défini en mètre dans un dessin au millimètre, le bloc subit une conversion de 1000 ("facteur d'unité" du bloc), mais pas les types de lignes ! Les pointillés ressemblent donc à des lignes continues.

Echtp pourrait régler le problème mais ça agit sur tous le dessin. Donc aussi sur des objets dont les pointillés et autres type de lignes sont déjà visuellement correct et qu'il ne faut pas changer...

 

 

Autocad 2021 - Revit 2022 - Windows 10

Lien vers le commentaire
Partager sur d’autres sites

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é