Aller au contenu

Distance point/droite


DenisHen

Messages recommandés

Bonjour à tous.

 

Voilà, aujourd'hui, je cherche à insérer un bloc suivant 3 points (Pt1, Pt2 et Pt3).

 

Ces points me servent ainsi :

 

Pt1 = point d'insertion du bloc,

Pt2 = orientation du bloc,

Distance Pt1 à Pt2 = échelle en X du bloc

Distance Pt3 à la droite Pt1/Pt2 = échelle en Y du bloc...

 

Vous l'aurez sans doute compris, j'insert un bloc type plaque d'égout, avaloir...

 

Si quelqu'un a une solution, une idée, une astuce... je suis preneur...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Puisque tu insères un bloc il ne doit pas être possible de faire varier les dimensions en fonction des points levés.

Les plaques dont tu parles sortent d'usine par milliers (millions) et ont toutes les mêmes dimensions par modèle.

 

Du temps où je faisais ce que tu fais aujourd'hui j'insérais un bloc mais sans le changer de taille (échelle X et Y)

en le calant "au mieux" entre les points levés, l'idéal est la diagonale pour les plaques carrées

 

Si tu insères une plaque de 80 au carré et que les points topo donnent 0.82 et 0.79 c'est les points qui sont mal pris (imprécision due au revêtement par exemple)absolument pas la plaque qui doit changer de dimension.

Si tu insères des plaques "telecom", tu ne prends que deux points sur le terrain et tu te baisses, tu sors ton double-mètre et tu mesures, mais en vrai tu les reconnais rapidement donc avec les points de la diagonale tu connais le type de chambre.

 

Il faut arrêter de dessiner en s’appuyant (millimétriquement) sur les points topo, c'est, entre autre, à cause de ce genre d'erreur que je n'aime pas les levés codés.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Salut didier, et merci pour tes remarques, judicieuses comme toujours...

 

Je suis entièrement d'accord avec toi, un tampon de Ø 65 restera toujours de Ø 65... Pourquoi les plaques levés en plusieurs points ne suivraient pas la même logique ?

 

Mais dans mon cas, je ferais comme toi, une plaque de 80 doit restée à 80, mais si la distance entre mon poit Pt3 et la droite Pt1/Pt2 est de 79, j'arrondirais à 80 (selon une certaines cotes) et insérerais mon bloc au milieu de la diagonale Pt1/Pt3 orientée Pt1/Pt2 et avec les bonnes échelles "telles" que sur le terrain et non selon le levé.

 

Résultat, mon bloc ne sera pas forcément sur les points levés, mais il sera au meilleur emplacement tel qu'il aurait été levé "théoriquement" et avec des cotes "réelles".

 

Au final, je trierais les cotes levées avec les cotes réelles des blocs selon plusieurs critères (EDF, PTT, Fibre...) pour une insertion plus vrai que le levé... Je ne sais pas encore comment je vais faire, mais j'ai une petite idée.

 

Donc, je suis toujours à la recherche d'un calcul point/droite...

 

Et bon week-end à tous...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Je veux bien t'aider ... mais tu n'as pas besoin de cette distance si tu as les points en diagonale.

Tu as plus besoin, mais je pense que tu sais le faire, de calculer le milieu de deux points pour insérer ton bloc, à condition que le point d'insertion soit au milieu de la diagonale bien sûr.

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Re.

 

Mon problème est que le troisième point de levé se trouve quelque-part sur le coté opposé à Pt1/Pt2.

 

Pt1/Pt3 ne représente donc pas l'exacte diagonale. Et la distance Pt2/Pt3 ne représente pas non plus la largeur du bloc...Par contre, la distance point/droite entre Pt3 et Pt1/Pt2 est la largeur levée du bloc.

 

Je ne peut pas m'en tirer, comme tu me l'indiques, avec les deux moitiés de la longueur et de la largeur puisque Pt3 n'est pas "bien placé"...

 

Je me suis relu et ne suis pas sûr d'avoir été très clair... :huh:

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Après réflexion, il faudrait créer un point Pt4 sur la droite Pt1/Pt2 à la perpendiculaire de Pt3...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Ah bien sûr !!! si c'est la fête !!!!

Tu me donnes le nom des topo s'il te plaît, quand je verrai passer les CV je saurai où les ranger ***

Fais passer un croquis ou un bout de fichier s'il te plaît.

 

Amicalement

 

***je blague, je suis obligé de le dire car les susceptibilités sont souvent exacerbées sur le site

Lien vers le commentaire
Partager sur d’autres sites

Salut

 

Deux petites routine extraite de la bibliothèque MathGeom.lsp sur cette page.

 

