Aller au contenu

Messages recommandés

Posté(e)

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
Posté(e)

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

Posté(e)

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
Posté(e)

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)

Posté(e)

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
Posté(e)

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
Posté(e)

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 :rolleyes:

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
Posté(e)

Salut

 

Bienvenue dans le monde du lisp :D

 

Pfeuu... La journée pour sortir 15 lignes de code :rolleyes:

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 Patrick

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

Joseph Joubert, 1754-1824

Posté(e)

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
Posté(e)

Coucou

 

Je te conseille plutôt de lire les données dans le profil

La quasi-totalité des profils dessinés contiennent tous les renseignements nécessaires

Dans 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 toi

Je dis souvent qu'il faut un but pour s'y mettre, tu l'as trouvé

 

Amicalement

Posté(e)

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)

Posté(e)

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)

Posté(e)

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
Posté(e)

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)

Posté(e)

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)

Posté(e)

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
Posté(e)

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
Posté(e)

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: TESTPOURLALOZERE

LignList type 1 :

Matri=526

X=162658.251

Y=552365.258

LignList type 2 :

Matri=526

X=162658.251

Y=552365.258

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

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é