Aller au contenu

AUTOMATISATION OBJECT DATA


NBAMBOUCAD

Messages recommandés

Bonjour,

 

 

Dans le cadre d'un projet je dois attribuer une table object data à tous les éléments du dessin en fonction de leur calque. Je cherche une solution automatisé afin d'attribuer les tables d'Objects Data au éléments du dessin autrement que en sélectionnant le différents calques un par un.

N'y connaissant rien en programmation, je vous sollicite afin de trouver des pistes me permettant d'aboutir à ce résultat.

 

 

D'autre part, une fois les tables de données objet (Object data) attribués aux différents éléments je désire trouver un moyen assez rapide afin de copier certains attribut des objet dans les champs "Object Data" correspondants.

Par exemple copier la valeur de l'orientation d'un bloc (Valeur Attribut "Rotation") dans le champs OD correspondant (Valeur Attribut "ARE_ORIENT"), comme dans la pièce jointe.

 

Je fais actuellement à la main ces manipulation et c'est une énorme perte de temps. Je suis preneur de toute solution aussi peu élaboré soit-elle!

 

 

Merci d'avance!!

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

Je te redirige vers le forum de map où un sujet que j'ai initié pourrait t’intéresser.

 

Propriétés d'objets vers Object Data (OD de Map)

Après pour les attributs de bloc c'est possible, mais je n'ai pas de routine générique à te proposer. Il faudrait un exemple concret (NB: Y a pas de pièces jointes !)

 

 

  • Downvote 1

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

 

 

Merci pour ta réactivité, oui j'ai vu ce sujet avant de créer le miens cependant si j'ai bien compris le sujet que tu avais initié permettait de créer une table Object data directement avec les attribut de l'objet.

 

Pour ma part ce n'est pas exactement la même problématique. Je m'explique, je possède déjà des tables de données d'Object Data, celles-ci sont créées avec un certain nombre de champs qu'il faut remplir.

Il faut donc attribuer les Tables d'OD aux différents objets des calques avant de pouvoir les remplir.

Ex: les objets du calque "ASS--A_EQ" doivent être associés à la table "A_EQ"(Equipement assainissement). Le suffixe du calque (les 4 derniers caratères) correspond au nom de la Table à leur attribuer.

 

Voici pour la première partie de ma problématique.

La deuxième partie de la problématique serait donc de copier des attributs des propriétés existantes, dans les tables existantes qui ont été préalablement attribuée aux objets.

 

Merci d'avance pour toute suggestion!

 

PS: Je n'arrive malheureusement pas à joindre de fichier "Erreur Le serveur a retourné une erreur durant l'envoi."

 

 

 

 

Bonjour,

 

Je te redirige vers le forum de map où un sujet que j'ai initié pourrait t’intéresser.

 

Propriétés d'objets vers Object Data (OD de Map)

Après pour les attributs de bloc c'est possible, mais je n'ai pas de routine générique à te proposer. Il faudrait un exemple concret (NB: Y a pas de pièces jointes !)

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Deja la routine ZH de Gilles t'aidera beaucoup !

 

Elle permet le Zoom sur les Entites dont tu donnes le HANDLE ...

 

Je l'utilise parfois quand AutoCAD signale un probl sur une entite en donnant le HANDLE ...

 

Merci Gilles, Bye, lecrabe

 


;;
;; ZH par GC 
;; 
;; Sélectionne les objets présents dans l'espace courant d'après leurs "handle"
;;

