philsogood Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 hello, je souhaiterai savoir si l'un d'entre vous aurait, dans un grand élan de générosité, le temps pour me faire une routine assez simple : pouvoir forcer la couleur et le type de ligne d'une sélection d'objets en couleur 252 caché vous auriez toute ma gratitude... ça ne doit aps prendre très logntemps à faire mais... et puis je ne travaille plus ou rpesque sur AutoCAD, j'ai été asspiré par le BIM... qui me amnge bcp de temps (sans même toucher à dynamo) merci à vous PS : didier, je vais aussi suivre pendant mon temps libre des cours de limitation de faute de frappes... ça va être bon ça!! 🙂 Projeteur Revit Indépendant - traitement des eaux/CVC
Luna Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 Coucou, Essaye ceci (non testé) : (defun c:Force>COLOR+LTYPE (/ jsel i name entlist co lt n subprop) (defun subprop (entlist tag value) (if (assoc tag entlist) (subst (cons tag value) (assoc tag entlist) entlist ) (append entlist (list (cons tag value)) ) ) ) (if (setq n 0 co 252 lt "Cache" jsel (ssget) ) (progn (repeat (setq i (sslength jsel)) (setq name (ssname jsel (setq i (1- i))) entlist (entget name) entlist (subprop entlist 62 co) entlist (subprop entlist 6 lt) entlist (vl-remove-if '(lambda (x) (member (car x) '(420 430)) ) entlist ) ) (if (entmod entlist) (setq n (1+ n))) ) (prompt (strcat "\nUn total de " (itoa n) " / " (itoa (sslength jsel)) " objets ont été modifiés avec succès." ) ) ) ) (princ) ) Il n'y a pas de vérification sur l'existence du type de ligne dans le dessin mais je doute que cela soit nécessaire. La couleur et le type de ligne sont définis en argument pour pouvoir les modifier à tout moment depuis l'IDE. J'ai également ajouté la suppression des codes 420 et 430 au cas où (je ne sais pas comment se comporte l'entité si on modifie son code 62 alors qu'elle possède un code 420 et/ou 430. Tu peux également te remove le (prompt) si pas besoin (c'est juste par habitude que je fais chat) Bisous, Luna
didier Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 Bonjour @Luna La non-existence du type de ligne dans le dessin empêchera toute modification, je ne pense pas que ce soit négociable. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 Vui, j'ai testé rapidement chat ne modifie pas l'objet voilà tout (pas d'erreur en soit donc pas de sushis !), en revanche étant donné que j'entmod uniquement à la fin, si le type de ligne n'existe pas, la couleur n'est pas forcée non plus donc à modifier éventuellement selon les besoins de chacun :3 Bisous, Luna
didier Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 Bonjour Je propose donc d'ajouter ces lignes (vl-load-com) (if (not (tblsearch "LTYPE" "cache")) (vla-load (vla-get-linetypes (vla-get-activedocument (vlax-get-acad-object) ) ) "Cache" "Acadiso.lin") ) Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Eric Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 Ou une simple macro à mettre dans un bouton (dans la palette d'outils par exemple) ^C^Cselect;\changer;p;;p;t;cache;co;252;; Eric est formateur, revendeur sur AutoCAD LT, DraftSight, ZWCAD, SketchUp et PDF2CAD
Luna Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 1 minute ago, Eric said: ^C^Cselect;\changer;p;;p;t;cache;co;252;; Court, simple, efficace ! 😉 Faudrait que je regarde comment fonctionne les macros, chat peut suffire parfois par rapport au LISP ^^" Bisous, Luna
Fraid Posté(e) le 27 avril 2021 Posté(e) le 27 avril 2021 un petit truc en VLA pour l'exemple (vl-load-com) (defun c:ptitruc (/ ss) (if (ssget) (progn (vlax-for obj (setq ss (vla-get-activeselectionset (vla-get-activedocument (vlax-get-acad-object)))) (vla-put-color obj 252) (vla-put-Linetype obj (load-line-type "CACHE" "acad.lin")) ) (vla-delete ss) ) ) ) (defun load-line-type ( typ fil / lin) (setq lin (vla-get-linetypes (vla-get-activedocument (vlax-get-acad-object)))) (and (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list lin typ))) (vla-load lin typ (findfile fil)) ) typ ) https://github.com/Fraiddd
(gile) Posté(e) le 28 avril 2021 Posté(e) le 28 avril 2021 @Fraid Juste deux petites remarques, si je peux me permettre : 1. il me semble qu'on peut tout simplement faire : (vla-put-Color obj 252) 2. quand on utilise : vla-get-ActiveSelectionSet (plus généralement un jeu de sélection COM) il est préférable de le supprimer avec vla-Delete. Le nombre de jeu de sélection actifs est limité à 128, avec AutoLISP (vanilla) le jeu est supprimé en même temps que la variable à laquelle il est assigné, mais avec COM, il faut le faire explicitement. (if (ssget) (progn (vlax-for obj (setq ss (vla-get-activeselectionset acdc)) (vla-put-color obj 252) (vla-put-Linetype obj (load-line-type "CACHE" "acad.lin")) ) (vla-delete ss) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 28 avril 2021 Posté(e) le 28 avril 2021 Merci Gile Il y a tellement de possibilités, qu'il est difficile de voir les plus pratique selon les cas. et la suppression de la sélection est une découverte... https://github.com/Fraiddd
(gile) Posté(e) le 28 avril 2021 Posté(e) le 28 avril 2021 1 hour ago, Fraid said: la suppression de la sélection est une découverte... Quand on veut faire un jeu de sélection en VBA (ou, si on est maso, en "pur vlisp') il faut créer un objet SelectionSet nommé et l'ajouter à la collection des jeux de sélection du dessin. Cette collection a une capacité limitée à 128 objets. Quand en vlisp on appelle vla-get-ActiveSelection le jeu de sélection courant est automatiquement ajouté à cette collection (avec un nom incrémenté comme les blocs ou les groupes anonymes, j'imagine) et, si on ne le supprime pas explicitement avec vla-Delete, restera dans la collection pendant toute la session. Et, quand la coupe collection est pleine, ça déborde plante. Un exemple sur cette page, permet de voir la différence entre VBA et .NET. En .NET (comme en LISP), il n'est ni besoin de nommer le jeu de sélection, ni de l'ajouter à une collection, ni de le supprimer quand on n'en plus besoin. Au passage on voit clairement que VB .NET est plus proche de C# que de de VBA. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 29 avril 2021 Posté(e) le 29 avril 2021 13 hours ago, (gile) said: Cette collection a une capacité limitée à 128 objets Cela me rappelle le nombre de plans que j'arrive à ouvrir et fermer avant "plantage" est ce lié? 13 hours ago, (gile) said: Un exemple sur cette page, Une vrais pierre de Rosette cette page. J'en ai profité pour allez voir l'aide sur activeselectionset, il n'en parle pas...encore un oublie ou est ce volontaire de leur part? on commence à se poser des questions de conspirationniste https://github.com/Fraiddd
(gile) Posté(e) le 29 avril 2021 Posté(e) le 29 avril 2021 ActiveSelectionSet Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Fraid Posté(e) le 29 avril 2021 Posté(e) le 29 avril 2021 Bah, c'est bien ce que j'ai vu, il ne parle pas de supprimer la sélection https://github.com/Fraiddd
philsogood Posté(e) le 29 avril 2021 Auteur Posté(e) le 29 avril 2021 hello merci à vous pour ce petit bout de code, ça marche au poil Phil Projeteur Revit Indépendant - traitement des eaux/CVC
Curlygoth Posté(e) le 29 avril 2021 Posté(e) le 29 avril 2021 18 hours ago, (gile) said: Quand on veut faire un jeu de sélection en VBA (ou, si on est maso, en "pur vlisp') il faut créer un objet SelectionSet nommé et l'ajouter à la collection des jeux de sélection du dessin. Cette collection a une capacité limitée à 128 objets. Quand en vlisp on appelle vla-get-ActiveSelection le jeu de sélection courant est automatiquement ajouté à cette collection (avec un nom incrémenté comme les blocs ou les groupes anonymes, j'imagine) et, si on ne le supprime pas explicitement avec vla-Delete, restera dans la collection pendant toute la session. Et, quand la coupe collection est pleine, ça déborde plante. Un exemple sur cette page, permet de voir la différence entre VBA et .NET. En .NET (comme en LISP), il n'est ni besoin de nommer le jeu de sélection, ni de l'ajouter à une collection, ni de le supprimer quand on n'en plus besoin. Au passage on voit clairement que VB .NET est plus proche de C# que de de VBA. J'ai lu ! c'est très instructif ! (Personnellement, je n'ai pas encore eu besoin de travailler sur cette méthode en VBA) Le C# et le VB.NET sont "visuellement" / "structurellement" plus propre que le lisp pour moi... (je comprends plus de choses que quand je vois du lisp) en tout je te remercie pour ces exemples ! Mon site Web (en cours de construction) : Site DA-CODE de @didier
philsogood Posté(e) le 9 novembre 2021 Auteur Posté(e) le 9 novembre 2021 hello je cherche une variante à cette problèmatique, je souhaite mettre un objet sur couleur, épaisseur, style de ligne et style de tracé (soyons fou) sur Ducalque c'est possible selon vous?? =.) Phil Projeteur Revit Indépendant - traitement des eaux/CVC
lecrabe Posté(e) le 9 novembre 2021 Posté(e) le 9 novembre 2021 Hello La commande native "DEFDUCALQUE / _SETBYLAYER" (qui existe depuis AutoCAD 2008) et son option "PArametres" ne te suffit pas !? https://knowledge.autodesk.com/fr/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2019/FRA/AutoCAD-Core/files/GUID-A9D9FF14-4EF6-4A25-B0F4-506C6B792E9E-htm.html https://howtoautocad.com/the-setbylayer-command/ La Sante, Bye, lecrabe Autodesk Expert Elite Team
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