Aller au contenu

Commande pour Interpolation


Messages recommandés

Posté(e)

Bonjour,

 

 

Existe-t-il sous Covadis une commande permettant à partir d'une polyligne 3D de positionner un point sur cette polyligne à un Z précis ?

 

Merci d'avance

Posté(e)

Bonjour, c'est pas très clair... si tu fait un clic droit après avoir sélectionner ta polyligne / opération 3d / grille de modification, tu auras la possibilité de mettre une alti sur n'importe quel sommet de ta polyligne puis poser un point topo dessus le sommet.

si tu est sur la V13 ou V14 tu as aussi l'icone en bas d'autocad sur la même ligne que l'accrobj qui permet de modifier les grip de la poly 3d afin de sélectionner le sommet et de modifier directement l'alti.

Cordialement

 

Lionel PERRIN | Ingénieur/Consultant Formateur expert Infrastructure - Géomédia

 

Civil 3D/Covadis/Autopiste/Infraworks 360 - VRD/Infrastructure routière ferroviaire Bus TRAM

Posté(e)

Quelques précisions sur ma demande:

 

L'origine et l'extrémité sont des points définis et imposés avec des Z différents. Je cherche à tracer un point sur la ligne pour une altitude donnée.

Tout comme je peux tracer une ligne de niveau sur un MNT à un Z donné, je souhaite tracer un point sur polyligne 3D à un Z donné.

Posté(e)

je sais pas

mais en lisp ca donne ca...

voila

 

(defun c:valalti()
 (setq oldos (getvar "osmode"))
 (setq pt1 (trans (getpoint "\n1er point ")1 0))
 (setq pt2 (trans (getpoint "\n2eme point ")1 0))
 
 (princ "\n")
 (princ (caddr pt1))
 (princ "\n")
 (princ (caddr pt2))
 (setq val (getreal "\nAltitude recherchée ; "))
 (setq newpt (cap-i3d pt1 pt2 val))
 (setvar "osmode" 0)
 (command "point" (trans
	    (list (car newpt)(cadr newpt)val)
   0 1)
 )
 (setvar "osmode" oldos)
 
 
)
(defun cap-i3d (p1 p2 comp)

 (setq	c    (/ (- (caddr p1) comp) (- (caddr p2) comp))
newx (/ (- (* c (car p2)) (car p1)) (- c 1))

newy (/ (- (* c (cadr p2)) (cadr p1)) (- c 1))

 ) ;_ Fin de setq

 (list newx newy)

)

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

Rien à dire à par chapeau !

 

C'est exactement ce qu'il me fallait !

 

Par hasard, est-ce qu'il existe une commande Covadis pour réaliser cette prouesse ?

Posté(e)

salut,

 

Dans la grille de modification des polylignes tu as le Z de chaque sommet ainsi que la longueur est la pente.

 

Tu peux grâce à tous ces éléments, déterminer la position de ton point à un Z donné.

 

A+

Autocad Map 3D 2018

Covadis Autopiste version 17.0e

Mensura Génius V8

Posté(e)

Tu coupes la ligne en un point et tu la jointes apres. Le point est créé. Et si tu veux un point topo, tu reimmatricule uniquement ta polyligne.

Et si tu veux une alti precis, tu la modifies direct dans les proprietes autocad

Posté(e)

La manip proposée est intéressante, mais ce que je veux éviter c'est d'avoir à calculer les coordonnées de ce troisième point. Je veux veux bien entendu que les 3 points soit alignés.

 

Lorsque je fait un chenal en pente, imagine le pied de talus formé par une poly 3d avec un Z de départ et un Z d'arrivé. Je cherche tous les points à une altitude ronde de cette poly 3D.

Posté(e)

La manip proposée est intéressante, mais ce que je veux éviter c'est d'avoir à calculer les coordonnées de ce troisième point. Je veux veux bien entendu que les 3 points soit alignés.

 

Lorsque je fait un chenal en pente, imagine le pied de talus formé par une poly 3d avec un Z de départ et un Z d'arrivé. Je cherche tous les points à une altitude ronde de cette poly 3D.

Posté(e)

Tout le problème est là: Partir d'une poly 3D et pouvoir poser sur celle-ci des points à des Z bien précis et sans avoir à faire des constructions et calculs. Merci à capde06 pour sa macro.

 

Etant donner que c'est une manip que je fais assez régulièrement lors de plans d'excavation, existe-t-il une commande spécifique dans Covadis ?

Posté(e)

sur un post précédent

j'avais posté une macro de courbe de niveau sur des face3d

il est tres facile de le modifier pour ne dessiner qu'une courbe a une altitude donnée

si ca intéresse .....

le voila modifié

 

 

 

 

