Aller au contenu

Création d'un LISP pour listage d'un attribut


Sepultur@

Messages recommandés

Bonjour,

 

je cherche a créer un LISP qui pourrais m'ouvrir une fenêtre sur laquelle je pourrais sélectionner les réponses.

En fait j'ai une ville avec toutes ces adresses (BLOC), j'aimerais lorsque j'en sélectionne quelques une (une parcelle), que le LIST m'affiche les différentes adresse.

 

je recherche partout sur le NET et je ne trouve que des personne qui partage leur LISP mais je ne trouve pas de tutoriel pour apprendre a les créer sois même.

 

quelqu'un pourrait-il m'aider ?

 

ci-joint => capture du nom du bloc avec l'attribut que j'aimerais afficher.

si quelqu'un m'aide a créer ce LISP, pourriez vous m'expliquer en même temps ?

 

merci par avance.

 

cordialement

 

B.NICOLAS

post-23828-0-31623400-1414407150_thumb.jpg

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

Alors je sais que ça existe mais cela fait longtemps que je ne l'ai pas fait. Ce ne sera pas du LISP mais juste un attribut caché.

 

Le principe tant que tu ne sélectionne pas ton bloc le nom n’apparaît pas.

Dès que tu clic dessus le nom s'affiche (surbrillance autocad).

 

Est ce que cela te conviendrai? Si oui je veut bien aller rechercher ça pour te mettre un exemple :)

 

Cordialement !

"98% des soucis informatiques sont assis entre la chaise et le bureau !"

 

"C'est parce que la vitesse de la lumière est supérieure à celle du son que tant de gens paraissent brillants avant d'avoir l'air con."
Lien vers le commentaire
Partager sur d’autres sites

Salut Cradle.Sepultura,

 

Avant de passer par un lisp, as-tu essayé de créer un bloc avec attribut, avec une table des propriétés de bloc dans laquelle tu rentreras toutes tes adresses. Puis quand tu sélectionneras un bloc, tu auras une liste déroulante, dans laquelle tu choisirais l'adresse que tu souhaites.

 

Peut-être une piste :huh:

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

non le problème, c’est que j'ai des ville avec des blocs déjà existant donne par mon client, donc je ne peux pas le changer,

tout mes bloque sont identiques mais chacun sont déjà rempli avec l'adresse correspondante avec l'emplacement d'où il est géo-référencer.

 

je recherche a entourer avec une poly-ligne mes adresses concerner et que lorsque je lance mon LISP une fenêtre s'ouvre en me faisant ressortir seulement les adresses, c'est a dire l'attribut 1, sacahant qu'il y en a 26 attributs sur chaque adresses.

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

si je comprends ta demande, il faut

 

à l'intérieur d'une polyligne (close ?) dessinée par l'opérateur

 

créer un jeu de sélection avec un nom de bloc en tant que filtre

puis, de ce jeu de sélection, afficher une case de dialogue listant les adresses

les adresses étant la valeur textuelle renseignée dans le premier attribut du bloc choisi.

 

cette case de dialogue ne fera que de "l'affichage" ?

 

il n'est pas question de sélectionner une adresse dans cette liste pour traitement éventuel ?

 

amicalement

 

 

 

 

 

 

 

 

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

si je comprends ta demande, il faut

 

à l'intérieur d'une polyligne (close ?) dessinée par l'opérateur

 

créer un jeu de sélection avec un nom de bloc en tant que filtre

puis, de ce jeu de sélection, afficher une case de dialogue listant les adresses

les adresses étant la valeur textuelle renseignée dans le premier attribut du bloc choisi.

 

cette case de dialogue ne fera que de "l'affichage" ?

 

il n'est pas question de sélectionner une adresse dans cette liste pour traitement éventuel ?

 

amicalement

 

 

Salut Didier,

 

Il semble que si, si j'ai bien compris, c'est pour ça que j'ai pensé à ce genre de bloc

On le sélectionne, on clique sur la flèche bleue et on choisi l'adresse à indiquer sur la parcelle

Ca peut, peut-être donner une idée pour un lisp.

Steven________________________________________

Pour le taf; Windows (et ses emmerdes) sinon pas d'AutoCAD.

Pour le perso Linux Mint et pas de problèmes. Mais pas d'AutoCAD.

En rêve; AutoCAD sous Linux.

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Vu de loin avec les Routines "Special_Selection" de Gilles et en particulier : SSOF & SSOC

 

puis l'Extraction de Donnees avec l'option P (comme Precedent du SSOF ou SSOC)

lors de la selection des Entites a traitees, ca devrait faire ...

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

si je comprends ta demande, il faut

 

à l'intérieur d'une polyligne (close ?) dessinée par l'opérateur

 

créer un jeu de sélection avec un nom de bloc en tant que filtre

puis, de ce jeu de sélection, afficher une case de dialogue listant les adresses

les adresses étant la valeur textuelle renseignée dans le premier attribut du bloc choisi.

 

cette case de dialogue ne fera que de "l'affichage" ?

 

il n'est pas question de sélectionner une adresse dans cette liste pour traitement éventuel ?

 

amicalement

 

 

oui c'est ça, m'ai effectivement les recuperés pour les recopier dans un tableau excel, ou peux etre extraire ces donnee en TXT comme un attout, je ne sais pas trop

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

Bonsoir a toutes et tous,

 

Une version MAP te serai très utile,....

 

 

je suis en version map 2014 complete

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Vu de loin avec les Routines "Special_Selection" de Gilles et en particulier : SSOF & SSOC

 

puis l'Extraction de Donnees avec l'option P (comme Precedent du SSOF ou SSOC)

lors de la selection des Entites a traitees, ca devrait faire ...

 

Bye, lecrabe

 

malheureusement cela dépasse mes compétence, ce serais cool de pouvoir faire cela, mais si quelqu'un arrive a faire ce genre de LISP, pourriez vous me le détailler, que je puisse comprendre comme cela fonctionne, et les futur me les faire moi meme.

 

merci d'avance.

 

nicolas

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

Bonjour a tutes et tous,

Tu sais te servir de MAP? les annotations pourrait te servir pour ensuite pouvoi faire des requetes, ...

Aurai, je pense, pratique comme ca, ...

 

et non pas possible parce que map va me sortir un tableau complet, c'est comme cela que je fait lorsque je veux tout.

 

nous avons deja un LISP pour calculer le nb de BAL(logements) par adresse a l'interrieur d'une polyligne fermer et nous faire un total.

 

la j'aimerais avoir une fenetre du meme genre avec la liste des adresses qui ce trouve dans la polyligne fermeé que je vien de creer autour de me adresse concerner.

 

pour info sur mon fichier j'ai 33524 adresses.

 

cordialement

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

et non pas possible parce que map va me sortir un tableau complet,

 

Ben non, c'est le principe des filtrages par requêtes,..

 

Ou j'ai pas bien cerné la problématique,..(ce qui est également possible car peu de tps de dispo en ce moment,...)

Civil 3D 2024 - COVADIS_18.2

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

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Pour ceux (ayant un AutoCAD MAP ou un AutoCAD CIVIL) qui veulent "comprendre" un peu la notion de groupes dessins de MAP et les Requetes associees ... Un Tutorial Niveau 1 de l'affreux Patrice ...

http://georezo.net/forum/viewtopic.php?id=65855

 

Pour notre sujet en cours, il faudra faire une requete en mode Rapport en s'appuyant en Mode "Emplacement geographique" sur une Polyligne existante deja dessinee ... et ajouter le Bloc et ses attributs concernes ...

 

Qu'on se le dise !

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

Hello

 

Et toujours pour completer le Tutorial Niveau 1 sur le Groupe de dessins de MAP (ou CIVIL) + les Requetes associees ...

 

http://georezo.net/forum/viewtopic.php?id=47982

 

http://georezo.net/forum/viewtopic.php?id=54541

 

http://georezo.net/forum/viewtopic.php?id=79541

 

Bye, lecrabe

Autodesk Expert Elite Team

Lien vers le commentaire
Partager sur d’autres sites

yep voila un ex-tract de mon plan

 

la j'ai bien plusieurs adresse pour une seul et meme parcelle par exemple la 44

 

calque magenta => n° parcelle

calque cyan => adresse replacer par "acgis"

calque vert => adresse replacer par "crocgeo" au centre des parcelles => replacer a la main sur le numéro après traitement.

 

si possible, j'aimerais un lisp qui, lorsque je sectionne plusieurs adresse, cela m'affiche l'adresse attribut 01

 

merci par avance.

 

cordialement

exemple de parcelle.zip

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

franchement, la réponce du crabe me parait la plus simple...

 

je comprend pas bien pourquoi tout le monde se fait une montage de la commande d'extraction de donnée...

 

si tu ne la connais pas apprend de toute urgence à t'en servir, c'est indispensable tant c'est pratique

l'extraction commence à la 4eme mn

Lien vers le commentaire
Partager sur d’autres sites

franchement, la réponce du crabe me parait la plus simple...

 