;; gc:DistanceTo
;; Retourne la distance du point pt à la droite p1 p2
;;
;; Arguments
;; pt : le point extérieur à la droite
;; p1 : un point sur la droite
;; p2 : un point sur la droite
(defun gc:DistanceTo (pt p1 p2)
 ((lambda (v)
    (/
      (distance '(0. 0. 0.) (gc:CrossProduct (mapcar '- pt p1) v))
      (distance '(0. 0. 0.) v)
    )
  )
   (mapcar '- p2 p1)
 )
)

;; gc:CrossProduct
;; Retourne le produit vectoriel (vecteur) de deux vecteurs
;; Arguments
;; v1, v2 : deux vecteurs
(defun gc:CrossProduct (v1 v2)
 (list	(- (* (cadr v1) (caddr v2)) (* (caddr v1) (cadr v2)))
(- (* (caddr v1) (car v2)) (* (car v1) (caddr v2)))
(- (* (car v1) (cadr v2)) (* (cadr v1) (car v2)))
 )
)

 

La routine gc:DistanceTo ci-dessus fonctionne dans l'espace (3D), pour la distance entre un point et une droite du plan (2D), on peut faire plus simple :

 

(defun dist2d (pt p1 p2 / a B)
 ;; valeurs a et b de l'équation de la droite y = ax + b
 (setq	a (/ (- (cadr p2) (cadr p1)) (- (car p2) (car p1)))
b (- (cadr p1) (* a (car p1)))
 )
 (/ (abs (+ (* a (car pt)) (- (cadr pt)) B))
    (sqrt (+ (* a a) 1.))
 )
)

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

Lien vers le commentaire
Partager sur d’autres sites

Didier : Je pense que le plus responsable dans cette histoire, je veux dire, la façon dont mes collègues de terrain saisissent leur levé, vient du logiciel topo LAND2MAP d'ATLOG qui tourne sous un AutoCAD OEM. Il travaillent sur tablettes et les options de saisies ne permettent pas, ou très difficilement, un levé "strique" qui correspondrait à un levé "exacte".

 

J'entend par là, le lever d'une plaque de 80x40 pile-poil, me parait pas évident sur le terrain... Personnellement, je prendrais la moyenne entre Pt1 et Pt2 et la moyenne entre Pt3 et la droite Pt1/Pt2 comme point d'insertion, avec des échelles "normalisées"...

 

Comme par exemple, si le levé me donne une largeur de 78cm, je corrigerai cette distance en 80cm et insérerai le bloc avec cette échelle de 80 en Y... Mais il faut savoir si c'est une plaque EDF, PTT, Fibre, Vidéo... Car elle n'ont pas toutes les mêmes caractéristiques...

 

Mais le levé se fait comme ça... Raison pour laquelle, j'aimerai passer par le LISP pour faire ce que je pense le mieux, à savoir, ma "logique" de transcription entre le levé et le plus proche de la réalité...

 

 

je blague, je suis obligé de le dire car les susceptibilités sont souvent exacerbées sur le site

 

Ne t'inquiète pas pour ça, je ne suis pas susceptible, et depuis le temps, on commence à connaitre ton humour...

 

(gile) : mille mercis... je vais continuer ma routine en toute quiétude...

 

Merci encore à vous deux...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Oups!...

Pour la distance 2D, j'avais oublié le cas des droites verticales qui provoquent une division par 0.

 

(defun dist2d (pt p1 p2 / a b )
 (if (= (car p2) (car p1)) ; droite vericale : x = constante
   (abs (- (car pt) (car p1)))
   (progn
     ;; valeurs a et b de l'équation de la droite y = ax + b
     (setq a (/ (- (cadr p2) (cadr p1)) (- (car p2) (car p1)))
    b (- (cadr p1) (* a (car p1)))
     )
     (/ (abs (+ (* a (car pt)) (- (cadr pt)) b ))
 (sqrt (+ (* a a) 1.))
     )
   )
 )
)

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

Lien vers le commentaire
Partager sur d’autres sites

merci (gile) pour ce complément...

 

Mais ça ne fonctionne pas comme je le voudrais (aucun rapport avec dist2d)

 

Voilà, ça fait 2 heures que je m'acharne, mon problème est encore ce foutu angle d'insertion du bloc... J'ai écrit ça dans un fichier "test" :

