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
- 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). - Charger la routine : Dans AutoCAD Map 3D, utilisez la commande
APPLOAD(ou_APPLOAD). Naviguez jusqu’à l’emplacement de votre fichier.lspet chargez-le. Vous pouvez également l’ajouter au jeu de démarrage pour qu’il soit chargé automatiquement à chaque lancement d’AutoCAD Map 3D. - Exécuter la commande : Une fois la routine chargée, tapez
ODField__Z__Blocdans 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.