Aller au contenu

Insérer un bloc sur un autre bloc en fonction d'un attribut


Messages recommandés

Posté(e)

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...

image.png.8baae054a46e0d0e0d1e7623f533d8da.png

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...).

image.png.bea9215ab3c7833b2ca0e797e16f8b44.png

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 :

image.png.56795ffdc2afa082f48317d8fb6a1f63.png

Merci 🙂

- Laurent -

L'enfer étais complet alors je suis revenu.

Posté(e)

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

Posté(e)

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

Posté(e)

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.

Posté(e)

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

Posté(e)

 

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.

Posté(e)

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

Posté(e)
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.

Posté(e)

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

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é