(defun c:zh (/ space ss obj hlst olst kw i l)
(vl-load-com)
(or *acdoc*
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(setq space (vla-get-Block (vla-get-ActiveLayout *acdoc*))
ss (ssadd)
)
(sssetfirst nil nil)
(initget 1)
(setq hlst
(getstring
"\nEntrez les handles à sélectionner séparés par des virgules: "
)
hlst (str2lst hlst ",")
)
(foreach h hlst
(if
(and
(not (vl-catch-all-error-p
(setq obj (vl-catch-all-apply
'vla-HandleToObject
(list *acdoc* h)
)
)
)
)
(equal (vla-ObjectIdToObject *acdoc* (vla-get-OwnerId obj))
space
)
)
(progn
(setq olst (cons obj olst))
(ssadd (vlax-vla-object->ename obj) ss)
)
)
)
(if ss
(progn
(sssetfirst nil nil)
(sssetfirst nil ss)
(setq i -1
l (length olst)
)
(while
(and
(not (initget "Suivant Précédent Tous"))
(or (setq
kw (getkword "Zoom sur [suivant/Précédent/Tous] <S>: ")
)
(setq kw "Suivant")
)
)
(if (= kw "Suivant")
(setq i (rem (1+ i) l))
(setq i (if (minusp (1- i))
(1- l)
(1- i)
)
)
)
(if (= kw "Tous")
(ZoomObject olst)
(ZoomObject (list (nth i olst)))
)
)
)
)
(princ)
)

;; ZoomObject Effectue un zoom sur les objets contenus dans la liste
;;
;; Argument
;; objlst : une liste de vla-object
;;
;; Variables
;; dir : normale du plan de la vue courante
;; ang : angle de la vue courante
;; 3x3 : matrice de transformation du SCG vers la vue courante (dimension 3)
;; 4x4 : matrice de transformation du SCG vers la vue courante (dimension 4)
;; ptlst : liste des points minimum et maximum des bounding-boxes des objets sélectionnés (SCG)

(defun ZoomObject (objlst / dir ang 3x3 4x4 ptlst)
(vl-load-com)
(setq dir (trans '(0 0 1) 2 0 T)
ang (- (getvar "viewtwist"))
3x3 (mxm (mapcar '(lambda (x) (trans x 0 dir))
'((1 0 0) (0 1 0) (0 0 1))
)
(list (list (cos ang) (- (sin ang)) 0)
(list (sin ang) (cos ang) 0)
'(0 0 1)
)
)
4x4 (append
(mapcar
'(lambda (v o)
(append v (list o))
)
3x3
'(0 0 0)
)
(list '(0 0 0 1))
)
)
(foreach obj objlst
(vla-TransformBy obj (vlax-tmatrix (trp 4x4)))
(vla-getBoundingBox obj 'minpt 'maxpt)
(vla-TransformBy obj (vlax-tmatrix 4x4))
(setq ptlst (cons (vlax-safearray->list minpt)
(cons (vlax-safearray->list maxpt) ptlst)
)
)
)
(vla-ZoomWindow
(vlax-get-acad-object)
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'min ptlst))))
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'max ptlst))))
)
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur

(defun str2lst (str sep / pos)
(if (setq pos (vl-string-search sep str))
(cons (substr str 1 pos)
(str2lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
)
) 



;; transpose une matrice Doug Wilson

(defun trp (m)
(apply 'mapcar (cons 'list m))
)

;; Apply a transformation matrix to a vector by Vladimir Nesterovsky

(defun mxv (m v)
(mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
)

;; Multiply two matrices by Vladimir Nesterovsky

(defun mxm (m q)
(mapcar '(lambda (r) (mxv (trp q) r)) m)
) 

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Ensuite si tu as "sur le cote" une entite de reference (ou maitre) - Avec les bonnes tables OD -

Alors la routine COPY_OD d'Autodesk t'aidera aussi !?

Voir le sous-dossier

 

Elle agit comme le Pinceau (Peindre) mais en copiant UNIQUEMENT les tables OD sur les N objets de destination ...

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Merci LeCrabe,

 

 

Pour la sélection d'objet par de problème, j'ai créé un enregistreur d'action, celui:

-Ouvre l'outil sélection par filtre, invite à sélectionner un calque

-Isole les éléments de la sélection

-Ouvre l'outil "Onglet Map - Données et analyses/ Données d'objet/ Associer ou dissocier les objets" qui invite a renseigner la table à attribuer.

Il reste ensuite plus qu'a cliquer sur "Associer aux objets <" et sélectionner les objets préalablement isolé.

 

Cet enregistreur fait gagner un peu de temps, mais je souhaiterais automatiser l'association d'une table à un calque.

Je pense que le logigramme est le suivant:

83.206.9.201-5cac5145828e4.jpg[/url][/img]

 

 

 

 

 

Hello

 

Deja la routine ZH de Gilles t'aidera beaucoup !

 

Elle permet le Zoom sur les Entites dont tu donnes le HANDLE ...

 

Je l'utilise parfois quand AutoCAD signale un probl sur une entite en donnant le HANDLE ...

 

Merci Gilles, Bye, lecrabe

 


;;
;; ZH par GC 
;; 
;; Sélectionne les objets présents dans l'espace courant d'après leurs "handle"
;;

(defun c:zh (/ space ss obj hlst olst kw i l)
(vl-load-com)
(or *acdoc*
(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
)
(setq space (vla-get-Block (vla-get-ActiveLayout *acdoc*))
ss (ssadd)
)
(sssetfirst nil nil)
(initget 1)
(setq hlst
(getstring
"\nEntrez les handles à sélectionner séparés par des virgules: "
)
hlst (str2lst hlst ",")
)
(foreach h hlst
(if
(and
(not (vl-catch-all-error-p
(setq obj (vl-catch-all-apply
'vla-HandleToObject
(list *acdoc* h)
)
)
)
)
(equal (vla-ObjectIdToObject *acdoc* (vla-get-OwnerId obj))
space
)
)
(progn
(setq olst (cons obj olst))
(ssadd (vlax-vla-object->ename obj) ss)
)
)
)
(if ss
(progn
(sssetfirst nil nil)
(sssetfirst nil ss)
(setq i -1
l (length olst)
)
(while
(and
(not (initget "Suivant Précédent Tous"))
(or (setq
kw (getkword "Zoom sur [suivant/Précédent/Tous] <S>: ")
)
(setq kw "Suivant")
)
)
(if (= kw "Suivant")
(setq i (rem (1+ i) l))
(setq i (if (minusp (1- i))
(1- l)
(1- i)
)
)
)
(if (= kw "Tous")
(ZoomObject olst)
(ZoomObject (list (nth i olst)))
)
)
)
)
(princ)
)

;; ZoomObject Effectue un zoom sur les objets contenus dans la liste
;;
;; Argument
;; objlst : une liste de vla-object
;;
;; Variables
;; dir : normale du plan de la vue courante
;; ang : angle de la vue courante
;; 3x3 : matrice de transformation du SCG vers la vue courante (dimension 3)
;; 4x4 : matrice de transformation du SCG vers la vue courante (dimension 4)
;; ptlst : liste des points minimum et maximum des bounding-boxes des objets sélectionnés (SCG)

(defun ZoomObject (objlst / dir ang 3x3 4x4 ptlst)
(vl-load-com)
(setq dir (trans '(0 0 1) 2 0 T)
ang (- (getvar "viewtwist"))
3x3 (mxm (mapcar '(lambda (x) (trans x 0 dir))
'((1 0 0) (0 1 0) (0 0 1))
)
(list (list (cos ang) (- (sin ang)) 0)
(list (sin ang) (cos ang) 0)
'(0 0 1)
)
)
4x4 (append
(mapcar
'(lambda (v o)
(append v (list o))
)
3x3
'(0 0 0)
)
(list '(0 0 0 1))
)
)
(foreach obj objlst
(vla-TransformBy obj (vlax-tmatrix (trp 4x4)))
(vla-getBoundingBox obj 'minpt 'maxpt)
(vla-TransformBy obj (vlax-tmatrix 4x4))
(setq ptlst (cons (vlax-safearray->list minpt)
(cons (vlax-safearray->list maxpt) ptlst)
)
)
)
(vla-ZoomWindow
(vlax-get-acad-object)
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'min ptlst))))
(vlax-3d-point (mxv 3x3 (apply 'mapcar (cons 'max ptlst))))
)
)

;; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur

(defun str2lst (str sep / pos)
(if (setq pos (vl-string-search sep str))
(cons (substr str 1 pos)
(str2lst (substr str (+ (strlen sep) pos 1)) sep)
)
(list str)
)
) 



;; transpose une matrice Doug Wilson

(defun trp (m)
(apply 'mapcar (cons 'list m))
)

;; Apply a transformation matrix to a vector by Vladimir Nesterovsky

(defun mxv (m v)
(mapcar '(lambda (r) (apply '+ (mapcar '* r v))) m)
)

;; Multiply two matrices by Vladimir Nesterovsky

(defun mxm (m q)
(mapcar '(lambda (r) (mxv (trp q) r)) m)
) 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Pardon, le dernier URL n'a pas fonctionné en voici un fonctionnel

https://image.noelshack.com/fichiers/2019/15/2/1554797440-logigramme-de-l-attribution-automatique-des-tables-d-object-data-par-calque.jpg

 

Merci !

 

Hello

 

Ensuite si tu as "sur le cote" une entite de reference (ou maitre) - Avec les bonnes tables OD -

Alors la routine COPY_OD d'Autodesk t'aidera aussi !?

Voir le sous-dossier <C:\Program Files\Autodesk\AutoCAD 201X\Map\Sample>

 

Elle agit comme le Pinceau (Peindre) mais en copiant UNIQUEMENT les tables OD sur les N objets de destination ...

 

Bye, lecrabe

Lien vers le commentaire
Partager sur d’autres sites

Sans pouvoir vraiment tester faute de DWG exemple, essayes ceci pour attribuer les tables.

 

; str2lst
;; Transforme un chaine avec séparateur en liste de chaines
;;
;; Arguments
;; str : la chaine à transformer en liste
;; sep : le séparateur
;;
;; Exemples
;; (str2lst "a b c" " ") -> ("a" "b" "c")
;; (str2lst "1,2,3" ",") -> ("1" "2" "3")
(defun str2lst (str sep / pos)
(if (setq pos (vl-string-search sep str))
			(cons (substr str 1 pos)
			(str2lst (substr str (+ (strlen sep) pos 1)) sep)
			)
			(list str)
)
)
;; ListBox (gile)
;; Boite de dialogue permettant un ou plusieurs choix dans une liste
;;
;; Arguments
;; title : le titre de la boite de dialogue (chaîne)
;; msg ; message (chaîne), "" ou nil pour aucun
;; keylab : une liste d'association du type ((key1 . label1) (key2 . label2) ...)
;; flag : 0 = liste déroulante
;; 1 = liste choix unique
;; 2 = liste choix multipes
;;
;; Retour : la clé de l'option (flag = 0 ou 1) ou la liste des clés des options (flag = 2)
;;
;; Exemple d'utilisation
;; (listbox "Présentation" "Choisir une présentation" (mapcar 'cons (layoutlist) (layoutlist)) 1)

(defun ListBox (title msg keylab flag / tmp file dcl_id choice)
(setq tmp (vl-filename-mktemp "tmp.dcl")
file (open tmp "w")
)
(write-line
(strcat "ListBox:dialog{label=\"" title "\";")
file
)
(if (and msg (/= msg ""))
(write-line (strcat ":text{label=\"" msg "\";}") file)
)
(write-line
(cond
((= 0 flag) "spacer;:popup_list{key=\"lst\";")
((= 1 flag) "spacer;:list_box{key=\"lst\";")
(T "spacer;:list_box{key=\"lst\";multiple_select=true;")
)
file
)
(write-line "}spacer;ok_cancel;}" file)
(close file)
(setq dcl_id (load_dialog tmp))
(if (not (new_dialog "ListBox" dcl_id))
(exit)
)
(start_list "lst")
(mapcar 'add_list (mapcar 'cdr keylab))
(end_list)
(action_tile
"accept"
"(or (= (get_tile \"lst\") \"\")
(if (= 2 flag) (progn
(foreach n (str2lst (get_tile \"lst\") \" \")
(setq choice (cons (nth (atoi n) (mapcar 'car keylab)) choice)))
(setq choice (reverse choice)))
(setq choice (nth (atoi (get_tile \"lst\")) (mapcar 'car keylab)))))
(done_dialog)"
)
(start_dialog)
(unload_dialog dcl_id)
(vl-file-delete tmp)
choice
)
(defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	(setq flag nil)
)
(setq l_lay (listbox "Calques du desin" "Choisir un ou plusieurs calques" (mapcar 'cons l_lay l_lay) 2))
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq ent (ssname js (setq n (1- n))))
						(if (not (member (substr el (- (strlen el) 3)) (ade_odgettables ent)))
							(ade_odaddrecord ent (substr el (- (strlen el) 3)))
						)
					)
				)
			)
		)
	)
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Avec ton fichier exemple, pour moi ça fonctionne.

J'ai quand même fiabilisé le code pour éviter des erreurs de tables inconnues.

(defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	(setq flag nil)
)
(setq l_lay (listbox "Calques du desin" "Choisir un ou plusieurs calques" (mapcar 'cons l_lay l_lay) 2))
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq ent (ssname js (setq n (1- n))))
						(if
							(and
								(member (substr el (- (strlen el) 3)) (ade_odtablelist))
								(not (member (substr el (- (strlen el) 3)) (ade_odgettables ent)))
							)
							(ade_odaddrecord ent (substr el (- (strlen el) 3)))
						)
					)
				)
			)
		)
	)
)
(prin1)
)

Fonction à remplacer, les autres de (gile) sont à conserver comme posté précédemment.

 

Pour l'utilisation tu sélectionnes dans la liste proposée le/les calques à traiter. Pour un choix multiple maintenir la touche "Ctrl" lors des clics, pour tout sélectionner cliquer sur le 1er élément et avec l'ascenseur aller en bas de la liste et cliquer sur le dernier élément en maintenant la touche "Shift" enfoncé.Une fois la sélection effectuée, valider ET alors les tables de données d'objet seront attribués aux objets, pour peu que les tables existent et correspondent aux critères.

Tu pourra voir que la plupart des bloc ont reçu leur table correspondante avec les valeur de champ par défaut.

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Nickel merci beaucoup ça marche super!!

 

 

 

Cela m'avait échappe mais il y quelques calques où le suffixe des calques qui correspond au nom de la table n'est pas composé de 4 mais de 5 caractère.

Ex:

Cela marche pour les calques:

- BAT--B_LD qui associe la table B_LD

- MEDIA--I_SU qui associe la table I_SU

 

Mais ne marche pas pour les calque tel que:

- VOI--I_SIGN qui n'arrive pas à associer la table M_SIGN

- ELEC--E_TRON qui n'arrive pas à associer la table E_TRON

 

Solution:

 

Serait-il possible de passer d'une association calque/table correspondant aux 4 derniers caractères à une association correspondant aux caractères se trouvant après les caractère "--" car ces caractères sont toujours présent dans le nom des calques et les caractères suivant "--" correspondent systématiquement au nom de la table associé.

 

Merci d'avance et merci encore à vous, vous êtes mes sauveurs!!

Lien vers le commentaire
Partager sur d’autres sites

Alors d'après ce que j'ai compris, j'ai simplifié au maximum la procédure:

Ne sélectionne automatiquement que les calques contenant "--" dans leurs noms pour attribuer la table aux objets contenu dans ces calques respectifs. Plus besoin de faire une sélection de calques. Le code se résume à cela:

(defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent find_str)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*")
		(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	)
	(setq flag nil)
)
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq
							ent (ssname js (setq n (1- n)))
							find_str (substr el (+ 3 (vl-string-search "--" el)))
						)
						(if
							(and
								(member find_str (ade_odtablelist))
								(not (member find_str (ade_odgettables ent)))
							)
							(ade_odaddrecord ent find_str)
						)
					)
				)
			)
		)
	)
)
(prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Wahouu, quelle efficacité ça marche nickel!!

 

 

Bon j'ai un nouveau défi pour toi biggrin.gif

Je souhaiterais ensuite automatiser le remplissage de certains champs des object data en fonction du bloc ou du type de ligne.

 

Je te joins le fichier résumant le différent type de lien à créer:

 

 

Ps: Si tu réussi ça envois moi aussi ton compte paypal cool.gif

 

 

Alors d'après ce que j'ai compris, j'ai simplifié au maximum la procédure:

Ne sélectionne automatiquement que les calques contenant "--" dans leurs noms pour attribuer la table aux objets contenu dans ces calques respectifs. Plus besoin de faire une sélection de calques. Le code se résume à cela:

(defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent find_str)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*")
		(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	)
	(setq flag nil)
)
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq
							ent (ssname js (setq n (1- n)))
							find_str (substr el (+ 3 (vl-string-search "--" el)))
						)
						(if
							(and
								(member find_str (ade_odtablelist))
								(not (member find_str (ade_odgettables ent)))
							)
							(ade_odaddrecord ent find_str)
						)
					)
				)
			)
		)
	)
)
(prin1)
)

