Aller au contenu

Automatiser l\'incrémentation des altitudes sur des courbes de niveau


MickA37

Messages recommandés

Bonjour,

 

j'ai un fichier DXF contenant des courbes de niveaux sans indications d'altitude. Je souhaite trouver un moyen d'accélérer l'attribution de l'altitude à chaque courbe.

 

Pour l'instant, je met manuellement chaque courbe dans un nouveau calque...

 

Je recherche qqchose qui pourrait (dans un flanc bien sûr sans variation de signe de la pente !), en indiquant l'altitude de départ et l'équidistance, attribuer à chaque courbe la bonne altitude...

 

Qqun aurait-il une solution à me proposer ?

 

merci d'avance !!!!

 

Ci dessous, une copie d'écran d'un jeu vidéo qui permet de créer un environnement virtuel.

L'altitude de chaque courbe est obtenue très facilement en indiquant l'altitude de la plus haute (ou la plus basse) et ensuite en faisant glisser la souris il incrémente automatiquement l'altitude...

http://stapsmicka.free.fr/compe/ex.jpg

 

C'est ce que je recherche à faire, mais malheureusement, il travaille sur un format général (CNV) et pas moyen de le faire travailler sur mon DXF.....

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Un petit LISP vite fait, pas testé en profondeur (équidistance positive = montée, équidistance négative = descente)

 

(defun c:courb-niv (/ crb equ alt p1 p2 sslst pt)
 (and (setq crb (car (entsel "\nSélectionnez une courbe de niveau: ")))
      (setq equ (getdist "\nEquidistance des courbes: "))
      (setq alt (getreal "\nAltitude de départ: "))
      (setq p1 (getpoint "\nPremier point: "))
      (setq p2 (getpoint p1 "\nSecond point: "))
      (setq sslst (ssget "_F"
		  (list p1 p2)
		  (list	(assoc 0 (entget crb))
			(assoc 8 (entget crb))
		  )
	   )
      )
      (setq sslst (ssnamex sslst))
      (mapcar '(lambda	(x)
	  (setq	pt (cadr (cadddr x))
		pt (list (car pt) (cadr pt) (cadddr (assoc 10 (entget crb))))
	  )
	  (entmake (list '(0 . "TEXT")
			 (cons 10 pt)
			 (cons 40 (getvar "TEXTSIZE"))
			 (cons 7 (getvar "TEXTSTYLE"))
			 (cons 1 (rtos alt 2 1))
		   )
	  )
	  (setq alt (+ alt equ))
	)
       sslst
      )
 )
 (princ)
) 

 

[Edité le 26/10/2007 par (gile)]

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

Lien vers le commentaire
Partager sur d’autres sites

Re,

 

Le LISP ci-dessus ne fait qu'jouter un texte indiquant l'altitude sue chaque courbe de niveau.

 

S'il faut aussi mettre la courbe (et le texte) à son altitude (3d), c'est plutôt ça :

 

(defun c:courb-niv (/ crb equ alt p1 p2 sslst acdoc pt)
 (vl-load-com)
 (if
   (and
     (setq crb (car (entsel "\nSélectionnez une courbe de niveau: ")))
     (setq equ (getdist "\nEquidistance des courbes: "))
     (setq alt (getreal "\nAltitude de départ: "))
     (setq p1 (getpoint "\nPremier point: "))
     (setq p2 (getpoint p1 "\nSecond point: "))
     (setq sslst (ssget "_F"
		 (list p1 p2)
		 (list (assoc 0 (entget crb))
		       (assoc 8 (entget crb))
		 )
	  )
     )
     (setq sslst (ssnamex sslst))
     (setq acdoc (vla-get-ActiveDocument (vlax-get-acad-object)))
   )
    (progn
      (vla-StartUndoMark acdoc)
      (mapcar '(lambda	(x)
	  (vla-Move (vlax-ename->vla-object (cadr x))
		    (vlax-3d-point '(0 0 0))
		    (vlax-3d-point (list 0 0 alt))
	  )
	  (setq	pt (cadr (cadddr x))
		pt (list (car pt) (cadr pt) alt)
	  )
	  (vla-addText
	    (vla-get-ModelSpace acdoc)
	    (rtos alt 2 1)
	    (vlax-3d-point pt)
	    (getvar "TEXTSIZE")
	  )
	  (setq alt (+ alt equ))
	)
       sslst
      )
      (vla-endUndoMark acdoc)
    )
 )
 (princ)
) 

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

