Aller au contenu

Ce mettre au lisp


Messages recommandés

Posté(e)

Ca fait une dizaine d'années que je travail sous autocad (V12 a l'époque :) ) et je ne me suis jamais mis au lisp (Hou la honte :P).

 

Desireux d'apprendre (enfin) ce language existe t-il une methode, des tutoriaux ou exercices en fr pour un pauvre utilisateur comme moi.

 

Merci

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Posté(e)

Je suis preneur aussi mais de nos jour ne vaut-il pas mieux se mettre au vba ?

Cordialement

 

Lionel PERRIN | Ingénieur/Consultant Formateur expert Infrastructure - Géomédia

 

Civil 3D/Covadis/Autopiste/Infraworks 360 - VRD/Infrastructure routière ferroviaire Bus TRAM

Posté(e)

PAreil pour moi, help!!!

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

Bonjour à tous

Je pense connaître assez bien le lisp et je veux bien vous donner quelques conseils (valable aussi pour du dcl), et de plus, le forum est aussi là pour ça.

 

Vous pouvez déjà commencer par regarder les pdfs qui se trouvent dans le répertoire d'aide d'autocad qui ont plein d'exemples et permettent justement de bien comprendre les commandes (en anglais :( )

 

Pour répondre à Rimbo, si il faut apprendre un langage, autant commencer avec le vba, ce ne sera pas plus simple que le lisp, mais il aura l’avantage de pouvoir programmer sur d’autres logiciels et aussi la possibilité de récupérer plus facilement des infos sur divers programmes (des liaisons avec Excel/Autocad par exemple)

 

J'ai remarqué que d'autre personnes connaissent aussi bien le lisp et ont un bon niveau, alors n'hésitez pas, posez vos questions

 

@+

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)

Yes, ça fait un beau pavé bien indigeste mais bon quand il faut...

Si vous voulez on peut tous s'y mettre, j'ai des vieux cours de lisp qui sont sympa pour débuté faudrait une rubrique ou autres... Une proposition de Patrick ??

 

D'ailleurs qqu'un a t il les améliorations du lisp (nouvelle commande, commande annulé...)

Cordialement

 

Lionel PERRIN | Ingénieur/Consultant Formateur expert Infrastructure - Géomédia

 

Civil 3D/Covadis/Autopiste/Infraworks 360 - VRD/Infrastructure routière ferroviaire Bus TRAM

Posté(e)

Je vote pour aussi

L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai.
"Il vaut mieux mobiliser son intelligence sur des conneries, que sa connerie sur des choses intelligentes" - Devise Shadok.
"ceux qui ne se souviennent pas du passé sont condamnés à le revivre" George Santayana

Ma bibliothèque de blocs électrique :symbole elec.dwg

Posté(e)

Bonjour

 

Le Lisp est très utile lors de la modification d'objets.

 

VBA il est vrai est beaucoup plus orienté vers les echanges entre logiciels.

 

Mais on peut combiner les deux, Le lisp pour les traitements graphiques et vba pour les

dialogues car le dcl c'est un peu compliqué.

 

Le lien entre ces deux langages peut-être à la base les 15 variables autocad de type

user?-1-5.

exemple :

useri-1-5 pour les nombres entiers.

userr-1-5 pour les réèls.

users-1-5 pour les chaines de caractères.

 

Vois le site de Dominique Vaquand ou l'on peut telecharger des routines lisp et vba pour apprendre la structure de ces deux langages.

 

@+

Fabcad

Posté(e)

Bonjour,

 

J'ai commencé en R10

a l'époque AutoDESK conseillait un bouquin:

(Common) LISP par Harald WERTZ

Celui ci est en Francais et bien foutu pour celui qui débute de rien ou presque.

En effet il enseigne les base du lisp pour rapidement évoquer les fonction plus complexe de manipulation de liste tel que la recursivité.

Seul reproche, il est orienté Common LISP, bien que les languages soient très proche, il ne permet pas toujours d'appliquer les exercices sous AutoLisp. :(

 

