Aller au contenu

Attribut de polyligne conduite


Messages recommandés

Posté(e)

Bonjour a tous

J'ai un reseau de conduite AEP sur Autocad Que Je dois renseigner comme des blocs aced attributes

Après plusieurs recherches il semble Que les xdatas soient la solution a mon probleme

Serait 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 donnees

Merci encore de votre aide si Vous lenses Que cela est possible

Posté(e)

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

Posté(e)

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

Posté(e)

Bonjour a tous

Merci 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 saisie

Merci par avance de votre aide

Posté(e)

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

Posté(e)

Bonjour a tous

Merci pour vos reponses

Gile Merci pour cet Outil

Je vais si avec les differents examples en lisp Je ne Peux pas me faire un Outil plus specifique

Je reviens vers Vous si J'ai des problems

 

Merci encore

Posté(e)

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]

Posté(e)

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.

,

Posté(e)

J'ai modifié mon code en réponse 10. Le lisp marche maintenant.

Si ca peut interressé certains d'entre vous

J'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]

Posté(e)

Bonjour a tous

Aprè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

Posté(e)

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+

Posté(e)

Bonjour a tous

J'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 question

Merci par avance de vos réponses

 

 

Posté(e)

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+

Posté(e)

Bonjour Fabcad

Peux 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.

Posté(e)

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

Posté(e)

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 pas

je bloque depuis 4 jours sur ce problème

J'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

Posté(e)

J'ai fais cela à l'arrache...

regrouper dans une nouvelle application CONDUITE_VTKP

Je 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

Posté(e)

Bonjour Bonuscad

 

Sérieux ca marche nickel

Merci, au moins je n'aurais pas perdu toutes mes données

Tu 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 ?

Posté(e)

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

Posté(e)

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

Posté(e)

 

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

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • 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é