Remplir automatiquement le champ Z d'Object Data pour les blocs dans AutoCAD Map 3D

Comment automatiser le remplissage du champ ‹ TAL_COTZ › d’une table Object Data ‹ T_AL › avec la coordonnée Z du point d’insertion de blocs nommés ‹ point_cote › dans AutoCAD Map 3D ?

Pour automatiser le remplissage d’un champ Object Data (OD) avec la coordonnée Z de blocs insérés dans AutoCAD Map 3D, vous pouvez utiliser une routine LISP dédiée. Cette solution est particulièrement utile pour les tâches répétitives de mise à jour des données altimétriques.

1. Contexte et Prérequis

  • Logiciel : AutoCAD Map 3D (version 2019 ou ultérieure recommandée).
  • Objets : Blocs (entités INSERT) avec une coordonnée Z définie.
  • Object Data : Une table OD existante (ex: T_AL) et un champ de type réel/flottant (ex: TAL_COTZ) déjà associés aux blocs concernés.

2. La Solution : Routine LISP pour l’affectation du Z
La routine LISP suivante, nommée ODField__Z__Bloc, permet de parcourir une sélection de blocs et d’affecter leur coordonnée Z au champ Object Data spécifié.

(vl-load-com)

(defun C:ODField__Z__Bloc ( / js_pl n_pl ent dxf_ent TABLE_OD CHAMP_OD POSXYZ) 

  ;;; On va utiliser un champ OD reel/flottant ... IMPERATIF
  ;;;
  (setq TABLE_OD "T_AL") ;; <--- Votre Nom de Table OD --->

  ;;; Veuillez modifier ci-dessous en fonction de VOS champs OD pour X Y Z ... 
  ;;; 
  (setq CHAMP_OD "TAL_COTZ") ;; <--- Votre Nom de Champ OD (Reel/Flottant) --->

  (setq js_pl (ssget '((0 . "INSERT") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (100 . "INSERT") )) )

  (cond
    (js_pl
      (repeat (setq n_pl (sslength js_pl))
        (setq ent (ssname js_pl (setq n_pl (1- n_pl))))
        (setq dxf_ent (entget ent))
        
        ;; (setq POSXYZ (cadr (assoc 10 dxf_ent)) ) ;; Recup du X 
        ;; (setq POSXYZ (caddr (assoc 10 dxf_ent)) ) ;; Recup du Y 
        (setq POSXYZ (cadddr (assoc 10 dxf_ent)) ) ;; Recup du Z 
        
        (progn
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
          ;;;;;; Affectation du Champ OD dans le Champ OD xxx & Record ZERO 
          ( ade_odsetfield ent TABLE_OD CHAMP_OD POSXYZ 0 POSXYZ ) 
          ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
        )
      )
    )
  )
  (princ)
)

3. Utilisation de la Routine

  1. Enregistrer le code : Copiez le code LISP ci-dessus dans un éditeur de texte (comme le Bloc-notes) et enregistrez-le sous un nom de fichier avec l’extension .lsp (par exemple, ODField_Z_Bloc.lsp).
  2. Charger la routine : Dans AutoCAD Map 3D, utilisez la commande APPLOAD (ou _APPLOAD). Naviguez jusqu’à l’emplacement de votre fichier .lsp et chargez-le. Vous pouvez également l’ajouter au jeu de démarrage pour qu’il soit chargé automatiquement à chaque lancement d’AutoCAD Map 3D.
  3. Exécuter la commande : Une fois la routine chargée, tapez ODField__Z__Bloc dans la ligne de commande et appuyez sur Entrée. Le programme vous invitera à sélectionner les blocs à traiter.

4. Personnalisation de la Routine
Vous pouvez facilement adapter cette routine à vos besoins en modifiant les lignes suivantes dans le code LISP :

  • (setq TABLE_OD "T_AL") : Remplacez "T_AL" par le nom exact de votre table Object Data.
  • (setq CHAMP_OD "TAL_COTZ") : Remplacez "TAL_COTZ" par le nom exact du champ Object Data destiné à recevoir la coordonnée Z.

De plus, les lignes commentées pour (setq POSXYZ ...) montrent comment récupérer les coordonnées X et Y. Vous pouvez décommenter et adapter ces lignes pour affecter d’autres coordonnées à d’autres champs OD si nécessaire.

5. Précautions et Bonnes Pratiques

  • Gestion des erreurs : La routine ne contient pas de gestion d’erreurs robuste. Assurez-vous que les tables et champs Object Data spécifiés existent et sont correctement associés aux blocs.
  • Type de champ : Le champ Object Data (CHAMP_OD) doit impérativement être de type réel/flottant pour stocker des valeurs de coordonnées Z.
  • Sélection des objets : La routine filtre les objets sur le type "INSERT". Soyez vigilant à ne pas sélectionner des XREFs ou des blocs verrouillés, car cela pourrait entraîner des erreurs ou des comportements inattendus.
  • Contexte d’exécution : La routine a été testée et validée dans le Système de Coordonnées Général (SCG) et dans l’onglet OBJET. Assurez-vous de travailler dans un contexte similaire pour des résultats optimaux.
  • Sauvegarde : Il est toujours recommandé de sauvegarder votre dessin avant d’exécuter des routines LISP qui modifient les données du dessin, surtout si vous n’êtes pas familier avec le code.