Lien vers le commentaire
Partager sur d’autres sites

Un peu compliqué ton histoire...

Déjà quand tu dis "dernier caractère du nom du bloc ou ligne"

Pour le nom du bloc je veux bien, mais le nom de la ligne je le pioche où?

 

De plus j'ai du mal à saisir "dernier caractère" ou "0+dernier caractère" ou encore "13ème caractère", qu'est ce qui me permet de faire le distinguo entre ces 3 possibilités?

 

Pour l'instant j'en suis rendu là, si tu veux essayer...

(defun c:NBAMBOUCAD ( / flag l_lay tbl_lay js n ent find_str l value)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*")
		(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	)
	(setq flag nil)
)
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq
							ent (ssname js (setq n (1- n)))
							find_str (substr el (+ 3 (vl-string-search "--" el)))
						)
						(cond
							((and
								(member find_str (ade_odtablelist))
								(not (member find_str (ade_odgettables ent)))
							 )
								(ade_odaddrecord ent find_str)
								(foreach tbl (ade_odgettables ent)
									(setq l (mapcar 'cdar (cdaddr (ade_odtabledefn tbl))))
									(foreach el l
										(if (or (wcmatch el "*_TYPE") (wcmatch el "*_TYPEREG") (wcmatch el "*_NATURE"))
											(if (setq value (cdr (assoc 2 (entget ent))))
												(progn
													(if (vl-string-position (ascii "_") value nil T)
														(setq value (substr value (+ 2 (vl-string-position (ascii "_") value nil T))))
													)
													(ade_odsetfield ent tbl el 0 value)
												)
											)
										)
									)
								)
							)
						)
					)
				)
			)
		)
	)
)
(prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Oui je sais que c'est plutôt galère,

 

Alors pour le nom de la ligne, on le trouve sous l'onglet "type de ligne" dans les propriétés de la ligne, cependant je ne sais pas si c'est un champ alphanumérique étant donné qu'on trouve aussi la représentation graphique de la ligne dans cet onglet. Je t'envoie un fichier avec des exemples de types de lignes:

 

C'est là le hic, la valeur de l'attribut dépends du nom du bloc exclusivement, du coup l'une des trois possibilité varie selon le type de bloc, je ne sais pas si il est possible d'entrer tout une liste de nom de bloc pour laquelle tel ou tel possibilité s'applique?

 

Du coup après test, la procédure marche nickel, cependant elle ne fait pas un filtre par rapport aux calque du document excel, je désirerai attribuer uniquement les bloc de la liste et non pas tous les calques du dessin (même si ceci on des champs "_TYPE" ou "_NATURE" etc..) du coup ceci nous ramène au paragraphe précédent su la liste.

Ou sinon je dissocier les deux procédure puis faire la deuxième en isolant les blocs concerné je pense, tu confirmes?

 

Tu trouveras dans le fichier dwg exemple des blocs ne se trouvant pas dans la liste, ça sera plus parlant

 

Merci beaucoup bonuscad, c'est déjà génial d'arriver jusqu'ici!

Lien vers le commentaire
Partager sur d’autres sites

Je commence à être de moins en moins sure de moi avec toute ces conditions particulière à remplir, tente ceci...

(defun c:NBAMBOUCAD ( / l_der l_0 l_13 flag l_lay tbl_lay js n ent find_str l value)
(setq l_der
'(
"type_eq_ass_A"
"type_eq_ass_M"
"type_eq_ass_AG"
"type_eq_ass_MG"
"type_eq_ass_G"
"type_eq_ass_I"
"type_eq_ass_E"
"type_eq_ass_C"
"type_eq_ass_R"
"type_eq_ass_L"
"type_eq_ass_O"
"type_eq_ass_D"
"type_eq_ass_N"
"type_eq_ass_U"
"type_eq_ass_V"
"type_eq_ass_S"
"type_eq_ass_T"
"type_eq_ass_H"
"type_eq_ass_F"
"type_eq_cu_B"
"type_eq_cu_R"
"type_eq_cu_V"
"type_eq_cu_E"
"type_eq_cu_D"
"type_eq_cu_A"
"type_sup_P"
"type_sup_O"
"type_sup_R"
"type_sup_C"
"type_arm_gaz_C"
"type_arm_gaz_A"
"type_arm_gaz_D"
"type_eq_gaz_E"
"type_eq_gaz_V"
"type_eq_gaz_I"
"type_eq_gaz_S"
"type_eq_gaz_T"
"type_eq_gaz_M"
"type_eq_gaz_R"
"type_eq_gaz_O"
"type_eq_gaz_Q"
"type_eq_gaz_N"
"type_eq_gaz_P"
"type_eq_gaz_C"
"type_eq_gaz_B"
"type_arm_rti_B"
"type_arm_rti_L"
"type_arm_rti_A"
"type_arm_rti_F"
"type_arm_rti_T"
"type_arm_rti_M"
"type_poste_rti_C"
"type_poste_rti_P"
"type_poste_rti_O"
"type_poste_rti_D"
"type_poste_rti_T"
"type_poste_rti_M"
"type_sup_P"
"type_sup_O"
"type_sup_R"
"type_sup_C"
"type_ptlum_smuv_C"
"type_ptlum_smuv_L"
"type_ptlum_smuv_B"
"type_ptlum _smuv_P"
"type_acc_eau_I"
"type_acc_eau_E"
"type_acc_eau_C"
"type_acc_eau_D"
"type_acc _eau_B"
"type_point_eau_F"
"type_point_eau_I"
"type_point_eau_N"
"type_point_eau_A"
"type_point_eau_P"
"type_point_eau_L"
"type_zone_eau_U"
"type_zone_eau_S"
"type_zone_eau_R"
"type_zone_eau_P"
"type_zone_eau_T"
"type_zone_eau_C"
"type_zone_eau_H"
"type_reg_ass_N"
"type_reg_ass_C"
"type_reg_ass_R"
"type_reg_ass_S"
)
l_0
'(
"b_b1"
"b_b2"
"b_b3"
"b_b4"
"type_cloture_01"
"type_cloture_02"
"b_p2"
"b_p3"
"type_affl_smuv_01"
"type_affl_smuv_02"
"type_affl_smuv_03"
"type_affl_smuv_04"
"type_pt_obj_01"
"type_pt_obj_02"
"type_pt_obj_99"
"type_aff_smuv_01"
"type_aff_smuv_02"
"type_aff_smuv_03"
"type_gmob_smuv_01"
"type_gmob_smuv_02"
"type_gmob_smuv_03"
"type_gmob_smuv_04"
"type_pmob_smuv_05"
"type_pmob_smuv_06"
"type_pmob_smuv_07"
"type_pmob_smuv_08"
"m_e2"
"m_e1"
"m_e4"
"m_e5"
"type_arr_smuv_01"
"type_arr_smuv_02"
"type_arr_smuv_03"
"type_arr_smuv_05"
"type_arr_smuv_06"
"type_sign_smuv_01"
"type_sign_smuv_02"
"type_sign_smuv_03"
"type_sign_smuv_04"
"type_sign_smuv_05"
"type_sign_smuv_06"
"type_sign_ smuv_07"
"ft_c1"
"ft_c2"
"ft_c3"
"ft_c4"
"ft_f1"
"ft_f2"
"ft_f3"
"ft_f4"
"t_s1"
"t_s2"
"t_s3"
"t_s4"
"ft_t1"
"ft_t2"
"ft_t3"
"ft_t4"
"ft_t5"
"v_la1"
"v_la2"
"v_la3"
"v_c1"
"v_c2"
"v_c3"
)
l_13
'(
"nature_elec_E_TRA"
"nature_elec_C_TRA"
"nature_elec_S_TRA"
"nature_elec_I_TRA"
"nature_elec_A_TRA"
"nature_elec_E_RAC"
"nature_elec_C_RAC"
"nature_elec_S_RAC"
"nature_elec_I_RAC"
"nature_elec_A_RAC"
"nature_elec_E_POS"
"nature_elec_C_POS"
"nature_elec_S_POS"
)
)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*")
		(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	)
	(setq flag nil)
)
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq
							ent (ssname js (setq n (1- n)))
							find_str (substr el (+ 3 (vl-string-search "--" el)))
						)
						(cond
							((and
								(member find_str (ade_odtablelist))
								(not (member find_str (ade_odgettables ent)))
							 )
								(ade_odaddrecord ent find_str)
								(foreach tbl (ade_odgettables ent)
									(setq l (mapcar 'cdar (cdaddr (ade_odtabledefn tbl))))
									(foreach el l
										(if (or (wcmatch el "*_TYPE") (wcmatch el "*_TYPEREG") (wcmatch el "*_NATURE"))
											(cond
												((and (eq (cdr (assoc 0 (entget ent))) "INSERT") (setq value (cdr (assoc 2 (entget ent)))))
													(cond
														((member value l_der)
															(progn
																(if (vl-string-position (ascii "_") value nil T)
																	(ade_odsetfield ent tbl el 0 (substr value (+ 2 (vl-string-position (ascii "_") value nil T))))
																)
															)
														)
														((member value l_0)
															(progn
																(if (vl-string-position (ascii "_") value nil T)
																	(ade_odsetfield ent tbl el 0 (strcat "0" (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))))
																)
															)
														)
														((member value l_13)
															(progn
																(if (substr value 13 1)
																	(ade_odsetfield ent tbl el 0 (substr value 13 1))
																)
															)
														)
													)
												)
												((and
													(member (cdr (assoc 0 (entget ent))) '("LINE" "ARC" "CIRCLE" "LWPOLYLINE" "POLYLINE" "SPLINE" "ELLIPSE" "SPLINE" "XLINE" "RAY" "MLINE" "MPOLYGON"))
													(setq value (cdr (assoc 6 (entget ent))))
												 )
													(if (vl-string-position (ascii "_") value nil T)
														(ade_odsetfield ent tbl el 0 (substr value (+ 2 (vl-string-position (ascii "_") value nil T))))
													)
												)
											)
										)
									)
								)
							)
						)
					)
				)
			)
		)
	)
)
(prin1)
)

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Super la procédure marche du tonnerre!

 

Je te soumets juste une petite amélioration si possible:

Actuellement, les valeurs qui sont renseignés (d'après mes tests et si j'ai un petit peu compris le codage) dans les champs correspondent au caractères se trouvant après le dernier "_" du nom du bloc. Cependant parfois il y a deux caractères (ex: "type_eq_ass_AG" ou "ft_c1") du coup les valeurs renseigné dans les champs sont les deux caractères (ex: respectivement "XXX_TYPE"="AG" ou "XXX_TYPE"="c1".)

 

Serait -il possible que ce soir uniquement le dernier caractère de la chaîne du nom du bloc qui soit renseigné? (ex: Pour bloc "type_eq_ass_AG" valeur "XXX_TYPE"="G" ou pour ligne "ft_c1" valeur "XXX_TYPE"="1")

 

 

Et le tout dernier point serait d'automatiser le remplissage du champ "XXX_ORIENT" des tables OD par la valeur du champs "rotation" des propriétés de l'objet, du champ "XXX_LONG" des tables OD par la valeur du champs "Echelle en X", du champ "XXX_LARG" des tables OD par la valeur du champs "Echelle Y" et ceci pour tous les objets du dessin.

Ah oui et aussi ajouter la valeur "A" au champ "XXX_STAT" des tables OD pour tous les objets du dessin.

 

 

