Aller au contenu

Bloc et lisp


Thelduin

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

  (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*)

  • Upvote 1

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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 -
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.

 

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 :

 

  1. Dessiner la polyligne tronçon par tronçon pour pouvoir insérer ton bloc à chaque sommet, puis, à la fin, joindre ces polylignes.
  2. 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)

Lien vers le commentaire
Partager sur d’autres sites

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

 

./__\.
(.°=°.)
Lien vers le commentaire
Partager sur d’autres sites

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)

Lien vers le commentaire
Partager sur d’autres sites

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

Lien vers le commentaire
Partager sur d’autres sites

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.

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é