Aller au contenu

challenge debutant seulement avec l\'aide de nos maitres....


Messages recommandés

Posté(e)

oups il y a eu un bug du site pendant ma redaction......

 

 

Voilà, je relance le challenge débutant j'espère qu'il attira les plus novices.Comme je me situe dans la cours des débutants, je vais essayer de lancer un thème.

1- traitement d'un jeu de selection

2-creer une liste de ce jeu

3-trier la liste

4-ecrire dans un fichier

 

Sujet: Prenons un dessin contenant des textes ou mtextes (des chiffres ex: 1-23-78-2-3 ECT....) dans le calque "TEXTE_INDICE". le but est de faire un jeu de selection puis de creer une liste , de trier la liste dans l'ordre croissant et ensuite d'ecrire cette liste dans un fichier texte sur forme de colonne .

 

Allez au boulot.(lili2006) je pense que c'est le moment de commencer ;)

 

PS:Pour les ténors du lisp ou vlisp je vous prie de ne pas donner de réponse toute faite, mais vous pouvez cependant nous aider. en nous aiguillant sur les command fonctions variables etc.... que nous devons utiliser, ou sur la façon de nous y prendre .

 

Merci de votre aide

Posté(e)

Bonjour à toutes et tous,

 

Allez au boulot.(lili2006) je pense que c'est le moment de commencer

 

C'est sympa de penser à moi lovecraft, mais même là, je ne sais pas du tout comment partir. Attendons alors quelques conseils avisés ,....

Pour les ténors du lisp ou vlisp je vous prie de ne pas donner de réponse toute faite, mais vous pouvez cependant nous aider. en nous aiguillant sur les command fonctions variables etc.... que nous devons utiliser, ou sur la façon de nous y prendre .

 

Trés trés riche idée ! A suivre donc (en imaginant partir de rien !)

 

( PS: Tu as tout de même une belle avance sur moi,....).

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)

lili2006,

comme t'as le même ouvrage que moi "programmer avec autocad" aides toi avec se livre , regardes la section jeu de selection pour commencer

ex: (setq jstxt (ssget "X"...... je te laisse decouvir la suite

voila deja essaie de faire etape par etape ;)

@plus

 

pour ma part je sais faire certaine chose mais j'ai des difficulté avec le traitement des listes ;)

Posté(e)

Salut,

 

Je propose de diviser le problème en plusieurs taches séparées pouvant être menée chacune séparément, sous forme d'expression ou de sous routines. On pourra ensuite assembler le tout, soit en une seule routine, soit en une routine qui appelle les sous routines tour à tour.

 

- 1 : créer un jeu de sélection en filtrant textes et/ou mtextes sur le calque "TEXTE_INDICE" -soit une seule expression soit une sous routine du type (defun sstext ...) qui retournent le jeu de sélection.

 

- 2 : transformer un jeu de sélection en liste -une sous routine dont l'argument est un jeu de sélection et qui retourne une liste (defun ss2lst (ss / ...) ...)

 

- 3 : trier une liste de nombres -une expression ou sous routine dont l'argument est une liste en vrac qui retourne une liste

 

- 4 : écrire le résultat dans un fichier -une sous routine dont l'argument est une liste qui va qui doit être écrite dans un fichier (defun lst2file (lst / ...) ...)

 

- 5 : assemblage final -au delà du choix de chacun concernant la forme (une ou plusieurs routines) il faudra envisager ici les possibles causes d'un échec de la routine.

 

En procédant de cette façon, chacun peut aborder un des problèmes séparément des autres en fonction de ses connaissances.

 

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

Posté(e)

Bonjours à toutes et tous.

 

Un petit conseil en passant : utilisez l'éditeur visual lisp !

 

Celui-ci vous permettra trés simplement de

- vérifier vos codes en ne chargeant qu'une "phrase" par exemple,

- sélectionnert une variable vous pouvez voir trés rapidement ce quel contient,

- vérifier si les parenthèses se fermes en double-cliquant après l'une d'elle,

- faire appel à l'aide du developpeur directement en selectionnant une commande...

 

Je vous laisse le découvrir, il est assez simple d'utilisation...

 

N'hésitez pas à demander si besoin !

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

Posté(e)

Bonsoir à toutes et tous,

 

Le site étant encombré et n'ayant pas pris l'énoncé (tel le mauvais élève!), je n'ai pas pu regarder.

J'imprime vos différentes remarques et commence dès demain à réfléchir à ça.

 

D'autres ont déjà des propositions ?

 

Bonne soirée.

 

Bred, tu parles du visual lisp de AutoCAD, je suppose,..??!!

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)

