Jbrosteaux Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Bonjour à tous, Je vous explique mon problème si je peux dire cela...Sur nos plans de bâtiments, nous avons un premier bloc attribut "XX" avec le nom et numéro du local, ensuite nous avons un 2ème bloc attribut "YY" avec l'aire et le périmètre. Je me demande si il est possible une fois que j'aurai créer un nouveau bloc "A" tout en un ...Nom du local, numéros, aire et périmètre De créer une commande qui une fois que je sélectionne l'ancien bloc "YY" ses données vont dans le nouveau Bloc "A" pour remplir les bon champs.Ce qui m'éviterai de recopier tout manuellement... et éviter des erreurs de recopiage. Merci pour votre aide! Citer
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Salut. Je pense que seul un LISP t'aidera. Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Jbrosteaux Posté(e) le 22 février 2017 Auteur Posté(e) le 22 février 2017 Bonjour, Et tu peux me dire comment réaliser ce " Lisp" ? Citer
Jbrosteaux Posté(e) le 22 février 2017 Auteur Posté(e) le 22 février 2017 J'ai trouvé un Lisp de Patrick_35 qui m'est à disposition " CAT.LSP ".Celui-ci fonctionne, mais il ne recopie pas les informations dans les bon attributs souhaités. Que faire pour amélioré ce Lisp? Citer
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Oulala... Je ne suis que novice en Lisp... Pour reprendre un lisp de Patrick_35, ou (gile) ou autre, il faut être d'un très, mais alors, d'un très haut niveau... Si tu ne connais pas le lisp, ça va être difficile... Donne-moi tes "anciens blocs" et le "nouveau bloc"(ou les noms des blocs et les noms exacts de leurs attributs), je vais voir ce que je pourrai faire... Sans ne rien te promettre... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Jbrosteaux Posté(e) le 22 février 2017 Auteur Posté(e) le 22 février 2017 Si tu as une adresse mail, je veux bien te les envoyer.Car par le forum cela ne fonctionne pas. Citer
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Tu peux placer un lien WeTransfer dans le forum, comme-ça, d'autres pourront peut-être te venir en aide. Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Jbrosteaux Posté(e) le 22 février 2017 Auteur Posté(e) le 22 février 2017 Voilà c'est réalisé! https://we.tl/E1feB479FE Citer
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Donc, si je comprend bien, il faut récupérer les infos dans le bloc Info20 pour les placer dans Nom_Local_GHdC ? Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Jbrosteaux Posté(e) le 22 février 2017 Auteur Posté(e) le 22 février 2017 oui le but est de récupérer la surface et le périmètre pour l'écrire dans le nouveau bloc " Nom_Local_GHdC " aux attributs Aire et Périmètre. Citer
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Ok, voici un petit lisp qui devrait faire ta manipulation... Tu enregistre ce code dans un fichier "texte" (avec le blocnote par exemple) et avec l’extension .lsp. Puis, tu charges ce fichier dans AutoCAD (avec _appload)... La commande est : ChangAttribBlk Voici le code :;;;******************************************************* ;;; Attribuer certains attributs d'un bloc dans un autre ;;;******************************************************* (defun c:ChangAttribBlk (/ ent_bloc ent_att att_etiq Aire Perim Nouv_bloc) (setq ent_bloc (car (entsel "\nSélectionnez l'ancien bloc : "))) (setq ent_att (entnext ent_bloc)) (while (/= (cdr (assoc 0 (entget ent_att))) "SEQEND") ;; nom étiquette (setq att_etiq (cdr (assoc 2 (entget ent_att)))) ;; valeur du contenu de l'attribut (cond ((= att_etiq "Aire") (setq Aire (cdr (assoc 1 (entget ent_att)))))) (cond ((= att_etiq "Périmètre") (setq Perim (cdr (assoc 1 (entget ent_att)))))) (setq ent_att (entnext ent_att)) ) ;_ Fin de while ;;; (setq Nouv_bloc (entsel "\nSélectionnez le nouveau bloc : ")) (setq Nouv_bloc (car Nouv_bloc)) (vl-catch-all-apply 'setpropertyvalue (list Nouv_bloc "AIRE" Aire)) (vl-catch-all-apply 'setpropertyvalue (list Nouv_bloc "PERIMETRE" Perim)) (princ) ) ;_ Fin de defun Tiens moi au courant du bon fonctionnement du code... Denis... EDIT : Oops, j'avais oublié de déclarer mes variables... J'allais au devant de représailles par nos maîtres... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Jbrosteaux Posté(e) le 22 février 2017 Auteur Posté(e) le 22 février 2017 A première vue cela fonctionne!!Super! Merciii!! Citer
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 De rien... Note bien ton premier message avec l'entête "[Résolu]". Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 DenisH, Je vois que tu utilises setpropertyvalue pour affecter les valeurs des attributs du nouveau bloc. C'est une bonne idée, c'est la méthode la plus simple.Pourquoi n'utilises-tu pas getpropertyvalue pour récupérer celles des attributs de l'ancien bloc ? Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Parceque je ne connais pas cette commande... En faisant un truc dans ce genre ? (l'aide est vraiment très "lignt"...)(defun c:ChangAttribBlk (/ ent_bloc ent_att att_etiq Aire Perim Nouv_bloc) (setq ent_bloc (car (entsel "\nSélectionnez l'ancien bloc : "))) (vl-catch-all-apply 'getpropertyvalue (list ent_bloc "Aire" Aire)) (vl-catch-all-apply 'getpropertyvalue (list ent_bloc "Périmètre" Perim)) (setq Nouv_bloc (car (entsel "\nSélectionnez le nouveau bloc : "))) (vl-catch-all-apply 'setpropertyvalue (list Nouv_bloc "AIRE" Aire)) (vl-catch-all-apply 'setpropertyvalue (list Nouv_bloc "PERIMETRE" Perim)) (princ) ) Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Tu n'as pas dû tester dans la console de l'éditeur Visual LISP... getpropertyvalue ne prends que deux arguments (le ename de l'objet et le nom de la propriété) et retourne la valeur, que tu aurais dû affecter à une variable. En oubliant vl-catch-all-apply (qu'on peut utiliser plus subtilement ou tout simplement éviter en testant la validité des entrées utilisateur) on peut simplement faire : (setpropertyvalue nouv_bloc "AIRE" (getpropertyvalue ent_bloc "Aire")) Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Coucou en réponse au message #11 tu as testé ? ça fonctionne ?je n'ai pas bien le temps mais je pense qu'il est problématique de chercher une valeur d'étiquette désignée par des caractères en minusculeet pire encore des caractères accentués. je parle de "Périmètre" en ligne 10 où je pense que "PERIMETRE" serait bienvenu. tu peux nous tenir au courant si ça fonctionne en l'état ? ou bien suis-je trop tatillon ? amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 didier, getpropertyvalue est insensible à la casse pour les noms de propriété, mais pas à l'accentuation : il faut bien chercher "Périmètre" ou "PÉRIMÈTRE" et pas "perimetre" ou "PERIMETRE". Avec la méthode "classique" : (= att_etiq "Périmètre"), on fait une comparaison de chaîne qui sera donc forcément sensible à la casse et à l'accentuation. Ceci dit, je suis absolument d'accord pour bannir tout accent et autre caractère spécial dans les noms de calque, de blocs, etc. et utiliser des majuscules (non accentuées bien sûr) pour les étiquettes d'attribut. PS: On va dans le bon sens puisque le nouveau bloc de Jbrosteaux respecte cette "norme". Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 tu as testé ? ça fonctionne ? Oui, j'ai tester mon code sur mon poste, et ça fonctionne très bien. Ceci dit, j'émet toujours une réserve pour un bon fonctionnement sur un autre poste. Et oui, certains attributs du bloc d'origine ont bien des caractères accentués. Amicalement aussi. ;) (gile) : je retaperais mon code demain avec que du VLisp... Merci encore du conseil. Denis... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
didier Posté(e) le 22 février 2017 Posté(e) le 22 février 2017 Coucou du coup j'ai pris le temps de tester, je parle bien du message #11le code ne fonctionne pas.je change la casse et ça passe ça passe ou ça casse, c'est le cas de le dire. toutefois je te remercie (gile) de tes explications qui m'inspirent de plus en plus à utiliser les vl... dans la vie de tous les jours(tout en continuant le C# mais dans la vie privée, doucement) amicalement Citer Éternel débutant... Mon site perso : Programmer dans AutoCAD
Jbrosteaux Posté(e) le 23 février 2017 Auteur Posté(e) le 23 février 2017 En tout cas, cela fonctionne!Maintenant je suis un peu perdu dans toutes vous explications de développements, de codes,.... c'est du chinois pour moi Citer
DenisHen Posté(e) le 23 février 2017 Posté(e) le 23 février 2017 Héllo. didier : je ne comprend pas, ce code (#11) fonctionne parfaitement chez moi... Où as-tu changer la casse ? Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 23 février 2017 Posté(e) le 23 février 2017 Re. donc, la même routine qu'en message 11 mais en VLisp :;;;******************************************************* ;;; Attribuer certains attributs d'un bloc dans un autre ;;;******************************************************* (defun c:ChangAttribBlk (/ Anc_bloc Nouv_bloc) ;(setq Anc_bloc (car (entsel "\nSélectionnez l'ancien bloc : "))) (setq Anc_bloc (car (entsel "\nSélectionnez l'ancien bloc : "))) (setq Nouv_bloc (car (entsel "\nSélectionnez le nouveau bloc : "))) (setpropertyvalue nouv_bloc "AIRE" (getpropertyvalue Anc_bloc "Aire")) (setpropertyvalue nouv_bloc "PERIMETRE" (getpropertyvalue Anc_bloc "Périmètre")) (princ) ) ;_ Fin de defun Merci (gile), c'est vrai que c'est bien plus joli comme-ça... Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
(gile) Posté(e) le 23 février 2017 Posté(e) le 23 février 2017 Salut, Ces fonctions ne sont pas ce que l'on a coutume d'appeler fonctions vlisp ou Visual LISP.Ce sont des alternatives aux fonctions Visual LISP arrivées avec AutoCAD MAC 2012 pour palier au fait que l'interface COM/ActiveX est spécifique à Windows (voir ici). Citer Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 23 février 2017 Posté(e) le 23 février 2017 Re. Merci (gile) pour cette précision. Citer Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
Messages recommandés