; Convert Object Data to Extended Data (needs AutoCAD Map 3D or Civil 3D) ; CADforum.cz, 2023 ; (defun C:OD2XD ( / ss i ent ssl iTab entODtables ODtable ODTdef ODTname ODTcols numcols iCol colName colType xvalue xdata ent1) (if (ade_odtablelist)(progn ; any OD tables? (prompt "\nSelect objects to convert ObjectData to XData : ") (setq ss (ssget)) (if (not ss)(setq ss (ssget "_X"))) (setq i -1) (princ "\nConverting... ") (repeat (sslength ss) ; for all objects (setq ent (ssname ss (setq i (1+ i)))) (if (setq entODtables (ade_odgettables ent)) (progn (setq iTab 0) (repeat (length entODtables) ; for all tables (setq ODtable (nth iTab entODtables)) (setq ODTdef (ade_odtabledefn ODtable)) (setq ODTname (cdr (assoc "Tablename" ODTdef))) (regapp ODTname) ; register App as OD name (setq xdata (list ODTname)) (setq ODTcols (cdr (assoc "Columns" ODTdef))) (setq iCol 0) (repeat (length ODTcols) ; for all columns (features) (setq colName (cdr (assoc "ColName" (nth iCol ODTcols)))) (setq colType (cdr (assoc "ColType" (nth iCol ODTcols)))) (if (= colType "Character") (setq xvalue (ade_odgetfield ent ODtable colName 0)) ) (if (= colType "Integer") (setq xvalue (itoa (ade_odgetfield ent ODtable colName 0)))) (if (= colType "Real") (setq xvalue (rtos (ade_odgetfield ent ODtable colName 0) 2 6))) (setq xdata (append xdata (list (cons 1000 (strcat colName "=" xvalue))))) ; format XD as 'Name=Value' (setq iCol (1+ iCol)) ) ; rep cols (setq xdata (list (list -3 xdata))) (setq iTab (1+ iTab)) ) ; rep tabs (setq ent1 (append (entget ent) xdata)) ; attach xdata (entmod ent1) ) ) ; if ) ; rep objs (princ (strcat (itoa i) " objects converted (use XDLIST to display)")) ) ; else (princ "\nNo OD defined!") ) (princ) ) (princ "\nOD2XD command loaded (CADforum.cz)") (princ)