Aller au contenu

xdata


lili2006

Messages recommandés

Même en zoooooomant, pas de blocs insérés (ou visible !)

 

Je viens d'essayer sous une 2008 et effectivement; rien....

(entmake) sous 2008 à l'air d'être sensible à l'ordre des codes DXF soumis, à voir plus sérieusement.

 

J'ai modifié le code en conséquence, et ça à l'air de fonctionner.

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

  • Réponses 112
  • Créé
  • Dernière réponse

Meilleurs contributeurs dans ce sujet

Meilleurs contributeurs dans ce sujet

Bonsoir à toutes et tous,

 

Bred, moi qui était tout content de tester la V1 au lycée aujourd'hui et que tout marchait nickel,...

 

Et voilà que la V1.1 arrive avec une évolution plutôt intéressante,...Que demande le peuple !

 

Je continue de me demander ce qui motive des personnes comme toi à satisfaire une demande Mais c'est pour le plus grand plaisir de tous,...(Les étudiants ont suivi nos échanges de ce WE et se demandent quand est-ce que l'on s'arrête (très très bonne image pour leur futur,...et merci encore à ceux qui aident à tout cela,...!)).

 

Bref, je sens que les choses évoluent bien et je pense pouvoir à présent écrire un TP un peu plus conséquent au niveau des renseignements à faire figurer mais je ne sais pas encore vraiment quoi, ... A suivre donc,...

 

... Reste plus qu'à voir pour les requêtes...

 

Je vois que tu n'est pas décidé à me (nous ??) laisser tomber maintenant et t'en remercie encore.

 

A trés bientôt alors et encore merci.

 

bonuscad

 

J'ai modifié le code en conséquence, et ça à l'air de fonctionner

 

Même constat chez moi !

 

Merci encore car je me rend compte que les xdatas permettent des choses assez impressionantes.

 

Comme je l'écrit plus haut, ma limite (autre ques écritures Lisps, bien sûr!) est maintenant ce que je veux vraiment exploité et comment.

 

Mais je vois que je peux compter sur vous pour me (nous ?) montrer d'autres horizons.

 

Je ne sais pas ou cela va se terminer mais récupérer des informations sous forme de BD ponctuelles sur AuoCAD me plait beaucoup. Simple d'utilisation et surtout trés efficace!

 

J'imagine assez facilement le plan de mon cimetière (je sais, c'est pas très gai pour démarrer ce genre d'utilisation,...) avec tous les renseignements utiles.

 

Je pense à suivre faire le levé des bâtiments nouveaux du lycée et créer la aussi une large banque de données (enX-DATA, je pense, OUI!) ou le recensement ira jusqu'à la moindre prise électrique,...

 

Si j'ai bien compris, tout est possible,...

 

Merci encore à vous et au plaisir (pour la suite des évènements et je suis curieux de voir ça => Les requêtes !)

 

Pourvu que ce post profite également à d'autres membres de ce site, mais je n'en doute pas,...

 

Au passage, n'hésitez pas à intervenir (les membres) et faire partage de vos expériences,...

 

 

 

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je continue de me demander ce qui motive des personnes comme toi à satisfaire une demande Mais c'est pour le plus grand plaisir de tous,...

Parceque la programmation est un plaisir et un défi !

Et, je n'aime pas ça mais je vais écrire un lieu commun : C'est toujours un plaisir de pouvoir aider des personnes qui semble aussi s'investir pour les autres... J'ai et je reçois aussi beaucoup de beaucoup de personnes dans ce forum que je ne peux aider car mon niveau est trop faible, donc je rends la pareil à d'autre...

 

(Les étudiants ont suivi nos échanges de ce WE et se demandent quand est-ce que l'on s'arrête (très très bonne image pour leur futur,...et merci encore à ceux qui aident à tout cela,...!)).

Ce qu'il y a de marrant aussi, c'est que si j'ai bien compris ta fonction, j'étais à la place de ces étudiants il y a de ça plus d'une dixaine d'année : J'ai passé un Bac F4 (Bâtiment) et ensuite un BTS Bâtiment (et je me suis arrêté là....) :exclam: :P

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Re,,

 

