CADxp: Brancard dans un escalier - CADxp

Aller au contenu

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

Brancard dans un escalier

#1 L'utilisateur est hors-ligne   barbichette 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 686
  • Inscrit(e) : 30-mai 05

Posté 06 mai 2008 - 09:17

Bonjour,

Tout architecte qui se respecte a déjà été confronté à ce problème

Je souhaite représente la cinématique de progression d'un brancard dans un escalier.
Données techniques :
Type d'escalier : escalier droit à 1/2 volées
Largeur de la volée : 1.25 m
Espace entre les 2 volées (jour central) 5 cm
Taille du palier : 1.20 x 2.55
Type de garde-corps central : plein
dimention du brancard : 58 x 229

Ma représentation se doit d'être la plus fidèle possible à la réalité.
en clair c'est une suite de translation/rotation (avec des centre de rotation et des vecteurs de translation qui changent tout le temps)

Existe t'il un lisp, une macro ou une asctuce qui permet de faire ça ?
0

#2 L'utilisateur est hors-ligne   jalna 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2408
  • Inscrit(e) : 19-septembre 05
  • LocationMulhouse

Posté 06 mai 2008 - 09:52

Salut!

Effectivement cela pourrait être sympa, voila ma représentation

Image IPB
0

#3 L'utilisateur est hors-ligne   barbichette 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 686
  • Inscrit(e) : 30-mai 05

Posté 06 mai 2008 - 10:43

