Thelduin Posté(e) le 22 février 2018 Posté(e) le 22 février 2018 Bonjour, Dans le cadre de ma licence pro CAO/DAO, j'ai un lisp à faire, et j'ai besoin de votre aide !Je dois faire un programme permettant de tracer un PIC (grue, zone de stockage, clotûre etc...). Je dois notamment insérer un bloc avec attribut (panneau de chantier).Sauf que je sais pas comment m'y prendre. Est-ce que le bloc doit être un bloc externe, auquel cas il faudrait que mon lisp aille chercher le fichier du bloc, mais ce qu'il voudrait dire que l'utilisateur doit avoir ce fichier, ou bien intégrer ce bloc à un gabarit (je sais pas si c'est possible, à vrai dire, j'ai jamais vraiment su ce qu'il y avait dans un gabarit :unsure: ).Le fait de faire un gabarit me permettrait aussi d'intégrer des types de ligne utile pour le tracé des réseaux (EP, EU, ELEC) et de la clôture. Je sais pas si j'ai été assez clair dans ma demande, n'hésitez pas à demander plus de précision si vous avec besoin. Merci d'avance :D Guillaume PS: pour pas créer plusieurs sujets sur le forum, j'en profite pour vous demander si il est possible d'inclure la commande polyligne dans une boucle ? Par exemple, pour le tracé de la clôture, je ne connais pas les points à l'avance, donc j'ai pensé à faire un while. Donc ce que je voudrais, c'est qu'à chaque nouveau point cliqué, la polyligne se prolonge, mais en plus, que ça m'insert un bloc choisi (ici, juste un cercle représentant un "poteau"). Un extrait du code :(setq p2 0)(while p2 (setq p2(getpoint "\nPoint suivant :")) (command "polylign" p1 p2) (command "-insérer" "poteau" p2 1 1 0) (setq p1 p2))J'arrive pas à comprendre comment faire, car dans ce cas, j'ai une erreur, et ça me sors de mon programme pour lancer la commande polyligne comme si je n'avais jamais lancé mon lisp,Soit je rajoute "c" après "polylign" p1 p2, ce qui donnerait (command "polylign" p1 p2 "c")Ce qui clore ma poly, m'insert le bloc où je veux, mais ça fait plusieurs polyligne. Le problème, c'est que je voudrai une seule polyligne, pour pouvoir en faire le métré.
Tramber Posté(e) le 22 février 2018 Posté(e) le 22 février 2018 (command "_pline") (while (setq pt (getpoint "\nPoint suivant: ")) (command pt) ) (command) Pour insérer un bloc en lisp, tu peux utiliser command.Mais penses alors à enregistrer ATTREQ pour le restituer à la fin. En fait il faudra remettre 1, valeur par défaut.Genre : (setq *attreq*(getvar"attreq")) (setvar "attreq" 0) ... (command "_insert" "c:\dossier\bloc.dwg" (getpoint) 1 1 0) .... (setvar "attreq"*attreq*) 1 Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
Thelduin Posté(e) le 22 février 2018 Auteur Posté(e) le 22 février 2018 Merci pour ta réponse, ça marche nickel pour la polyligneMais comment je peux faire ma polyligne et insérer les blocs en même temps sur les sommets ?
(gile) Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 Salut, Tu ne peux pas appeler _INSERT de manière transparente tant que la commande _PLINE est en cours. Par contre, tu peux stocker les points spécifiés dans une liste et, une fois sorti de la commande _PLINE insérer un bloc à chaque point. (setq pts nil) (command "_pline") (while (setq pt (getpoint "\nPoint suivant: ")) (command "_non" pt) (setq pts (cons pt pts)) ) (command) (foreach p pts (command "_insert" "NomDuBloc" "_non" p 1. 1. 0.) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
DenisHen Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 Salut. Mais comment je peux faire ma polyligne et insérer les blocs en même temps sur les sommets ?En même temps, je ne suis pas sûr, pour ma part, je vois deux solutions : Dessiner la polyligne tronçon par tronçon pour pouvoir insérer ton bloc à chaque sommet, puis, à la fin, joindre ces polylignes.Dessiner la polyligne en une seule fois, puis, insérer tous les blocs à chaque sommet en cherchant les sommets de cette polyligne.Mais je suis sûr qu'il va y avoir d'autres solutions... 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)
Tramber Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 M'enfin ! T'as déjà inséré des blocs tout en cliquant les points d'une poly ?On ne peut pas.Alors construit une liste pour l'utiliser ensuite !(setq listep nil) (command "_pline") (while (setq pt (getpoint "\nPoint suivant: ")) (setq listep (cons pt listep)) (command pt) ) (command) (foreach p listep (command "_insert" "c:\dossier\bloc.dwg" p 1 1 0) ) NB n'oublie pas de faire le même traitement à OSMODE qu'à ATTREQ, le retenir, mettre 0 ou une valeur et restituer. Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
DenisHen Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 M'enfin !Dixit Gaston... ;) 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)
bonuscad Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 On ne peut pas. Bon c'est pas très orthodoxe, mais on peut... exemple: ((lambda ( / ray pt) (initget 7) (setq ray (getdist "\nRayon du poteau?: ")) (command "_pline") (while (setq pt (getpoint "\nPoint suivant: ")) (command "_non" pt) (entmake (list '(0 . "CIRCLE") (cons 10 pt) (cons 40 ray))) ) )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
VDH-Bruno Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 Bon c'est pas très orthodoxe, mais on peut...Mais ça marche, bien joué :) Apprendre => Prendre => Rendre
Thelduin Posté(e) le 23 février 2018 Auteur Posté(e) le 23 février 2018 Merci beaucoup pour votre aide à tous !J'ai suivi la méthode de (gile) et Tramber, qui me semblait être la plus simple. J'ai cependant une dernière question :Voici mon code : (defun c:cloture() (setq acob(getvar "osmode")) (setvar "osmode" 0) (setq pts nil) (command "_pline") (while(setq p2(getpoint "\nPremier point ou Point suivant :")) (command p2) (setq pts (cons p2 pts)) ) (command "") (setq name(entlast)) (setq lg(getpropertyvalue name "Length")) (command "_.text" pause "15" "" (strcat "longueur de la clôture : " (rtos lg))) (command) (foreach p pts (command "-inserer" "poteau" p 1 1 0)) (setvar "osmode" acob) ) Pour l'instant, je peux pas vraiment clôturer ma polyligne. Comment je peux faire pour ajouter une option permettant de clore la poly ?Je sais faire plusieurs options dans une fonction (initget etc..) mais là, je vois pas où je peux le placer pour pas avoir d'erreur.
Tramber Posté(e) le 23 février 2018 Posté(e) le 23 février 2018 (command "_Clore") au lieu de (command "") devrait fonctionner ! Bureau d'études dessin. Spécialiste Escaliers Développement - Formation ./__\. (.°=°.)
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