Bien que le manuel de personnalisation soit très bien (une fois qu'on a les bases!), c'est un bouquin que je conseille (j'ai débuté grâce à lui).

 

Autrement le Net doit fourmiller d'exemples simples de code (ça aide beaucoup quand on peut observer la structure d'un programme et la démarche suivie)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

bonjour

se mettre à AutiLisp, ou VBA, ce n'est pas que des mots...

La première chose importante à mes yeux est d' avoir un but à atteindre.

çà parait évident mais à l'usage on s'aperçoit que les apprentis partent dans outes les directions,

et déçus ils abandonnent.

Donc se mettre un objectif simple pour commencer.

par exemple : copier un objet sur lui même et changer de calque l'objet obtenu.

si çà parait neuneu à certains, la première fois c'est hard.

et quand la première routine fonctionne, on se sent le roi du pétrole...

à bientôt pour des conseils si nécessaire...

courage et persévérance sont les deux pierres de fondation du futur lispeur.

ciao

amicalement

didier

PS: Loin de moi l'idée de faire le professeur, mais ayant tout appris tout seul

je veux bien aider les courageux :yltype:

Posté(e)

Pourquoi ne pas définir des objectif sur le site, je m'explique, on pose un probleme a une date et la solution n'est postée que quelques jours après

 

comme ton exemple :

 

copier un objet sur lui même et changer de calque l'objet obtenu

 

 

allez c'est parti

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Posté(e)

C'est vrai que l'idée de l'objectif avec un exemple est loin d'être idiote et je constate qu’apparemment les personnes qui maîtrise le lisp sont des autodidactes, donc à vos bouquins et neurones

 

@+

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)

pour l'exemple j'ai la petite routine suivante :

 

( defun c:cpcal ()

(command "-calque" "n" "nouveau calque" "e" "nouveau calque" "co" 1 "" "")

(setq obj (ssget))

(setq a (getpoint "\nsélectionner un point :" ))

(command "copier" obj "" a a)

(command "chprop" obj "" "cal" "nouveau calque" "")

)

 

 

C'est certainement pas le plus simple mais ca marche

 

:)

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Posté(e)

Avoir un objectif est effectivement une démarche fondamentale pour qui veut avancer et donc produire.

 

Dans la réalisation d'un objectif, il faut aussi savoir par qui et pour qui on fait le travail:

'Connais toi toi-même et tu connaitras tes enemis' ou quelque chose comme ca.

 

Donc un prog en lisp doit répondre à un cahier des charges mais il doit aussi avoir le niveau de l'utilisateur final.

Plus celui-ci est doué et compréhensif, plus les procédures de contrôle pourront être simples voir inexistantes.

Inversement plus celui-ci est malhabile, plus il faudra des procédures supplémentaires pour protéger et aider cet utilisateur néophyte. Faute de quoi il se découragera rapidement et n'utilisera pas vos prog.

Pour illustrer cela reprenons le dernier exemple:

 

(command "-calque" "n" "nouveau calque" "e" "nouveau calque" "co" 1 "" "")

dans cette commande l'ordre établir permet à la fois la création et le positionnement du dessinateur sur le calque en question. Donc nouveau est inutile.

(command "-calque" "e" "nouveau calque" "co" 1 "" "") suffira

Ensuite la selection ne pose pas de pb sauf :

- qu'il faut une question claire pour l'utilisateur

- qu'il faut ensuite vérifier si l'objet a bien été sélectionné.

(prompt "\nSaisir le/les objets à traiter:")

(setq obj (ssget))

(if (not (null obj)) (progn

 

Ensuite saisir un point de base est perturbant pour le dessinateur, alors que l'on peut imposer un point évident "0,0"

(command "copier" obj "" "0,0" "0,0")

(command "chprop" obj "" "cal" "nouveau calque" "")

)))

 

Bien-sûr on pourra voir plus tard:

Comment revenir sur le calque ou on était avant d'appeler cette commande ??

Comment aussi rendre variable le nom du calque cible ??

Enfin comment attraper le nom d'un calque d'un objet déjà posé sur ce calque ??

 

 

 

 

Formateur

ATC Autocad - Mechanical - Inventor - Electrical

Posté(e)

Bonjour à tous

 

Passer par les command est une première approche, très bien, mais comme on est là pour apprendre le lisp, autant pousser plus loin et essayer de s'en passer

 

Première chose très importante, les parenthèses vont toujours par paires ()

il est possible de faire une fonction dans la fonction ex : (setq n (1+ n)), 1+ n permet d'incrémenter de 1 la valeur actuel de n (ex n=10 soit 11 comme résultat) et le setq me permet de stocker dans la variable n

 

Maintenant, pour l'exemple en cours...

 

 

Je défini déjà le nom de la fonction avec les variables en local