C'est pas mal
mais (parcequ'il y a toujours un mais)
ce qu'il me faudrait ce serait indiquer toutes les positions que le brancard pourrait prendre.
En fait ce n'est pas tant pour vérifier qu'il "passe" dans notre escalier, mais plus pour permettre de voir ce que l'on pourrait modifier dans le-dit escalier.
Sachant que l'on prendrait alors comme contrainte le fait que le brancard soit en contact avec les murs extérieurs.

[Edité le 6/5/2008 par barbichette]
0

#4 L'utilisateur est hors-ligne   slamer69 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 3
  • Inscrit(e) : 21-mai 08

Posté 22 mai 2008 - 10:33

salut

la commande "reseau" devrait convenir pour un déploiement de bloc ( ton brancard )
tu verras ainsi le cheminement de ton brancard sur le palier ensuite pour les volées droites
tu copie le bloc en copie simple sur l'axe de la volée.

amicalement

0

#5 L'utilisateur est hors-ligne   barbichette 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 686
  • Inscrit(e) : 30-mai 05

Posté 22 mai 2008 - 10:45

Non cela ne correspond pas.
En fait la cinématique du déplacement du brancard n'est pas simple. Dans le sens ou, une fois sorti des volées droites, le brancard suit une série de rotation dont le centre change tout le temps.

Je dirai un peu comme la représentation de l'emprise d'un camion remorque lors d'un virage
(rayons de giration différent pour - l'avant du tracteurn, l'arrière du tracteur, l'avant de la remorque, l'arrière de la remorque).

Attention, je ne cherche pas la représentation de ce cas précis (chose que j'ai fait "à la main")
mais plutôt un lisp, ou programme, ou macro qui pourrait faire cela plus automatiquement.

parcequ'il suffit de faire changer légèrement les dimension de ma cage pour que le dessin ne soit plus valable (fastidieux de tout refaire)

[Edité le 22/5/2008 par barbichette]
0

#6 L'utilisateur est en ligne   (gile) 

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

Posté 08 juin 2008 - 15:51

Salut,

Un LISP vite fait, la face intérieure de la cage d'escalier doit être une polyligne (en dessiner une au besoin), l'utilisateur spécifie la largeur du brancard et sa longueur, sélectionne la polyligne figurant l'intérieur de la cage et spécifie la distance entre chaque position.

Exemple avec les dimensions données dans ton premier message, la polyligne sélectionnée est en rouge, la distance entre chaque position est 10cm les différentes positions du brancard sont sur un calque "Brancard" (gris) qui est créé s'il n'existe pas.

Image IPB

(defun c:brancard (/ larg long pl param dist clock p1 p2)
  (vl-load-com)

  (defun PointAtDistFromPoint (pl pt di / curve space circle lst)
    (or	*acdoc*
	(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))
    )
    (setq curve	 (vlax-ename->vla-object pl)
	  space	 (vla-ObjectIDToObject *acdoc* (vla-get-OwnerID curve))
	  circle (vla-addCircle space (vlax-3d-point pt) di)
    )
    (vla-put-Normal circle (vla-get-Normal curve))
    (setq lst (3d-coord->pt-lst (vlax-invoke curve 'IntersectWith circle acExtendNone)))
    (vla-delete circle)
    (if	lst
      (cadr
	(member	 pt (vl-sort (cons pt lst)
			 (function
			   (lambda (p1 p2)
			     (<	(vlax-curve-getDistAtPoint curve p1)
				(vlax-curve-getDistAtPoint curve p2)
			     )
			   )
			 )
		)
	)
      )
    )
  )

  (if
    (and
      (setq larg (getdist "\nLargeur du brancard: "))
      (setq long (getdist "\nLongueur du brancard: "))
      (setq pl (car (entsel "\nSélectionnez le mur de la cage: ")))
      (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")
      (setq
	dist (getdist "\nDistance entre les différentes positions : ")
      )
      (setq pos 0.0)
      (setq sqr	(if (clockwise-p
		      (setq p1 (vlax-curve-getStartPoint pl))
		      (vlax-curve-getPointAtParam pl 1)
		      (vlax-curve-getPointAtParam pl 2)
		    )
		  (/ pi -2)
		  (/ pi 2)
		)
      )
    )
     (progn
       (vla-StartUndoMark
	 (vla-get-ActiveDocument (vlax-get-acad-object))
       )
       (while (setq p2 (PointAtDistFromPoint pl p1 long))
	 (setq ang (angle p1 p2)
	       p3  (polar p2 (+ ang sqr) larg)
	       p4  (polar p1 (+ ang sqr) larg)
	 )
	 (entmake
	   (list
	     '(0 . "LWPOLYLINE")
	     '(100 . "AcDbEntity")
	     '(8 . "Brancard")
	     '(100 . "AcDbPolyline")
	     '(90 . 4)
	     '(70 . 1)
	     (cons 10 p1)
	     (cons 10 p2)
	     (cons 10 p3)
	     (cons 10 p4)
	   )
	 )
	 (setq pos (+ pos dist)
	       p1  (vlax-curve-getPointAtDist pl pos)

	 )
       )
       (vla-put-color (vla-item (vla-get-Layers *acdoc*) "Brancard") 8)
       (vla-EndUndoMark
	 (vla-get-ActiveDocument (vlax-get-acad-object))
       )
     )
  )
  (princ)
)

;;; Clockwise-p Retourne T si les points p1 p2 et p3 tournent dans le sens horaire
(defun clockwise-p (p1 p2 p3)
  (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)
) 


;;; 3d-coord->pt-lst Convertit une liste de coordonnées 3D en liste de points
;;; (3d-coord->pt-lst '(1.0 2.0 3.0 4.0 5.0 6.0)) -> ((1.0 2.0 3.0) (4.0 5.0 6.0))
(defun 3d-coord->pt-lst	(lst)
  (if lst
    (cons (list (car lst) (cadr lst) (caddr lst))
	  (3d-coord->pt-lst (cdddr lst))
    )
  )
)


<font class=edite>[Edité le 9/6/2008 par (gile)]</font>
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#7 L'utilisateur est hors-ligne   barbichette 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 686
  • Inscrit(e) : 30-mai 05

Posté 09 juin 2008 - 07:43

Bonjour,
et merci (gile)

j'ai essayé ton lisp, mais Totocad me répond :
; erreur: no function definition: 3D-COORD->PT-LST

y'a t'il un truc que je fait mal ?
0

#8 L'utilisateur est en ligne   (gile) 

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

Posté 09 juin 2008 - 08:46

Salut,

Non, tu n'as rien fait de mal, c'est moi qui ait oublié de joindre la routine 3d-coord->pt-lst.
J'ai modifié le code ci-dessus, ça devrait fonctionner.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
0

#9 L'utilisateur est hors-ligne   barbichette 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 686
  • Inscrit(e) : 30-mai 05

Posté 09 juin 2008 - 13:01

Vi ca marche impec.


Mici
0

#10 L'utilisateur est hors-ligne   esbe 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2086
  • Inscrit(e) : 21-octobre 04

Posté 10 juin 2008 - 18:14

Wouahhhh Impressionnant !

Bravo (gile)


( Cela pourrait interessant pour visualiser la circulation des fauteuils-roulant ds les nouveaux bâtiments.)
0

#11 L'utilisateur est hors-ligne   jalna 

  • ceinture noire 4em dan
  • Groupe : Membres
  • Messages : 2408
  • Inscrit(e) : 19-septembre 05
  • LocationMulhouse

Posté 12 juin 2008 - 07:24

Salut tout le monde!

Comme dit Esbe, impressionnant Gile!!

Excellente routine!

Une petite question, serait il possible de remplacer la polyligne dessinée par un bloc !! (bloc brancard 58.5/229)

0

#12 L'utilisateur est hors-ligne   sylvainbis 

  • ceinture blanche
  • Groupe : Membres
  • Messages : 1
  • Inscrit(e) : 06-février 12

Posté 06 février 2012 - 11:46

Bonjour,

Je suis nouvellement inscrit sur ce forum et peu habitué de la chose, j'espère donc être au bon endroit et si ce n'est pas le cas je m'en excuse.

Je suis architecte, sur AutoCAD 2010 et suis tombé sur le magnifique LISP créé par Gile concernant la cinématique des brancards dans les cages d'escaliers.

Lorsque je le lance, après l'avoir chargé, le message suivant s'affiche : ; erreur: no function definition: CLOCKWISE-P

Etant absolument néophyte en création de routines, quelqu'un pourrait-il me dire comment adapter ce LISP à la version 2010, si tenté que cela soit possible ?

En vous remerciant par avance.




Voir le message(gile), le 08 juin 2008 - 15:51 , dit :

Salut,


Un LISP vite fait, la face intérieure de la cage d'escalier doit être une polyligne (en dessiner une au besoin), l'utilisateur spécifie la largeur du brancard et sa longueur, sélectionne la polyligne figurant l'intérieur de la cage et spécifie la distance entre chaque position.


Exemple avec les dimensions données dans ton premier message, la polyligne sélectionnée est en rouge, la distance entre chaque position est 10cm les différentes positions du brancard sont sur un calque "Brancard" (gris) qui est créé s'il n'existe pas.


Image IPB


(defun c:brancard (/ larg long pl param dist clock p1 p2)

  (vl-load-com)


  (defun PointAtDistFromPoint (pl pt di / curve space circle lst)

    (or	*acdoc*

	(setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object)))

    )

    (setq curve	 (vlax-ename->vla-object pl)

	  space	 (vla-ObjectIDToObject *acdoc* (vla-get-OwnerID curve))

	  circle

		 (vla-addCircle space (vlax-3d-point pt) di)

    )

    (vla-put-Normal circle (vla-get-Normal curve))

    (setq lst (3d-coord->pt-lst (vlax-invoke curve 'IntersectWith circle acExtendNone)))

    (vla-delete circle)

    (if	lst

      (cadr

	(member	 pt (vl-sort (cons pt lst)

			 (function

			   (lambda (p1 p2)

			     (<	(vlax-curve-getDistAtPoint curve p1)

				(vlax-curve-getDistAtPoint curve p2)

			     )

			   )

			 )

		)

	)

      )

    )

  )


  (if

    (and

      (setq larg (getdist "\nLargeur du brancard: "))

      (setq long (getdist "\nLongueur du brancard: "))

      (setq pl (car (entsel "\nSélectionnez le mur de la cage: ")))

      (= (cdr (assoc 0 (entget pl))) "LWPOLYLINE")

      (setq

	dist (getdist "\nDistance entre les différentes positions : ")

      )

      (setq pos 0.0)

      (setq sqr	(if (clockwise-p

		      (setq p1 (vlax-curve-getStartPoint pl))

		      (vlax-curve-getPointAtParam pl 1)

		      (vlax-curve-getPointAtParam pl 2)

		    )

		  (/ pi -2)

		  (/ pi 2)

		)

      )

    )

     (progn

       (vla-StartUndoMark

	 (vla-get-ActiveDocument (vlax-get-acad-object))

       )

       (while (setq p2 (PointAtDistFromPoint pl p1 long))

	 (setq ang (angle p1 p2)

	       p3  (polar p2 (+ ang sqr) larg)

	       p4  (polar p1 (+ ang sqr) larg)

	 )

	 (entmake

	   (list

	     '(0 . "LWPOLYLINE")

	     '(100 . "AcDbEntity")

	     '(8 . "Brancard")

	     '(100 . "AcDbPolyline")

	     '(90 . 4)

	     '(70 . 1)

	     (cons 10 p1)

	     (cons 10 p2)

	     (cons 10 p3)

	     (cons 10 p4)

	   )

	 )

	 (setq pos (+ pos dist)

	       p1  (vlax-curve-getPointAtDist pl pos)

	 )

       )

       (vla-put-color (vla-item (vla-get-Layers *acdoc*) "Brancard") 8)

       (vla-EndUndoMark

	 (vla-get-ActiveDocument (vlax-get-acad-object))

       )

     )

  )

  (princ)

)


;;; Clockwise-p Retourne T si les points p1 p2 et p3 tournent dans le sens horaire


(defun clockwise-p (p1 p2 p3)

  (< (sin (- (angle p1 p3) (angle p1 p2))) -1e-14)

) 


;;; 3d-coord->pt-lst Convertit une liste de coordonnées 3D en liste de points

;;; (3d-coord->pt-lst '(1.0 2.0 3.0 4.0 5.0 6.0)) -> ((1.0 2.0 3.0) (4.0 5.0 6.0))


(defun 3d-coord->pt-lst	(lst)

  (if lst

    (cons (list (car lst) (cadr lst) (caddr lst))

	  (3d-coord->pt-lst (cdddr lst))

    )

  )

)


<font class=edite>[Edité le 9/6/2008 par (gile)]</font>

0

#13 L'utilisateur est hors-ligne   PHILPHIL 

  • ceinture noire 1er dan
  • Groupe : Membres
  • Messages : 996
  • Inscrit(e) : 24-janvier 06
  • LocationNANTES

Posté 08 octobre 2019 - 15:00

hello


ca date

ca fonctionnait sur autocad 2019

sur la 2020 ca ne fonctionne plus



Commande: BRANCARDTER
Largeur du brancard: 58
Longueur du brancard: 229
Sélectionnez le mur de la cage:
Distance entre les différentes positions : 10
Erreur Automation Clé introuvable


quelle clé ?

Phil
Autodesk Architecture 2019 sous windows 10 64
24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
0

#14 L'utilisateur est en ligne   (gile) 

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

Posté 08 octobre 2019 - 17:09

Salut,

Ça fonctionne bien chez moi sur A2020.
Gilles Chanteau - gileCAD -
Développements sur mesure pour AutoCAD
Image IPB
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)