VtKp Posté(e) le 9 mars 2011 Posté(e) le 9 mars 2011 Bonjour a tousJ'ai un reseau de conduite AEP sur Autocad Que Je dois renseigner comme des blocs aced attributesAprès plusieurs recherches il semble Que les xdatas soient la solution a mon problemeSerait il possible a votre Avis de Creer une routine me permettant de renseigner mes conduites avec dans l'ordre Le diametre, la profondeur, la nature de Ma conduit, la longueur, Le nom de rue et un identifiant qui s'incrementerait automatiquement ?J'ai trouvé un lisp de Giles qui permet de visualiser les xdatas Mais pas d'outil pour saisir les donneesMerci encore de votre aide si Vous lenses Que cela est possible
(gile) Posté(e) le 9 mars 2011 Posté(e) le 9 mars 2011 Salut, Tu trouveras dans ce sujet, un premier LISP de bonuscad, suivi d'un autre écrit par moi et plus loin un programme plus puissant écrit en .NET (C#). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 9 mars 2011 Posté(e) le 9 mars 2011 Salut, Pour compléter la réponse de (gile) qui t'oriente sur la modification de Xdata, je te propose ce lien qui te donnera un aperçu sur la création d'entité avec des Xdata. Les xdata sont très intéressantes, mais nécessite de programmer un minimum de façon à pouvoir exploiter ces données. Il n'y a pas de code tout cuit fourni par Autodesk, tu as bien les outils rudimentaires des ExpressTools qui peuvent aider, mais un à mon avis un code spécifique s'impose quand on veut utiliser ce type de données étendues pour vraiment en avoir une utilisation orientée. Tu as aussi les ldata (vlax-ldata-put) (vlax-ldata-get) qui sont peut être plus facilement manipulables. Je te laisse faire une recherche sur le site si cette alternative peut t'intéresser. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 9 mars 2011 Posté(e) le 9 mars 2011 Hello Je suis a 100% d'accord avec Gilles et Bruno ! En effet la routine XDA.lsp de Gilles (Consultation simple) des XDATAs et les 2 routines de Bruno et Gilles pour consulter / modifier les XDATAs sont super ! Mais mais c loin d'etre suffisant car par exemple pour faire sous AutoCAD un "semblant" de SIG avec les XDATAs, il faut "au minimum" pourvoir : - Interroger les XDATAs sur 1 ou N champs par rapport a des valeurs (Tests) pour selectionner les entites concernees : par exemple quelles sont les Canas (Polylignes en fait) de type EU en Beton d'un Diametre > 300 mm - Generer en texte simple le contenu des champs des XDATAs pour produire un dessin avec les Infos techniques necessaires exploitables par un simple AutoCAD LT ou autre logiciel de DAO - Faire des requetes thematiques qui vont colorier ou changer l'epaisseur (ou largeur globale des polylignes) en fonction par exemple du champ DIAMETRE - etc Ca represente un gros boulot en terme de developpement Si tu avais acces a un AutoCAD MAP ou un AutoCAD CIVIL, presque tous ces problemes seraient regles de base ! Le Decapode Autodesk Expert Elite Team
VtKp Posté(e) le 10 mars 2011 Auteur Posté(e) le 10 mars 2011 Bonjour a tousMerci pour vos reponses.Gile, ton lisp sert a modifier des xdatas existantes et non a en Creer maic cet Outils me semble indispensable pour modifier des donnees.Bonuscad, Le second lisp Que tu Donne en reponse 3 semble correspondre a Ma demande mais je ne sais pas comment l'adapter pour renseigner une polyligne avec uniquement les champs dont J'ai besoin.Mes connaissances en lisp sont assez limitees d'ou Ma demande.J'ai Deja trouvé le moyen de les exporter et donc de les exploiter Mais il me manque un Outil de saisieMerci par avance de votre aide
(gile) Posté(e) le 10 mars 2011 Posté(e) le 10 mars 2011 Salut, Dans le sujet où tu as trouvé le LISP, à la réponse 12, tu trouveras un programme .NET en téléchargement.Il faut charger la DLL depuis AutoCAD avec la commande NETLOAD, puis lancer la commande XDEIT. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
lecrabe Posté(e) le 10 mars 2011 Posté(e) le 10 mars 2011 Hello Je crois que la commande c plutot : XDEDIT Le Decapode Autodesk Expert Elite Team
(gile) Posté(e) le 10 mars 2011 Posté(e) le 10 mars 2011 Hello Je crois que la commande c plutot : XDEDIT Le Decapode Oupss !!!... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 10 mars 2011 Posté(e) le 10 mars 2011 Dans les utilitaires de consultation et de modification des Xdatas j'ai trouvé celui-ci : http://www.theswamp.org/index.php?topic=37331.0 Vraiment cool aussi. A+
VtKp Posté(e) le 11 mars 2011 Auteur Posté(e) le 11 mars 2011 Bonjour a tousMerci pour vos reponsesGile Merci pour cet OutilJe vais si avec les differents examples en lisp Je ne Peux pas me faire un Outil plus specifiqueJe reviens vers Vous si J'ai des problems Merci encore
VtKp Posté(e) le 12 mars 2011 Auteur Posté(e) le 12 mars 2011 Bonjour à tous, Voici un bout de code que j'ai essayé d'adapter à mon besoin mais il ne marche pas.Il s'agit d'un code que j'ai repris de cette discussion. http://www.cadxp.com/XForum+print-fid-144-tid-18022.html mais il ya un souci car j'ai le retour erreur: no function definition: VLA-OBJECT à la ligne(not (Test-Xdata ent)) et je ne comprends pas pourquoi ??? Je ne me suis plus plongé dans la prog Lisp depuis longtemps maintenant et là je butte...... Merci par avance de votre aide. ;;;Programme Demandant/Donnant la liste Xdata dans entité. Conduite EU-EP (defun c:xd2 (/ ENT I LST-D VLA-OB) (vl-load-com) (setq ent (car (entsel "\nChoisir la buse à renseigner :"))) (if (and (/= (cdr (assoc 8 (entget ent))) "Buse") (/= (cdr (assoc 0 (entget ent))) "POLYLINE")) (progn (alert "L'objet sélectionné n'est pas une polyligne 3D dans le calque Buse") (exit) ) (progn (if ent (progn (setq vla-ob (vlax-ename->vla-object ent)) (vla-getxdata vla-ob "" 'xType 'xData) (if (not (Test-Xdata ent)) (progn (setq lst-D (C_EU) i -1) (Set-xData ent (list "ENTITE" (vla-get-handle vla-ob))) (repeat (/ (length lst-D) 2) (Set-xData ent (list (nth (setq i (1+ i)) lst-D) (nth (setq i (1+ i)) lst-D))) ))))) ) ) (princ) ) ;; Boite de dialogue Demande de renseignements (defun C_EU (/ tmp file dcl_id typ box1 box2 box3 box4 box5 box6 box7 lst1 lst2 lst3 lst4 lsta lstp lstc lstd) ;; créer un fichier temporaire et l'ouvrir en écriture (setq tmp (vl-filename-mktemp "tmp.dcl") file (open tmp "w")) ;; écrire dans le fichier (write-line (strcat "MRen_EU:dialog { label = \"Conduite EU\"; initial_focus = \"lst1\"; :edit_box { key = \"box1\"; label = \"ObjectID : \"; edit_width = 10; } :popup_list { key = \"lst1\"; label = \"Type de conduite : \"; edit_width = 10; } :popup_list { key = \"lst2\"; label = \"Diamètre : \"; edit_width = 10; } :edit_box { key = \"box2\"; label = \"Longueur Conduite : \"; edit_width = 10; } :edit_box { key = \"box3\"; label = \"Pente : \"; edit_width = 10; } :edit_box { key = \"box4\"; label = \"Num. Regard Haut : \"; edit_width = 10; } :edit_box { key = \"box5\"; label = \"Num. Regard Bas : \"; edit_width = 10; } :edit_box { key = \"box6\"; label = \"Nom de la Rue : \"; edit_width = 10; } :popup_list { key = \"lst3\"; label = \"Abandonnée : \"; edit_width = 10; } :edit_box { key = \"box7\"; label = \"Ref_Recolement : \"; edit_width = 10; } :popup_list { key = \"lst4\"; label = \"Précision recolement : \"; edit_width = 10; } spacer; ok_cancel; } ") file ) ;; fermer le fichier (close file) ;; charger le fichier (setq dcl_id (load_dialog tmp)) ;; Appeler la boite de dialogue (if (not (new_dialog "MRen_EU" dcl_id)) (exit) ) (set_tile "box1" "1") (set_tile "box2" "0") (set_tile "box3" "0") (set_tile "box4" "0") (set_tile "box5" "0") (set_tile "box6" "0") (set_tile "box7" "0") (setq lstp '("Faux" "Vrai")) (setq lsta '("Non" "Oui")) (setq lstc '("Fonte" "PVC" "Béton")) (setq lstd '("Ø60" "Ø80" "Ø100" "Ø120" "Ø150" "Ø200" "Ø250" "Ø300" "Ø400" "Ø500" "Ø600" "Ø800" "Ø1000")) (start_list "lst1") (mapcar 'add_list lstc) (end_list) (start_list "lst2") (mapcar 'add_list lstd) (end_list) (start_list "lst3") (mapcar 'add_list lstp) (end_list) (start_list "lst4") (mapcar 'add_list lsta) (end_list) ;; action si l'utilisateur clique "OK" : ;; lst = liste des entrées et fermeture de la boite (action_tile "accept" "(setq typ (list (get_tile \"box1\") (nth (atoi (get_tile \"lst1\")) lstc) (nth (atoi (get_tile \"lst2\")) lstd) (get_tile \"box2\") (get_tile \"box3\") (get_tile \"box4\") (get_tile \"box5\") (get_tile \"box6\") (nth (atoi (get_tile \"lst3\")) lsta) (get_tile \"box7\") (nth (atoi (get_tile \"lst4\")) lstp) ) ) (done_dialog)" ) ;; afficher la boite de dialogue (start_dialog) ;; décharger la boite de dialogue (unload_dialog dcl_id) ;; supprimer le fichier (vl-file-delete tmp) (setq typ (list "OBJECTID" (nth 0 typ) "TYPE_CONDUITE" (nth 1 typ) "DIAMETRE" (nth 2 typ) "LONGUEUR" (nth 3 typ) "PENTE" (nth 4 typ) "NUM_REG_HAUT" (nth 5 typ) "NUM_REG_BAS" (nth 6 typ) "NOM_RUE" (nth 7 typ) "ABANDONNEE" (nth 8 typ) "REF_REC" (nth 9 typ) "PRECISION_REC" (nth 10 typ) ) ) ) ;;; Routine Enregistrement Xdata dans entité : (Set-xData '("Nom" "Toto")) (defun Set-xData (ent lst / VLA-OB XDATA XTYPE) (if (equal (type ent) 'ENAME)(setq ent (vlax-ename->vla-object ent))) (setq xData (vlax-make-safearray vlax-vbVariant (cons 0 1)) xType (vlax-make-safearray vlax-vbInteger (cons 0 1))) (vlax-safearray-fill xData lst) (vlax-safearray-fill xType '(1001 1000)) (vla-setxdata ent xType xData) ) ;;; Test Existance Xdata (defun Test-Xdata (ent) (if ent (progn (setq vla-ob (vlax-ename->vla-object ent)) (vla-getxdata vla-ob "" 'xType 'xData) (if (and xType xData) (progn (setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData)) i -1 txtt "") (repeat (/ (length l) 2) (setq txtt (strcat txtt "\n" (nth (setq i (1+ i)) l) ": " (nth (setq i (1+ i)) l)))) (alert (strcat "Xdata Existants : \n" txtt)) t ) ))) ) [Edité le 12/3/2011 par VtKp]
VtKp Posté(e) le 12 mars 2011 Auteur Posté(e) le 12 mars 2011 Bonjour à tous, C'est bon j'ai pu trouver une solution à mon problème.C'était un problème de copier-coller des fonctions Test-Xdata et Set-xData qui viennent de Bred.Merci encore à Bred. Par contre, dernière petite question avant de cloturer cette discussion, est il possible sans être obligé d'avoir AutocadMap d'afficher dans la fenêtre de propriétés les attributs Xdata d'une entité ?J'ai vu qu'on pouvait convertir les Xdata en Object data de Map mais il est vraiment dommage qu'on ne peut afficher les xdata d'uen entité dans la fenêtre propriétés directement. Pensez vous que cela est possible ? Merci par avance de vos réponses.,
VtKp Posté(e) le 12 mars 2011 Auteur Posté(e) le 12 mars 2011 J'ai modifié mon code en réponse 10. Le lisp marche maintenant.Si ca peut interressé certains d'entre vousJ'ai oublier de preciser pour les testeurs Que la conduite a renseigner doit se Trouver dans Le Calque buse et doit être une polyligne 3d Par contre comment maintenant peut on faire des requetes sur les entites renseignes par rapport aux valeurs des champs xdata ?Merci par avance de votre aide [Edité le 13/3/2011 par VtKp]
VtKp Posté(e) le 14 mars 2011 Auteur Posté(e) le 14 mars 2011 Bonjour a tousAprès plusieurs recherches il est en effet complique sans programmation de faire des requetes sur les xdatas. Je pense qu'il faudrait Convertir les xdatas en object data puis le fichier dwg contenant les objects data en shapefile pour importer le fichier sous Esri. La saisie d'entites sous AutoCad reste quand meme plus simple Que sous Esri.Conaissez Vous donc un lisp qui permettent de Convertir les xdata en object data dans une seule application car dans mon cas J'ai plusieurs cas et cela risque de poser des problemes pour les champs de mon shapefile ?Merci par avance de votre aide
fabcad Posté(e) le 14 mars 2011 Posté(e) le 14 mars 2011 Et oui il est plus facile de gérer les données d'objets et de les requêter sans forcément passer par un format shape. A l'adresse ci-dessous, tu pourras télécharger un utilitaire qui transforme des xdatas en données d'objets :(copie ton DWG avant l'utilisation de cette fonction). http://georezo.net/forum/viewtopic.php?id=47774 Sinon dans le dossier support d'AutoCAD MAP, tu as une routine qui transforme aussi les xdatas en données d'objets nommée eedcnvrt.lsp (copie ton DWG avant l'utilisation de cette fonction). Le format d'échange SHP d'ESRI n'est intéressant à mon sens que si tu partages tes sources avec d'autres logiciels SIG. A+
VtKp Posté(e) le 15 mars 2011 Auteur Posté(e) le 15 mars 2011 Bonjour a tousJ'ai essaye ta routine fabcad et J'ai des problemes avec les xdatas de mes entites car Je n'ai pas une application mais plusieurs pour mes entites et du coup Je ne Peux Convertir qu'un champ xdata en objet data a la fois par nom d'applications.Existe il un lisp qui regroupe tous Les noms d'applications dans une seule car c'est lourd a gerer et j'ai un peu plus de 1000 entites a traiter entre les conduites et les regards ?Oui fabcad c'est pour utiliser ces données sous Esri avec d'autres donnes du même type.J'ai développe cet outil de saisie sous Autocad car la saisie sous Esri et le trace d'entites est beaucoup moins aise que sous Autocad.Il me reste a importer mes Xdata sous Esri via un shape mais j'ai un problème avec le nom de mes applications D'ou ma questionMerci par avance de vos réponses
fabcad Posté(e) le 15 mars 2011 Posté(e) le 15 mars 2011 Salut, Le logiciel Arcwiew d' ESRI sait lire les dwgs avec xdatas, il faudrait pouvoir unifier les tables Xdatas et de les exporter en format shape avec Arcview.Ces fichiers shape alors pourront être connectés avec AutoCAD MAP ou importés dans ce dernier en entités AutoCAD avec les valeurs attributaires intégrées comme données d'objets. A+
VtKp Posté(e) le 16 mars 2011 Auteur Posté(e) le 16 mars 2011 Bonjour FabcadPeux tu m'indiquer la procedure sous Esri ?J'ai cherche et Je n'arrive pas a utiliser mes xdatas.Par contre quand Je les converti en object data puis converti en shape J'ai tous Mais par nom d'applications unique.Merci par avance de ton aide.
bonuscad Posté(e) le 16 mars 2011 Posté(e) le 16 mars 2011 Salut VtKp J'ai essayé rapidement ton lisp (il fonctionne). Par contre je n'ai pas compris pourquoi tu as fais de multiples applications avec une seule clé et sa valeur adjointe.Il me semble qu'il aurait été plus judicieux de faire une seule application avec des clés multiples, ainsi lors de la conversion en OD pour Map cela fonctionnerait très simplement, tu récupérerais tout tes index de clés et leurs valeurs. Si tu pense bien ton projet avec les Xdata, la conversion en OD ne te posera pas de problèmes.Je l'ai fais moi-même pour des applications et je te certifie que j'ai bien rapatrié toutes mes infos sous Map. (jusqu'à 168 clés par exemple pour une application pour des données INSEE) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VtKp Posté(e) le 16 mars 2011 Auteur Posté(e) le 16 mars 2011 Bonjour Bonuscad, Oui en effet, j'ai adapté le lisp de Bred à mon besoin et je me suis rendu compte après qu'une appli xdata aurait suffit et m'aurait éviter des problèmes lors de la conversion en OD.Mais voila, j'ai maintenant un peu plus de 1000 entités déjà renseignés avec ce lisp et j'essaye de faire un autre lisp qui me remplace par entité toutes les applis par une seule xdata en regroupant les champs mais je n'y arrive pas.D'ou ma question en réponse 13 et 15,j'ai bien essayé avec entmod mais je n'y arrive pasje bloque depuis 4 jours sur ce problèmeJ'ai essayé aussi la manip de fabcad mais sans résultat Je ne peux pas perdre les données déjà entrées, ca serait dommage Merci par avance de ton aide
bonuscad Posté(e) le 17 mars 2011 Posté(e) le 17 mars 2011 J'ai fais cela à l'arrache...regrouper dans une nouvelle application CONDUITE_VTKPJe n'ai pas supprimé les anciennes (defun c:mdf_busedata ( / js el n ent xd_list e_data) (while (not (setq js (ssget "_X" (list '(0 . "POLYLINE") '(-4 . " '(-3 ("ENTITE")) '(-3 ("OBJECTID")) '(-3 ("TYPE_CONDUITE")) '(-3 ("DIAMETRE")) '(-3 ("LONGUEUR")) '(-3 ("PENTE")) '(-3 ("NUM_REG_HAUT")) '(-3 ("NUM_REG_BAS")) '(-3 ("NOM_RUE")) '(-3 ("ABANDONNEE")) '(-3 ("REF_REC")) '(-3 ("PRECISION_REC")) '(-4 . "OR>"))))) ) (if (null (tblsearch "appid" "CONDUITE_VTKP")) (regapp "CONDUITE_VTKP") ) (setq el nil) (repeat (setq n (sslength js)) (setq n (1- n)) (foreach m '(("ENTITE") ("OBJECTID") ("TYPE_CONDUITE") ("DIAMETRE") ("LONGUEUR") ("PENTE") ("NUM_REG_HAUT") ("NUM_REG_BAS") ("NOM_RUE") ("ABANDONNEE") ("REF_REC") ("PRECISION_REC")) (setq ent (entget (ssname js n) m) xd_list (cdr (assoc -3 ent)) e_data (cadar xd_list) el (cons e_data el) ent (vl-remove (assoc -3 ent) ent) ) ) (entmod (append ent (list (list -3 (list "CONDUITE_VTKP" (cons 1005 (cdr (assoc 5 ent))) (cons 1002 "{") (caddr (cddddr (cddddr el))) (cadr (cddddr (cddddr el))) (car (cddddr (cddddr el))) (cadddr (cddddr el)) (caddr (cddddr el)) (cadr (cddddr el)) (car (cddddr el)) (cadddr el) (caddr el) (cadr el) (car el) (cons 1002 "}") ) ) ) ) ) (setq el nil) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VtKp Posté(e) le 17 mars 2011 Auteur Posté(e) le 17 mars 2011 Bonjour Bonuscad Sérieux ca marche nickel Merci, au moins je n'aurais pas perdu toutes mes donnéesTu as fait la distinction entre les codes de groupe 1000,1002 et 1005, en effet je pense que c'est mieux pour traiter les donnees dans le SIG après sous Esri Ensuite, quand je converti en OD grace au lisp de Fabcad xd2od.lsp, j'ai tous les champs et leurs valeurs que je peux ensuite exportés au format shape et faire des requetes sous Esri. Milles merci.Je pense que je peux cloturer ce sujet non ?
bonuscad Posté(e) le 17 mars 2011 Posté(e) le 17 mars 2011 Je pense que je peux cloturer ce sujet non ? C'est toi qui vois...Tes applications ne sont pas purger dans le lisp, mais si tu bascule sous Esri... cela n'a peut être pas d'importance pour toi. Je t'ai aidé car tu as fais l'effort de construire un code et ne pas pas être dans la demande du tout cuit. Ces avec les erreurs de conception qu'on apprend.Persévère, tu as fais un bon début. @+ Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VtKp Posté(e) le 18 mars 2011 Auteur Posté(e) le 18 mars 2011 Ces avec les erreurs de conception qu'on apprend. Oui c'est sûr Je vais reprendre mon lisp pour renseigner d'autres entités avec d'autres attributs mais j'ai compris le principe et l'erreur de plusieurs appli à ne pas faire.Merci encore de ton aide
lecrabe Posté(e) le 18 mars 2011 Posté(e) le 18 mars 2011 Hello SVP pour une fois rendons a Cesar ce qui lui appartient ! J'ai beaucoup de sympathie pour Fabcad, mais ce n'est pas lui a developpe XD2OD.lsp Cette routine Lisp a ete developpee par Peter Heald d'Autodesk et malheureusement elle n'est pas fournie dans chaque MAP ou CIVIL, ce qui est fort dommage car elle est BETON ! Le Decapode (qui felicite / remercie Autodesk, ce qui est rare) Autodesk Expert Elite Team
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant