CADxp: Bloc et lisp - CADxp

Aller au contenu

Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

Bloc et lisp

#1 L'utilisateur est hors-ligne   Thelduin 

  • ceinture orange
  • Groupe : Membres
  • Messages : 29
  • Inscrit(e) : 22-février 18

Posté 22 février 2018 - 21:38

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

#2 L'utilisateur est hors-ligne   Tramber 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8433
  • Inscrit(e) : 29-mars 03
  • LocationStrasbourg

Posté 22 février 2018 - 23:20

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

Image IPB

Bureau d'études dessin.
Spécialiste Escaliers
Développement - Formation

./__\.
(.°=°.)
0

#3 L'utilisateur est hors-ligne   Thelduin 

  • ceinture orange
  • Groupe : Membres
  • Messages : 29
  • Inscrit(e) : 22-février 18

Posté 22 février 2018 - 23:44

Merci pour ta réponse, ça marche nickel pour la polyligne
Mais comment je peux faire ma polyligne et insérer les blocs en même temps sur les sommets ?
0

#4 L'utilisateur est hors-ligne   (gile) 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 11036
  • Inscrit(e) : 02-septembre 05

Posté 23 février 2018 - 08:18

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
Image IPB
0

#5 L'utilisateur est hors-ligne   DenisHen 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3118
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 23 février 2018 - 08:25

Salut.

Voir le messageThelduin, le 22 février 2018 - 23:44 , dit :

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...
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#6 L'utilisateur est hors-ligne   Tramber 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8433
  • Inscrit(e) : 29-mars 03
  • LocationStrasbourg

Posté 23 février 2018 - 08:27

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

Bureau d'études dessin.
Spécialiste Escaliers
Développement - Formation

./__\.
(.°=°.)
0

#7 L'utilisateur est hors-ligne   DenisHen 

  • ceinture rouge et blanche 6em dan
  • Groupe : Membres
  • Messages : 3118
  • Inscrit(e) : 17-décembre 05
  • LocationSAINT FLORENTIN (Yonne)

Posté 23 février 2018 - 08:33

Voir le messageTramber, le 23 février 2018 - 08:27 , dit :

M'enfin !

Dixit Gaston... ;)
LinkedIn et mon site...
Windows 10 Pro 64bits / AutoCAD MAP 3D 2018.0.2
Covadis 16 / Microstation V8i

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres...
Davantage d'avantages, avantagent davantage. (Bobby Lapointe)
La connaissance s'accroît quand on la partage.(Socrate)
0

#8 L'utilisateur est hors-ligne   bonuscad 

  • ceinture rouge et blanche 8em dan
  • Groupe : Membres
  • Messages : 4566
  • Inscrit(e) : 20-juin 03

Posté 23 février 2018 - 10:52

Citation

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
0

#9 L'utilisateur est hors-ligne   VDH-Bruno 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 916
  • Inscrit(e) : 29-avril 10

Posté 23 février 2018 - 11:13

Voir le messagebonuscad, le 23 février 2018 - 10:52 , dit :

Bon c'est pas très orthodoxe, mais on peut...

Mais ça marche, bien joué :)
Apprendre => Prendre => Rendre
0

#10 L'utilisateur est hors-ligne   Thelduin 

  • ceinture orange
  • Groupe : Membres
  • Messages : 29
  • Inscrit(e) : 22-février 18

Posté 23 février 2018 - 14:35

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

#11 L'utilisateur est hors-ligne   Tramber 

  • ceinture rouge et blanche 8em dan
  • Groupe : Moderateurs
  • Messages : 8433
  • Inscrit(e) : 29-mars 03
  • LocationStrasbourg

Posté 23 février 2018 - 16:25

(command "_Clore") au lieu de (command "") devrait fonctionner !
Image IPB

Bureau d'études dessin.
Spécialiste Escaliers
Développement - Formation

./__\.
(.°=°.)
0

#12 L'utilisateur est hors-ligne   Thelduin 

  • ceinture orange
  • Groupe : Membres
  • Messages : 29
  • Inscrit(e) : 22-février 18

Posté 23 février 2018 - 17:44

Merci !
0

Partager ce sujet :


Page 1 sur 1
  • Vous ne pouvez pas commencer un sujet
  • Vous ne pouvez pas répondre à ce sujet

1 utilisateur(s) en train de lire ce sujet
0 membre(s), 1 invité(s), 0 utilisateur(s) anonyme(s)