;;;***********************************************
;;; Insertion d'un bloc par trois points moyennés 
;;;***********************************************
(defun c:InsBlk3Pt (Bloc / x_angle Pt1 Pt2 Pt3 pt4 Pt5 Pt6 Larg Long)
;;;(c:InsBlk3Pt "BlkTest")
 (setvar "osmode" 8)
 (setq Pt1 (getpoint "\nPoint d'insertion du bloc : "))
 (setq Pt2 (getpoint "\nOrientation et échelle en X du bloc : "))
 (setq Pt3 (getpoint "\nEchelle en Y du bloc : "))
 (setvar "osmode" 0)
 (setq Larg (dist2d Pt3 Pt1 Pt2))
 (setq Long (distance Pt1 Pt2))
;;; Point au milieu de Pt1 Pt2
 (setq Pt4 (polar Pt1 (angle Pt1 Pt2) (/ (distance Pt1 Pt2) 2)))
;;; Point d'insertion
 (setq Pt5 (polar Pt4 (+ (angle Pt1 pt2) (/ pi 2)) (/ Larg 2)))
;;; Orientation du bloc
 (setq Pt6 (polar Pt5 (angle Pt1 Pt2) (distance Pt1 Pt4)))
;;; Angle d'insertion
 (setq x_angle (angle Pt1 Pt2))
 (command-s "_insert" Bloc Pt5 Long Larg 1 Pt6)
;;;
 (command-s "texte" "j" "mc" Pt4 0.1 100 "Pt4")
 (command-s "point" Pt4)
 (command-s "texte" "j" "mc" Pt5 0.1 100 "Pt5")
 (command-s "point" Pt5)
 (command-s "texte" "j" "mc" Pt6 0.1 100 "Pt6")
 (command-s "point" Pt6)
;;;(CtrlSvGrd)
 (princ)
) ;_ Fin de defun

 

