Aller au contenu

LISP Parking


Messages recommandés

Posté(e)

Bonjour à tous,

 

je fais appel a vous car je suis un peu "bloqué" dans mon programme sous LISP.

 

En effet j'ai réaliser ce programme ci dessous qui permet de créer des places de parking de taille normale en y inscrivant le nombre de place créer en dessous :

 

 

(defun C:parking ()

(setvar "cmdecho" 0)

(command "scu" "")

(setvar "osmode" 0)

 

;entré des données

(setq nbplace (getint "\nNombre de places de parking :"))

(if (or (= nbplace nil) (< nbplace 1)) (exit))

 

 

(setq pt0 (getpoint "\nPoint de départ du parking :"))

(setq ang0 (getangle pt0 "\nAngle d'orientation des places :"))

(setq larg 2.3)

(setq long 5.0)

 

;calcul

(setq pt1 (polar pt0 (+ ang0 (/ pi 2)) long))

(setq pt2 (polar pt1 ang0 larg))

(setq pt3 (polar pt0 ang0 larg))

(setq pt4 (polar pt0 ang0 (/ (* larg nbplace) 2)))

(setq pt4 (polar pt4 (+ ang0 (/ pi 2)) -0.2))

(setq pt5 (polar pt4 ang0 larg))

 

 

(command "polylign" pt0 "la" 0 0 pt1 pt2 pt3 "cl")

(command "scu" "3" pt0 pt3 pt1)

(if (> nbplace 1)

(command "reseau" "d" "" "r" 1 nbplace larg)

)

 

(command "scu" "ge")

 

;texte

(setq index (strcat (itoa nbplace) " Place(s)"))

(command "texte" "j" "MC" pt4 0.2 pt5 index)

)

 

Le programme marche bien mais j'aimerais pouvoir y ajouter la possibilité de mettre des places de parking pour handicapé, (elle sont plus large que les places de parking normale), et je ne vois pas vraiment comment faire sans compliquer un maximum mon programme et en conservant le nombre de places afficher, c'est pourquoi je suis venu chercher des pistes de recherche ici ..

 

Merci d'avance. :)

Posté(e)

Tu ajoutes une demande utilisateur "Place PMR ?"

Si oui : demande utilisateur "A qu'elle position ?" (PosPlace)

 

Tu peux crées (setq largH 3.3) et tu fais une condition sur le numéro de place. Si numplace=PosPlace alors tu utilises largH sinon tu utilises Larg

 

c'est une piste,

  • Upvote 1

Autodesk Expert Elite Member

Posté(e)

Merci nosset,

oui j'avais déjà commencer a faire cette question mais pour la suite j’étais partit sur quelque chose de nettement plus compliquer, je vais essayer de partir sur cette idée, mais tu pense que l'on peut modifier un seul élément dans mise en réseau ?

 

je vais essayer et vous montrer ce que sa a donné, merci :)

Posté(e)

Je n'avais pas vu que tu passais par la commande réseau pour dessiner tes places.

Effectivement ma méthode ne peut pas marcher !

Autodesk Expert Elite Member

Posté(e)

Et un lisp, sans utiliser le réseau , mais des dpolylignes décallées ? Ce qui permettrait déjà de ne pas forcer ta largeur à 2.3m car tes places pourraient faire 2.4m ou 2.5m.

Ensuite, les places PMR sont rarement posées dans tes rangées, elles sont souvent placées sur des extrêmes.

Tu peux donc poser la queston si il y a ou non des places PMR, et si tu débuteras par ces places ou non. Ensuite tu peux définir une polyligne directrice. A toi de voir si tu adaptes tes largeur à ta polyligne ou si tu gères autrement le delta de longueur à compléter.

Posté(e)

Bonjour,

je pense aussi qu'il faut abandonner l'idée du réseau qu'on peut remplacer par une boucle itérative. C'est vrai que les places PMR sont souvent en bout de rangée, compte tenu qu'elles doivent être le plus près possible de l'entrée de l'établissement. J'ai fait quelque chose qui demande à quelle position on veut mettre ces places, mais on pourrait simplifier comme suggère arnaudalp en demandant simplement combien il y a de places handicapées, puis si elles sont au début ou à la fin.

 