Lien vers le commentaire
Partager sur d’autres sites

J'ai un peu amélioré l'histoire :

 

- L'insertion de l'altitude sur chaque courbe est optionnelle, elle se fait sur le calque "Altitudes_C-N" (le calque est créé s'il n'existe pas).

 

- Le trajet de sélection des courbes peut être spécifié par plus de 2 points.

 

- Les textes sont biens placés à l'intersection des courbes de niveau et du trajet de sélection quelque soit la vue courante.

 

(defun c:courb-niv (/ txt equ alt crb pt plst sslst acdoc vec scl)
 (vl-load-com)

 (or *texte-altitude* (setq *texte-altitude* "Oui"))
 (initget "Oui Non")
 (if (setq
txt (getkword (strcat "\nAjouter les altitudes [Oui/Non] ? 			      *texte-altitude*
		      ">: "
	      )
    )
     )
   (setq *texte-altitude* txt)
   (setq txt *texte-altitude*)
 )
 (or *equidistance* (setq *equidistance* "10.0"))
 (if (setq equ
     (getdist
       (strcat "\nEquidistance des courbes : ")
     )
     )
   (setq *equidistance* (rtos equ))
   (setq equ (atof *equidistance*))
 )
 (initget 1)
 (setq alt (getreal "\nAltitude de départ: "))
 (initget 1)
 (setq crb (car (entsel "\nSélectionnez une courbe de niveau: ")))
 (initget 1)
 (setq	pt   (getpoint "\nPremier point: ")
plst (cons pt plst)
 )
 (while (setq pt (getpoint pt "\nPoint suivant: "))
   (setq plst (cons pt plst))
   (redraw)
   (grvecs (apply 'append
	   (mapcar '(lambda (x1 x2) (list -255 x1 x2))
		   (reverse (cdr (reverse plst)))
		   (cdr plst)
	   )
    )
   )
 )
 (redraw)
 (setq	sslst (ssget "_F"
	     (reverse plst)
	     (list (assoc 0 (entget crb))
		   (assoc 8 (entget crb))
	     )
      )
 )
 (if sslst
   (progn
     (setq sslst (ssnamex sslst)
    acdoc (vla-get-ActiveDocument (vlax-get-acad-object))
     )
     (vla-StartUndoMark acdoc)
     (mapcar '(lambda (x)
	 (vla-Move (vlax-ename->vla-object (cadr x))
		   (vlax-3d-point '(0 0 0))
		   (vlax-3d-point (list 0 0 alt))
	 )
	 (if (= txt "Oui")
	   (progn
	     (setq pt (cadr (cadddr x)))
	     (if (setq vec (caddr (cadddr x)))
	       (setq scl (/ (- (caddr pt)) (caddr vec))
		     pt	 (list (+ (car pt) (* (car vec) scl))
			       (+ (cadr pt) (* (cadr vec) scl))
			       alt
			 )
	       )
	       (setq pt (list (car pt) (cadr pt) alt))
	     )
	     (vla-add (vla-get-Layers acdoc) "Altitudes_C-N")
	     (vla-put-Layer
	       (vla-addText
		 (vla-get-ModelSpace acdoc)
		 (rtos alt 2 1)
		 (vlax-3d-point pt)
		 (getvar "TEXTSIZE")
	       )
	       "Altitudes_C-N"
	     )
	   )
	 )
	 (setq alt (+ alt equ))
       )
      sslst
     )
     (vla-endUndoMark acdoc)
   )
 )
 (princ)
) 

 

[Edité le 27/10/2007 par (gile)]

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

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é