thierry.garré Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Bonjour, ça fait longtemps que je n'avais plus ouvert un post sur CADXP (il m'a fallut un peut de temps pour trouver le bon icone ) j'ai résolu pour 2017 de me mettre au LISP aussi je risque de vous embêter sur ces pages. Alors voila pour mes premiers essais, j'ai essayé de faire basique: Dessiner une ligne sur deux points en stockant les points dans des variables. (defun c:TGLIGNE (/ P1 P2) (setq P1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq P2 (getpoint "\n cliquer le 2eme point à l'écran ")) (command "_line" "_non" P1 P2) (command) ) A priori ça marche et j'ai compris. la même chose avec un Polysolide (defun c:TGPOLYSOLID (/ P1 P2) (setq P1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq P2 (getpoint "\n cliquer le 2eme point à l'écran ")) (command "_POLYSOLID" "_non" P1 P2) (command) ) et la ça marche pas et j'ai pas compris... merci de m'éclairer le début de ce long chemin....... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
nosset Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Salut, très bonne résolution ! Pour ton problème, pourquoi le "_non" et surtout tu peux avoir une multitude de point donc il faut finir ta commande par ""(command "_POLYSOLID" P1 P2 "") De plus il est préférable d'utiliser des ENTMAKE pour créer des entité à la place de COMMAND. Mais c'est une autre étape. Autodesk Expert Elite Member
didier Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Coucou bienvenue au club dans un premier temps il te faut mettre un "" à la fin, ça correspond à la validation par la touche entrée(command "_POLYSOLID" "_non" P1 P2 "") dans un deuxième temps je t'invite à regarder ENTMAKEpuisque tu débutes autant bien débuterpasser par "command" est plus limitatif, autant apprendre tout de suite les bonnes façons perso j'ai commencé avec "command" et c'est un fil à la patte, ENTMAKE est plus "programmation" amicalementps: grillé par nosset, message qui dit la même chose mais je tape doucement et je me relis trois fois Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Salut, Tout d'abord, bienvenue au club. L'expression LISP (command) correspond à une annulation (Echap). AutoCAD accepte qu'on fasse Echap pour sortir de la commande LIGNE (_LINE) qui est en fait exécutée de manière répétitive. Mais pour sorti de la commande POLYSOLIDE (_POLYSOLID), faire Echap annule la commande. Il faut donc utiliser comme argument de command, une chaîne vide qui sera interprétée comme une validation. (defun c:TGPOLYSOLID (/ p1 p2) (setq p1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq p2 (getpoint p1 "\n cliquer le 2eme point à l'écran ")) (command "_POLYSOLID" "_non" p1 p2 "") )Astuce : passer le premier point comme premier argument au second getpoint permet d'avoir la "ligne élastique". EDIT: je suis définitivement trop lent... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Et aussi, pourquoi un "_non" uniquement sur le premier point ?J'aurais vu plus :(command-s "_line" "_non" P1 "_non" P2 "")et un petit (princ) à la fin, pour éviter le "nil" en ligne de commande à la fin du code...[EDIT] : pas tant que moi... Je me suis fais grillé par tout le monde ! ! ;) 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)
thierry.garré Posté(e) le 23 janvier 2017 Auteur Posté(e) le 23 janvier 2017 Génial. Merci de vos réponses. je regarde ENTMAKE dés que possible. Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
(gile) Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 @Nosset, Le "_non" est utile pour forcer l'accrochage sur "AUCUN" le temps de la saisie du point. @thierry.garréUtiliser "_non" dans les commande est une sage précaution à condition de l'utiliser avant tous les points :(command "_POLYSOLID" "_non" p1 "_non" p2 "") @Nosset & didier,Vous avez essayé de créer un polysolide avec entmake ?... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
nosset Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 @Nosset & didier,Vous avez essayé de créer un polysolide avec entmake ?... Je crois même n'avoir jamais utilisé un polysolide ;) Autodesk Expert Elite Member
thierry.garré Posté(e) le 23 janvier 2017 Auteur Posté(e) le 23 janvier 2017 Je tiens a remercier particulièrement Gile, car "son introduction à Autolisp" m'a bien ouvert l'esprit ce weekend (même si j'ai pas encore tout compris loin de la....) Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
DenisHen Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Je crois même n'avoir jamais utilisé un polysolide ;)Je ne connaissais même pas son existence ! ! ! :mellow: 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)
lecrabe Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Hello Les PolySolids sont Top pour les Murs en 3D ! Bye, lecrabe Autodesk Expert Elite Team
didier Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Coucou @(gile) : NON je n'ai jamais essayé et je comprends la difficulté en voyant la liste de l'entité par entget : ((-1 . <Nom d'entité: 7fffca35800>) (0 . "3DSOLID") (330 . <Nom d'entité: 7fffe1de9f0>) (5 . "400") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "0") (100 . "AcDbModelerGeometry") (70 . 1) (1 . "mngoo nlm m nm ") (1 . "ni ^*+0;:,4 ^*+0\\^[ nf ^LR mmoqoqoqjkoo QK o ") (1 . "n fqfffffffffffffffj:rooh n:rono ") (1 . ">,27:>;:- {rn rn _nm mmoqoqoqjkoo |") (1 . "=0;& {rn rn {rn {m {rn {rn |") (1 . "3*2/ {rn rn {rn {rn {l {n |") (1 . ",7:33 {rn rn {rn {rn {rn {k {rn {m |") (1 . "9><: {j rn {rn {i {h {l {rn {g 90-(>-; ,6183: |") (1 . "/:-,*=:1+r><>;L036;W6,+0-&r>++-6= {rn rn {rn {rn {k n n m m |") (1 . "9><: {f rn {rn {no {nn {l {rn {nm 90-(>-; ,6183: |") (1 . "300/ {rn rn {rn {rn {nl {k |") (1 . "/3>1:r,*-9><: {rn rn {rn mioiqnmilhgnnlmhlk nnlfqhokhnmjgoofml goqoooooooooooookl oqijojkgohhlgfoikmg roqhjfkijohkmkfgfohk o o ro rn 90 et ainsi de suite je pense qu'il va falloir s'orienter sur d'autres entités pour commencer avec ENTMAKEdésolé Thierry, mais la première fois que tu questionnes c'est vraiment sur des objets particuliers. le gros avantage de ENTMAKE, c'est que tu choisis tout sans lancer divers "command"par exemple tu mets aisément l'entité créée directement sur le bon calque amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
thierry.garré Posté(e) le 23 janvier 2017 Auteur Posté(e) le 23 janvier 2017 désolé Thierry, mais la première fois que tu questionnes c'est vraiment sur des objets particuliers. Oui c'est ballot mais le premier truc dont j'ai besoin c'est effectivement des polysolids. (c'est un comme les gens qui on besoin de faire un Giratoire en premier projet sur Autopiste, c'est Ballot :P ) je regarderai ENTMARK pour mon prochain projet. Merci Ddier. Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
didier Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Coucou donc sans ENTMAKE mais si c'est pour construire des murs : (defun c:TGPOLYSOLID (/ p1 lar hau) (setq p1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq lar (getreal "\n Largeur du mur ?\n")) (setq hau (getreal "\n Hauteur du mur ?\n")) (command "_POLYSOLID" "_non" "L" lar "H" hau p1 "pause" "") ) on te demande un premier pointon te demande la largeuron te demande la hauteurensuite tu cliques autant de points que tu as de sommets à ton muret ça se dessine à l'avancéetu termines par un "entrée" à vide quand tu as cliqué le dernier point et c'est fini. explication : tu rentres des variables sous forme de réels (real) et ensuite tu les injectes en arguments de la commande AutoCAD comme si tu utilisais les options en ligne de commande. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
thierry.garré Posté(e) le 23 janvier 2017 Auteur Posté(e) le 23 janvier 2017 Bon j'avance dans mon code...... alors j'ai deux variables P1 et P2 (deux points obtenus avec GETPOINT et stockés avec SETQ) j'ai extrait le X Y Z de ces points avec CAR CADR CADDR j'ai donc des nouvelles variables X1 X2 Y1 Y2 Z1 Z2 ca c'est OK. Apres des calculs, j'ai deux nouvelles variables Z1B et Z2B Maintenant je voudrais redessiner mon polysolid aux coordonées x1,y1,z1b et x2,y2,z2b je pense que c'est basic mais je sèche je suis que ma syntaxe n'est pas très codesque, mais bon Didier je suis sur qu'il va me comprendre ..........enfin j'espere Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
didier Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Coucou tu vas utiliser la fonction LIST : elle permet de créer des listesdans ton exemple je dirais qu'il te faudra taper :(setq pt3 (list x1 y1 z1b))séparer les éléments par des espaces amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Salut, En AutoLISP, un "point" est une liste de nombres réels (les coordonnées).Tu as vu comment récupérer séparément chacune des coordonnées avec car, cadr et caddr, ce qu'il te reste à faire est simplement de reconstruire une liste de 3 nombres avec les nouvelles coordonnées pour que ce soit un "point" acceptable pour la fonction command.La manière la plus simple pour construire une liste est d'utiliser la fonction list.(list x1 y1 z1b) retourne une liste avec les valeurs des variables x1, y1, et z1b. Pour éviter d'avoir trop de variables (surtout si elles ne servent qu'une fois dans le code) on peut très bien passer directement des expressions LISP comme arguments à la fonction list :(list (car P1) (cadr P1) z1b) EDIT : encore trop lent... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
thierry.garré Posté(e) le 23 janvier 2017 Auteur Posté(e) le 23 janvier 2017 Merci a vous deux. voici mon résultat. (defun c:TGCAN(/ p1 p2 largcan hautcan z1 z2 p1b p2b cc) (initget 7) (setq largcan (getdist "\nSpécifier la largeur du caniveau: ")) (initget 7) (setq hautcan (getdist "\nSpécifier la hauteur du caniveau: ")) (setq p1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq p2 (getpoint p1 "\n cliquer le 2eme point à l'écran ")) (setq Z1 (- (caddr p1) hautcan)) (setq Z2 (- (caddr p2) hautcan)) (setq p1b (list (car p1) (cadr p1) z1)) (setq p2b (list (car p2) (cadr p2) z2)) (setq cc (getvar "clayer")) (command "-calque" "etablir" "PRJ_CANIVEAU" "") (command "-calque" "couleur" "150" "PRJ_CANIVEAU" "") (command "_POLYSOLID" "largeur" largcan "hauteur" hautcan "justifier" "centre" "_non" p1b "_non" p2b "") (setvar "clayer" cc) ) n’hésitez pas a tailler dans le vif sur tout ce qui ne va pas. je vais essayer maintenant de boucler sur L'initialisation de P1. Merci encore Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
didier Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Coucou on est souvent trop lents à répondre parce qu'on fait attention à ce qu'on écrit et quand on valide on s’aperçoit qu'un autre a été plus vite...on aime tellement répondre à une question de Thierry (hihihi) que veux-tu exprimer par : boucler sur p1 ? amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
thierry.garré Posté(e) le 23 janvier 2017 Auteur Posté(e) le 23 janvier 2017 Oh Didier c'est trop gentil. Je veux relancer le dessin d'un deuxième caniveau , sans resaisir les largeurs et hauteurs. Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
(gile) Posté(e) le 23 janvier 2017 Posté(e) le 23 janvier 2017 Si je comprends bien "boucler sur L'initialisation de P1", je vais essayer d'expliquer une notion fondamentale qui illustre comment la puissance et l'élégance du LISP découlent de sa simplicité. En LISP, les expressions conditionnelles (if, while, ...) considèrent que la condition est "vraie" tant que le prédicat n'est pas nil. Le symbole protégé T n'a que cette fonction : T est équivalent à (not nil) mais toute autre valeur (nombre, chaîne, liste non vide) est aussi considérée comme vraie. D'autre part, la fonction getpoint retourne une liste de 3 nombres (point) si l'utilisateur a cliqué un point à l'écran ou entré un point valide en ligne de commande (3 nombres séparés par des virgules) et nil s'il fait Entrée, Espace ou clic droit (Echap génère une erreur LISP). Donc pour boucler sur une entrée utilisateur, on peut utiliser la fonction while avec comme prédicat le retour de l'invite utilisateur (getpoint) : (defun c:TGCAN(/ p1 p2 largcan hautcan z1 z2 p1b p2b cc) (initget 7) (setq largcan (getdist "\nSpécifier la largeur du caniveau: ")) (initget 7) (setq hautcan (getdist "\nSpécifier la hauteur du caniveau: ")) (while (setq p1 (getpoint "\n cliquer le 1er point à l'écran: ")) (setq p2 (getpoint p1 "\n cliquer le 2eme point à l'écran ")) (setq Z1 (- (caddr p1) hautcan)) (setq Z2 (- (caddr p2) hautcan)) (setq p1b (list (car p1) (cadr p1) z1)) (setq p2b (list (car p2) (cadr p2) z2)) (setq cc (getvar "clayer")) (command "-calque" "etablir" "PRJ_CANIVEAU" "") (command "-calque" "couleur" "150" "PRJ_CANIVEAU" "") (command "_POLYSOLID" "largeur" largcan "hauteur" hautcan "justifier" "centre" "_non" p1b "_non" p2b "") (setvar "clayer" cc) ) ) Il sera ensuite judicieux d'utiliser la même méthode de validation pour p2 mais avec un if ou un and.Et aussi de sortir la gestion du calque courant de la boucle. On pourra aussi, pour la création du calque voir du côté de entmake. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 24 janvier 2017 Posté(e) le 24 janvier 2017 Salut. Perso, j'aurais écris çà :(command-s "-calque" "e" "PRJ_CANIVEAU" "co" "150" "" "")Et toujours un petit (princ) avant la dernière parenthèse. 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)
thierry.garré Posté(e) le 24 janvier 2017 Auteur Posté(e) le 24 janvier 2017 Gile, merci pour While c'est exactement ca. décidément il faut que je me plonge sur entmake Denis que signifie le -s derrière command ? Et a quoi sert le princ a la fin du lisp ? Merci d'avance. Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
didier Posté(e) le 24 janvier 2017 Posté(e) le 24 janvier 2017 Coucou ouh le fou mental !!! il se permet de rétorquer sur un commentaire de (gile), ça ne se fait pas (hihihi). pour ce qui est des commandes lancées avec command (avec ou sans -s) je me permets de conseiller à Thierry de respecter la syntaxe anglaisequant à débuter, partir tout de suite sur les bons rails. par exemple :(command "-calque" "etablir" "PRJ_CANIVEAU" "")que je remplacerais par (command "_layer" "_M" "PRJ_CANIVEAU" "")je sais que (gile) est pour et s'il n'a pas répondu avec cette syntaxe c'est sans doute pour ne pas tracasser Thierry, mais moi j'aime le tracasser (hihi). amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
DenisHen Posté(e) le 24 janvier 2017 Posté(e) le 24 janvier 2017 que signifie le -s derrière command ?Il est déconseillé, par AutoDesk, d'utiliser command, il est remplacé par command-s. Je n'en sais pas tellement plus... Et a quoi sert le princ a la fin du lisp ?Il sert à ne pas avoir le résultat du code dans la "ligne de command AutoCAD", ici, c'est un nil qui est retourné. ouh le fou mental !!! il se permet de rétorquer sur un commentaire de (gile), ça ne se fait pas (hihihi).Oops, je n'avais pas vu que ce code était de Maître (gile)... Honte à moi... 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