Ce qu'il y a de marrant aussi, c'est que si j'ai bien compris ta fonction, j'étais à la place de ces étudiants il y a de ça plus d'une dixaine d'année : J'ai passé un Bac F4 (Bâtiment) et ensuite un BTS Bâtiment (et je me suis arrêté là....)

 

Encore plus marrant : J'ai exactement le même parcours que le tien, ah ! , une nuance :

 

J'ai commencé par un BEP dessinateur en Génie-Civil, l'école, pour moi, c'était bon,...Et puis, je suis tombé sur un prof génial en BEP. Alors, je me suis dis, tiens, comment pourrais-je donc bien faire pour moi aussi devenir prof ?? Et là, tous le monde dans mon entourrage à bien rit. T'est en BEP, il faut au minimum une licence ne serais-ce que pour s'inscrire au preemier concours, ah,ah,ah !

 

Et là, j'étais lancé. Il fallait à mon tour que je renvoi l'ascenseur. Aprés le BEP, donc bac F4, pas trop de problème. Puis, fallait bien manger ! (Problème de famille,..!)Un an en BTS bâtiment en alternance (un peu de sous, un peu d'étude). Puis, j'ai eu la chance de pouvoir réintégrer le BTS en formation initiale (pas trop de problème en technique puisque l'alternance en Bureau d'Etudes Béton Armé !), par contre matière générales, ouf ! Dur Dur, mais je m'accroche. Je veux devenir prof ! J'obtient mon BTS non sans mal et prépare alors le concours d'entrée au Cycle préparatoire du CAPET (Certificat d'Aptitude Professorat de l'Enseignement Technique). Bien sûr, j'échoue (35 places, 370 candidats détenant pour la plupart déjà des licences et des maitrises !). Pas de problème. 1 an de travail en entreprise (chez Bouygues, conducteur de travaux, responsabilités : 60 hommes sous 2 grues, 55h00/semaine, mais le salaire qui va bien). Le jour et demi qui me reste, préparation au Cycle Préparatoire. L'année suivante Echec à nouveau. Bon, j'y vais au bleuf.Je vais le tour des facs de France, Bordeaux veut bien me laisser ma chance. Je fais alors ma licence et maitrise (dur ! dur !, nuits blanches sur nuits blanches, je m'accroche, je veux enseigner !). Je prépare alors le concours d'entrée à L'IUFM (Institut Universitaire de Formation des Maitres), et là, surprise, j'arrive 8ème au concours d'entrée (comme quoi, le travail paye toujours un jour ou l'autre, je me tue à dire ça à mes étudiants tous les jours !). 2 ans d'IUFM, presque la routine,.. concours du CAPET, belle réussite aussi (heu ! 23ème sur 35 cette année là, bof, j'en demandia pas tant). Et là, j'y suis (comme quoi les rêves peuvent se réaliser, faut être tenace, c'est tout ! (j'étais ni surdoué (je ne serai pas alors passé par ce chemin là), ni feignant (faut bien le reconnaitre !)). Deux ans plus tard (le tout avec déjà trois enfants à 28 ans), je prépare l'agrégation en parallèle à mes 20 heures de cours et pas moins de 100 élèves (5 classes de lycée dont 3 terminales bac STI Génie-Civil (anciènement F4 !)) à gérer au quotidien ! 3 fois à suivre, je passe la barre des écrits (en général 5 postes offert, 300 candidats à l'écrit, 12retenus pour l'oral, ça va !). Première mutation à Rennes, j'ai bien sur rencontré ma femme durant mes études à Bordeaux qui souhaite revenir au pays et mouvement Claude Allègre, erreur de direction, je tombe dans un lycée ou il n'y a pas de Génie-Civi (c'est balot !!). Seul issue, "forcer" la porte de la classe des BTS Géomètre-Topographe (somme toute assez proche du Génie-Civil) ou un collègue part bientôt en retraite. Retour au bouqun eyt au 50 heures / semaine durant 4 ans avant de commencer à y voir plus clair. En 2006, inscription à CadXP (d'ou mon pseudo !) et la suite, vous la connaissez. Rythme par semaine depuis cette époque beaucoup plus cool (heu, avec Cad XP, retour à 50 h00 / semaine, mais je sais pourquoi !).

 

Bref, pas banal, mais une passion infinie pour mon métier et ma famille (j'ai maintenant 4 enfants !). Intérêt pour l'informatique (forcément, je l'enseigne, je veux donc être un "bon prof", du moins le mieux possible, en hommage à ce "petit prof" de campagne à qui je dois tout.).

 

Il est facile alors de comprendre qui je suis sur ce forum et pourquoi. (De plus, je n'ai pas laissé tomber mes copains de fac qui eux ont préférés le business,... et je l'ai aide à ma manière et en grande partie gràce à vous,...!).

 

Bilan des courses, j'enseigne depuis maintenant 9 ans en BTS géomètre, je garde des contacts avec le Génie-civil dans le privé (un "bon prof" technique ne doit pas décrocher !) et je suis souvent recommandé pour des formations par le GRETA (GRoupement ETAblissement).

 

Tous ceci, vous l'avez bien compris pas motivé par le salaire (je l'ai écrit sur un autre post => 15 ans d'enseignement, salaire de base 2200 Euros net !) mais par le plaisir de partager le peu de connaissances que je peux partager (comme tout un chacun à son niveau).

 

Mais, je reste agréablement surpris par les personnes que je cotoie virtuellement sur ce forum (car virtuellement, c'est encore plus fort, je trouve =>les gens n'attendent aucune reconnaissance particulière et encore moins un enrichissement (financier, j'entend !) personnel si ce n'est le plaisir du partage et Bred l'a trés bien écrit :

 

C'est toujours un plaisir de pouvoir aider des personnes qui semble aussi s'investir pour les autres... J'ai et je reçois aussi beaucoup de beaucoup de personnes dans ce forum que je ne peux aider car mon niveau est trop faible, donc je rends la pareil à d'autre...

 

Et merci pour le lieu commum

 

Désolé d'avoir autant parlé de moi, ...Mais je veux juste faire passer un message autour de moi : Croyez en ce que vous faites, peut importe quoi, mais croyez-y et vous ferez le bonheur autour de vous et on vous le rendra bien, c'est ce que font mes étudiants tous les jours et quel bonheur,...

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Parcours Impressionnant !

Félicitation !

 

Je te renvoie le compliment car moi aussi, en lisant tes différents post, j'ai pu suivre ton évolution en Lisp et là aussi c'est impressionnant, d'ailleurs d'autres te l'on dis avant moi.

 

Bonne continuation dans cette voie et merci encore pour ce que tu fais pour moi et les autres membres de ce forum,...

 

Au plaisir.

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

  • 2 semaines après...

Bonsoir à toutes et tous,

 

Maintenant que j'ai associé mes entités "cerceuils", (je sais, c'est pas trés gai !) grace au très fameux travail de Bred, je souhaiterai pouvoir saisir des requêtes pour selectionner ces mêmes entités répondant à un critère précis, exemple : Selection des tombes ayant pour taille 2100x 950 mm ?

 

De même, comme écrit plus bas, je voudrais adapter le lisp en renseignant tous les éléments constitutifs d'une salle de cours (là, c'est plus gai !),jusqu'à la moindre prise éléctrique !!. Comment dois-je m'y prendre ?

 

Merci d'avance.

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

je suis trés occupé en ce moment sur des choses perso, et je n'ai pas de temps...

Rapidement :

Selection des tombes ayant pour taille 2100x 950 mm ?

Tu dois avoir dans la liste des xdata le repère "taille" (tu modifie la liste du lisp)

 

De même, comme écrit plus bas, je voudrais adapter le lisp en renseignant tous les éléments constitutifs d'une salle de cours (là, c'est plus gai !),jusqu'à la moindre prise éléctrique !!. Comment dois-je m'y prendre ?

Pour ça, je n'utiliserais pas les xdata, mais de simples blocs, renseigner avec des attributs !....

(une prise = bloc avec attributs donnant les renseignements de la prise)

 

 

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

Tu dois avoir dans la liste des xdata le repère "taille" (tu modifie la liste du lisp)

 

C'est à dire ? (Désolé !)

 

Pour ça, je n'utiliserais pas les xdata, mais de simples blocs, renseigner avec des attributs !....

(une prise = bloc avec attributs donnant les renseignements de la prise)

 

J'avais commencé comme ça, je continue donc ?!

 

Merci encore Bred.

 

 

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

C'est à dire ? (Désolé !)

Le lisp en en réponse 15 de cette page est "ouvert".

C'est à dire que tu te drées toi même le nombre et nom de données à rentrer, en renseignant la liste du prmier code.

;;; Renseignements (à modifier) pour enregistrement Xdata
(defun Renseignements-XDATA (Q / I LST-F LSTR R)
; liste à modifers pour renseignements :
(setq lstR '[b]("Nom" "Adresse" "Localisation" "taille" "Poids")[/b])

 

Tu peux changer cette liste.

Ex :

 (setq lstR '("Couleurs" Textures" "Dimensions"))

 

J'avais commencé comme ça, je continue donc ?!

Je pesne que c'est la solution la plus pratique.

Tu pourras réaliser une extration d'attribut, répéter les pièces égales faciment (une salle de classe ressemble beaucoup à une autre), modifier les blocs en esembles, etc....

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Je enfin écris le code permettant de rechercher les éléments voulus.

Il se refert aux codes précédents (la liste de renseignement).

Par contre je ne savais pas quoi faire des objets trouvés, donc je les selectionnes.

A l'utilisateur de savoir ce qu'il veut en faire....

 

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

 

(PS: j'ai édité le lisp précédent poury inclure celui-ci)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Voicile retour du 1er test =>

 

Commande:

Commande: _appload R-Xdata.LSP correctement chargé(s)

R-Xdata.LSP correctement chargé(s)

Commande: ; erreur: structure incorrecte de la liste en entrée

Commande: ; erreur: structure incorrecte de la liste en entrée

Commande:

 

A suivre,...

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

-tu as bien copié le code ?

 

Heu, non (oubki de la dernière parenthèse !!).

 

Quant aux résultats des requêtes, c'est parfait . C'est exactement ce que je voulais faire.

 

Je vais essayer de rajouter des renseignements en utilisant le principe que tu m'as décrit plus haut et revient donner mon sentiment (si j'y arrive, bien sûr !).

 

Merci encore Bred et @+.

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

 

Bred, j'ai effectivement modifié la liste de cette façon :

 

(setq lstR '("ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT " "ETAGE"))
,

 

j'trouve cette technique plutôt bien moi, surtout avec la liste "libre" à renseigner, tout est alors possible,...

 

Deux idées me viennent pour compléter tout ça =>, serait-il possible de récupérer en première ligne du tableur l'intitulé des informations renseignées ? (à savoir : ""ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT " "ETAGE") et que le premier élément se place en ligne de renseignements N° 2? , sans oublier de garder la première colonne pour le Handle de l'élément renseigné ?

 

Et, si possible (je crois encore au père noêl !) avoir la possibilité de "coller" ces renseignements sous forme de bloc, comme l'a présenté ci-dessus Bonuscad.

 

Je voudrais tenter cela comme ça pour pouvoir comparer avec la méthode des attributs invisibles,...

 

Je sais, je sais, j'suis tétu ! (pas Breton pour rien l'animal !).

 

Bonne fin d'année à toutes et tous,

Merci d'avance.

 

 

 

[Edité le 26/12/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

et bonnes fêtes !!!

 

serait-il possible de récupérer en première ligne du tableur l'intitulé des informations renseignées ? (à savoir : ""ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT " "ETAGE") et que le premier élément se place en ligne de renseignements N° 2? , sans oublier de garder la première colonne pour le Handle de l'élément renseigné ?

 

Lisp modifiés : :

;;; 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 '("ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT" "ETAGE"))

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

 

Et, si possible (je crois encore au père noêl !) avoir la possibilité de "coller" ces renseignements sous forme de bloc, comme l'a présenté ci-dessus Bonuscad.

C'est possible....

laisse moi le temps (je ne suis pas trop devant mon ordi en ce moment, mais plutôt devant des bouteilles acompagnant raclettes et autres fondus....)

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir à toutes et tous,

 

Heu ! Que dire à part merci !

 

Même entre deux bouteilles tu arrives à produire (et pour les autres en plus !!).

 

Merci Bred, je teste ça et te fais les retours d'usage,...

 

C'est possible....

 

 

C'est tout ce que je voulais savoir, le temps, il faut le prendre avant d'aboutir à quelques choses qui nous correspond,... J'ai appris ça en enseignant,..!

 

Merci encore et bonnes fêtes de fin d'année à toi et tes proches (valable pour les autres menbres de cadXP, bien sûr !)

 

A bientôt.

 

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Bred, il semble qu'aprés modif du fichier .csv, AutoCAD ne reconnaisse plus les handles, j'ai le message du style =>

 

<!--url{0}-->

 

et, effectivement les xdatas ne sont pas mis à jour dans AutoCAD, mais j'ai peut-être mal fait une manip,..

 

Je confirmerai tout ça demain,...

 

Bonne nuit (ou bonjour !).

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

C'est que ton Excel doit transformer 159E9 (handles) en 1.59e+09 (Exposant)....

Il faudrait tester en rajoutant un " ' " (apostrophe) avant les entrées dans le .csv ...

Non testé :

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

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

Lien vers le commentaire
Partager sur d’autres sites

Bonjour à toutes et tous,

 

En effet Bred, je pense que c'est ce qui se passe,...

 

J'ai recompilé ton code comme ça alors et je le teste de suite =>

 

;;; 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 '("ELEMENT" "LONGUEUR" "LARGEUR" "COULEUR" "NOMBRE" "SALLE" "BATIMENT" "ETAGE"))

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

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Même constat ! j'ai essayé de mettre le format des cellules en texte mais là AutCAD ne reconnait plus rien (message => Entité 159000000 Non trouvé !)

 

Sinon le reste fonctionne Nickel !

 

Autre idée sur les requêtes => Peux-ton donner deux critères par exemple porte (pour l'élément) et marron (pour la couleur) sans qu'il y ai de selection de toutes les portes et de tous les éléments marrons ?

 

(J'en demande peut-être un peu beaucoup là,... ! On rentre vraiment dans l'esprit du Map de AutoCAd ou de Mapinfo, par exemple, progiciel de SIG, mais si c'est jouable que avec AutoCAD, alors là TERRIBLE !)

Civil 3D 2025 - COVADIS_18.3a

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

Lien vers le commentaire
Partager sur d’autres sites

Salut,

Autre idée sur les requêtes => Peux-ton donner deux critères par exemple porte (pour l'élément) et marron (pour la couleur) sans qu'il y ai de selection de toutes les portes et de tous les éléments marrons ?

 

Modifie R-Xdata :

;;; Requètes
(defun c:R-Xdata (/ I L LST N S S-T VLA-OB XDATA XTYPE lst-T E Y)  
 (princ "\n Recherches des Renseignements :")
 (setq lst (Renseignements-XDATA "Q")
i 0)
 (repeat (/ (length lst) 2)
   (if (not (equal (nth (1+ i) lst) ""))
     (setq lst-T (append lst-T (list (nth i lst) (nth (1+ i) lst)))))	     
   (setq i (+ i 2))
   )  
 (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))
	y 0
	e 0)	  
  (repeat (/ (length lst-T) 2)	    
    (if (equal (cadr (member (strcase (nth y lst-T)) l))
	       (cadr (member (strcase (nth y lst-T)) lst-T)))
      (setq e (1+ e)))
    (setq y (+ 2 y))
    (if (equal e (/ (length lst-T) 2))
      (ssadd (vlax-vla-object->ename vla-ob) 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)
)

 

j'ai essayé de mettre le format des cellules en texte mais là AutCAD ne reconnait plus rien (message => Entité 159000000 Non trouvé !)

Je regarderais ça quand j'aurais un peu plus de temps....

Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...

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é