Fundream Posté(e) le 20 août 2013 Posté(e) le 20 août 2013 J'aimerai savoir si il existe une solution pour associer les couleur des cotes en fonction de leur longueur. Mes cotes sont très répétitive et font toujours des longueurs fixe, j'aimerai que la cote 1.50m s'affiche en bleu, 2.00m en vert, 2.50m en rouge etc... Est-ce possible ? Citer Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
Julian-Nihon Posté(e) le 22 août 2013 Posté(e) le 22 août 2013 Bonjour, Oui, c'est possible :(defun c:DIMCOLOR (/ ss i d l c) (if (setq ss (ssget '((0 . "DIMENSION")))) (progn (setq i 0) (repeat (sslength ss) (setq d (entget (ssname ss i))) (setq l (cdr (assoc 42 d))) (cond ;;Debut des conditions : Ajouter des conditions a la suite ;;l : longueur a evaluer () ;;c : couleur {(1~255) 256=bylayer} ;; {1:rouge 2:jaune 3:vert 4:cyan 5:bleu 6:magenta 7:blanc} ((equal l 1500.0 0.000001) (setq c 1)) ((equal l 2000.0 0.000001) (setq c 2)) ((equal l 2500.0 0.000001) (setq c 3)) ;;SI aucune condition n'est rempli : couleur ByLayer (t (setq c 256)) ;;Fin des conditions ) (entmod (append d (list (cons 62 c)))) (setq i (1+ i)) ) ) ) (princ) ) Je suis débutant en lisp alors, c'est vraiment du bricolage ... Quelqu'un de plus expérimenter te donnera peut-être quelque chose de plus simple, concis et compréhensible.D'ailleurs au passage, si cette personne pouvais me dire ce qui est simplifiable, ca serait sympa Ju du Japon Citer
Fundream Posté(e) le 22 août 2013 Auteur Posté(e) le 22 août 2013 Merci, débutant mais bien plus balèze que moi. J’essaie ça de suite. EDIT : Bon ba ça ne fonctionne pas, ça me demande de choisir des objets... Citer Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
-Olivier- Posté(e) le 22 août 2013 Posté(e) le 22 août 2013 Bonjour à tous,Si ton plan est en mètre, modifie ((equal l 1500.0 0.000001) (setq c 1)) ((equal l 2000.0 0.000001) (setq c 2)) ((equal l 2500.0 0.000001) (setq c 3))par ((equal l 1.500 0.000001) (setq c 1)) ((equal l 2.000 0.000001) (setq c 2)) ((equal l 2.500 0.000001) (setq c 3)) Olivier Citer
Fundream Posté(e) le 22 août 2013 Auteur Posté(e) le 22 août 2013 A ba oui merci. EDIT : Pas mieux. Je parle des cote dans la présentation hein. EDIT2 : En fait ça change bien la couleur dans les propriété mais pas à l'écra. EDIT 3 : C'est bon il fallait que je modifie mon style de cote, merci. Citer Autocad 2015 - Lumion 3D - SCIA EngineerI7 6700K 4 cores @4.0Ghz - 32Go DDR4 - GTX980ti 6Gb - SSD 512Go - Windows 7 64 bits.
Julian-Nihon Posté(e) le 22 août 2013 Posté(e) le 22 août 2013 Bonsoir, J'avais tester avec le style de cote standard, ça marche bien. Je viens de réessayer avec un style perso, ça ne marche pas, même problème que toi. Je suis allé voir dans le style, et la couleur est réglée sur Ducalque. J'ai change ça en DuBloc, et le problème est réglé. Ju du Japon Citer
VDH-Bruno Posté(e) le 22 août 2013 Posté(e) le 22 août 2013 Bonjour, Je suis débutant en lisp alors, c'est vraiment du bricolage ... C’est plutôt très bon et prometteur pour des débuts en lisp, sauf que commencer par la programmation des cotations, c’est pas forcément ce qu’il y a de plus simple pour débuter en lisp pur si tu veux écrire un code robuste. Pour t’en convaincre re-teste ton code sur un style de cote dont les couleurs (ligne d’attache, ligne de cote, et texte) ne sont pas dépendant DuCalque… En pur Lisp, il faudra donc passer par une réécriture des styles de cotes pour forcer les couleurs (Référence DXF-> Section ENTITIES-> DIMENSION-> Réécriture des styles de cotes) en jouant avec les codes 176, 177, 178 dans les données étendues de l’application A-C-A-D(les tirets sont pour éviter de voir écrit AutoCAD automatiquement :unsure: ) Quelqu'un de plus expérimenter te donnera peut-être quelque chose de plus simple, concis et compréhensible.Tu vois pas forcément si tu restes en AutoLisp, à moins de préférer le VLisp et le paramétrage des propriétées DimensionLineColor, ExtensionLineColor, TextColor. D'ailleurs au passage, si cette personne pouvais me dire ce qui est simplifiable, ca serait sympa Ceci :(setq d (entget (ssname ss i))) (setq l (cdr (assoc 42 d))) (cond ;;Debut des conditions : Ajouter des conditions a la suite ;;l : longueur a evaluer () ;;c : couleur {(1~255) 256=bylayer} ;; {1:rouge 2:jaune 3:vert 4:cyan 5:bleu 6:magenta 7:blanc} ((equal l 1500.0 0.000001) (setq c 1)) ((equal l 2000.0 0.000001) (setq c 2)) ((equal l 2500.0 0.000001) (setq c 3)) ;;SI aucune condition n'est rempli : couleur ByLayer (t (setq c 256)) ;;Fin des conditions ) Peux se "factoriser" comme cela :(setq d (entget (ssname ss i)) l (cdr (assoc 42 d)) c (cond ((equal l 1500.0 1e-6) 1) ((equal l 2000.0 1e-6) 2) ((equal l 2500.0 1e-6) 3) (256) ) ) Et ici même si cela fonction très bien :(entmod (append d (list (cons 62 c)))) Dans la definition dxf de ton entité tu crées deux fois le code 62 dans le cas où la valeur existe déjà, la fonction entmod filtrant les entrées par la queue de liste dans ce sens cela se passe bien (encore faut-il l’avoir à l’esprit). Avec le dxf, suivant "les recommandations d'Autodesk", il faut être sensé programmer indépendamment de l’ordre des élément de la liste dxf, donc habituellement on teste la présence du code dans la liste si oui on le substitue dans la définition DXF avec subst, sinon on l’ajoute avec append :(entmod (if (setq dxf62 (assoc 62 d)) (subst (cons 62 c) dxf62 d) (append d (list (cons 62 c))) ) ) Sinon tu peux éventuellement éviter une sélection utilisateur en remplaçant (setq ss (ssget '((0 . "DIMENSION")))) Par (ssget "_X" '((0 . "DIMENSION"))) A titre d'exemple une variante possible en VLisp :;; VDH-Bruno - la cote 1.50m en bleu, 2.00m en vert, 2.50m en rouge (defun c:DIMCOLOR () (vl-load-com) (if (ssget "_X" '((0 . "DIMENSION"))) (vla-delete (vlax-map-collection (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object))) '(lambda (o / l c) (setq l (vla-get-Measurement o) c (cond ((equal l 1.5 1e-6) 1) ((equal l 2.0 1e-6) 2) ((equal l 2.5 1e-6) 3) (256) ) ) (foreach p '(DimensionLineColor ExtensionLineColor TextColor) (vlax-put o p c)) ) ) ) ) (princ) ) Cordialement Bruno Citer Apprendre => Prendre => Rendre
Julian-Nihon Posté(e) le 23 août 2013 Posté(e) le 23 août 2013 Merci Bruno pour ces explications. Quand je dis bricolage, c'est que j'ai utiliser un lisp qui me sert a modifier le texte de cote que quelqu'un du forum m'avais confectionne. J'ai simplement patauge pour en changer le fonctionnement (oui, je m'embrouille encore pas mal dans les variables/listes a passer au fonctions, sachant que je suis au japon et j'ai toute l'aide de vlide en japonais ) ... Donc, j'ai pas vraiment tout écrit tout seul ... Ju du Japon Citer
(gile) Posté(e) le 23 août 2013 Posté(e) le 23 août 2013 salut, Tu trouveras un lien et une explication pour avoir l'aide aux développeurs (en anglais) via un raccourci sur le bureau ici. Sinon, tu peux aussi télécharger Introduction à AutoLISP, en français. Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
VDH-Bruno Posté(e) le 23 août 2013 Posté(e) le 23 août 2013 Re, Merci Bruno pour ces explications.Quand je dis bricolage, c'est que j'ai utiliser un lisp qui me sert a modifier le texte de cote que quelqu'un du forum m'avais confectionne. J'ai simplement patauge pour en changer le fonctionnement (oui, je m'embrouille encore pas mal dans les variables/listes a passer aux fonctions, Quand je dis que c’est prometteur c’est parce que tu es arrivé à l’adapter et que cela fonctionne après que ce soit pour un style de cote spécifique (celles dont la définition des couleurs n’est pas forcé), c’est un peu secondaire. Pour ce qui est de mes explications sur les données étendues, tu peux faire l’impasse dessus dans un premier temps cela te parlera plus tard si tu persiste dans cette voie. sachant que je suis au japon et j'ai toute l'aide de vlide en japonaisTu as de la chance, l’aide au développement n’est plus traduite pour les versions française depuis la R14 (environ 15 ans), et pour moi l’anglais me parle presque autant que le japonais, tu vois il y a de l’espoir ;) Donc, j'ai pas vraiment tout écrit tout seul ... Moi non plus au début, pour la petite histoire j’ai été utilisateur de Lisp avant d'en écrire, j’ai commencé par modifié les noms des commandes Lisp, puis à repérer et à changer les invites des commandes lisp, puis j’ai pris de l’assurance et j’ai voulu personnaliser certains programmes à mon environnement de travail pour gagner un clic ou deux et là ça a commencé à être la galère à se compliquer franchement (à ce taper la tête contre les mur) et devenir très chronophage pour une réussite rarement satisfaisante et un enrichissement personnel quasi nulle. Puis j’ai compris que la méthode n’était pas bonne et que le temps investie serai bien plus profitable dans la durée, en révisant à la baisse mes objectifs pour me consacrer à un véritable apprentissage du Lisp.. Bonne continuation, Citer Apprendre => Prendre => Rendre
Messages recommandés