Aller au contenu

Repérer une altitude sur une poly 3D


Demixav

Messages recommandés

Bonjour,

 

Il me semblait qu'il y avait une commande afin de repérer une altitude donnée sur une poly 3D... mais je ne la trouve plus... j'ai rêvé ou pas?

Ou une astuce ?...

 

Merci!

Xav

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Lien vers le commentaire
Partager sur d’autres sites

Salut tramber...

 

J'ai dû mal m'exprimer!

 

Je souhaite avoir un repère (un bloc, un point... peu importe) qui s'insère sur une poly 3D à une altitude que je saisirai!

 

Par exemple, j'ai une poly 3D faisant les "montagnes russes" avec une 50aine de sommets, alti mini 50m, alti maxi 150m! comment repérer tous les points sur cette poly à l'altitude 123.45m ?

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Lien vers le commentaire
Partager sur d’autres sites

Bonjour BonusCad,

 

Merci pour ton intervention supplémentaire!

 

Ton LISP m'intéresse à première vue, mais je n'arrive pas à le faire fonctionner!

Quand je le lance, directement il y a une "boucle" qui se met en route je pense, et j'ai le message "Ce n'est pas une polyligne 3D!" qui n’arrête pas de défiler...

Je pense que ca vient du symbole < comme tu le dis dans ton message... mais étant une bille en slip, je ne sais que faire pour changer ça!

 

Help !!! :/

 

Merci!

Xav

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Lien vers le commentaire
Partager sur d’autres sites

Je reposte le code (en plus, il a peut être changé depuis le temps)

Ca devrait aller mieux!

 

(defun round_number (xr n / )
 (* (fix (atof (rtos (* xr n) 2 0))) (/ 1.0 n))
)
(defun c:z_interval ( / js dxf_ent vla_obj n pt_lst z_value z_min z_max pt_int)
 (vl-load-com)
 (princ "\nSélectionnez une polyligne 3D.")
 (while
   (null
     (setq js
       (ssget "_+.:E:S"
         (list
           '(0 . "POLYLINE")
           (cons 67 (if (eq (getvar "CVPORT") 1) 1 0))
           (cons 410 (if (eq (getvar "CVPORT") 1) (getvar "CTAB") "Model"))
           '(-4 . "&")
           '(70 . 8)
         )
       )
     )
   )
   (princ "\nCe n'est pas une polyligne 3D!")
 )
 (setq
   dxf_ent (entget (ssname js 0))
   vla_obj (vlax-ename->vla-object (cdar dxf_ent))
   n -1
   pt_lst nil
 )
 (if (zerop (getvar "USERR1")) (setvar "USERR1" 1.0))
 (initget 6)
 (setq z_value (getreal (strcat "\nEntrez l'interval en Z <" (rtos (getvar "USERR1")) ">: ")))
 (if (not z_value) (setq z_value (abs (getvar "USERR1"))))
 (setvar "USERR1" z_value)
 (repeat (fix (vlax-curve-getEndParam vla_obj))
   (setq pt_lst (cons (vlax-curve-getPointAtParam vla_obj (setq n (1+ n))) pt_lst))
 )
 (if (zerop (boole 1 1 (cdr (assoc 70 dxf_ent))))
   (setq pt_lst (cons (vlax-curve-getEndPoint vla_obj) pt_lst))
   (setq pt_lst (cons (vlax-curve-getStartPoint vla_obj) pt_lst))
 )
 (while (cdr pt_lst)
   (setq
     z_min (round_number (min (caddar pt_lst) (car (cddadr pt_lst))) (/ 1 z_value))
     z_max (max (caddar pt_lst) (car (cddadr pt_lst)))
   )
   (while (< z_min z_max)
     (setq pt_int
       (inters
         (car pt_lst)
         (cadr pt_lst)
         (list (caar pt_lst) (cadar pt_lst) z_min)
         (list (caadr pt_lst) (cadadr pt_lst) z_min)
         T
       )
     )
     (if pt_int
       (entmake
         (list
           (cons 0 "POINT")
           (cons 100 "AcDbPoint")
           (cons 10 pt_int)
           (list 210 0.0 0.0 1.0)
         )
       )
     )
     (setq z_min (+ z_min z_value))
   )
   (setq pt_lst (cdr pt_lst))
 )
 (prin1)
)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

Hello Bruno

 

Donc SVP cette routine fait quoi exactement sur une Polyligne 3D ?

 

Bye, lecrabe

 

Imaginons que tu ais une polyligne (en montagne russe, ou pas) d'une dénivellée en Z de 530.6987 unités.

 

En appliquant le code est en donnant un interval de 100 unités, et bien il va te dessiner tous les points qui seront à 100, 200, 300, 400 et 500 unités en Z sur la polyligne3D.

 

A partir de là, tu pourrais par exemple faire passer manuellement tes courbes de niveaux par les points respectifs sans avoir besoin de construire un MNT et de l'interpoler. Donc sans Covadis ou autres applicatifs, ça peut rendre service pour des petits travaux.

 

Bien avant, pour faire cela, je jouais avec la delimitation Avant et Arrière avec un écart très faible de la commande VUEDYN en vue de dessus; ca symbolisait des points virtuels qui me servaient de repères visuel de tracé (c'était il y a bien longtemps...)

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Lien vers le commentaire
Partager sur d’autres sites

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é