lovecraft Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 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 selection2-creer une liste de ce jeu http://www.youtube.com/user/CADMINATOR?feature=mhee
lovecraft Posté(e) le 13 octobre 2007 Auteur Posté(e) le 13 octobre 2007 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 selection2-creer une liste de ce jeu3-trier la liste4-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 http://www.youtube.com/user/CADMINATOR?feature=mhee
lili2006 Posté(e) le 13 octobre 2007 Posté(e) le 13 octobre 2007 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/
lovecraft Posté(e) le 13 octobre 2007 Auteur Posté(e) le 13 octobre 2007 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 commencerex: (setq jstxt (ssget "X"...... je te laisse decouvir la suitevoila 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 ;) http://www.youtube.com/user/CADMINATOR?feature=mhee
lovecraft Posté(e) le 13 octobre 2007 Auteur Posté(e) le 13 octobre 2007 NB: le but de ce challenge n'est pas de faite une routine concise (car c'est a ce moment là que nos ténors pourront intervenir "une fois le challenge résolu" pour nous faire part de leur maitrise) ;) @plus http://www.youtube.com/user/CADMINATOR?feature=mhee
(gile) Posté(e) le 13 octobre 2007 Posté(e) le 13 octobre 2007 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
lili2006 Posté(e) le 13 octobre 2007 Posté(e) le 13 octobre 2007 Re, Merci pour ces précisions. J'essaie de regarder ça en fin d'après-midi (des copies m'attendent,...!). Bonne composition à tous les participants. (qui seront, j'espère nombreux!) Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
Bred Posté(e) le 13 octobre 2007 Posté(e) le 13 octobre 2007 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...
lili2006 Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 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/
lovecraft Posté(e) le 14 octobre 2007 Auteur Posté(e) le 14 octobre 2007 Voici un fichier support:http:// http://cjoint.com/?kouSSPCV6J Voici ma reponse pour la premiere etape: ;******************challenge débutant ;******************Etape 1 création de la fonction sstext (defun sstext () (ssget "X" (list (cons 0 "*TEXT") (cons 8 "TEXTE_INDICE"))) ) Merci de vos aides @plus http://www.youtube.com/user/CADMINATOR?feature=mhee
Bred Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 Salut, Bred, tu parles du visual lisp de AutoCAD, je suppose,..??!!oui....l'Editeur Visual lisp.Outils -AutoLisp - Editeur Visual Lispou _vlide en commande. Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
lili2006 Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 Re, lovecraft, to premier lien ne marche pas chez moi !!?? J'ai ouvert ton plan, que dois-je en retenir ? Bonne nuit et encore bravo pour cette initiative. Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
lili2006 Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 rere, Ok Bred. Merci de ta réponse. Bonne nuit et surement @ demain,... Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/
(gile) Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 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
Bred Posté(e) le 14 octobre 2007 Posté(e) le 14 octobre 2007 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...
Bred Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 (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...
Patrick_35 Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 Bonjour, Ca commence à décoller ;) Le jeu de sélection est fait. Reste à le traiter avec une boucle (while ou repeat) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lovecraft Posté(e) le 15 octobre 2007 Auteur Posté(e) le 15 octobre 2007 Yes patrick je suis en train de voir la seconde etape (pour ma part je vais le tenter avec un repeat).Le seul soucis que je rencontre c'est d'ajouter des elements a une liste .@plus http://www.youtube.com/user/CADMINATOR?feature=mhee
Patrick_35 Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
lovecraft Posté(e) le 15 octobre 2007 Auteur Posté(e) le 15 octobre 2007 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 ;) http://www.youtube.com/user/CADMINATOR?feature=mhee
(gile) Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 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
saamreivax2 Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 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
(gile) Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 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
lili2006 Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 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/
Patrick_35 Posté(e) le 15 octobre 2007 Posté(e) le 15 octobre 2007 Super lovecraft On y arrive :) Juste trois petites choses. La condition est inutile.Au départ, listd = nilUn (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 PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant