Communauté
AutoCAD – tous produits - Français
Bienvenue sur les forums AutoCAD d’Autodesk. Partagez vos connaissances, posez des questions, et explorez les sujets AutoCAD populaires.
annuler
Affichage des résultats de 
Afficher  uniquement  | Rechercher plutôt 
Vouliez-vous dire : 

objet suivant une trajectoire (animation)

13 RÉPONSES 13
Répondre
Message 1 sur 14
sebi002
663 Visites, 13 Réponses

objet suivant une trajectoire (animation)

Bonjour à vous,

 

J'aimerais pouvoir faire une animation montrant mon objet rouge suivant la trajectoire verte. (Voir image ci-dessous)

image1.png

 

J'ai essayé de combiner des fichiers SCR en faisant des rotations et des déplacements, mais j'arrive pas au résultat voulu.

Le mieux serait que je puisse tout piloter via un fichier excel (par exemple).

 

Je suis un peu bloqué, et je me retourne vers vous, pour savoir si vous auriez des solutions (ou des pistes d'études) à me proposer?

 

En vous remerciant par avance,

13 RÉPONSES 13
Message 2 sur 14
Kevin_Megel
en réponse à: sebi002

Je ne crois pas que tu puisse faire de l'animation avec autocad, donc la seul solution que je vois, serais de faire du image par image, et de compiler le tout avec un soft de video. Windows movie maker est normalement directement sur le pc, et il est simple d'utilisation, pour se que tu veux faire. Si tu veux faire qqch de plus complet tu devrais passer un un soft plus complet, il me semble que SW fait des petite animation de fonctionnement avec quelques contraites, sinon tu passe à la gamme au dessus avec des softs d'animation, mais la tu va avoir un sacré boulot en perspective.

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

Message 3 sur 14
sebi002
en réponse à: Kevin_Megel

Salut,

 

Merci pour ta réponse rapide.

j'ai déjà eu l'occasion de voir une vidéo montrant une animation 2d d'un objet suivant une trajectoire (comme sur mon image) et piloter par une feuille excel contenant des temps, des coordonnées de points et des angles.

Mais maleureusement je ne connais pas le mécanisme qu'il y a derrière en terme de macro, vb.... 

Message 4 sur 14
Kevin_Megel
en réponse à: sebi002

faut attendre alors les reponse des pro macros, vb, etc... sinon je suis curieux de savoir comment faire ça

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

Message 5 sur 14
sebi002
en réponse à: Kevin_Megel

Re-bonjour,

 

Je me permets un petit UP du topic, pour savoir si certaines personnes ont des idées à me proposer ou des solutions interessantes.

 

En vous remerciant par avance,

Message 6 sur 14
CADaSchtroumpf
en réponse à: sebi002

Bonjour,

 

Un petit script en lisp pour réaliser des clichés. Il necessite une polyligne 3D pour la trajectoire de la caméra.

A voir si ça convient... car l'écriture du lisp date de fort longtemps. A adapter peut être?

 

(defun c:make_clip ( / om e_sel dxf_ent last_ent n d_fence key_target d_target a_target l_ptcam pt_cam pt_target)
; (if (not (member "acrender.arx" (arx))) (arxload "acrender.arx"))
  (setq om (getvar "osmode"))
  (while (not (setq e_sel (entsel "\nChoix de la 3Dpoly pour parcours: "))))
  (setq dxf_ent (entget (car e_sel)))
  (cond
    ((and (eq (cdr (assoc 0 dxf_ent)) "POLYLINE") (eq (logand (cdr (assoc 70 dxf_ent)) 8) 8))
      (setq last_ent (entlast) n 1000)
      (initget 7)
      (setq d_fence (getdist "\nPas de déplacement de la caméra: "))
      (initget 1 "Fixe Relatif")
      (setq key_target (getkword "\nPoint de visée [Fixe/Relatif] à la caméra: "))
      (if (eq key_target "Fixe")
        (progn
          (initget 1)
          (setq pt_target (getpoint "\nPoint fixe de la visée: "))
        )
        (progn
          (initget 7)
          (setq d_target (getdist "\nDistance relative à la camèra: "))
        )
      )
      (setvar "osmode" 0)
      (command "_.measure" (car e_sel) d_fence)
      (while
        (and
          (= (cdr (assoc 0 (entget (entlast)))) "POINT")
          (not (equal (entlast) last_ent))
        )
        (setq l_ptcam (cons (cdr (assoc 10 (entget (entlast)))) l_ptcam))
        (entdel (entlast))
      )
      (cond
        ((and l_ptcam (> (length l_ptcam) 1))
;         (c:rpref "DEST" "FILE")
;         (c:rpref "STYPE" "ARAY")
;         (c:rpref "TOGGLE" "FINISH" "ON")
;         (c:rpref "TOGGLE" "SKIPRDLG" "ON")
;         (C:RFILEOPT "TIFF" 1024 768 1.0 "C24")
          (while l_ptcam
            (setq pt_cam (car l_ptcam))
            (if (and (eq key_target "Relatif") (cadr l_ptcam))
              (setq
                a_target (angle (car l_ptcam) (cadr l_ptcam))
                pt_target (polar (car l_ptcam) a_target d_target)
              )
            )
            (command "_.dview" e_sel "" "_point" pt_target pt_cam "_distance" "" "")
            (setq name_image (strcat (substr (getvar "dwgname") 1 (- (strlen (getvar "dwgname")) 4)) "-" (substr (itoa (setq n (1+ n))) 2 3) ".TGA"))
            (command "_.render" "_high" "_render" "1024" "840" "_yes" name_image)
            (setq l_ptcam (cdr l_ptcam))
          )
        )
      )
      (setvar "osmode" om)
    )
    (T (princ "\nN'est pas une 3DPOLY!"))
  )
  (prin1)
)

 

 

 

Message 7 sur 14
sebi002
en réponse à: CADaSchtroumpf

Bonjour,

 

Merci pour votre réponse mais je ne pense pas que ça puisse coincider avec ce que je recherche.

 

Je cherche vraiment à pouvoir faire piloter des objets en suivant une trajectoire 2d (comme sur la photo mise dans mon 1er topic) via, je suppose, un fichier excel et surement du vb. Mais étant complétement débutant dans la programmation sous autocad, j'aurais bien besoin d'un "coup de pouce".

 

 

Message 8 sur 14
Olivier.R
en réponse à: sebi002

Bonjour sebi002,

 

Ta demande réclame un niveau de programmation assez élevé. Pour maximiser tes chances de réponse positives, tu devrais essayé sur un forum un peu plus ciblé programmation.

 

Comme ici ou  .

 

Olivier (interressé par la réponse).

Message 9 sur 14
sebi002
en réponse à: Olivier.R

Bonjour,

 

Je vais aller regarder sur les forums que tu as donné.

Je vois que pas mal de gens est assez interessé par ce sujet aussi, donc si vous trouvez aussi des solutions de votre cotés, hésitez pas à en faire part, qu'on puisse y réfléchir ensemble.

 

 

Message 10 sur 14
Kevin_Megel
en réponse à: sebi002

par contre si tu trouve qqch n'hesite pas a venir le poster ici, ça m'interesse de savoir comment on fait un peu d'animation avec autocad

Kevin Megel
Ce post vous a été utile ? N'hésitez pas à aimer ce post.
Ce post a-t-il répondu à votre question ? Cliquez sur le bouton Accepter la solution.

EESignature

Je suis un simple utilisateur, je ne travaille pas pour Autodesk

Message 11 sur 14
CADaSchtroumpf
en réponse à: sebi002

Oui, en effet, j'avais mal compris...

 

Je te propose ce qui suit:

Pour tester, Il faut d'abord transformer l'objet que tu veux animer en bloc (si ce n'est déjà fait) avec le point d'insertion sur la trajectoire et ensuite exécuter la routine.

J'ai mis la fonction (grread) dans la boucle pour que tu puisse voir la progression de l'objet (sans elle, tu ne observerais rien, car trop rapide), donc il te faura appuyer sur une touche pour que l'objet se déplace.

Par la suite, tu pourras remplacer cette fonction grread par autre chose, créer un cliché par exemple...

 

(defun c:anim_obj ( / js ent vla_obj pt_ref dist_ref param_end perim_obj param deriv alpha len_vtx nw_pt)
  (vl-load-com)
  (princ "\nSélectionner un objet curviligne sur lequel vous voulez effectuer une animation.")
  (while
    (not
      (setq js
        (ssget "_+.:E:S"
          (list
            (cons -4 "<OR")
              (cons -4 "<AND")
                (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE")
                (cons -4 "<NOT")
                  (cons -4 "&") (cons 70 112)
                (cons -4 "NOT>")
              (cons -4 "AND>")
              (cons 0 "SPLINE")
            (cons -4 "OR>")
          )
        )
      )
    )
  )
  (setq
    ent (ssname js 0)
    vla_obj (vlax-ename->vla-object ent)
    pt_ref (trans (vlax-curve-getStartPoint vla_obj) 1 0)
    dist_ref (vlax-curve-getDistAtPoint vla_obj pt_ref)
    param_end (vlax-curve-getEndParam vla_obj)
    perim_obj (vlax-curve-getDistAtParam vla_obj param_end)
    param (vlax-curve-getparamatpoint vla_obj pt_ref)
    deriv (vlax-curve-getfirstderiv vla_obj param)
    alpha (atan (cadr deriv) (car deriv))
  )
  (redraw ent 3)
  (princ "\nSélectionner l'objet à animer.")
  (while (not (setq js_obj (ssget "_+.:E:S" '((0 . "INSERT"))))))
  (redraw ent 4)
  (initget 7)
  (setq len_vtx (getdist (trans pt_ref 0 1) "\nPas d'animation: "))
  (cond
    ((<= len_vtx perim_obj)
      (while (< (+ dist_ref len_vtx) perim_obj)
        (setq
          nw_pt (vlax-curve-getPointAtDist vla_obj (setq dist_ref (+ dist_ref len_vtx)))
          param (vlax-curve-getparamatpoint vla_obj nw_pt)
          deriv (vlax-curve-getfirstderiv vla_obj param)
          alpha (atan (cadr deriv) (car deriv))
        )
        (vlax-put (vlax-ename->vla-object (ssname js_obj 0)) 'InsertionPoint nw_pt)
        (vlax-put (vlax-ename->vla-object (ssname js_obj 0)) 'Rotation alpha)
        (grread)
      )
    )
    (T
      (princ "\nLa longueur introduite est plus grande que l'objet.")
    )
  )
  (prin1)
)

 

Message 12 sur 14
sebi002
en réponse à: CADaSchtroumpf

Edit : 

Bonjour,

Merci pour ce code.

J'ai bien réussi à intégrer ce lips à autocad en fouillant un peu. Il marche bien! merci.

 

Pour aller plus loin, serait-il possible d'ajouter à ce programme des variations de vitesse (variations de distance entre les points). Par exemple lui dire que "de tel point à tel point" on fait un pas de 0.1 et de "tel point à tel point" un pas de 0.2?

 

 

 

Message 13 sur 14
CADaSchtroumpf
en réponse à: sebi002


sebi002 a écrit :

Edit : 

Pour aller plus loin, serait-il possible d'ajouter à ce programme des variations de vitesse (variations de distance entre les points). Par exemple lui dire que "de tel point à tel point" on fait un pas de 0.1 et de "tel point à tel point" un pas de 0.2?

 


Oui ç'est possible, mais ça complique le code (avec plus de paramètres) et prends du temps pour le construire. Comme j'en ai pas l'utilité....

 

De façon plus ludique, tu peux utiliser ce qui suit, la vitesse de déplacement est celle de l'utilisateur qui manipule la souris, et tu peux même faire une marche arrière; c'est du dynamique

 

(defun c:anim_obj ( / js ent vla_obj js_obj tmp nw_pt param deriv alpha )
  (vl-load-com)
  (princ "\nSélectionner un objet curviligne sur lequel vous voulez effectuer une animation.")
  (while
    (not
      (setq js
        (ssget "_+.:E:S"
          (list
            (cons -4 "<OR")
              (cons -4 "<AND")
                (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE")
                (cons -4 "<NOT")
                  (cons -4 "&") (cons 70 112)
                (cons -4 "NOT>")
              (cons -4 "AND>")
              (cons 0 "SPLINE")
            (cons -4 "OR>")
          )
        )
      )
    )
  )
  (setq
    ent (ssname js 0)
    vla_obj (vlax-ename->vla-object ent)
  )
  (redraw ent 3)
  (princ "\nSélectionner l'objet à animer.")
  (while (not (setq js_obj (ssget "_+.:E:S" '((0 . "INSERT"))))))
  (redraw ent 4)
  (princ "\nGuider votre objet")
  (while (= 5 (car (setq tmp (grread t 5 1))))
    (cond
      ((= 5 (car tmp))
        (setq
          nw_pt (vlax-curve-getClosestPointTo vla_obj (trans (cadr tmp) 1 0))
          param (vlax-curve-getparamatpoint vla_obj nw_pt)
          deriv (vlax-curve-getfirstderiv vla_obj param)
          alpha (atan (cadr deriv) (car deriv))
        )
        (vlax-put (vlax-ename->vla-object (ssname js_obj 0)) 'InsertionPoint nw_pt)
        (vlax-put (vlax-ename->vla-object (ssname js_obj 0)) 'Rotation alpha)
      )
      (T (princ "\nArrêt anormal de la commande "))
    )
  )
  (prin1)
)

 

Message 14 sur 14
sebi002
en réponse à: CADaSchtroumpf

merci du temps que tu prends pour me répondre.

 

Aurais-tu une adresse mail pro à me comunniquer? J'aimerais t'envoyer une petite vidéo (faite via autocad) du rendu final que j'aimerais avoir. Pour que tu puisses te rendre compte de ce que j'essaie de faire exactement.

Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.

Publier dans les forums  

Autodesk Design & Make Report