je comprend pas bien pourquoi tout le monde se fait une montage de la commande d'extraction de donnée...

 

si tu ne la connais pas apprend de toute urgence à t'en servir, c'est indispensable tant c'est pratique

l'extraction commence à la 4eme mn

 

 

pour arriver a ce résultat si, c'est beaucoup plus simple de passer par

MAP=>OUTILS=>EXPORTER

de la tu sélectionne vraiment tous ce que tu veux exporter mais, moi je ne veux pas tout exporter, j'ai déjà insérer mais adresse d'une exportation d'un autre fichier.

non moi je recherche vraiment a créer un lisp qui me sort une petite fenêtre où je puisse sélectionner les adresses qui ce trouve dans les bloc que je viens d'entourer d'une polyligne fermer.

 

dsl

 

ps : sur le fichier joints, le résultat de notre lisp pour extraire le nombre de logements dans une polyligne fermer.

j'aimerais juste la meme chose avec les adresses a la place des logements. malheureusement dans ce lisp ce n'est qu'une visu, on ne peu rien selectionner.....

post-23828-0-41800700-1414660449_thumb.jpg

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

J'ai du mal a cerner exactement ce que tu veux faire...

Néanmoins voici un bout de code.

Tu copies-colles celui-ci directement en ligne de commande et ensuite tu tapes ADRESS2PARCEL

 

Dans ton exemple ca affecte la valeur de ton attribut 01-ADRESSE du bloc BLOC_BAL_V5 situé sur la calque ADRESSES REPLACEES à une nouvelle table de données d'objet (pour Map) nommée DATA_BAL_V5 pour la polyligne concernée.

 

De ce fait en cliquant sur la polyligne, dans les propriété tu aura la donnée d'objet "01_ADRESSE".

 

