Aller au contenu

Ma bonne résolution pour 2017


thierry.garré

Messages recommandés

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

 

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 ENTMAKE

puisque tu débutes autant bien débuter

passer 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"

 

amicalement

ps: grillé par nosset, message qui dit la même chose mais je tape doucement et je me relis trois fois

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

@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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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 ENTMAKE

dé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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 point
  • on te demande la largeur
  • on te demande la hauteur
  • ensuite tu cliques autant de points que tu as de sommets à ton mur
  • et ça se dessine à l'avancée

tu 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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 -
Développements sur mesure pour AutoCAD
ADSK_Expert_Elite_Icon_S_Color_Blk_125.png

Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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 anglaise

quant à 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

Lien vers le commentaire
Partager sur d’autres sites

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)

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é