Merci d'avance! wink.gif

Lien vers le commentaire
Partager sur d’autres sites

Bon j'ai quelques problèmes...

J'ai appliqué tes souhaits :

pour "type_eq_ass_AG" mais aussi pour "type_eq_ass_MG" (c'est le codage qui a voulu cela)

pour "ft_c1" (aurait-il fallu l'appliquer aussi à "v_c1" ?)

pour "XXX_STAT"pour "XXX_ORIENT" (j'ai mis la valeur en grade comme tes unités employées)

 

pour "XXX_LONG" et "XXX_LONG": ces champs sont définis comme ENTIER et non en nombre réel.

Donc j'ai récupéré l'échelle en X et Y que j'ai multiplié par 1000 et dont j'ai pris la partie entière, ainsi par exemple 0.645 devient 645.

Malgré cela le champ n'est pas mis à jour, je ne sais pourquoi !...J'ai mis en remarque ";" des lignes (print) dans le code (vers la fin), tu peux enlever le point virgule, comme ça tu verra que la valeur est bonne mais que le champ n'est pas mis à jour pour autant. La table a été mal définie, c'est l'impression que j'aie !

 

En attendant voilà le nouveau jet:

(defun c:NBAMBOUCAD ( / l_der l_0 l_13 flag l_lay tbl_lay js n ent find_str l value)
(setq l_der
	'(
	"type_eq_ass_A"
	"type_eq_ass_M"
	"type_eq_ass_AG"
	"type_eq_ass_MG"
	"type_eq_ass_G"
	"type_eq_ass_I"
	"type_eq_ass_E"
	"type_eq_ass_C"
	"type_eq_ass_R"
	"type_eq_ass_L"
	"type_eq_ass_O"
	"type_eq_ass_D"
	"type_eq_ass_N"
	"type_eq_ass_U"
	"type_eq_ass_V"
	"type_eq_ass_S"
	"type_eq_ass_T"
	"type_eq_ass_H"
	"type_eq_ass_F"
	"type_eq_cu_B"
	"type_eq_cu_R"
	"type_eq_cu_V"
	"type_eq_cu_E"
	"type_eq_cu_D"
	"type_eq_cu_A"
	"type_sup_P"
	"type_sup_O"
	"type_sup_R"
	"type_sup_C"
	"type_arm_gaz_C"
	"type_arm_gaz_A"
	"type_arm_gaz_D"
	"type_eq_gaz_E"
	"type_eq_gaz_V"
	"type_eq_gaz_I"
	"type_eq_gaz_S"
	"type_eq_gaz_T"
	"type_eq_gaz_M"
	"type_eq_gaz_R"
	"type_eq_gaz_O"
	"type_eq_gaz_Q"
	"type_eq_gaz_N"
	"type_eq_gaz_P"
	"type_eq_gaz_C"
	"type_eq_gaz_B"
	"type_arm_rti_B"
	"type_arm_rti_L"
	"type_arm_rti_A"
	"type_arm_rti_F"
	"type_arm_rti_T"
	"type_arm_rti_M"
	"type_poste_rti_C"
	"type_poste_rti_P"
	"type_poste_rti_O"
	"type_poste_rti_D"
	"type_poste_rti_T"
	"type_poste_rti_M"
	"type_sup_P"
	"type_sup_O"
	"type_sup_R"
	"type_sup_C"
	"type_ptlum_smuv_C"
	"type_ptlum_smuv_L"
	"type_ptlum_smuv_B"
	"type_ptlum _smuv_P"
	"type_acc_eau_I"
	"type_acc_eau_E"
	"type_acc_eau_C"
	"type_acc_eau_D"
	"type_acc _eau_B"
	"type_point_eau_F"
	"type_point_eau_I"
	"type_point_eau_N"
	"type_point_eau_A"
	"type_point_eau_P"
	"type_point_eau_L"
	"type_zone_eau_U"
	"type_zone_eau_S"
	"type_zone_eau_R"
	"type_zone_eau_P"
	"type_zone_eau_T"
	"type_zone_eau_C"
	"type_zone_eau_H"
	"type_reg_ass_N"
	"type_reg_ass_C"
	"type_reg_ass_R"
	"type_reg_ass_S"
	)
	l_0
	'(
	"b_b1"
	"b_b2"
	"b_b3"
	"b_b4"
	"type_cloture_01"
	"type_cloture_02"
	"b_p2"
	"b_p3"
	"type_affl_smuv_01"
	"type_affl_smuv_02"
	"type_affl_smuv_03"
	"type_affl_smuv_04"
	"type_pt_obj_01"
	"type_pt_obj_02"
	"type_pt_obj_99"
	"type_aff_smuv_01"
	"type_aff_smuv_02"
	"type_aff_smuv_03"
	"type_gmob_smuv_01"
	"type_gmob_smuv_02"
	"type_gmob_smuv_03"
	"type_gmob_smuv_04"
	"type_pmob_smuv_05"
	"type_pmob_smuv_06"
	"type_pmob_smuv_07"
	"type_pmob_smuv_08"
	"m_e2"
	"m_e1"
	"m_e4"
	"m_e5"
	"type_arr_smuv_01"
	"type_arr_smuv_02"
	"type_arr_smuv_03"
	"type_arr_smuv_05"
	"type_arr_smuv_06"
	"type_sign_smuv_01"
	"type_sign_smuv_02"
	"type_sign_smuv_03"
	"type_sign_smuv_04"
	"type_sign_smuv_05"
	"type_sign_smuv_06"
	"type_sign_ smuv_07"
	"ft_c1"
	"ft_c2"
	"ft_c3"
	"ft_c4"
	"ft_f1"
	"ft_f2"
	"ft_f3"
	"ft_f4"
	"t_s1"
	"t_s2"
	"t_s3"
	"t_s4"
	"ft_t1"
	"ft_t2"
	"ft_t3"
	"ft_t4"
	"ft_t5"
	"v_la1"
	"v_la2"
	"v_la3"
	"v_c1"
	"v_c2"
	"v_c3"
	)
	l_13
	'(
	"nature_elec_E_TRA"
	"nature_elec_C_TRA"
	"nature_elec_S_TRA"
	"nature_elec_I_TRA"
	"nature_elec_A_TRA"
	"nature_elec_E_RAC"
	"nature_elec_C_RAC"
	"nature_elec_S_RAC"
	"nature_elec_I_RAC"
	"nature_elec_A_RAC"
	"nature_elec_E_POS"
	"nature_elec_C_POS"
	"nature_elec_S_POS"
	)
)
(setq flag T l_lay nil)
(while (setq tbl_lay (tblnext "LAYER" flag))
	(if (wcmatch (cdr (assoc 2 tbl_lay)) "*--*")
		(setq l_lay (cons (cdr (assoc 2 tbl_lay)) l_lay))
	)
	(setq flag nil)
)
(cond
	(l_lay
		(foreach el l_lay
			(setq js (ssget "_X" (list (cons 8 el) (cons 410 (getvar "CTAB")))))
			(cond
				(js
					(repeat (setq n (sslength js))
						(setq
							ent (ssname js (setq n (1- n)))
							find_str (substr el (+ 3 (vl-string-search "--" el)))
						)
						(cond
							((and
								(member find_str (ade_odtablelist))
								(not (member find_str (ade_odgettables ent)))
							 )
								(ade_odaddrecord ent find_str)
								(foreach tbl (ade_odgettables ent)
									(setq l (mapcar 'cdar (cdaddr (ade_odtabledefn tbl))))
									(foreach el l
										(if (wcmatch el "*_STAT")
											(ade_odsetfield ent tbl el 0 "A")
										)
										(if (or (wcmatch el "*_TYPREG") (wcmatch el "*_TYPE") (wcmatch el "*_NATURE"))
											(cond
												((and (eq (cdr (assoc 0 (entget ent))) "INSERT") (setq value (cdr (assoc 2 (entget ent)))))
													(cond
														((member value l_der)
															(if (vl-string-position (ascii "_") value nil T)
																(ade_odsetfield
																	ent
																	tbl
																	el
																	0
																	(if (> (strlen (substr value (+ 2 (vl-string-position (ascii "_") value nil T)))) 1)
																		(substr value (+ 3 (vl-string-position (ascii "_") value nil T)))
																		(substr value (+ 2 (vl-string-position (ascii "_") value nil T)))
																	)
																)
															)
														)
														((member value l_0)
															(if (vl-string-position (ascii "_") value nil T)
																(ade_odsetfield
																	ent
																	tbl
																	el
																	0
																	(if (eq (substr value 1 3) "ft_")
																		(substr value (+ 3 (vl-string-position (ascii "_") value nil T)))
																		(strcat "0" (substr value (+ 2 (vl-string-position (ascii "_") value nil T))))
																	)
																)
															)
														)
														((member value l_13)
															(if (substr value 13 1)
																(ade_odsetfield ent tbl el 0 (substr value 13 1))
															)
														)
													)
												)
												((and
													(member (cdr (assoc 0 (entget ent))) '("LINE" "ARC" "CIRCLE" "LWPOLYLINE" "POLYLINE" "SPLINE" "ELLIPSE" "SPLINE" "XLINE" "RAY" "MLINE" "MPOLYGON"))
													(setq value (cdr (assoc 6 (entget ent))))
												 )
													(if (vl-string-position (ascii "_") value nil T)
														(ade_odsetfield
															ent
															tbl
															el
															0
															(if (eq (substr value 1 3) "ft_")
																(substr value (+ 3 (vl-string-position (ascii "_") value nil T)))
																(substr value (+ 2 (vl-string-position (ascii "_") value nil T)))
															)
														)
													)
												)
											)
										)
										(if (or (wcmatch el "*_LONG") (wcmatch el "*_LARG") (wcmatch el "*_ORIENT"))
											(cond
												((eq (cdr (assoc 0 (entget ent))) "INSERT")
													(cond
														((wcmatch el "*_LONG")
;(print (fix (* 1000 (cdr (assoc 41 (entget ent))))))
															(ade_odsetfield ent tbl el 0 (fix (* 1000 (cdr (assoc 41 (entget ent))))))
														)
														((wcmatch el "*_LARG")
;(print (fix (* 1000 (cdr (assoc 42 (entget ent))))))
															(ade_odsetfield ent tbl el 0 (fix (* 1000 (cdr (assoc 42 (entget ent))))))
														)
														((wcmatch el "*_ORIENT")
															(ade_odsetfield ent tbl el 0 (atof (angtos (cdr (assoc 50 (entget ent))))))
														)
													)
												)
											)
										)
									)
								)
							)
						)
					)
				)
			)
		)
	)
)
(prin1)
)

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Oui c'est nickel, je n'ai cité que deux exemples mais je voulais bien appliquer juste le dernier caractère à tous les blocs ayant deux caractères après le "_", c'est tout bon pour cette partie du programme!

Tout comme pour "*_STAT" et "*_ORIENT", c'est tout bon!

 

En regardant dans la table de donnée j'ai vu que le type de donné était "court", d'après le ce que j'ai compris la valeur renseigné doit être de type entier et faire moins de 5 caractères.

 

 

De plus, j'ai oublié de te dire qu'il est impératif que les valeurs "*_LONG" et "*_LARG" soient arrondies au cm, est-il possible de transformer un caractère de type réel en caractère de type entier?

Je pense que même si il n'a plus de caractère après le "." un caractère du type réel n'est pas accepté dans ces champs car ils n'acceptent que des caractères du type entier.

Et je n'ai malheureusement pas le droit de modifier la définition des tables.

 

Bon j'ai quelques problèmes...

J'ai appliqué tes souhaits :

pour "type_eq_ass_AG" mais aussi pour "type_eq_ass_MG" (c'est le codage qui a voulu cela)

pour "ft_c1" (aurait-il fallu l'appliquer aussi à "v_c1" ?)

pour "XXX_STAT"pour "XXX_ORIENT" (j'ai mis la valeur en grade comme tes unités employées)

 

pour "XXX_LONG" et "XXX_LONG": ces champs sont définis comme ENTIER et non en nombre réel.

Donc j'ai récupéré l'échelle en X et Y que j'ai multiplié par 1000 et dont j'ai pris la partie entière, ainsi par exemple 0.645 devient 645.

Malgré cela le champ n'est pas mis à jour, je ne sais pourquoi !...J'ai mis en remarque ";" des lignes (print) dans le code (vers la fin), tu peux enlever le point virgule, comme ça tu verra que la valeur est bonne mais que le champ n'est pas mis à jour pour autant. La table a été mal définie, c'est l'impression que j'aie !

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Bon je pense qu'il y a un problème avec tes tables.Avant d'appliquer mon code.

Quand je vais par exemple modifier la table "A_RE" et le champ "ARE_LONG", si je clique sur un autre champ par exemple ARE_ORIENT ; il m'affiche le type Réel, je re-clique sur ARE_LONG ; il m'affiche Réel, je re-clique par exemple sur AUTEUR ; il m'affiche Caractère, je reviens sur ARE_LONG ; il m'affiche Caractère.

En fait il garde le dernier élément cliqué (c'est pas normal)

 

Si je fixe ARE_LONG en entier et que je clique modifier et pareil sur ARE_LARG. Là effectivement je peut revenir dessus après avoir cliqué sur un autre champ de nature différente, il m'affiche bien entier.Si j'applique alors la routine, elle fonctionne alors pour la table A_RE et les champs ARE_LONG et ARE_LARG, donc il y a bien un problème sur les définitions.

De même quand je lance cette instruction lisp (toujours avant d'avoir appliqué mon code)

(foreach i (caddr (ade_odtabledefn "A_RE")) (print i))

 

On voit en retour une incohérence:

(("ColName" . "ARE_LONG") ("ColDesc" . "") ("ColType" . "Integer") ("DefaultVal" . ""))

(("ColName" . "ARE_LARG") ("ColDesc" . "") ("ColType" . "Integer") ("DefaultVal" . ""))

(("ColName" . "ARE_ARRAM") ("ColDesc" . "") ("ColType" . "Integer") ("DefaultVal" . ""))

Ces champs de type entier devrait avoir ("DefaultVal" . 0) et non pas ("DefaultVal" . ""), je pense que le problème vient de là.

 

Combien de tables sont impactés, je ne sais pas, mais je dirais toutes.Qui a mis en place ces tables?

 

 

 

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Ah oui en effet.

Ils doivent donc forcément avoir une valeur par défaut de .0 pour ne pas être considéré comme nil?

Le champ "OBJECTID" est aussi un entier mais est bien définit avec ("DefaultVal" . 0) il devrait donc avoir la même définition que lui.

 

Toutes les tables possédant ces champs sont impactés.

Et c'est le client qui définit les tables je vais lui faire part du problème.

Je te tiens au courant, et je t'envoie du bonus ce soir!

Et UN GRAND MERCI pour ce taff énorme!!

 

 

 

Bon je pense qu'il y a un problème avec tes tables.Avant d'appliquer mon code.

Quand je vais par exemple modifier la table "A_RE" et le champ "ARE_LONG", si je clique sur un autre champ par exemple ARE_ORIENT ; il m'affiche le type Réel, je re-clique sur ARE_LONG ; il m'affiche Réel, je re-clique par exemple sur AUTEUR ; il m'affiche Caractère, je reviens sur ARE_LONG ; il m'affiche Caractère.

En fait il garde le dernier élément cliqué (c'est pas normal)

 

Si je fixe ARE_LONG en entier et que je clique modifier et pareil sur ARE_LARG. Là effectivement je peut revenir dessus après avoir cliqué sur un autre champ de nature différente, il m'affiche bien entier.Si j'applique alors la routine, elle fonctionne alors pour la table A_RE et les champs ARE_LONG et ARE_LARG, donc il y a bien un problème sur les définitions.

De même quand je lance cette instruction lisp (toujours avant d'avoir appliqué mon code)

(foreach i (caddr (ade_odtabledefn "A_RE")) (print i))

 

On voit en retour une incohérence:

 

Ces champs de type entier devrait avoir ("DefaultVal" . 0) et non pas ("DefaultVal" . ""), je pense que le problème vient de là.

 

Combien de tables sont impactés, je ne sais pas, mais je dirais toutes.Qui a mis en place ces tables?

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é