Salut,

Bred, tu parles du visual lisp de AutoCAD, je suppose,..??!!

oui....

l'Editeur Visual lisp.

Outils -AutoLisp - Editeur Visual Lisp

ou _vlide en commande.

 

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

Posté(e)

Salut,

 

À propos de l'éditeur Visual LISP, j'ai commencé un nouveau sujet.

Ça faisait un moment que je voulais le faire, ce challenge m'en donne l'occasion.

 

 

Lovecraft,

 

C'est un très bon début, il y a moyen d'optimiser un tout petit peu en évitant quelques expressions (c'est du détail qu'on pourra aborder plus tard...).

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

Posté(e)

Rere aussi... ;)

(gile), avec son habituel dévouement amical (et je le soupsonne d'ADORER faire des captures d'écran... ;) ) viens justement de commencer un post au sujet de l'éditeur Visual-Lisp d'Autocad ici.

 

Edit : ben tiens, je fait de l'èchO...O....o.....o.........°.

 

 

 

[Edité le 14/10/2007 par Bred]

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

Posté(e)
(defun sstext ()

(ssget "X" (list (cons 0 "*TEXT") (cons 8 "TEXTE_INDICE")))

)

OK,

Pour être plus compréhensible (vue que c'est le premier challenge), je me permet d'expliquer un peu la base :

Faites un Mutlti-Texte dans un calque TEXTE_INDICE au point x = 2.0 et y = 5.0.

 

Dans l'édituer VL, créer un nouveau fichier et taper ceci :

([b]setq[/b] lst-sel ([b]entsel[/b] "\n Choix du texte :"))

sélectionner ce code et "charger la selection".

Vous devez alors avoir la main sur Autocad vous demandant de sélectionner le texte.

Vous le selectionnez et vous devez avoir en retour sur la console (au "Nom d'entité près et aux coordonée près") :

(< Nom d'entité: 7db4c4d8 > (2.23954 4.8945 0.0))

... vous avez donc, dans la variable sel, le liste ci dessus.

celle ci représente : l'entité texte et les coordonnées où vous avez cliquez.

 

Ensuite vous taper cette ligne et vous la chargez :

([b]setq[/b] 1er-element-lst-sel ([b]car[/b] lst-sel))

Ce code vous retpurnera le 1er élément (car) de la liste "lst-sel" :

< Nom d'entité: 7db4c4d8 >

 

Puis, enfin, tapez ceci et chargez-le :

([b]setq[/b] ent-sel ([b]entget[/b] 1er-element-lst-sel))

Cela vous retourneras une liste enregistré dans la variable ent-sel :

((-1 . < Nom d'entité: 7db4c4d8 >) (0 . "MTEXT") (330 . ) (5 . "10613") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "TEXTE_INDICE") (100 . "AcDbMText") (10 2.0 5.0 0.0) (40 . 0.22) (41 . 5.99455) (46 . 0.0) (71 . 1) (72 . 5) (1 . "Ceci est le Texte") (7 . "1-100") (210 0.0 0.0 1.0) (11 1.0 0.0 0.0) (42 . 2.89143) (43 . 0.22) (50 . 0.0) (73 . 1) (44 . 1.0))

Cette liste donnant certaines caractéristique de l'entité texte que vous avez sélectionnez !

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

Posté(e)

Il faut voir du coté de la fonction append ou cons.

Cons est plus rapide que append (sujet évoqué je ne sais plus où) et comme il s'agit de créer une liste qu'il faut ensuite trier...

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Voila ma reponse pour la deuxieme partie:

OK c'est peut etre babare mais je ne sais pas faire autrement (et j'ai même galeré).

 

enfin voici le resultat:

 

 (defun c:lstf ()

(setq jstext (sstext))

(setq i 0)

(repeat (sslength jstext)
(setq enttxt (ssname jstext i))
(setq bdenttxt (entget enttxt))

(if (= i 0)
 
(setq listd (list (atof(cdr(assoc 1 bdenttxt)))))
  (setq listd (cons (atof(cdr(assoc 1 bdenttxt))) listd))
  );fin du if




(setq i (+ i 1))
 
);fin du repeat

 (princ listd)


 );fin du defun

 

Merci de vos commentaires afin que j'améliore cette routine ;)

Posté(e)

Et bien, c'est très bien tout ça :D

 

Tu as réussi la première phase de l'élaboration du code : il fonctionne très bien en conditions normales.

 

La grosse difficulté maintenant, est d'imaginer ce qui se passerait si ces conditions n'étaient pas normales. Autrement dit, envisager les situations qui pourraient faire échouer la routine et comment y répondre.

Par exemple, s'il ny a pas de texte sur le calque TEXTE_INDICE ou si parmi ces textes certains ne sont pas de nombres.

 

On pourra aussi essayer d'optimiser le code en supprimant les expressions inutiles, par exemple essaye sur la console Visual LISP l'expression suivante :

 

(cons 1 nil)

 

Le résultat retourné par cette expression devrait te faire entrevoir le moyen de gagner 3 lignes de code.

 

Autre chose, il est important de déclarer les variable locales (surtout quand on fait des liste avec cons ou append) Vois ce message et celui là.

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

Posté(e)

Voici plusieurs commentaires

 

 

 

 (setq enttxt (ssname jstext i))
(setq bdenttxt (entget enttxt)) 

 

tu peux l'écrire en une seule ligne car la variable enttxt tu vas pas la réutiliser

 

 (if (= i 0)
(setq listd (list (atof(cdr(assoc 1 bdenttxt)))))
(setq listd (cons (atof(cdr(assoc 1 bdenttxt))) listd))
);fin du if 

 

pour éviter cette condition dans le repeat tu peux initaliser la liste avant la boucle en codant

 

 (setq nouvelle_liste (list nil)) 

 

pour enlever le nil en fin de liste utilise reverse et cdr après la boucle

 

 (setq liste (cdr (reverse liste)))  

 

et pour incrémenter une variable de 1 il est préférable d'utiliser

 

 (setq i (1+ i)) 

le compilateur préfère

 

voila c'est tout sinon tu es sur la bonne voie

Posté(e)

Salut saamreivax2,

 

pour éviter cette condition dans le repeat tu peux initaliser la liste avant la boucle en codant

 

(setq nouvelle_liste (list nil))

 

 

 

pour enlever le nil en fin de liste utilise reverse et cdr après la boucle

 

(setq liste (cdr (reverse liste))) 

 

comme je disais à Lovecraft, essaye (cons 1 nil) ...

 

[Edité le 15/10/2007 par (gile)]

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

Posté(e)

Bonsoir à toutes et tous,

 

Ouf, y'à eu du boulot d'abatut. Désolé, j'ai pas pu bosser le truc mais la qualité des explications est excellente. Je vais méditer ça tranquillement avant d'oser me lancer. C'est un véritable apprentissage qui nécessite de l'énergie et du temps, chose que je n'ai pas en ce moment (du temps!), dommage pour moi,..(mais cela reste balaise tout de même au premier abord, non ?)

 

Bravo aux participants et continuez comme ça.

 

Au plaisir.

 

[Edité le 15/10/2007 par lili2006]

Civil 3D 2025 - COVADIS_18.3b

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

Posté(e)

Super lovecraft

 

On y arrive :)

 

Juste trois petites choses.

 

La condition est inutile.

Au départ, listd = nil

Un (setq listd (cons "Un_Texte" listd)) donnera ("Un_texte")

Ensuite, un (setq listd (cons "Suite" listd)) donnera ("Suite" "Un_texte")

Etc...

 

Pour incrémenter la variable i dans la boucle, il est préferable d'utiliser (+1 i) comme le précise saamreivax2 car c'est plus rapide (test du benchmark), mais cela reste quand même très bon pour un début.

 

Ensuite, pourquoi tu convertis le texte avec atof ?

 

Reste à vérifier que tu as bien des textes dans la sélection, trier la liste puis à l'écrire dans un fichier.

 

Courage, tu as fait le plus dure ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

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é