Aller au contenu

Messages recommandés

Posté(e)

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 ?

***********************

Rien ne sert de courrir, il faut partir à point.

Posté(e)

Salut!

 

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

 

http://img171.imageshack.us/img171/5532/escaliervf1.jpg

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

Posté(e)

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]

***********************

Rien ne sert de courrir, il faut partir à point.

  • 3 semaines après...
Posté(e)

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

 

Posté(e)

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]

***********************

Rien ne sert de courrir, il faut partir à point.

  • 3 semaines après...
Posté(e)

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.

 

http://img372.imageshack.us/img372/3341/brancardnc4.png

 

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

 

[Edité le 9/6/2008 par (gile)]

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

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 ?

***********************

Rien ne sert de courrir, il faut partir à point.

Posté(e)

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 - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Wouahhhh Impressionnant !

 

Bravo (gile)

 

 

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

Posté(e)

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)

 

"Je suis fasciné par l'air. Si on enlevait l'air du ciel, tous les oiseaux tomberaient par terre... Et les avions aussi... En même temps l'air tu peux pas le toucher... Ca existe et ça existe pas... Ca nourrit l'homme sans qu'il ait faim... It's magic ! L'air c'est beau en même temps tu peux pas le voir, c'est doux et tu peux pas le toucher... L'air, c'est un peu comme mon cerveau..."

J-C Van Damme

  • 3 ans après...
Posté(e)

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.

 

 

 

 

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.

 

 

http://img372.imageshack.us/img372/3341/brancardnc4.png

 

 

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

  • 7 ans après...
Posté(e)

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

FREELANCE

Autodesk Architecture 2025 sous windows 11 64

REVIT

24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal

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é