(defun C:parking ()
 (setvar "cmdecho" 0)

 ;entrée des données
 (setq LISTENT nil)
 (setq nbplace (getint "\nNombre de places de parking :"))
 (if (or (= nbplace nil) (< nbplace 1)) (exit))

 (setq I 1)
 (setq LREP nil)
 (while  ;; définir les positions des places handicapées
   (and
     (< (length LREP) nbplace)
     (setq REP (getint (strcat "\nPosition place handicapée n° " (itoa I) " (entrée pour quitter) : ")))
   )
   (if (member REP LREP)
     (alert "position déjà prise")
     (if (and (>= REP 1) (<= REP nbplace))
       (setq LREP (cons REP LREP))
       (alert "position non valable")
     )
   )
   (setq I (1+ I))
 )

 (setq p0 (getpoint "\nPoint de départ du parking :"))
 (setq pt0 p0)
 (setq ang0 (getangle pt0 "\nAngle d'orientation des places :"))
 (setq larg 2.3)
 (setq largh 3.3)
 (setq long 5.0)
 (setq I 1)
 (repeat nbplace
   ;calcul
   (setq pt1 (polar pt0 (+ ang0 (/ pi 2)) long))
   (if (member I LREP)
     (progn  ;; une place handicapée
       (setq pt2 (polar pt1 ang0 largh))
       (setq pt3 (polar pt0 ang0 largh))
     )
     (progn  ;; une place non handicapée
       (setq pt2 (polar pt1 ang0 larg))
       (setq pt3 (polar pt0 ang0 larg))
     )
   );; fin if    
   (command "_pline" "_non" pt0 "la" 0 0 "_non" pt1 "_non" pt2 "_non" pt3 "_cl")
   (setq LISTENT (cons (entlast) LISTENT))
   (command "_text" "_j" "_BL" "_non" pt0 0.2 "_non" pt3 (itoa I))
   (setq LISTENT (cons (entlast) LISTENT))
   (setq I (1+ I))
   (setq pt0 pt3)
 );; fin repeat

 ;texte
 (setq pt4 (polar p0 ang0 (* (distance p0 pt3) 0.5)))
 (setq pt4 (polar pt4 (+ ang0 (/ pi 2)) -0.20))
 (setq pt5 (polar pt3 (+ ang0 (/ pi 2)) -0.20))

 (setq index (strcat (itoa nbplace) " Place(s)"))
 (command "_text" "_j" "_MC" "_non" pt4 0.2 "_non" pt5 index)
 (setq LISTENT (cons (entlast) LISTENT))

 ;; tout mettre dans un groupe
 (command "_.-group" "_create" "*" "Parking")
 (foreach EN LISTENT (command EN))
 (command "")
 
 (princ)
)

 

Amicalement

Vincent

  • Upvote 1

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

C'est vrai que vous aviez raison, il faut abandonner l'idée du réseau, par contre pour les places PMR je préfère avoir un positionnement polyvalent ^^

Zebulon ton programme marche plutôt bien, il me forment un bloc de mon parking en entier ce qui est pas mal :) Je vais d'abord essayer de le comprendre plus dans le détail, puis je ferais quelques modifications quand même mais l'essentiel est là, merci :)

 

 

Merci à tous sa m'as permit de bien avancer en tout cas :)

 

Cordialment,

Irwin.

Posté(e)

Bonjour,

 

il me forme un bloc de mon parking en entier ce qui est pas mal

c'est un groupe, pas un bloc. Ce n'est pas la même chose et il vaut mieux utiliser la bonne terminologie, sinon on risque de ne pas se comprendre les uns les autres.

 

Je vais d'abord essayer de le comprendre plus dans le détail,

on reste à ton écoute si tu as des questions.

 

Merci à tous, ça m'a permis de bien avancer en tout cas

n'hésite pas à publier ton lisp quand tu en seras satisfait

 

Amicalement

Vincent

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • 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é