lolo-le-haricot Posté(e) le 8 novembre Posté(e) le 8 novembre Bonjour tout le monde 🙂 Pas facile d'expliquer ça dans un titre, mais là, avec la place que j'ai, ça devrais le faire. Dans le cadre de mon travail, je fait des relevé sur le terrain avec un appareil GNSS (GPS plus plus en gros) qui m'insère des bloc géolocalisé. Dans ces blocs, il y a des attributs, dont un qui me permet de savoir ce que c'est, par exemple AFF_CE = AFFleurant Coffret Electrique - ACC_BJ = ACCessoire Boite de Jonction - etc... Ces codes me permettent de savoir donc ce que c'est, et, pour mon plan, me permet de savoir quel symbole je dois mettre pour que le plan devienne plus lisible, mais je dois garder l'espèce de diamant, qui contiens des information (attributs non visible comme la date du levé, la precision du levé etc...). Est-ce que vous pensez qu'un LISP faisant ça existe ? Ou il faudrais le créer ? Et si il faut le créer, sauriez (pourriez) vous m'aider ? Ci dessous la liste de bloc en fonction de l'attribut (COD_PGOC) du diamant : Merci 🙂 - Laurent - L'enfer étais complet alors je suis revenu.
Olivier Eckmann Posté(e) le 8 novembre Posté(e) le 8 novembre Bonjour, Si vous utilisez AutoCAD Map 3D, vous pouvez appliquer un thème qui change le bloc selon la valeur d'un attribut de bloc et répond donc directement à votre demande sans développement. Par contre il peut se poser la question de l'échelle et de l'angle de rotation. Olivier
didier Posté(e) le 8 novembre Posté(e) le 8 novembre Bonjour @lolo-le-haricot Donc si je comprends bien : le dessin existe avec les blocs en forme de diamant qui contiennent des attributs. En fonction d'un certain attribut, il faudrait insérer un autre bloc qui sera la représentation graphique d'un objet. On n'a pas assez de données pour travailler concrètement. Merci de fournir un DWG, dans lequel les "diamants" sont en place et aussi les blocs qu'il faudra insérer en fonction d'un de ses attributs (diamant). Quid de la rotation de l'objet inséré par le programme ? Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
lolo-le-haricot Posté(e) le 8 novembre Auteur Posté(e) le 8 novembre Bonjour messieurs, Merci d'avoir prit le temps de répondre. Citation Si vous utilisez AutoCAD Map 3D, vous pouvez appliquer un thème qui change le bloc selon la valeur d'un attribut de bloc et répond donc directement à votre demande sans développement. Par contre il peut se poser la question de l'échelle et de l'angle de rotation. Je suis sur Autocad 2023, tout est à l'échelle 1:1, et les rotation je m'en occuperais à la main. Remplacer un bloc par un autre en gardant les attribut etc.. en bidouillant un LISP trouvé sur le net, j'arrive à faire, mais je voudrais garder le bloc en diamant (il s'appelle ERPTRL) et mette par dessus, aux même coordonnées, un bloc qui serait choisi en fonction de la valeur d'un des attributs (COD_PGOC) du bloc ERPTRL Citation Donc si je comprends bien : le dessin existe avec les blocs en forme de diamant qui contiennent des attributs. En fonction d'un certain attribut, il faudrait insérer un autre bloc qui sera la représentation graphique d'un objet. Oui, voila, c'est ça, un bloc en forme de diamant qui s'appelle ERPTRL contient plusieurs attributs (#ID, COD_PGOC, P_ATYP, COD_PROJ, COMMENTAIRE, X, Y, Z). Un des attributs s'appel COD_PGOC, il peux avoir plusieurs valeurs (C_BT, C_RAS, AFF_CE etc...), j'amerais que le LISP insère le bloc correspondant au code trouvé un bloc associé à ce code (C.F. le tableau de mon premier post) sans supprimer le bloc ERPTRL et aux coordonnées de ERPTRL Citation On n'a pas assez de données pour travailler concrètement. Merci de fournir un DWG, dans lequel les "diamants" sont en place et aussi les blocs qu'il faudra insérer en fonction d'un de ses attributs (diamant). Quid de la rotation de l'objet inséré par le programme ? Je joint à cette réponse un fichier exemple que j'ai fait vite fait. Les objets inséré par le programme (X-Pad Ultimate Survey) ne sont ni pivoté, ni mis à l'échelle, je m'en charge à la main. Je travail pour ENEDIS, je dois suivre et respecter un document qu'ils appelent Spécifications Cartographie Grande Échelle, je le joint à cette réponse si ça vous intéresse 🙂 Exemple.dwg SCGE-B.9.2.1-08-V5.pdf L'enfer étais complet alors je suis revenu.
didier Posté(e) le 8 novembre Posté(e) le 8 novembre Bonjour @lolo-le-haricot Ce n'est pas très cool de ne pas avoir mis les blocs nécessaires dans le dessin exemple. Du coup, j'ai dû en créer certains avec une géométrie bidon, ce sont ceux qui commencent par "blo". Lors du test ça ne marchait pas et je me suis agacé ! Je vous laisse les redéfinir. Je demande un jeu de sélection, mais on peut en faire un global avec quatre caractères à rajouter au code. Le code est en PJ, c'est du simple et efficace, on peut toujours améliorer, mais vous avez écrit que vous saviez bidouiller les LSP. Plutôt que bidouiller, il est plus intéressant d'apprendre, mais c'est une autre histoire… Amicalement lolo-le-haricot-01.lsp Éternel débutant... Mon site perso : Programmer dans AutoCAD
lolo-le-haricot Posté(e) le 8 novembre Auteur Posté(e) le 8 novembre Aaah merci, je ne m'attendait pas a avoir un LISP complet mais juste des bouts de codes, c'est pour ça que je n'ai pas mis tous les blocs, je pensais que j'allais devoir adapter a ce que je souhaite faire. Dans mon dessin exemple, il y a effectivement les codes C_BT et C_BRCHT, le soucis est que pour ceux là (et d'autre codes) il n'y a pas de bloc a insérer. C_BT = Câble basse tension / C_HTA = Câble haute tension / C_BRCHT = Câble de branchement Mais du coup, est-il possible de faire un test du genre IF...THEN...ELSE qui permettrais de shunter les codes qui ne nécessitent pas d'insertion de bloc (par exemple C_BT, C_HTA etc..) ? Et à quel endroit du code pouvons nous définir le calque sur lequel insérer le bloc ? Si j'en demande trop, ne pas hésiter à me le dire, c'est déjà super ce code, un grand merci ! L'enfer étais complet alors je suis revenu.
didier Posté(e) le 8 novembre Posté(e) le 8 novembre Bonjour @lolo-le-haricot Voici une nouvelle version qui tient compte de la nouvelle demande. Il suffit de retirer des listes le code C_BT et le bloc correspondant que j'avais mis, ensuite un "member" vérifie que si la valeur n'est pas dans cette liste, il passe au prochain. Pour le calque de dessin, j'utilise le calque courant, avez-vous besoin d'aide pour changer ça ? Amicalement lolo-le-haricot-02.lsp Éternel débutant... Mon site perso : Programmer dans AutoCAD
lolo-le-haricot Posté(e) le 8 novembre Auteur Posté(e) le 8 novembre il y a 5 minutes, didier a dit : Bonjour @lolo-le-haricot Voici une nouvelle version qui tient compte de la nouvelle demande. Il suffit de retirer des listes le code C_BT et le bloc correspondant que j'avais mis, ensuite un "member" vérifie que si la valeur n'est pas dans cette liste, il passe au prochain. Pour le calque de dessin, j'utilise le calque courant, avez-vous besoin d'aide pour changer ça ? Amicalement lolo-le-haricot-02.lsp 1.2 Ko · 0 téléchargement C'est parfait, parallèlement, j'avais modifié le code pour zapper les C_BT etc..., avec du IF THEN ELSE (if(or (= valeur "C_BT")(= valeur "C_HTA")(= valeur "C_BRCHT")) then(command "_insert" (nth (vl-position valeur t1) t2) (cdr (assoc 10 (entget ent))) "" "" "")) Mais effectivement, member (qu eje ne connaisais pas) simplifie tout. Un grand merci pour tout ! L'enfer étais complet alors je suis revenu.
didier Posté(e) le 8 novembre Posté(e) le 8 novembre Bonjour @lolo-le-haricot Le code que vous écrivez ne me semble pas fonctionnel. Déjà le "then" n'existe pas en Lisp et puis le fait que valeur égale "C_BT" fait l'inverse de ce que vous souhaitez, il va chercher à insérer un bloc. Je vous proposais d'apprendre, sans vous manquer de respect, vous en auriez besoin. Je pense avoir fait un site qui fonctionne bien pour ce faire. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
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