(vl-load-com)
(ade_oddefinetab 
'(
 ("Tablename" . "DATA_BAL_V5")
   ("TableDesc" . "Adresse de la parcelle")
   ("Columns"
     (
       ("ColName" . "01_ADRESSE")
       ("ColDesc" . "Adresse")
       ("ColType" . "Character")
       ("DefaultVal" . "")
     )
   )
 )
)
(defun c:adress2parcel ( / tbl tbldef js n ent pt_lst ss_bl ent_name obj_vla atts adress)
 (setq tbl "DATA_BAL_V5" tbldef (ade_odtabledefn tbl))
 (setq js
   (ssget "_X"
     (list
       (cons 0 "LWPOLYLINE")
       (cons 8 "cadastre-1PARCELLE")
       (cons 67 (if (eq (getvar "CVPORT") 2) 0 1))
       (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB")))
       (cons -4 "&") (cons 70 1)
     )
   )
 )
 (repeat (setq n (sslength js))
   (setq
     ent (ssname js (setq n (1- n)))
     pt_lst (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) (entget ent)))
     ss_bl (ssget "_WP" pt_lst '((0 . "INSERT") (2 . "BLOC_BAL_V5") (8 . "ADRESSES REPLACEES")))
     adress nil
   )
   (cond
     (ss_bl
       (setq
         ent_name (ssname ss_bl 0)
         obj_vla (vlax-ename->vla-object ent_name)
         atts (vlax-invoke obj_vla 'getattributes)
       )
       (foreach att atts
         (if (eq (vla-get-TagString att) "01_ADRESSE")
           (setq adress (vla-get-TextString att))
         )
       )
     )
   )
   (cond
     (adress
       (ade_odaddrecord ent "DATA_BAL_V5")
       (ade_odsetfield ent "DATA_BAL_V5" "01_ADRESSE" 0 adress)
     )
   )
 )
 (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

J'ai du mal a cerner exactement ce que tu veux faire...

Néanmoins voici un bout de code.

Tu copies-colles celui-ci directement en ligne de commande et ensuite tu tapes ADRESS2PARCEL

 

Dans ton exemple ca affecte la valeur de ton attribut 01-ADRESSE du bloc BLOC_BAL_V5 situé sur la calque ADRESSES REPLACEES à une nouvelle table de données d'objet (pour Map) nommée DATA_BAL_V5 pour la polyligne concernée.

 

De ce fait en cliquant sur la polyligne, dans les propriété tu aura la donnée d'objet "01_ADRESSE".

 

 

 

Je ne comprend pas desoler, mais ton lisp ne fait rien chez moi.

voici celui qui nous sort les nombre de logements de tout les bloc compris dans une polyligne fermer.

 

;; POCHAGE FE
;; Affiche la somme des logements contenus dans la polyligne sélectionnée

(defun c:POCHAGE (/	    *error*   GetPlineVertices	  GetAttVal
	  pl	    elst      ss	n	  name
	  val	    lst	      grp
	 )
 (vl-load-com)

 (defun *error* (msg)
   (and
     msg
     (/= msg "Fonction annulée")
     (princ (strcat "\nErreur: " msg))
   )
   (princ)
 )

 (defun GetPlineVertices (pl / n lst)
   (repeat (setq n (fix (vlax-curve-getEndParam pl)))
     (setq
lst (cons (vlax-curve-getPointAtParam pl (setq n (1- n))) lst)
     )
   )
 )

 (defun GetAttVal (lst tag)
   (cond
     ((null lst) nil)
     ((= (vla-get-TagString (car lst)) tag)
      (vla-get-TextString (car lst))
     )
     (T (GetAttVal (cdr lst) tag))
   )
 )
 (defun Distinct (lst)
   (if	lst
     (cons (car lst) (Distinct (vl-remove (car lst) lst)))
   )
 )

 (sssetfirst nil nil)
 (setq cnt 0)
 (if
   (and
     (setq pl (car (entsel "\nSélectionnez une polyligne: ")))
     (setq elst (entget pl))
     (= (cdr (assoc 0 elst)) "LWPOLYLINE")
   )
    (progn
      (not (vla-ZoomExtents (vlax-get-acad-object)))
      (setq ss
      (ssget "_WP"
	     (mapcar
	       (function
		 (lambda (p) (trans p 0 1))
	       )
	       (Distinct (GetPlineVertices pl))
	     )
	     '((0 . "INSERT") (2 . "BLOC_BAL_V5"))
      )
      )
      (not (vla-ZoomPrevious (vlax-get-acad-object)))
      (if ss
 (progn
   (vlax-for blk (setq ss
			(vla-get-ActiveSelectionSet
			  (vla-get-ActiveDocument
			    (vlax-get-acad-object)
			  )
			)
		 )
     (setq name (vla-get-Name blk))

     (if (setq val (GetAttVal (vlax-invoke blk 'GetAttributes)
			      "11_BAL"
		   )
	 )
       (setq lst
	      (if (setq grp (assoc name lst))
		(subst
		  (cons name (+ (cdr grp) (atoi val)))
		  grp
		  lst
		)
		(cons (cons name (atoi val)) lst)
	      )
       )
     )

   )
   (vla-delete ss)
 )
      )
      (alert
 (strcat
   (apply
     'strcat
     (mapcar
       (function
	 (lambda (p)
	   (strcat (car p) " :  " (itoa (cdr p)) "\n")
	 )
       )
       lst
     )
   )
   "\nTotal :  "
   (itoa (apply '+ (mapcar 'cdr lst)))
   " logements"
 )
      )
    )
   (princ "\nL'objet sélectionné n'est pas une polyligne couillon!.")
 )
 (princ)
)

FEFEFEFEFEFEFEFEFEFEFEFEF

 

ce que je recherche a faire c'est le même résultat que cela mais sélectionnable et pour les adresses et non les logements.

 

je ne sais pas comment expliquer déferrement, je réalise des tableau ou je réécrit chaque adresse en indiquant le numéro de parcelle en face, donc j'aimerais sélectionner la parcelle (polyligne) et que le lisp me donne les adresses concerner.

 

voiou

projeteur Autocad 2D & 3D

«·´`·.(·.¸(`·. ..... .·´)¸.·).·´`·»

«·´¨·.¸¸. ...Sepultur@... .¸¸.·¨`·»

«·´`·.(¸.´(¸.· ······ .¸)`.¸).·´`·»

Lien vers le commentaire
Partager sur d’autres sites

ton lisp ne fait rien chez moi

 

As tu bien lu..., car si rien n'est visible à l'écran, il a fait quelque chose.

 

D'ailleurs le code que tu as posté est très similaire à ce que j'ai fais, sauf que le résultat n'est pas dans un boite de dialogue mais il est simplement affectée à la polyligne.

 

Donc après application du code, tu cliques sur une polyligne contenant ton bloc de couleur verte et tu verra que dans les PROPRIETES tu as l'information ADRESSE. (celle qui n'ont pas ce bloc ne sont pas renseignées)

 

Un petit défaut dans mon code (et d'ailleurs dans le tien aussi) est pour la parcelle 68 en magenta. Celle-ci n'est pas pris en compte car l'attribut mord sur la limite de polyligne. Pour y remédier changer (ssget "_WP" ....) en (ssget "_CP"....)

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

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é