Tous les points sont correctement calculés, contrôlés avec les (command-s "texte", les échelles sont bonnes...

 

Mais l'angle d'insertion est systématiquement faux... Je me perd encore et toujours avec les angles, j'ai essayé avec des angles en radian, avec (angtos Pt1 Pt2), avec un point (Pt6) Rien n'y fait ! ! !

 

J'en rage ! ! ! :huh:

 

Si vous avez la solution, l'apéro est pour moi... :)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Tes explications sont claires pour toi.

 

Définition du bloc ?

On ne sait pas où est le point d'insertion du bloc

On ne sait pas si la largeur est sur l'axe des X.

On ne sait pas ....

 

Fais passer un bout de fichier avec le bloc à insérer s'il te plaît,

et avec les trois points concernés, peut-être qu'on pourra en faire plus pour toi

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Aucun problème Didier, et merci pour votre aide Messieurs...

 

Voici le lien WeTransfer. Il y a le fichier et le bloc...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Il faut garder en mémoire qu'AutoCAD (comme tous les calculateurs géométriques qui utilisent des angles) travaille toujours en radians. La fonction LISP angle, par exemple, retourne un angle en radians.

Il faut aussi garder en mémoire que la fonction command (comme les fonctions get* qui utilisent aussi l'éditeur AutoCAD) utilisent les paramètres courants (unités angulaire, SCU courant, etc.).

 

Donc, dans ton cas, les points récupérés avec getpoint sont bien définis dans le SCU courant donc utilisables tels quels dans un appel de commande.

(angle pt1 pt2) retourne l'angle en radians entre pt1 et pt2 (dans le SCU courant).

Il s'agit donc de convertir cet angle dans l'unité angulaire courante.

Comme la fonction command accepte les chaînes de caractères comme argument, la fonction angtos est directement utilisable :

(command-s "_insert" Bloc Pt5 "_x" Long "_y" Larg "_rotation" (angtos (angle pt1 pt2)))

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

Lien vers le commentaire
Partager sur d’autres sites

Merci (gile) pour ton aide... Encore une fois, ton intervention est une leçon pour nous...

 

Mais la définition de mon bloc fonctionne mieux avec :

(command-s "_insert" Bloc Pt5 "_x" Long "_y" Larg "_z" 1 "_rotation" (angtos (+ (angle pt1 pt2) (/ pi 2))))

Heureusement que tu étais là...

 

Maintenant, je peut me pencher sur le reste du code, qui est, le choix des longueurs et largeur "corrigées" pour palier le fait que le levé engendre une longueur et/ou une largeur différentes de la réalité, comme nous le précisait Didier...

 

Il ne me reste plus qu'à faire une liste des entités (plaques PTT, EDF, fibre, gaz, vidéo, eaux potables, usées, pluviales...) pour choisir les vrais valeurs de leurs échelles... Une plaque de 80x40 DOIT resté à 80x40, même si elle est levée en 79x42, par exemple...

 

Tout ça pour respecter, ce que disait Didier est avec lequel je suis entièrement d'accord... ;)

 

Encore merci à Maitre (gile)... Et Didier...

 

Denis...

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Bonjour,

À la fin de ta saisie de bloc, tu peux demander une option, "aligné sur ?" en choisissant une bordure ou un bâtiment ...

tu récupères l'angle et l'appliques à ton bloc

c'est plus "propre" quand toutes les plaques sont bien alignées

C'est juste une petite idée

write a book about what ??

Lien vers le commentaire
Partager sur d’autres sites

Salut lrdb@home

 

c'est plus "propre" quand toutes les plaques sont bien alignées

Mais ça ne représente absolument pas la réalité, si les plaques sont de travers sur le terrain, le plan DOIT les représenté tel-quel... Tu ne croix pas ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Pour ceux que ça peut intéresser, voici le code en entier :

;;;***********************************************
;;; Insertion d'un bloc par trois points moyennés 
;;;***********************************************
(defun c:InsBlk3Pt (Bloc / Pt1 Pt2 Pt3 pt4 Pt5 Larg Long)
;;;(c:InsBlk3Pt "BlkTest")
 (setvar "osmode" 8)
 (setq Pt1 (getpoint "\nPoint d'insertion du bloc : "))
 (setq Pt2 (getpoint "\nOrientation et échelle en X du bloc : "))
 (setq Pt3 (getpoint "\nEchelle en Y du bloc : "))
 (setvar "osmode" 0)
 (setq Larg (dist2d Pt3 Pt1 Pt2))
 (setq Long (distance Pt1 Pt2))
;;; Point au milieu de Pt1 Pt2
 (setq Pt4 (polar Pt1 (angle Pt1 Pt2) (/ (distance Pt1 Pt2) 2)))
;;; Point d'insertion
 (setq Pt5 (polar Pt4 (+ (angle Pt1 pt2) (/ pi 2)) (/ Larg 2)))
 (command-s "_insert" Bloc Pt5 "_x" Long "_y" Larg "_z" 1 "_rotation" (angtos (+ (angle pt1 pt2) (/ pi 2))))
;;;
 (princ)
) ;_ Fin de defun

;;;*********************************
;;; Calcul la distance Point/Droite 
;;;*********************************
(defun dist2d (pt p1 p2 / a b )
 (if (= (car p2) (car p1)) ; droite vericale : x = constante
   (abs (- (car pt) (car p1)))
   (progn
     ;; valeurs a et b de l'équation de la droite y = ax + b
     (setq a (/ (- (cadr p2) (cadr p1)) (- (car p2) (car p1)))
           b (- (cadr p1) (* a (car p1)))
     )
     (/ (abs (+ (* a (car pt)) (- (cadr pt)) b ))
        (sqrt (+ (* a a) 1.))
     )
   )
 )
)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut,

 

Juste une remarque, quand tu fais :

(angtos (+ (angle pt1 pt2) (/ pi 2)))

tu ajoutes pi/2 radians (ou 90°, ou 100gr) à l'angle.

Je suppose que tu as besoin de faire ça parce que dans ton dessin la variable ANGBASE vaut pi/2 radians (ou 90°, ou 100gr), mais tout le monde ne paramètre pas ses dessins comme ça, donc si tu veux que ton programme fonctionne quelle que soit la valeur de ANGBASE, il vaut mieux faire:

(angtos (+ (angle pt1 pt2) (getvar "ANGBASE")))

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

Lien vers le commentaire
Partager sur d’autres sites

Coucou

 

Décidément il est écrit que je passerai derrière Toi (gile) !!!

 

Je ne pense pas que le code proposé fonctionne dans tous les cas de figure.

Je pense en particulier au troisième point à droite de la droite p1 p2 ça devrait pas coller ...

À suivre...

 

Amicalement

Lien vers le commentaire
Partager sur d’autres sites

Salut (gile).

 

C'est exactement ça... Merci, c'est nickel, une fois de plus... ;)

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Je pense en particulier au troisième point à droite de la droite p1 p2 ça devrait pas coller ...

Tu veux parler du code, ou de la représentation du levé qui ne serait pas "conforme" à la réalité ?

Windows 11 / AutoCAD 2024

Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net).
Davantage d'avantages, avantagent davantage (Bobby Lapointe).
La connaissance s'accroît quand on la partage (Socrate).
Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)

Lien vers le commentaire
Partager sur d’autres sites

Salut Denis,

Mais ça ne représente absolument pas la réalité, si les plaques sont de travers sur le terrain, le plan DOIT les représenté tel-quel... Tu ne croix pas ?

 

Je ne sais pas trop ce que tu cherches à faire,mais tu as dis que tu arrondissais la taille des plaques et donc pourquoi pas arrondir l'angle ( essaie de prendre 2 fois une petite plaque , m'étonnerais beaucoup qu'elles soient parfaitement identiques , je parle de levé)

j'avais réalisé la même chose mais en vba sur microstation en dynamique.

Obligé de réaliser une petite feinte:

tu places d'abord ton bloc avec orientation et échelle proportionnelle, ton bloc est "écrit"

et ensuite (discrètement ) tu changes l'échelle y de ton bloc par 2 points ( pt1 pt3) ou (pt2 pt3)

write a book about what ??

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é