Aller au contenu

Messages recommandés

Posté(e)

Bonjour à tous,

quelqu’un connait-il (ou pourrait-il créer) un outil qui permette d’un seul clic de souris (ou presque…) de supprimer les couleurs forcés des styles de cote présentes dans le dessin en mettant tout (lignes, flèches, textes, …) en couleur du calque ?

Merci par avance de votre aide.

Bonne journée.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Tu te mets à l'écran ta barre d'outils Propriétés.

Il y a 3 déroulants : couleur, type de ligne et épaiseur de ligne.

Tu sélectionne un par un les objets à modifier, ou ,pour aller plus vite, tu fais un CTRL+A dans ta zone graphique et tu vas cherdher Couleur, Du Calque.

C'est fait

@ +

Posté(e)

Bonjour clambert,

merci pour ta contribution mais je connaissais déjà cette méthode!

quand je parlais d'un outils j'entendais plutôt quelque chose dans le genre "petit lisp' qui une fois lancé fait le bouleau pour moi et qui traite toutes les cotations du dessins quelles soient obliques, droites, angulaires, etc.

Merci encore quand même.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Salut.

 

Un truc comme ça ?

(defun c:COTZ (/ sel n ent)
   (if (setq sel (ssget "_x" '((0 . "DIMENSION"))))
       (repeat (setq n (sslength sel))
           (entmod (subst
                   (cons 62 256)
                   (assoc 62 (setq ent (entget (ssname sel (setq n (1- n))))))
                   ent
           ))
           (entupd (cdr (assoc -1 ent)))
   ))
   (princ)
)

 

A bientot.

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Un autre un peu plus poussée...

(defun c:COTZ (/ cmdecho sel n ent)
   (setq cn 0 cmdecho (getvar "cmdecho"))
   (setvar "cmdecho" 0)
   (command "_undo" "d")
   (if (setq sel (ssget "_X" '((0 . "DIMENSION"))))
       (progn
           (repeat (setq n (sslength sel))
               (setq ent (entget (ssname sel (setq n (1- n)))))
               (if (/= 256 (cdr (assoc 62 ent)))
                   (entmod (subst
                           (cons 62 256)
                           (assoc 62 ent)
                           ent
                   ))
                   (setq cn (1+ cn))
               )
               (entupd (cdr (assoc -1 ent)))
           )
           (setq cn (- (sslength sel) cn))
           (if (and (< cn 2) (/= 0 cn))
               (princ (strcat "\n1 cote sur " (itoa (sslength sel)) " a été modifiée."))
               (if (/= 0 cn)
                   (princ (strcat "\n" (itoa cn) " cotes sur " (itoa (sslength sel)) " ont été modifiées."))
                   (princ "\nToutes les cotes sont à jour.")
               )
           )
       )
   )
   (command "_undo" "f")
   (setvar "cmdecho" cmdecho)
   (princ)
)

 

- Un annulation de la commande

- Des messages de fin.

 

A bientot !

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut Matt666,

merci beaucoup pour ton programme j'en ai fais un fichier lisp.

mais lorsque je le lance (cmd COTZ) bien qu'il démarre et qu'il donne un message de fin disant combien de côtes il à traité je ne vois pas ce qu'il modifie puisque les couleurs des côtes (lignes, textes, etc ) restent identiques.

A moins que je ne sache pas l'utiliser!:calim:

merci de m'aider. :yltype:

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Ah pardon !!

 

je n'avais pas tout lu...

 

Je te finis le truc dès que j'ai un peu le temps !

 

Adtal !

Matt.

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Salut,

 

Un petit truc qui met toutes les cotes en "DuCalque" et tous leurs composants (ligne de cote, ligne d'attache, texte) en "DuBloc".

 

(defun c:cleandim (/ ss)
 (vl-load-com)
 (or *acdoc*
     (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
     )
 (if
   (ssget "_X" '((0 . "DIMENSION")))
    (progn
      (vla-StartUndoMark *acdoc*)
      (vlax-for d (setq ss (vla-get-ActiveSelectionSet *acdoc*))
 (vla-put-Color d 256)
 (foreach p '(DimensionLineColor ExtensionLineColor TextColor)
   (if (vlax-property-available-p d p)
     (vlax-put d p 0)
   )
 )
      )
      (vla-EndUndoMark *acdoc*)
    )
 )
 (princ)
) 

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

Posté(e)

Salut Gile !

 

bon bah plus besoin de chercher !

 

Sauf que j'ai quand même fait un truc, mais n'ayant pas AutoCAD sous la main, je ne sais pas si cela fonctionne... Si vous pouviez voir ça ??

 

Je ne sais même pas si c'est une bonne méthode... Ca m'a l'air un peu simplet :)

C'est une méthode en autolisp, pas en vlisp.

 

Merci !

;;; LSTAB
;;; Génère automatiquement une liste des entités d'une des tables de la bd graphique.
;;; (LSTAB "layer") -> ("0" "structure")
(defun LSTAB ( TABL / LB X )
    (if  (member 
              (strcase tabl) 
              '("APPID" "BLOCK" "DIMSTYLE" "LAYER" "LTYPE" "STYLE" "UCS" "VIEW" "VPORT")
         )
         (progn
              (setq lb (cons (cdr (assoc 2 (tblnext tabl T))) lb))
              (while (setq x (cdr (assoc 2 (tblnext tabl))))
                   (setq lb (cons x lb))
              )
              (if (/= (strcase tabl) "BLOCK")
                   (setq lb (acad_strlsort lb))
                   lb
              )
         )
    )
)

;;;Normalise les styles de cotes
(defun c:COTZ (/ cmdecho sel n ent)
   (setq cmdecho (getvar "cmdecho"))
   (setvar "cmdecho" 0)
   (command "_undo" "d")
   (if (setq sel (ssget "_X" '((0 . "DIMENSION"))))
       (progn
           (repeat (setq n (sslength sel))
               (setq ent (entget (ssname sel (setq n (1- n)))))
               (if (/= 256 (cdr (assoc 62 ent)))
                   (entmod (subst
                           (cons 62 256)
                           (assoc 62 ent)
                           ent
                   ))
               )
               (entupd (cdr (assoc -1 ent)))
           )
           (setq dimstyle (getvar "dimstyle"))
           (foreach pt (lstab "dimstyle")
               (setvar "dimstyle" pt)
               (setvar "dimclre" 256)
               (setvar "dimclrd" 256)
               (setvar "dimclrt" 256)
           )
           (setvar "dimstyle" dimstyle)
       )
   )
   (command "_undo" "f")
   (setvar "cmdecho" cmdecho)
   (princ)
)

 

A bientot.

Matt.

 

[Edité le 18/3/2008 par Matt666]

"Chacun compte pour un, et nul ne compte pour plus d'un."

Posté(e)

Bonjour Gile,

t'es un chef ton "truc"" marche du tonnerre! :heartpump:

juste une petite remarque si tu me permets, tout passe en "DuBloc" : lignes, textes, etc.

Serait-il possible plutôt de tout faire passer en "DuCalque"?

Si ce n'est pas possible ça ne fait rien merci encore. :D

 

Je tiens aussi à remercier Matt666 pour ses efforts, et puisque tu le demande voici le message que j'ai eu en utilisant ton deuxième programme : "" erreur: paramètre de la variable AutoCAD rejeté: "dimstyle" "PROTO-COT-AXES" "" et ça n'a eu aucun effet sur les côtes.

mais toujours avec un bémol : je ne suis pas sur de l'avoir bien utilisé d'autant plus que je ne connais pas la différence entre autolisp et vlisp :red:

Merci beaucoup quand même.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

juste une petite remarque si tu me permets, tout passe en "DuBloc" : lignes, textes, etc.

Serait-il possible plutôt de tout faire passer en "DuCalque"?

 

J'avais mis DuBloc parce que c'est la valeur par défaut et que pour une cote (comme pour un bloc) si les composants ont les propriétés flottantes (DuBloc), les changements sur la cote (ou le bloc) s'affichent.

Si tu veux mettre les composant des cotes en DuCalque, remplace :

(vlax-put d p 0)

par :

(vlax-put d p 256)

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

Posté(e)

Ok (gile),

merci beaucoup pour l'info je comprends mieux maintenant :mad2:

et merci encore pour le programme, il est déjà devenu indispensable.

je pense qu'il mérite amplement sa place dans ta page de lisps! (ou dans une autre)

enfin moi ce qu'en j'en dit...

 

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Matt666,

 

Si tu veux agir sur les propriétés des styles de cote, il faut modifier la liste entget de l'objet style de cote (tblobjname), pas celle retournée par tblnext ou tblsearch.

 

Exemple pour remettre lignes et etextes en Dubloc dans tous les styles de cote :

(while (setq ds (tblnext "DIMSTYLE" (not ds)))
 (setq elst (entget (tblobjname "DIMSTYLE" (cdr (assoc 2 ds)))))
 (entmod
   (append (vl-remove-if
      '(lambda (x) (member (car x) '(176 177 178)))
      elst
    )
    '((176 . 0) (177 . 0) (178 . 0))
   )
 )
) 

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

Posté(e)

Salut (gile)

Je remarque que tu utilises maintenant ActiveSelectionSet :)

Mais la question est qu'il est plus pratique d'utiliser un vlax-for ou un vlax-map-collection sur le jeu de sélection ?

Car au test du benchmark, les deux instructions se tiennent :casstet:

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut Patrick_35,

 

Je remarque que tu utilises maintenant ActiveSelectionSet :)

 

Ce n'est pas si récent :)

À l'occasion, fais une recheche dans les forums avec" vla-getActiveSelectioSet", mon pseudo y apparaît plus souvent que le tien ou relis ce message (pour une fois où je te faisais découvrir quelque chose) ;)

 

À la question vlax-for vs vlax-map-collection, j'aurais tendance à dire que je fais plus souvent un vlax-for là où une fonction lambda serait nécessaire avec vlax-map-collection et que j'utilise ce dernier plutôt avec les fonction prédéfinies ou des defun. Mais ce n'est pas systématique...

 

[Edité le 19/3/2008 par (gile)]

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

Posté(e)

en vba j'ai fait ça, c'est différent l'amplitude des taches est plus grand et correspond exactement à ceux dont mon BE avez besoin, si ça peux te convenir...

 

c'est en cours de développement mais je sais que mes collègues sont assez content car ça fait le ménage...

http://www.cijoint.fr/cjlink.php?file=cj200803/cijU1MabRc.zip

 

 

voilà le post qui contient le suivit de l'outil :

http://www.cadxp.com/sujetXForum-18505.htm

 

 

 

 

[Edité le 18/3/2008 par sechanbask]

ATEGIE - Bureau d'Études Fluides

http://www.ategie.fr/uploads/ategie/ategie-at%C3%A9gie-bureau-%C3%A9tudes-etudes-fluides-logo-100x56.png

Exécution, Synthèse, Conception, Maîtrise d'Oeuvre, Audit, Chiffrage

www.ategie.fr

Posté(e)

Bonjour sechanbask,

merci de ta contribution.

Excuse mon incompétence mais je ne sais pas comment utiliser ton programme :(

Peut-tu s'il te plait éclairer ma lanterne?

Peut-on le lancer via une icône ou un menu contextuel?

merci d'avance.

" Celui qui a déplacé la montagne, c'est celui qui a commencé par enlever les petites pierres "

Posté(e)

Bonjour à toutes et tous,

 

Après avoir mis le fichier ""nettoyeur.dvb" dans un dossier support de AutoCAD, tu fais =>

 

Outils => Macro VBA => charger projet

 

Ensuite,

 

Outils => Macros => Exécuter (autorise l'ouverture des macros)

 

Puis, tu choisis l'option la ou les options qui t'intéresse <!--url{0}--> =>

 

 

 

Ca marche super bien !

 

Merci encore sechanbask

 

[Edité le 19/3/2008 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

https://www.linkedin...3%ABt-95313341/

Posté(e)

Salut,

dans le lisp de (gile), (vla-get-ActiveSelectionSet *acdoc*) est mis dans une variable.

Il me semble que c'est inutile.

non ?

et si ça ne l'est pas, pourquoi ?

 

merci.

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Posté(e)

Salut Bred,

 

C'est pour éviter ça, mais je n'ai pas vraiment testé l'efficacité ou l'utilité du procédé.

 

EDIT: à y bien réfléchir, je pense que c'est effectivement inutile.

 

[Edité le 19/3/2008 par (gile)]

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

Posté(e)

si ça ne l'est pas, pourquoi ?

Cela permet de vider le jeu de sélection, car après plusieurs ActiveSelectionSet, j'ai un message d'erreur et plus de sélection possible. Le moyen que j'ai trouvé pour l'éviter, c'est donc de le vider.

 

Ce n'est pas si récent :)

J'ai pourtant vu plusieurs de tes lisps avec un traitement du jeu de sélection en pur autolisp.

Peut-être pour qu'il reste plus accessible pour la compréhension.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)
si ça ne l'est pas, pourquoi ?

Cela permet de vider le jeu de sélection, car après plusieurs ActiveSelectionSet, j'ai un message d'erreur et plus de sélection possible. Le moyen que j'ai trouvé pour l'éviter, c'est donc de le vider.

 

Je ne suis pas sûr que ActiveSelectionSet soit une cause d'attente de la limite du nombre de jeu de sélections, il n'y a jamais qu'un jeu de sélection actif à la fois et il ne semble pas être ajouté à la collection s'il n'est pas contenu dans une variable.

 

L'expression suivante fonctionne :

(repeat	200
 (ssget "x")
 (vlax-for o (vla-get-ActiveSelectionSet *acdoc*)
   (vla-Highlight o :vlax-true)
 )
 (ssget "x")
 (vlax-for o (vla-get-ActiveSelectionSet *acdoc*)
   (vla-Highlight o :vlax-false)
 )
) 

 

et (vla-get-count (vla-get-SelectionSets *acdoc*)) retourne 1

 

Par contre les suivantes échouent:

(setq n 0)
(repeat	200
 (set (read (strcat "ss" (itoa (setq n (1+ n)))))
      (ssget "_X")
 )
) 

et retourne:

; erreur: dépassement du nombre maximum de jeux de sélection

 

pour faire le ménage:

 

(foreach pickset (vl-remove-if-not
	   '(lambda (symbol) (eq 'pickset (type (eval symbol))))
	   (atoms-family 0)
	 )
 (set pickset nil)
) 

 

[Edité le 19/3/2008 par (gile)]

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

Posté(e)

Re,

 

Je ne parlais pas du nombre de jeu de sélections, mais d'une erreur du type IAcadSelection et dès que j'utilisais un ssget, j'avais ce type de message d'erreur.

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é