La Lozère Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Bonjour,Après 20ans d'absence de programmation lisp, je m’essaie à ré-apprendre.Alors bien sur je me dépatouille sur des lisp existants et des souvenirs arrives à remonter, mais c'est loin.....Alors je me sers du tuto de (gile), bien fait mais parfois je bloc. Du coup, j'ouvre ce poste pour poser mes questions qui viendrons aux fur et à mesure que je suis bloquer sur la routine que j'essaie de développer.... PREMIERE QUESTION: Pourquoi GETPOINT ne me sort que des coordonnées sans décimales?Commande: (getpoint) (815649.0 6.29971e+006 0.0) Commande: (setq P1 (getpoint "\nPremier point : ")) Premier point : (815656.0 6.2997e+006 0.0) Commande: !p1 (815656.0 6.2997e+006 0.0) www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
(gile) Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Salut, Ne pas confondre ce qu'AutoCAD affiche pour les nombre (et qui dépend de la valeur de LUPREC) et ce qu'AutoCAD conserve en mémoire. Essaye:(setq P1 (getpoint "\nPremier point : ")) (rtos (car pt1) 2 16) ; CF Introduction à AutoLISP chapitre 14.2 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Merci (gile),J'ai saisi la différence entre ce qui est en mémoire et ce qui est affiché. Donc pour l'instant mon début de routine marche. Mais juste pour aller plus loin, ce que je ne comprend pas c'est:1- Chez moi LUPREC est définit à 3, donc je devrais avoir 3 chiffres après la virgule lorsque j'interroge mon argument, non? www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
DenisHen Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Salut. Je pense que Maître (gile) a fait une petite bourde... P1 <> pt1... Il voulait écrire :(setq pt1 (getpoint "\nPremier point : ")) (rtos (car pt1) 2 16) ; CF Introduction à AutoLISP chapitre 14.2 Tu peux aussi laisser LUPREC agir (sans fixer les décimales avec le 16) :(defun c:TestLaLozere () (setq pt1 (getpoint "\nPremier point : ")) (princ (strcat "\nX=" (rtos (car pt1) 2))) (princ (strcat "\nY=" (rtos (cadr pt1) 2))) (princ) ) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Merci Denis, c'est ce que j'ai vu après. www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Ma deuxième question.J'ai réussi à créer un jeu de sélection via SSGET, mais maintenant je voudrais l'utiliser, donc j'ai cette ligne dans mon prog qui est sensé déplace ma sélection sel de pb en zp1:(command "_move" sel pb zp1)Le truc, c'est qu'il ne me valide pas mon jeu de sélection, il attend encore de continuier la sélection.J'ai pas mal cherché, mais je n'ai pas trouver... www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Bon j'ai trouvé:(command "_move" sel "" pb zp1) www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
didier Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Coucou Tu t'es mis sur quoi comme projet ?Les profils en 3D ?Si c'est ça il va y avoir de la concurrence car je suis en train de l'écrire en C# pour la beauté du geste ! Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Hello Didier,Oui, je suis sur ça, mais c'est surtout un support car pour moi le lisp c'est vvvvvvieux, alors c'est histoire de mieux comprendre ce que je vous demande depuis longtemps. Et pour l'instant c'est très basique comme programmation: déplacement, rotation3D et rotation suivant le gisement. www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Et donc ça donne ça.... ;; Met en 3D un profil en travers dessiné (defun c:gpoi (/ sel pb zp1 gis) (command "_.undo" "_group") ;; Entrée utilisateur (setq sel (ssget)) (setq pb (getpoint "\nPoint de base du déplacement: ")) (setq zp1 (getpoint pb "\nSpécifier les coordonnées du ZP: ")) (setq gis (getreal "\nSpécifier la valeur du gisement: ")) ; ;;Déplacement (command "_move" sel "" pb zp1) (command "3DROTATION" sel "" "x" zp1 "300") (command "_rotate" sel "" zp1 gis) ; (command "_.undo" "_end") (princ ) ) Pfeuu... La journée pour sortir 15 lignes de code Mais bon pour l'instant, je suis obliger de saisir les valeurs du Zp et du Gisement manuellement. L'étape d'après c'est aller lire un XLS (EDIT: ou txt). www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
Patrick_35 Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Salut Bienvenue dans le monde du lisp :D Pfeuu... La journée pour sortir 15 lignes de code C'est en forgeant qu'on devient forgerons. On y est tous passé. Mais bon pour l'instant, je suis obliger de saisir les valeurs du Zp et du Gisement manuellement. L'étape d'après c'est daller lire un XLS (EDIT: ou txt).DenisH va pouvoir t'aider vu qu'il sait écrire dans un fichier Excel. @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
La Lozère Posté(e) le 28 octobre 2016 Auteur Posté(e) le 28 octobre 2016 Bon pour lire un fichier, j'ai trouver dans le tuto de (gile) une section pour ouvrir les fichiers via boite de dialogue: GETFILED Et ça aussi:;; str2lst © Gilles Chanteau ;; Transforme un chaîne avec séparateur en liste de chaînes ;; ;; Arguments ;; str : la chaîne à transformer en liste ;; sep : le séparateur (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) Je devrais pouvoir y arriver... www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
didier Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Coucou Je te conseille plutôt de lire les données dans le profilLa quasi-totalité des profils dessinés contiennent tous les renseignements nécessairesDans l'exemple que tu as donné il n'y avait pas les gisements ni les coordonnées d'axe c'est une connerie qu'on ne rencontre que rarement (heureusement)Tu copies-colles les X Y Z et gisement depuis l' XLS dans un premier temps et ta routine sera fonctionnelle plus rapidement Ce que je suis en train d'écrire est un peu plus "complet" mais c'est un bon début pour toiJe dis souvent qu'il faut un but pour s'y mettre, tu l'as trouvé Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
didier Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Re Coucou Et en plus tu éviteras de copier-coller les routines des copains sans "vraiment" comprendre ce qui se passeCe que je me permets de te déconseiller pour le coup Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Pour la lecture et l'écriture de fichier au format ASCII, tu peux t'inspirer librement de mon LISP nommé "Flèche + XYZ + Textes" Il y a comme options, l'écriture de données et la lecture de ces mêmes données dans un fichier ASCII avec comme séparateur, le ";"... Je suis aussi débutant, donc, ça ne doit pas être trop difficile de me lire... Si tu as la moindre question, n’hésite pas... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 28 octobre 2016 Posté(e) le 28 octobre 2016 Je viens de me rappeler... didier, ici présent, m'avait aimablement poster une petite routine pour trouver le cadran d'un gisement... Si toutes fois ça peut t'aider... C'est ici... Encore merci à didier pour cette routine... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
La Lozère Posté(e) le 29 octobre 2016 Auteur Posté(e) le 29 octobre 2016 Je te remercie Denis,Je regarderai tout ça en début de semaine. Tout en m'efforçant de ne pas faire de copier coller. Mon but étant d'en apprendre au maximum.En fait, mes données de base viendront d'Excel, et donc je ferais un export en .csv ce qui me permet d'avoir les données avec un séparateur c pour ensuite transformer chaque ligne en chaine avec séparateur, pour enfin en extraire une liste de chaines. Je voyais le lisp comme une montagne à gravir, mais avec du courage et un peu d'aide, ça se passe pas trop mal. Merci www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
didier Posté(e) le 29 octobre 2016 Posté(e) le 29 octobre 2016 Coucou La Lozère : ne te décourages pas, au début on progresse vite, puis il y a un palier de stagnation puis on re progresse, c'est comme tout apprentissageDenisH : ce n'est pas un cadran (ça c'est pour les montres) en trigo on parle de quadrants. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 29 octobre 2016 Posté(e) le 29 octobre 2016 Merci didier pour cette précision... ;) Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
DenisHen Posté(e) le 30 octobre 2016 Posté(e) le 30 octobre 2016 Salut La Lozère. Malgré un soleil radieux aujourd'hui (je bosse mes lisp, donc, pas de sortie :( ), je te propose ce petit lisp (de Patrick_35) pour lire directement dans un fichier XLS (attention, pas XLSX). C'est assez facile, bien que... Le voici :(defun c:LectureExcel (/) (setq fichier (findfile "Fichier.xls")) ;;Lancement d'Excel (setq xls (vlax-get-or-create-object "Excel.Application")) ;;Ouverture du fichier Excel (setq classeur (vlax-invoke (vlax-get xls 'Workbooks) 'open fichier)) ;;Sélection de la feuille (setq feuille (vlax-get-property (vlax-get classeur 'Sheets) 'Item "NomFeuille")) ;;Incrémentation de la ligne à lire (setq NbLignXls 2) ;;Lecture de la cellule (A=colonne Excel, NbLignXls=Ligne Excel) (while (setq CelA (vlax-get (vlax-get-property feuille 'Range (strcat "A" (itoa NbLignXls))) 'Value)) (setq CelB (vlax-get (vlax-get-property feuille 'Range (strcat "B" (itoa NbLignXls))) 'Value)) (setq LstCel (cons (strcat CelA ";" CelB) LstCel)) (setq NbLignXls (+ NbLignXls 1)) ) ;_ Fin de while ;Ferme le classeur (vlax-invoke classeur 'close :vlax-false) (mapcar 'vlax-release-object (list feuille classeur xls)) ;Aucune idée... (gc) (gc) ) ;_ Fin de defun Je ne pense pas oublier quelque chose... En gros, je lis la cellule A1, puis la B1, puis je les place dans une variable avec un séparateur, le ";"... En espérant t'être utile... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
La Lozère Posté(e) le 2 novembre 2016 Auteur Posté(e) le 2 novembre 2016 Merci pour ces info Denis. Mais avant d'utiliser un xls, je vais commencer par utiliser un .csv. Alors, voici ou j'en suis. J'arrive à lire le csv et à en extraire une chaine sous la forme:"PT-1;815679.200;6299727.790;78.056;292.310"Et à la convertir en:"PT-1 815679.200 6299727.790 78.056 292.310"Le truc, c'est que c'est une chaine et pas une liste. Du coup, je n'arrive pas à en extraire chacun des éléments. Voici ce que j'ai fait pour l'instant:(setq fichier (open (getfiled "Fichier .CSV à ouvrir" "" "csv" 8) "r")) ;(while (setq ligne (read-line fichier)) (setq ligne2 (vl-string-translate ";" " " ligne)) ; ) (close fichier) ) Avez-vous une idée de la démarche à suivre? www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
Patrick_35 Posté(e) le 2 novembre 2016 Posté(e) le 2 novembre 2016 Salut Tu as deux fonctions de (gile) dans ce sujet @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
La Lozère Posté(e) le 2 novembre 2016 Auteur Posté(e) le 2 novembre 2016 Merci Patrick,J'avais bien trouvé dans le tuto de (gile) un petit bout de code pour faire ça, mais je n'ai pas réussi à correctement le décortiquer et ainsi arriver à le comprendre complètement. Seul le principe j'ai compris. Du coup, j'ai réfléchi à faire quelque chose moi-même et je pense avoir trouvé, mais cela me ferai écrire des 10aines de lignes pour extraire une à une chaque données pour ensuite convertir chaque extrait en liste. Donc je vais voir. Soi je réutilise le bout de code de (gile) en l'ayant partiellement compris, soit je m'attèle à écrire des 10aines de lignes pour en définitive arriver au même résultat..... Merci. www.cad-is.fr Autocad Map 2021 - Covadis/Autopiste V18.0c Pisser sous la douche ne suffira pas
Patrick_35 Posté(e) le 2 novembre 2016 Posté(e) le 2 novembre 2016 Ce qu'il y a d'intéressant dans la routine de (gile), c'est que c'est une récursive. Très bien expliqué ici ou là @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 2 novembre 2016 Posté(e) le 2 novembre 2016 Salut LaLozère. Voici juste une petite aide pour la compréhension de Str2Lst de (gile).(defun c:TestPourLaLozere (/ Lign LignList) (setq Lign "526;162658.251;552365.258;125.27;LgnTg") ; (read-line fichier)) (setq LignList (str2lst Lign ";")) (princ (strcat "\nLignList type 1 : \nMatri=" (car LignList) "\nX=" (cadr LignList) "\nY=" (caddr LignList) ) ;_ Fin de strcat ) ;_ Fin de princ (princ (strcat "\nLignList type 2 : \nMatri=" (nth 0 LignList) "\nX=" (nth 1 LignList) "\nY=" (nth 2 LignList) ) ;_ Fin de strcat ) ;_ Fin de princ (princ) )AutoCAD te répondra :Commande: TESTPOURLALOZERELignList type 1 :Matri=526X=162658.251Y=552365.258LignList type 2 :Matri=526X=162658.251Y=552365.258Tu auras donc LignList = ("526" "162658.251" "552365.258" "125.27" "LgnTg")En espérant t'être utile... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
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