Aller au contenu

Premier lisp


aLb1

Messages recommandés

Bonjour, nouveau sur le site et nouveau sur autocad (depuis 2 mois...)

Je viens d'arriver à un nouveau post, faire et vérifier des plans pour la production industrielle...

Certaines taches sont répétitives et j aimerai créer un lisp pour ces taches.

J'y arrive presque (merci quand meme chatgpt ;))

mais là je bloque.

Ce que fait mon lisp pour l instant :

il enregistre mon dwg

met le layer "COTATIONS" en arrière plan

créer le pdf du layout "AVEC COTES" 

se mets sur le layer "COUPES BRUTES"

supprime les layers non désirés

explod le dessin

enregistre en dxf

ouvre le dxf.

 

Ce que je n arrive pas :

que les opérations de suppression et expolod ne se fassent que dans le dxf, modifier l ordre ca va mais le lisp ne continue pas dans le dxf ouvert....

explod me demande des validations à cause des objet non explodable (? si ca se dit ?) j'ai besoin de n explode que 3 layers

 

Quelqu'un pourrait il m'aider sur ces deux points ?

merci

 

 

DXFAUTO.lsp

Lien vers le commentaire
Partager sur d’autres sites

Coucou,
Alors dans un premier temps, je remarque que ton ChatGPT ne connaît pas le principe des commandes/options internationales (ce qui peut poser problème si ton AutoCAD n'est pas anglais...). Pour cela, il suffit de rajouter un underscore _ devant les noms de commandes et/ou options (certaines commandes/options avaient déjà un underscore dans ton programme). Ci-dessous le programme avec les options internationales (j'ai ajouté en commentaire ce que j'ai ajouté dans la ligne) :

(defun c:dxfauto (/ docName docPath dxfName cmd ss layoutName pdfFile allObjects)
  ;; Sauvegarder la valeur actuelle de CMDECHO
  (setq cmd (getvar 'cmdecho))
  ;; Désactiver l'affichage des commandes
  (setvar 'cmdecho 0)

  ;; Enregistrer le fichier DWG en cours
  (command "_.QSAVE")

  ;; Mettre le calque COTATIONS en arrière-plan
  (setq ss (ssget "_X" (list (cons 8 "COTATIONS"))))   ;;; _
  (if ss
      (command "_.DRAWORDER" ss "" "_B")   ;;; _
    (princ "\nAucun objet trouvé sur le calque COTATIONS.")
  )

  ;; Obtenir le nom et le chemin du fichier DWG ouvert
  (setq docName (getvar "DWGNAME"))
  (setq docPath (getvar "DWGPREFIX"))

  ;; Imprimer le layout "AVEC COTES" en PDF en couleur
  (setq layoutName "AVEC COTES")
  (if (member layoutName (layoutlist))
      (progn
        (setq pdfFile (strcat docPath (vl-filename-base docName) "_AVEC_COTES.pdf"))
        (setvar 'CTab layoutName)
        (command "_-PLOT"   ;;; _
                 "_Y"   ;;; _
                 ""
                 "DWG To PDF.pc3"
                 "ISO_A4_(210.00_x_297.00_MM)"
                 "_Millimeters"   ;;; _
                 "_LANDSCAPE"   ;;; _
                 "_N"   ;;; _
                 "_E"   ;;; _
                 "_F"   ;;; _
                 "_C"   ;;; _
                 "_Y"   ;;; _
                 "" ;; Aucun style de tracé (pour couleur)
                 "_Y"   ;;; _
                 "_N"   ;;; _
                 "_N"   ;;; _
                 "_N"   ;;; _
                 pdfFile
                 "_N"   ;;; _
                 "_Y"   ;;; _
        )
      )
    (princ "\nLe layout 'AVEC COTES' n'existe pas.")
  )

  ;; Se positionner sur le calque COUPES BRUTES
  (command "_-layer" "_Set" "COUPES BRUTES" "")

  ;; Supprimer les calques spécifiés avec confirmation automatique
  (command "_-laydel" "name" "COTATIONS" "" "_Y")   ;;; _ _
  (command "_-laydel" "name" "INDICATIONS" "" "_Y")   ;;; _ _
  (command "_-laydel" "name" "PROLINER" "" "_Y")   ;;; _ _
  (command "_-laydel" "name" "CADRE" "" "_Y")   ;;; _ _

  ;; Revenir au layout "Model"
  (setvar 'CTab "Model")

  ;; Sélectionner tous les objets visibles
  (setq allObjects (ssget "_X"))

  ;; Exploser tous les objets sélectionnés
  (if allObjects
      (progn
        (foreach ent (vl-remove-if 'listp (mapcar 'cadr (ssnamex allObjects)))
          (command "_.EXPLODE" ent "")
        )
      )
  )

  ;; Créer le nom du fichier DXF
  (setq dxfName (strcat docPath (vl-filename-base docName) ".dxf"))

  ;; Enregistrer le fichier en DXF
  (command "_.DXFOUT" dxfName "16")

  ;; Ajouter un délai pour s'assurer que le fichier est bien enregistré
  (vl-cmdf "_.delay" 1000)

  ;; Ouvrir le fichier DXF dans un nouvel onglet en utilisant l'API ActiveX/COM
  (setq acadApp (vlax-get-acad-object))
  (setq acadDocs (vla-get-documents acadApp))
  (vla-open acadDocs dxfName)

  ;; Restaurer la valeur initiale de CMDECHO
  (setvar 'cmdecho cmd)

  ;; Afficher un message de confirmation
  (princ (strcat "\nFichier enregistré sous : " dxfName))
  (princ)
)

;; Appel de la fonction principale
(c:dxfauto)

Ensuite concernant ta demande

Il y a 2 heures, aLb1 a dit :

que les opérations de suppression et expolod ne se fassent que dans le dxf, modifier l ordre ca va mais le lisp ne continue pas dans le dxf ouvert....

A ma connaissance un LISP n'est pas en mesure de s'exécuter d'un fichier à un autre. Donc si tu exécutes ton LISP dans ton DWG, et que tu ouvres un autre fichier pour le rendre courant (via le LISP) alors le programme continuera de s'exécuter dans ton DWG initial il me semble (ou bien il met fin à son exécution, je ne sais pas exactement).
Donc sur le principe, il n'est pas possible de faire ce que tu souhaites en LISP, c'est-à-dire à partir d'un DWG, créer un DXF pour ensuite apporter des modifications dans ce nouveau fichier DXF.

En revanche (bien que je n'y connais rien), je pense que ce genre de choses peuvent se faire via un script (donc externe à AutoCAD) pour ouvrir un DWG, faire les modifications DWG, créer un fichier DXF pour ensuite exécuter la suite du programme sur ce fichier.

Enfin, pour cette demande

Il y a 2 heures, aLb1 a dit :

explod me demande des validations à cause des objet non explodable (? si ca se dit ?) j'ai besoin de n explode que 3 layers

si jamais tu as des commandes qui requiert des validations imprévues (cela ne fonctionne pas si tu dois saisir des options différentes cependant), tu peux vérifier la valeur de la variable "CMDACTIVE" (cf. >>ici<<) et l'intégrer dans une boucle comme ceci par exemple :

(command "_.EXPLODE" ent "")
(while (= 1 (logand 1 (getvar "CMDACTIVE")))
  (command "")
)

Et si tu veux filtrer ton jeu de sélection pour 3 calques uniquement alors il faut l'intégrer à ton (ssget) via le code DXF 2 comme ceci (tu remarqueras l'utilisation de la virgule , pour séparer 2 éléments au sein d'une chaîne de caractères) :

(setq allObjects (ssget "_X" (list (cons 8 "Calque1,Calque2,Calque3"))))

Désolée je manque de temps pour regarder ton problème plus en détail...

Bisous,
Luna

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour @aLb1

Ce genre de message me pose de gros soucis.

  1. Soit on laisse les "gens" se casser les dents avec ChatGPT (ou autres) et on vient corriger la copie, et ça va durer longtemps.
  2. Soit on fait notre possible pour que les "gens" apprennent à le faire avec leur propre cerveau, organe présent chez tous les humains.

Et il en découle que :

ChatGPT n'existe que parce que des humains ont précédemment alimenté une base de données mise en ligne.
Du coup, on peut couper le fromage en trouvant le raccourci de l'apprentissage individuel sans intervention superfétatoire d'un logiciel qui se dit intelligent.

L'intelligence, chacun en étant largement doté, à chacun de s'en servir sans modération et les soucis s'effriteront.

Merci à @Luna de ses efforts de vulgarisation, je me remercie par la même occasion d'avoir créé un site d'apprentissage (hihi), mais est-ce que mes propos seront bien interprétés ??????
 

Amicalement
 

Lien vers le commentaire
Partager sur d’autres sites

Merci à Luna pour ces explications....en effet je suis en anglais mais pas les métreurs que je supervise à qui je vais envoyer ce lisp au final.

@didier je suis "encore" étonné de l orgueil de certains pourvu de quelques pouvoirs que ce soit.... votre message est méprisant! Si effectivement vous êtes pour le fonctionnement du cerveau humain je vous invite à utilisez le votre et revoir votre technique de modération. 

Il est clair qu'en terme d'apprentissage vous vous rapprochez d'une vision très "éducation nationale", la même pour tous !

Sachez que Chat GPT est, depuis mon avis de novice de 2 mois d' expérience sur Autocad (imaginez en lisp), nul.... il n est pas bon en syntaxe ni en logique, on lui demande quelque chose il change tout et même des éléments fonctionnels qui en deviennent mais c est une base avec laquelle on peut apprendre ne vous en déplaise. Il faut diversifier ses sources d'apprentissages bonnes et mauvaises....

Le message de Luna va m aider et je vais l analyser et retravailler mon lisp seul ou pas 😉

PS : J'irai quand même faire un tour sur votre site https://www.da-code.fr/😉 et merci pour le partage de vos connaissances

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

@aLb1 Si je peux me permettre, ChatGpt (ou équivalent) est bien la pire méthode pour débuter en LISP. D'après ce qu'on a pu voir depuis l’avènement des "agents conversationnels" les retours de ces "IA" en programmation, et plus particulièrement avec les langages confidentiels comme AutoLISP, ne sont que très occasionnellement pertinent, et ce, uniquement quand les demandes sont suffisamment précises pour induire les réponses (autrement dit, quand l'auteur des demandes aurait été capable de fournir la réponse.

Donc je plussoie @didier, pour apprendre AutoLISP, il est impératif d'avoir d'abord un bonne connaissance d'AutoCAD et il faut ensuite apprendre les bases du langage avec l'IDE fournit (VLIDE). En plus du site de @didier, on peut aussi se référer à Intoduction à AutoLISP. (disponible sur gileCAD ou sur la boutique Autodesk).

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

Lien vers le commentaire
Partager sur d’autres sites

Il y a 4 heures, aLb1 a dit :

@didier je suis "encore" étonné de l orgueil de certains pourvu de quelques pouvoirs que ce soit.... votre message est méprisant!

Je ne vois pas en quoi le message de @didier est méprisant (ni ne connais les "pouvoirs" dont il serait pourvu).
Il invite simplement à faire appel à notre propre intelligence naturelle plutôt que de s'en remettre à un robot pour apprendre ce avec quoi je ne peut être que d'accord.

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

Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, (gile) a dit :

Je ne vois pas en quoi le message de @didier est méprisant (ni ne connais les "pouvoirs" dont il serait pourvu).
Il invite simplement à faire appel à notre propre intelligence naturelle plutôt que de s'en remettre à un robot pour apprendre ce avec quoi je ne peut être que d'accord.

si vous ne voyez pas abstenez vous.... faites appel à votre intelligence 😉

Lien vers le commentaire
Partager sur d’autres sites

Bonjour. Inévitablement, ce type de discussion se reproduira. Ce n'est pas la première fois. Je ne vais pas entrer dans le détail de l'intelligence ou pas l'intelligence de Chat GPT, j'en ai déjà longuement parlé ici et ailleurs, mais plutôt insister sur un point qui me paraît absolument essentiel et un point avec lequel forcément Didier et encore plus Gilles seront d'accord.

Si vous êtes tenté d'utiliser ces intelligences artificielles pour générer des programmes AutoLISP ou n'importe quel type de programme d'ailleurs, la première chose et la plus importante à vous poser comme question, c'est comment vous allez vous adresser à cette intelligence artificielle, ce qu'on appelle le prompt ou les prompts d'ailleurs

Et en matière de programmation, étant moi-même analyste programmeur, la première chose n'est évidemment pas dans se lancer dans la création du code. Mais décrire son raisonnement de telle façon que le programme puisse résoudre le problème que vous lui présentez de façon logique, ce que l'on appelle l'algorithme.

Je sais bien que tous ceux d'entre nous qui ont utilisé chatGPT ou une autre IA sont tentés de taper une phrase à la va vite pour avoir une réponse, et vous en aurez forcément une. Mais en matière de création de programme, ce n'est évidemment pas ce qu'il faut faire. Il faut décomposer vous même votre problème en phases logiques de telle façon que l'IA vous propose quelque chose, que vous aurez évidemment nécessairement à corriger/adapter..

Entièrement d'accord bien sûr avec la remarque de Gilles, il n'est pas très utile de se lancer dans la génération de programmes de cette façon là, si vous n'avez pas la connaissance nécessaire, bien sûr d'AutoCAD et surtout de son modèle objet.

 

 

logo_50x50.png.028a63b869a2d5851d12445727640568.png mon site perso Dessein-Tech

 

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

Tout à fait d'accord avec vous, inutile de vouloir du code sans connaitre le code.

Par contre, voici une exemple de prompt productif à mes yeux.

[autolisp] Bonjour, met toi à la place d'un expert Autocad et Autolisp et dit moi comment on se sert de la fonction vl-catch-all-error-p. Merci.

Essayez.

  • Like 3
Lien vers le commentaire
Partager sur d’autres sites

@aLb1,
Aucun des messages ci-dessous n'ont vocations à être méprisant, hautain ou je-ne-sais-quoi... Je trouve cela triste de voir qu'une simple remarque du genre "il faut apprendre avec notre propre cerveau" peut déclencher chez vous du dégoût. Bien que la formulation peut sembler agressive pour certaines personnes, la valeur du message est cohérente et parfaitement raisonnable.

Sachez que les personnes que vous considérez "méprisantes" sont des personnes bénévoles qui, durant de nombreuses années d'expériences, n'ont jamais cessé d'apprendre, d'instruire et d'aider autrui. Donc en terme d'intelligence, je pense qu'il va de soi que ces personne savent de quoi elles parlent et sont parfaitement apte à voir d'un mauvais œil ChatGPT.

Le 23/07/2024 à 11:01, didier a dit :

ChatGPT n'existe que parce que des humains ont précédemment alimenté une base de données mise en ligne.

Et le problème est simple : le langage AutoLISP est un langage élitiste avec bien trop peu d'exemples qui traînent sur Internet (et encore moins sans erreurs). A commencer déjà par la proportion d'utilisateurs anglophones par rapport au reste du monde, et les conséquences de cette répartition se retrouvent dans le code que ChatGPT a proposé initialement d'ailleurs : le nom des commandes/options étaient en anglais, sans considérer la langue internationale.

Bref, je comprends votre désir de vous aider de ChatGPT pour apprendre l'AutoLISP et c'est normal, c'est dans l'ère du temps. Cependant ChatGPT est encore un enfant en pleine croissance, et c'est d'autant plus vrai pour le domaine de la programmation sous AutoCAD. C'est d'ailleurs pour cette raison que les utilisateurs se tournent vers des experts comme @didier ou @(gile) qui surpassent en tout point ChatGPT !

Je rejoins l'avis de ces experts, l'apprentissage via ChatGPT est une fausse bonne idée. ChatGPT peut se tromper et il VA se tromper, c'est une évidence. Le problème se pose donc "comment savoir identifier les erreurs de ChatGPT si l'on s'appuie sur lui pour apprendre ?". Car je suis certaine que la réponse que vous attendiez concernant la résolution de votre problème n'était très certainement pas "il faut rajouter un underscore" 🙂

C'est pour cela que les experts qui sont intervenus ont évoquer l'existence de leur site internet respectifs. Nullement pour faire de la promotion mais uniquement pour vous aider dans votre apprentissage avec des sources sûres, le bon vocabulaire et en français. C'est sûrement nul et outdated de penser ainsi mais... "c'est en forgeant que l'on devient forgeron", donc vui... il faut malheureusement apprendre les bases de l'AutoLISP.
Je ne condamne absolument pas l'utilisation de ChatGPT, au contraire je suis sûre que l'IA est en mesure d'aider le cerveau humain à façonner un chemin mais il ne faut pas oublier que l'humain reste l'expert pour paver son chemin solide et intemporel.

Si cela peut te rassurer, j'ai découvert l'existence de l'AutoLISP il y a 6 ans à peine. En 1 an seulement, les bases sont déjà acquises si on est suffisamment curieux pour apprendre comprendre (pardon, je n'aime pas le terme "apprendre", "comprendre" est bien plus complet sur le plan éducatif).

Veuillez m'excuser pour ce long pavé...

PS: Aucune envie de nuire, rabaisser ou insulter n'est présente dans nos message, on est juste humains avec nos problèmes et émotions. Il est parfois délicat d'être objectif et détaché.

Bisous,
Luna

  • Like 2
  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

ce post est l'illustration même du pourquoi j'interviens de moins en moins souvent sur ce site alors que je le suis depuis 2008 (sous divers pseudos) que ce soit pour Autocad, Covadis et Mensura, et du problème de manque de formation de base des intervenants qui se plaignent de tel ou tel logiciel et sont mécontents des réponses fournies !

A une prochaine... peut-être !

Erased

 

"Le risque de prendre une mauvaise décision n'est rien comparé à la terreur de l'indécision"

Maimonide.

Lien vers le commentaire
Partager sur d’autres sites

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é