(defun c:courbeniv ()
 (setq	zmax	-9999999.99
zmin	9999999.99
cpx	0
plan	125
listsom	nil
 ;tpoly nil
plcourt	(getvar "clayer")
oldos	(getvar "osmode")
espace	nil

 ) ;_ Fin de setq
(setq oldordretrace (getvar "DRAWORDERCTL"))
(setvar "DRAWORDERCTL" 0)
 (setvar "cmdecho" 0)
 (setvar "osmode" 0)
(if (not (tblsearch "LAYER" "TOPO-COURBES-NIVEAU"))
 (cap_crea_pl "TOPO-COURBES-NIVEAU" 7)
 )
(if (not (tblsearch "LAYER" "TOPO-COURBES-NIVEAU-5"))
 (cap_crea_pl "TOPO-COURBES-NIVEAU-5" 2)
 )
 (if (not (tblsearch "LAYER" "TOPO-COURBES-NIVEAU-10"))
 (cap_crea_pl "TOPO-COURBES-NIVEAU-10" 3)
   )
 (setvar "clayer" "TOPO-COURBES-NIVEAU")

 ;(command "scu" "g")
 (setq sel (ssget '((0 . "3DFACE"))))
 ;;           recherche zmini zmaxi
 (repeat (sslength sel)
   (setq ent	 (ssname sel cpx)
  dxf10	 (cdr (assoc 10 (entget ent)))
  dxf11	 (cdr (assoc 11 (entget ent)))
  dxf12	 (cdr (assoc 12 (entget ent)))
  dxf10z (caddr dxf10)
  dxf11z (caddr dxf11)
  dxf12z (caddr dxf12)

   ) ;_ Fin de setq
   (if	(> dxf10z zmax)
     (setq zmax dxf10z)
   ) ;_ Fin de if
   (if	(> dxf11z zmax)
     (setq zmax dxf11z)
   ) ;_ Fin de if
   (if	(> dxf12z zmax)
     (setq zmax dxf12z)
   ) ;_ Fin de if
   (if	(< dxf10z zmin)
     (setq zmin dxf10z)
   ) ;_ Fin de if
   (if	(< dxf11z zmin)
     (setq zmin dxf11z)
   ) ;_ Fin de if
   (if	(< dxf12z zmin)
     (setq zmin dxf12z)
   ) ;_ Fin de if
   (setq listsom (cons (list dxf10 dxf11 dxf12) listsom))


   (setq cpx (+ cpx 1))
 ) ;_ Fin de repeat


 (prompt (strcat "\nAltitude maxi : "
	  (rtos zmax 2 0)
	  " - Altitude mini : "
	  (rtos zmin 2 0)
  ) ;_ Fin de strcat
 ) ;_ Fin de prompt
 ;(setq espace (getreal "\nValeur de l'espacement des courbes : "))
 (if (not espace)
   (setq espace 1)
 ) ;_ Fin de if
 (setq val (getreal "\nAltitude recherchée ; "))

;;;; creation liste des coupes
 (setq	listcoupe nil
cp (fix zmin)
 ) ;_ Fin de setq

 (while (< cp zmax) ; (/(fix (- zmax zmin))espace)
   (setq cp (+ cp espace))
   (setq listcoupe (cons cp listcoupe))
 ) ;_ Fin de repeat
 ;(setq listcoupe (reverse listcoupe))
(setq listcoupe (list val))

 ;;==========================================================


 (foreach plan	listcoupe
   ;(print plan)
   (setq cpx 0) ;_ Fin de setq

   (repeat (length listsom)
     (setq llist (nth cpx listsom))
     (setq p1 (car llist)
    p2 (cadr llist)
    p3 (caddr llist)

     ) ;_ Fin de setq
     (setq mini (min (caddr p1)
	      (caddr p2)
	      (caddr p3)
	 ) ;_ Fin de min
    maxi (max (caddr p1)
	      (caddr p2)
	      (caddr p3)
	 ) ;_ Fin de max
     ) ;_ Fin de setq
     (setq pt1	nil
    pt2	nil
    pt3	nil
    listcal nil
     ) ;_ Fin de setq



     

     (if (and (>= plan mini) (<= plan maxi))
(progn

  (if (and (<= plan (caddr p1)) (> plan (caddr p2)))
    (setq listcal (cons (cap-i3d p1 p2 plan) listcal))
  ) ;_ Fin de if
  (if (and (<= plan (caddr p1)) (> plan (caddr p3)))
    (setq listcal (cons (cap-i3d p1 p3 plan) listcal))
  ) ;_ Fin de if
  (if (and (<= plan (caddr p2)) (> plan (caddr p3)))
    (setq listcal (cons (cap-i3d p2 p3 plan) listcal))
  ) ;_ Fin de if+++
  (if (and (>= plan (caddr p1)) (< plan (caddr p2)))
    (setq listcal (cons (cap-i3d p1 p2 plan) listcal))
  ) ;_ Fin de if
  (if (and (>= plan (caddr p1)) (< plan (caddr p3)))
    (setq listcal (cons (cap-i3d p1 p3 plan) listcal))
  ) ;_ Fin de if
  (if (and (>= plan (caddr p2)) (< plan (caddr p3)))
    (setq listcal (cons (cap-i3d p2 p3 plan) listcal))
  ) ;_ Fin de if
(remove_doubles listcal)
  (cond

   ((= (length listcal)1) ;_ Fin de =
   
      (if (equal plan (caddr p1))
       (setq listcal (cons p1 listcal))
      )
      (if(equal plan (caddr p2))
       (setq listcal (cons p2 listcal))
      )
      (if(equal plan (caddr p3))
       (setq listcal (cons p3 listcal))
      )
    (cap_cn_pol (car listcal) (cadr listcal))
   
   )
   
   ((> (length listcal) 1)
    (cap_cn_pol (car listcal) (cadr listcal))
   ) ;_ Fin de progn
 ) ;_ Fin de cond



  )

     ) ;_ Fin de if

     (setq cpx (+ cpx 1))
;
   ) ;_ Fin de repeat
 ) ;_ Fin de foreach

 
 (setq	sel (ssget "x" '((0 . "LINE") (8 . "TOPO-COURBES-NIVEAU*")))) ;_ Fin de setq
 (setvar "peditaccept" 1)
 (setvar "splinetype" 5)
 (command "_pedit" "m" sel "" "j" "0" "")
 (setvar "peditaccept" 0)





 ;;traitement des couleurs
(setq	sel (ssget "x" '((0 . "LWPOLYLINE") (8 . "TOPO-COURBES-NIVEAU*")))) ;_ Fin de setq
 (setq cpt 0)
 (print "======================")
 (repeat (sslength sel)
(setq ent (ssname sel cpt))
   (setq elev (cdr(assoc 38 (entget ent))))
   
   (cond
   ((= (rem elev 10.) 0.)
    
    (upd_ent ent 8 "TOPO-COURBES-NIVEAU-10")
    
   )
   ((= (rem elev 5.) 0.)
    (upd_ent ent 8 "TOPO-COURBES-NIVEAU-5")

   )
 )
   (setq cpt (+ cpt 1))
   )
;;===========================


(setvar "DRAWORDERCTL" oldordretrace)

 (setvar "osmode" oldos)
 (setvar "clayer" plcourt)
) ;_ Fin de defun



;;;fonctions================================================================

(defun c:crea_blk_cn ()
      (if (not (tblsearch "BLOCK" "CNTXT"))

   (progn

     (entmake

'((0 . "BLOCK")

  (100 . "AcDbEntity")

  (8 . "0")

  (100 . "AcDbBlockBegin")

  (2 . "CNTXT")

  (70 . 2)

  (10 0.0 0.0 0.0)

 )

     )

     (entmake

'((0 . "LINE")

  (8 . "0")

  (62 . 0)

  (10 -0.5 0. 0.)

  (11 0.5 0. 0.)

 )

     )
 (entmake '((0 . "ATTDEF")

	 (100 . "AcDbEntity")

	 (8 . "0")

	 (62 . 0)

	 (40 . 0.08)

	 

	 (100 . "AcDbText")

	 (10 0.0 0.0 0.0)

	 

	 (100 . "AcDbAttributeDefinition")

	 (3 . "Pente ?")

	 (2 . "PENTE")

	 
	)

     )

     

     

     (entmake '((0 . "ENDBLK") (8 . "0")))

   )

 )

)




(defun remove-i (ind lst)
 (if (or (zerop ind) (null lst))
   (cdr lst)
   (cons (car lst) (remove-i (1- ind) (cdr lst)))
 )
)
(defun remove_doubles (lst)
 (if lst
   (cons (car lst) (remove_doubles (vl-remove (car lst) lst)))
 )
)


(defun cap_cn_pol (a B)
 (setq	pt1 (list (car a) (cadr a))
pt2 (list (car B) (cadr B))
 ) ;_ Fin de setq
 (if (not (equal pt1 pt2))
   (entmake

     (list

'(0 . "LINE")

'(8 . "TOPO-COURBES-NIVEAU")

(cons 10 (list (car a) (cadr a) plan))

(cons 11 (list (car B) (cadr B) plan))
'(210 0.0 0.0 1.0)

     ) ;_ Fin de list

   ) ;_ Fin de entmake
 ) ;_ Fin de if

) ;_ Fin de defun







(defun cap-i3d (p1 p2 comp)

 (setq	c    (/ (- (caddr p1) comp) (- (caddr p2) comp))
newx (/ (- (* c (car p2)) (car p1)) (- c 1))

newy (/ (- (* c (cadr p2)) (cadr p1)) (- c 1))

 ) ;_ Fin de setq

 (list newx newy)

) ;_ Fin de defun


;; ; met a jour une entite : entité avant entget  + code + valeur 

(defun upd_ent (obj code txt)

 (setq obj (entget obj))
 (entmod (subst (cons code txt) (assoc code obj) obj))
) ;_ Fin de defun


(defun cap_crea_pl  (pl cl)

 (if (not (tblsearch "LAYER" pl))
   (entmake (list
       '(0 . "LAYER")
       '(100 . "AcDbSymbolTableRecord")
       '(100 . "AcDbLayerTableRecord")
       (cons 2 pl)
       '(70 . 0)
       (cons 62 cl)
       '(6 . "Continuous")
       )
     )
   )
 )


(defun cap_cn_pol1 (a B)
 (setq	pt1 (list (car a) (cadr a))
pt2 (list (car B) (cadr B))
 ) ;_ Fin de setq
 (if (not (equal pt1 pt2))
   (entmake

     (list

'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(8 . "TOPO-COURBES-NIVEAU")
'(100 . "AcDbPolyline")
'(90 . 2)
'(70 . 128)
      ;'(43 . 00)
(cons 38 plan)
;'(39 . 0.0)
(cons 10 pt1)
;'(40 . 0.0) '(41 . 0.0) 
;'(42 . 0.0) '(91 . 0)
(cons 10 pt2)
;	'(40 . 0.0) '(41 . 0.0) 
;'(42 . 0.0) '(91 . 0)
;	'(210 0.0 0.0 1.0)

     ) ;_ Fin de list

   ) ;_ Fin de entmake
 ) ;_ Fin de if

)


Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

Bonjour

A ma connaissance, il n'existe pas dans Covadis de commande pouvant répondre à ton besoin. Le lisp que popose capde06 permet d'arriver rapidement à la solution exacte.

Peut être qu'en combinant pas mal de commandes dans Covadis, on pourra arriver à la solution mais ce sera beaucoup plus long.

Exemple : dessiner un profil en long à partir de la polyligne 3d; Dessiner sur le profil en long une polyligne horizontale à l'altitude souhaitée; Demander à matérialiser sur la vue en plan l'intersection entre la ligne horizontale et la courbe du profil en long pour trouver le point recherché!

 

Cordialement

Posté(e)

Bonjour,

 

avec quelque chose comme ça en s'inspirant du code de cap06 et en ajoutant la sélection multiple de poly3D

 


(defun c:ZSurPoly( / val JEU I oPoly oVtx oVtxLst PT1 PT2 newpt)
 (if (and (setq val (getreal "\nAltitude recherchée : "))
      (setq JEU (ssget (list (cons 0 "POLYLINE"))))
      (setq I 0)
     )
   (progn
     (repeat (sslength JEU)
(setq oPoly (ssname JEU I))
(setq I (1+ I))
(setq PT1 nil)
(if (= 8 (logand (cdr (assoc 70 (entget oPoly))) 8))
 	(progn
   	(setq oVtx (entnext oPoly))
   	(while (/= "SEQEND" (cdr (assoc 0 (setq oVtxLst (entget oVtx)))))
     	(setq PT2 (cdr (assoc 10 oVtxLst)))
     	(setq newPt nil)
     	(if (and PT1 (or (and (>= (caddr PT1) val) (<= (caddr PT2) val))
	           (and (<= (caddr PT1) val) (>= (caddr PT2) val))
	       )
  	)
	(progn
	(setq newPt (cap-i3d pt1 pt2 val))
	)
     	)
     	(setq PT1 PT2)
     	(setq oVtx (entnext oVtx))
     	(if newPt
	(entmake (list (cons 0 "POINT")
	           (cons 10 (list (car newpt) (cadr newpt) val))
	           (cons 8 (getvar "CLAYER"))
	     )
	)
     	)
   	)
 	)
)
     )
   )
 )
 
 
)
(defun cap-i3d (p1 p2 comp)
 (setq c    (/ (- (caddr p1) comp) (- (caddr p2) comp))
       newx (/ (- (* c (car p2)) (car p1)) (- c 1))
       newy (/ (- (* c (cadr p2)) (cadr p1)) (- c 1))
 ) ;_ Fin de setq
 (list newx newy)
)

 

 

Olivier

Posté(e)

belle méthode Olivier

mais ma fonction cap-i3d ne calcul que la position en 2d

il faudrai que tu rajoutes le Z a la variable newpt

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

Posté(e)

je n'avais pas vu

mais ca reste delicat de modifier une fonction

d'autre prog l'utilisent comme les courbes de niveau plus haut dans le post

mieux vaut la renommer

Vous fîtes ce que vous pûtes

et vous m'épatâtes !!!!

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é