Aller au contenu

pente entre 2 pts


x_all

Messages recommandés

Bonjour

 

est ce que quelqu’un à sous la main une routine pour calculer la pente entre 2 pts. Le but étant un peu comme la commande distance, de cliquer 2 points et d'afficher le pente entre ces 2 points.

il me semblais que Covadis avait cette fonction, mais je le la retouve pas dans les menu...

 

merci

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

J'avais trouvé ça sur Cadxp

Ca doit être de Gile je crois.

 

(defun c:PenteZ	(/ pt1 pt2 pente)
 (and
   (princ (strcat "\nTapez entrée pour changer la hauteur de texte: " (rtos (getvar 'textsize))))
   (not
     (while (not (setq pt1 (getpoint "\nPremier point <Hauteur>: ")))
(initget 7)
(setvar 'textsize (getdist "\nHauteur de texte:"))
pt1
     )
   )
   (setq pt2 (getpoint pt1 "\nDeuxième point: "))
   (setq pente	(* 100
	   (/ (- (caddr pt2) (caddr pt1))
	      (distance	(list (car pt1) (cadr pt1))
			(list (car pt2) (cadr pt2))
	      )
	   )
	)
   )
   (entmake
     (list
'(0 . "TEXT")
'(10 0. 0. 0.)
(cons 11
      (trans (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.)) pt1 pt2)
	     1
	     0
      )
)
(cons 1
      (if (minusp pente)
	(strcat (rtos (abs pente) 2 2) "% >")
	(strcat "< " (rtos pente 2 2) "%")
      )
)
(cons 40 (getvar 'textsize))
(cons 50
      (+ (angle pt1 pt2) (angle '(0. 0. 0.) (getvar 'ucsxdir)))
)
'(72 . 1)
'(73 . 2)
     )
   )
 )
 (princ)
)

Lien vers le commentaire
Partager sur d’autres sites

ha yes merci pour cette piqure de rappel covadien... et pour cette exhumation du lisp de sans doute (gile)

 

les deux font parfaitement l'affaire...

mais à la lecture du code, je comprend vraiment pas comment il fait...

j'avais commencer à réfléchir à un code, et apparemment il y avait plus simple...

 

merci à vous deux... et à (gile) :)

 

ho pinaise ça y est... bien sur en passant par distance on gagne du temps !!

Lien vers le commentaire
Partager sur d’autres sites

B'jour...

 

je me permet une petite "remarque" avec la commande affgidis qui diffère un peu de la commande distance, et pour lequel j'ai déjà eu des soucis en lisant trop rapidement les infos données!

 

Si on prend la mesure sur l'extrémité d'une polyligne partant d'un point topo, mais avec une altitude différente du point topo (une poly projet et un point topo TN par ex!), la commande distance prend bien l'altitude de la polyligne alors que la commande affgidis prendra malgré tout l'altitude du point topo!

 

Bonne soirée!

Xav

AutoCad Map 3D 2011 - Covadis v16.0d

Windows 7 - 64b

Lien vers le commentaire
Partager sur d’autres sites

hello

just for the fun

en m'inspirant du lisp plus haut jai fait ca

pourcentage de pente entre 2 blocs points.

il suffit de cliquer sur l'attribut altitude du premier bloc

et sur l'attribut altitude du deuxième bloc point

les altitudes sont prise dans l'attibut

donc les blocs point peuvent etre inserés en 2D

 

merci a patrick35 pour le point d'insertion du bloc

merci a (gile) pour la fonction sur les variant

 

bref, je n'ai pas fait grand chose ............

 

(defun c:pente%	 ()
 (prompt "\nAttribut altitude du 1er bloc :")
 (setq att (vlax-ename->vla-object (setq ent1 (car (nentsel)))))
;;;;;;;;;;;;;;;;;
 (setq alt1 (atof (cdr (assoc 1 (entget ent1)))))
 (setq	pt1 (trans (gc:VariantToLispData
	     (vla-get-InsertionPoint
	       (vla-objectidtoobject
		 (vla-get-database att)
		 (vla-get-ownerid att))))
	   0
	   1))




 (prompt "\nAttribut altitude du 2eme bloc :")
 (setq att (vlax-ename->vla-object (setq ent1 (car (nentsel)))))

;;;;;;;;;;;;;;;;;
 (setq alt2 (atof (cdr (assoc 1 (entget ent1)))))
 (setq	pt2 (trans (gc:VariantToLispData
	     (vla-get-InsertionPoint
	       (vla-objectidtoobject
		 (vla-get-database att)
		 (vla-get-ownerid att))))
	   0
	   1)
)
 (setq	pente (* 100
	 (/ (- alt2 alt1)
	    (distance (list (car pt1) (cadr pt1))
		      (list (car pt2) (cadr pt2))
		      )
	    )
	 )
)

 (entmake
   (list
     '(0 . "TEXT")
     '(10 0. 0. 0.)
     (cons 11
    (trans (mapcar '(lambda (x1 x2) (/ (+ x1 x2) 2.)) pt1 pt2)
	   1
	   0
	   )
    )
     (cons 1
    (if	(minusp pente)
      (strcat (rtos (abs pente) 2 2) "% >")
      (strcat "< " (rtos pente 2 2) "%")
      )
    )
     (cons 40 (getvar 'textsize))
     (cons 50
    (+ (angle pt1 pt2) (angle '(0. 0. 0.) (getvar 'ucsxdir)))
    )
     '(72 . 1)
     '(73 . 2)
     )
   )

 (grdraw pt1 pt2 1 -1)

 )




(defun gc:VariantToLispData (var)
 (cond
   ((= (type var) 'variant)
    (gc:VariantToLispData (vlax-variant-value var)))
   ((= (type var) 'safearray)
    (mapcar 'gc:VariantToLispData (vlax-safearray->list var))
   )
   (var)
 )
)

Vous fîtes ce que vous pûtes

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

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é