barbichette Posté(e) le 6 mai 2008 Posté(e) le 6 mai 2008 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éesLargeur de la volée : 1.25 mEspace entre les 2 volées (jour central) 5 cmTaille du palier : 1.20 x 2.55Type de garde-corps central : pleindimention 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.
jalna Posté(e) le 6 mai 2008 Posté(e) le 6 mai 2008 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 DammeMon forum : http://plexus.forumactif.org/
barbichette Posté(e) le 6 mai 2008 Auteur Posté(e) le 6 mai 2008 C'est pas malmais (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.
slamer69 Posté(e) le 22 mai 2008 Posté(e) le 22 mai 2008 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
barbichette Posté(e) le 22 mai 2008 Auteur Posté(e) le 22 mai 2008 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.
(gile) Posté(e) le 8 juin 2008 Posté(e) le 8 juin 2008 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
barbichette Posté(e) le 9 juin 2008 Auteur Posté(e) le 9 juin 2008 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.
(gile) Posté(e) le 9 juin 2008 Posté(e) le 9 juin 2008 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
barbichette Posté(e) le 9 juin 2008 Auteur Posté(e) le 9 juin 2008 Vi ca marche impec. Mici ***********************Rien ne sert de courrir, il faut partir à point.
esbe Posté(e) le 10 juin 2008 Posté(e) le 10 juin 2008 Wouahhhh Impressionnant ! Bravo (gile) ( Cela pourrait interessant pour visualiser la circulation des fauteuils-roulant ds les nouveaux bâtiments.)
jalna Posté(e) le 12 juin 2008 Posté(e) le 12 juin 2008 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 DammeMon forum : http://plexus.forumactif.org/
sylvainbis Posté(e) le 6 février 2012 Posté(e) le 6 février 2012 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>
PHILPHIL Posté(e) le 8 octobre 2019 Posté(e) le 8 octobre 2019 hello ca date ca fonctionnait sur autocad 2019 sur la 2020 ca ne fonctionne plus Commande: BRANCARDTERLargeur du brancard: 58Longueur du brancard: 229Sélectionnez le mur de la cage:Distance entre les différentes positions : 10Erreur Automation Clé introuvable quelle clé ? Phil FREELANCE Autodesk Architecture 2025 sous windows 11 64 REVIT 24 pouces vertical + 30 pouces horizontal + 27 pouces horizontal
(gile) Posté(e) le 8 octobre 2019 Posté(e) le 8 octobre 2019 Salut, Ça fonctionne bien chez moi sur A2020. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant