Aller au contenu

polyligne et attribut


Defman

Messages recommandés

Bonjour, je me penche sur un sujet qui me semble complexe, mais peut etre y a t'il des astuces.

 

Voila, je trace un réseau complet. jusque là nous traçons le réseau en polyligne...

 

Mais désormais, j'aimerais attribuer des attribut ( type, Ø, année...) à mes polylignes pour les exporter dans une base de données. Alors y à t'il une astuce ou suis je obligé de créer une routine pour transformer chaque troçon en bloc, où là je peux édité mes attributs à ma guise.

 

Espérant que l'un d'entre vous à une astuce, je reçois volontié toutes informations, tout en recherchant de mon coté, meme si le temps presse :cool:

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Et avec les xdatas ? Si tu n'as pas suivi ce post, quelques explications :

 

Le Lisp =>

 

;;; Requètes
(defun c:R-Xdata (/ I L LST LST-B N S S-T VLA-OB XDATA XTYPE) 
(princ "\n Recherches des Renseignements :")
(setq lst (Renseignements-XDATA "Q"))
(setq s (ssget "_X" (list (list -3 (list (car lst)))))
s-t (ssadd))

(repeat (setq i (sslength s))
(setq vla-ob (vlax-ename->vla-object (ssname s (setq i (1- i)))))
(vla-getxdata vla-ob "" 'xType 'xData)
(if (and xType xData)
(progn
(setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData)))
(repeat (setq n (length (setq lst-B (Renseignements-XDATA nil))))
(if (equal (strcase (cadr (member (strcase (nth (setq n (1- n)) lst-B)) lst)))
(strcase (cadr (member (strcase (nth n lst-B)) l))))
(ssadd (handent (cadr l)) s-t))
)
)
)
)
(if (zerop (getvar "cmdactive"))(sssetfirst nil s-t))
(if (> (sslength s-t) 1)
(princ (strcat "\n "(rtos (sslength s-t)) " objets sélectionnés."))
(princ (strcat "\n "(rtos (sslength s-t)) " objet sélectionné."))
)
(princ)
)

;;; Renseignements (à modifier) pour enregistrement Xdata
(defun Renseignements-XDATA (Q / I LST-F LSTR R) 
; liste à modifers pour reneignements :
(setq lstR '(" [surligneur] ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT" "ETAGE[/surligneur]"))

(if Q
(progn
(setq i -1)
(repeat (length lstR)
(setq R (getstring T (strcat "\n " (nth (setq i (1+ i)) lstR) " :"))
lst-F (append lst-F (list (strcase (nth i lstR)) R)))
)
lst-F
)
lstR
)
)

;;; Retourne Xdata dans Objet.
(defun c:RXO ()
(setq ent (car (entsel "\n Choisir l'objet contenant les renseignements :")))
(if ent
(if (not (Test-Xdata ent))
(alert "\n Pas de Xdata dans cette entité.")))
(princ)
)

;;; 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 : " txtt))
t
) 
) ) )
) 

;;; Programme Demandant/Donnant la liste Xdata dans entité.
(defun c:L-Xdata (/ ENT I LST-D VLA-OB)
(setq ent (car (entsel "\n Choisir l'objet dans lequel enregistrer les renseignements :")))
(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 (Renseignements-XDATA "Q")
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)
)

;;; Enregistres Xdata des entités selectionnés dans fichier .csv
(defun c:XdataXL (/ E F I L SEL XDATA XTYPE)
(setq sel (ssget)
f (getfiled "Nom Fichier à enregistrer :" "" "csv" 1)
f (open f "w"))
(repeat (setq i (length (setq lst (reverse (append (list "ENTITE") (Renseignements-XDATA nil))))))
(princ (strcat "'" (nth (setq i (1- i)) lst)) f)
(princ ";" f)
)
(princ "\n" f)
(repeat (setq i (sslength sel))
(setq e (vlax-ename->vla-object (ssname sel (setq i (1- i)))))
(vla-getxdata e "" 'xType 'xData)
(if (and xType xData)
(progn
(setq l (mapcar 'vlax-variant-value (vlax-safearray->list xData))
x -1)
(repeat (/ (length l) 2)
(princ (strcat "'" (nth (setq x (+ x 2)) l)) f)
(princ ";" f)
)
)
)
(princ "\n" f)
)
(close f)
)

;;; Récupères les données d'un .csv pour les mettre en Xdata.
(defun c:XLXdata (/ ADRESSE ENT F H L LOCALISATION NOM)
(setq f (getfiled "Choisir Fichier :" "" "csv" 4)
f (open f "r")
l "l"
R (Renseignements-XDATA nil))
(while l
(setq l (read-line f))
(if l
(progn
(if (not (vl-string-search "ENTITE" l))
(progn
(if (vl-string-search "\"" l)
(setq l (substr l (+ 2 (vl-string-search "\"" l)) (strlen l)))
)
(setq h (substr l 1 (vl-string-search ";" l))
ent (handent h))
(if ent
(if (entget ent)
(progn
(Set-xData ent (list "ENTITE" h))

(setq i -1) 
(repeat (length R)
(setq l (substr l (+ 2 (vl-string-search ";" l)) (strlen l))
D (substr l 1 (vl-string-search ";" l)))
(if (vl-string-search "\"" D)
(setq D (substr l 1 (vl-string-search "\"" D))))
(Set-xData ent (list (strcase (nth (setq i (1+ i)) R)) D))
)
(princ (strcat "\n Entité " h " Mis à Jour."))
)
(alert (strcat "Entité " h " Supprimé !"))
)
(alert (strcat "Entité " h " Non trouvé !"))
)
)
)
)
)
)
(close f)
(princ)
)

;;; 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)
)

 

A savoir => Il te suffit de modifier la ligne surligné en jaune dans le Lisp et d'y mettre les informations que tu souhaites voir apparaître.

 

Pour plus de renseignements, en lisant le post en lien ci-dessus, t'y verras plus clair,...

 

Bon courage,

Civil 3D 2024 - COVADIS_18.2

https://www.linkedin...3%ABt-95313341/

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Surement très bien la bibliothèque de routines de Didier-AD , mais comment ça marche ?

 

Il s'agit d'une bibliothèque de routines commentée (fonction, arguments, retour), à charger puis à utiliser comme les fonctions LISP prédéfinies pour écrire des programmes comme ceux donnés dans l'exemple (DEMXDATA.lsp).

 

Dans l'exemple il y a deux commandes.

Dans la première, QUESTIONS, un rectangle et un cercle sont dessinés et des données (coordonnées de deux sommets du rectangle et rayon du crecle) sont stoquées dans des XDATAs liées à la polyligne.

Dans la seconde, MISEAJOUR, ces données sont récupérerées pour redessiner le rectangle et le cercle en fonction des nouveaux sommets de la polyligne qui ont été étirés.

 

[Edité le 2/2/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Lien vers le commentaire
Partager sur d’autres sites

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é