(defun c:ex1(/ obj n crea_obj)

Je sélection un objet dans le dessin (fonction entsel) et je stocke le résultat dans la variable obj

(setq obj (entsel))

Je récupère les valeurs de l'objet (fonction entget) sur la première entrée (fonction car)

(setq obj (entget (car obj)))

je fixe la variable n à 1 afin de commencer ma futur boucle de copy d'un objet pour éviter de prendre l'identifiant de l'objet sélectionné qui est sur la valeur 0

(setq n 1)

je fais ma boucle tant qu'elle n'est pas vide (si (nth n obj)=nil, valeur vide et je sors de la boucle)

(while (nth n obj)

je crée une liste (fonction append) que je stocke dans la variable crea_obj

(setq crea_obj (append crea_obj (list (nth n obj))))

j'incrémente ma variable n afin de passer au suivant

(setq n (1+ n))

je termine ma boucle while (pour apparier mes parenthèses)

)

je créé maintenant l'objet

(entmake crea_obj)

 

J'ai maintenant fait une copie de l'objet sélectionné, reste à lui changer sa couleur

 

Je sélectionne l'objet créé, soit logiquement le dernier dans mon dessin

(setq obj (entget (entlast)))

Je défini la nouvelle couleur à lui attribuer dans la variable couleur (soit le 1 qui correspond au rouge par exemple)

(setq couleur 1)

Je regarde si l'objet n'a pas la couleur ducalque (dans ce cas, pas de code 62)

(if (not (cdr (assoc 62 obj)))

si oui, j'ajoute la couleur à l'objet

(setq obj (append obj (list (cons 62 couleur))))

autrement, je lui change sa couleur (fonction subst, changer un élément de la liste)

(setq obj (subst (cons 62 couleur) (assoc 62 obj) obj))

je ferme ma condition (fonction if)

)

je modifie dans la base l'objet

(entmod obj)

Je mets à jour à l'écran l'objet

(entupd (cdr (assoc -1 obj)))

et pour éviter d'avoir un message indésirable, je mets un silence

(princ)

je ferme ma fonction ex1

)

je mets encore un silence

(princ)

 

Soir maintenant la fonction ex1 au complet (ouf...)

 

(defun c:ex1(/ obj n crea_obj)

(setq obj (entsel))

(setq obj (entget (car obj)))

(setq n 1)

(while (nth n obj)

(setq crea_obj (append crea_obj (list (nth n obj))))

(setq n (1+ n))

)

(entmake crea_obj)

 

(setq obj (entget (entlast)))

(setq couleur 1)

(if (not (cdr (assoc 62 obj)))

(setq obj (append obj (list (cons 62 couleur))))

(setq obj (subst (cons 62 couleur) (assoc 62 obj) obj))

)

(entmod obj)

(entupd (cdr (assoc -1 obj)))

(princ)

)

(princ)

 

@+

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)

Je suis tout à fait d'accord avec ecotec.. Il est préférable de structurer la chose pour donner au forum tout son sens.

De plus pour répondre à didier il s'agit bien là de propositions d'exercices progressifs que je me proposais de résoudre avec suffisamment de compacité et sagacité n'est-ce pas Patrick-S35 ??

 

Je pense qu'un forum doit être un endroit où les articles ne doivent pas dépasser une vingtaine de lignes faute de quoi cela devient intorchable .. à fortiori s'il s'agit de lisp.

 

C'est donc la raison pour laquelle je m'étais interdis d'en dire plus lors de ma précédente intervention.

Si d'ailleurs je doit fournir plus 10 lignes en lisp je vous proposerais de les télécharger sur mon site. Le forum y gagnera en concision .

Si maintenant on ne met que les explications nécessaires à la comprehension d'un tournure lisp celui-ci y gagneraen plus en clareté.

Formateur

ATC Autocad - Mechanical - Inventor - Electrical

Posté(e)

houla, il ne faut pas mal prendre ma réponse, il est sur Labletech qu'on peut faire le lisp en deux ou trois lignes, je voulais juste montrer qu'il y a une autre manière de faire, et comme c'est pour apprendre, c’est de faire voir différentes fonctions avec des explications dans le cadre de l’exercice. En aucun cas, je n'ai jugé ton lisp. On est là soit pour donner des conseils ou apprendre différentes choses et pas pour commencer à se chamailler

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)

si ce poste devient un champs de bataille, c'est plus la peine moi j'abandonne.

 

Je proposais juste pour les non initiés comme moi de prendre parts a un cour collectif.

 

Mais comme le forum ne si prete pas je n'ais plus de solutions. :(

CCAD la DAO au service de l'Energie - http://c.cad.free.fr

Posté(e)

Ce n'est rien Ecotec, juste une échauffourée, ce sont des choses qui arrivent

Pour le poste un peu long, il suffit de faire un copier/coller sur le bloc-notes par exemple, puis le sauvegarder ou à l'imprimer

Pour continuer de progresser, il y a peut-être la solution de lancer différents sujets comme une fonction que l'on souhaite acquérir avec les explications du lisp, puis en regardant la source, essayer de comprendre, ou encore de voir avec Patrick si il peut animer ce style de débat

 

@+

 

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

Invité
Ce sujet ne peut plus recevoir de nouvelles réponses.
×
×
  • 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é