zebulon_ Posté(e) le 4 mai 2021 Posté(e) le 4 mai 2021 Bonjour, les explications concernant les bulges sur da-code et sur AfraLISP part 1 AfraLISP part2 En gros, le bulge c'est la tangente du quart de l'angle au centre, le signe indiquant la direction. Compte tenu de cette définition, on s'explique pourquoi on peut facilement transformer un arc en polyligne, mais que c'est impossible de transformer un cercle en polyligne ou de créer une polyligne contenant un segment cercle. Pourquoi ? Simplement parce qu'un cercle a un angle au centre de 2pi. Ainsi, tan 2pi/4 = tan pi/2 = (sin pi/2) / (cos pi/2) = 1/0 -> division par 0 Le seul moyen de représenter un cercle en polyligne (si on veut lui donner une épaisseur par exemple) c'est de dessiner ce cercle sous forme de deux arcs dont les angles au centre sont pi et le bulge de 1 (ou un autre découpage si, curieusement, on ne veut pas de symétrie). Un segment cercle, non, deux segments arcs, oui. Amitiés Vincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
(gile) Posté(e) le 4 mai 2021 Posté(e) le 4 mai 2021 56 minutes ago, zebulon_ said: En gros, le bulge c'est la tangente du quart de l'angle au centre, Autrement dit, c'est le rapport entre la flèche de l'arc et la moitié de sa corde. 1 Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 4 mai 2021 Auteur Posté(e) le 4 mai 2021 5 hours ago, (gile) said: Autrement dit, c'est le rapport entre la flèche de l'arc et la moitié de sa corde. Tout à fait ! Cette figure pour s'en convaincre s'il en est besoin C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
zebulon_ Posté(e) le 5 mai 2021 Auteur Posté(e) le 5 mai 2021 En augmentant l'angle au centre jusqu'à pi, on aura un demi-cercle. La flèche et la demi-corde valent R et le rapport, donc le bulge, vaudra 1. Ça tombe bien tg pi/4 aussi. En continuant d'augmenter l'angle au centre jusqu'à 2pi pour arriver au cercle, on voit tendre la demi-corde vers 0 et donc le rapport flèche sur demi-corde vers la même impossibilité que tg pi/2 Amitiés Vincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Fraid Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 Bonjour, J'utilise le code suivant pour calculer la position de p3, que j'ai écrit grâce au site Afralisp aussi. (defun getptarc (pt1 pt2 bulg / cord ang fle mil mia) (if (/= bulg 0) (setq cord (/ (distance pt1 pt2) 2.0) ang (angle pt1 pt2) fle (* cord (abs bulg)) mil (polar pt1 ang cord) mia (if (> bulg 0) (polar mil (- ang (/ pi 2.0)) fle) (polar mil (+ ang (/ pi 2.0)) fle) ) ) ) mia ) Plusieurs fois, par pure curiosité, j'ai voulu utiliser les fonctions vlax-curve.. à la place du bulge. Je n'y suis jamais arrivé. Bon, comme cela fait déjà un bon bout de temps, j'ai un peux de temps aujourd'hui peut être que cette fois seras la bonne. https://github.com/Fraiddd
bonuscad Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 35 minutes ago, Fraid said: Plusieurs fois, par pure curiosité, j'ai voulu utiliser les fonctions vlax-curve.. à la place du bulge. Je n'y suis jamais arrivé. Bon, comme cela fait déjà un bon bout de temps, j'ai un peux de temps aujourd'hui peut être que cette fois seras la bonne. Bonjour, J'avais répondu à une demande en 2013 faite avec les fonctions vlax-curve. Si tu veux jeté un coup d’œil, c'est là: Supprimer un sommet de polyligne en créant un arc Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
Fraid Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 Merci, j'irais jeté un coup d’œil si je n'y arrive pas. pour l'instant j'en suis à tester ma fonction doit ressembler à cela (getptarc pt1 pt2 param) je sais récupérer les points du segment je cherche quel paramètre je doit utiliser pour mon calcul je cherche un maximum par moi même sinon cela ne vas jamais rentrer. https://github.com/Fraiddd
Luna Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 (modifié) Coucou, Petite question comme chat mais, en utilisant les (vlax-curve-*) on peut déterminer le point du milieu de la courbe via le param (fix (+ n 0.5)) nan ? (setq name (car (entsel))) (setq n 0) (setq pt1 (vlax-curve-getPointAtParam name n)) (setq pt2 (vlax-curve-getPointAtParam name (1+ n))) (setq mia (vlax-curve-getPointAtParam name (+ n 0.5))) (setq cord (distance pt1 pt2)) (setq mil (polar pt1 (angle pt1 pt2) (/ cord 2.0))) (setq fle (distance mia mil)) (if (> (/ (setq a1i (angle pt1 mia)) pi) 1) (setq a1i (* (- 1) (rem a1i pi))) ) (setq a12 (angle pt1 pt2)) (cond ((< a1i a12) (setq bulge (/ fle (/ cord 2.0))) ) ((> a1i a12) (setq bulge (* (- 1) (/ fle (/ cord 2.0)))) ) ((= fle 0) (setq bulge 0) ) ) Pas testé mais cela fonctionne-t-il en passant par les (vlax-curve-*) ? Bisous, Luna Modifié le 5 mai 2021 par Luna Correction du code
didier Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 Bonjour Ceci fonctionne pour trouver le point milieu du segment sélectionné, que ce soit un arc ou un alignement droit Vous me donnez des idées et je vais sans doute m'en servir pour étoffer ma page sur les polylignes Amicalement (setq ent (entsel)) (setq entvla (vlax-ename->vla-object (car ent))) (setq pmil (vlax-curve-getpointatparam entvla (+ 0.5 (fix (vlax-curve-getparamatpoint entvla (osnap (cadr ent) "_nea"))) ) ) ) Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 @didier, les fonctions (vlax-curve-*) fonctionnent parfaitement bien avec l'ename directement (et même plus rapidement), cela évite la conversion (vlax-ename->vla-object) :3 Sinon c'est en effet un belle méthode, je n'ai encore jamais utilisée la fonction (osnap), sûrement par manque de connaissance et de temps ^^" Bisous, Luna
Fraid Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 je viens de recevoir les billes de mon chantier, je m'y remettrai ce soir, mais en regardant vite fait vos codes, je me dit que suis passé à coté de quelque chose... déjà que l'indice d'un segment peut être un réel comme 0.5 ....je pensais que c'étais forcement un entier. Sinon Didier, tu ne calcul pas le p3 sur ta page Bulge. Cordialement https://github.com/Fraiddd
didier Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 Bonjour @fred Non je ne calcule pas ce p3, ce milieu d'arc ne me semble pas utile, mais pourquoi pas Comme je disais ces discussions me donnent des idées d'amélioration de mes pages, merci. Pour ce qui est du paramètre, il me semblait l'avoir expliqué (j'ai retrouvé la page que je te mets en lin à la fin) Chaque sommet est un nombre entier 1 2 3 ou 4... mais exprimé sous forme de réel et entre chaque paramètre de sommet, il y a une infinité de paramètres exprimés sous forme de réels, la partie entière est le paramètre précédent et la partie décimale est le pourcentage en distance depuis le paramètre précédent, donc le milieu entre 2 et 3 est 2.50, le tiers entre 4 et 5 est 4.33333. On est OK ? La page est ICI dans le chapitre polyligne Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
Luna Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 Et bien depuis que j'ai compris qu'un sommet de polyligne correspondait à la position du sommet au sein de la polyligne (valeur entière) avec le premier sommet = 0, j'ai compris que le paramètre correspondait à une répartition. Si l'on prend les param 0 et 1 (donc le segment entre le premier et second sommet), on peut diviser le segment en pourcentage :3 Autrement dit 0+50% correspond à 50% de la distance linéaire séparant le param 0 et 1, donc le milieu du segment. Si l'on veut diviser chaque segments en 4 parties égales, il suffit de récupérer les points aux paramètres 0+25%, 0+50% et 0+75% :3 Pour la généralisation on prend n le numéro du sommet de la polyligne (0 pour le sommet de départ) : Coordonnées de la position de la poignée milieu du segment [n, (1+ n)] définies par (vlax-curve-getPointAtParam ename (+ n 0.5)) Division d'un segment [n, (1+ n)], avec i le nombre de divisions (= (type i) 'REAL) on a (setq c 0) (repeat (1- i) (setq c (+ c (/ 1 i))) (setq pt (vlax-curve-getPointAtParam ename (+ n c))) (setq pt-list (cons pt pt-list)) ) Cela simplifie beaucoup la compréhension et l'utilisation de ces Param, car on n'a pas à utiliser les fonctions (distance) et autres ;3 Bisous, Luna
didier Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 Bonjour @Luna Tout à fait... "Avant' il fallait calculer la distance entre les sommets et la diviser pour obtenir la position du point (xy) "Maintenant" on part de la position en pourcentage (sans connaître la distance) et on a le point. Amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
(gile) Posté(e) le 5 mai 2021 Posté(e) le 5 mai 2021 La notion de bulge est un moyen très efficient pour conserver l'information concernant la courbure d'un segment de polyligne avec un seul nombre (notamment dans le DXF), mais du coup, c'est moins pratique pour faire directement des calculs. D'un autre côté, les fonctions vlax-curve exposent à l'environnement Visual LISP (pas d'équivalent en VBA ou en AutoLISP sur MAC) une petite partie d'une API ObjectARX et .NET qui définit des objets purement géométriques (sans représentation graphique) utilisés pour les calculs géométriques, celle concernant les objets curvilignes. C'est aussi dans cet environnement que la notion de "paramètre" pour les objets curvilignes est définie (à ma connaissance, elle n'existe dans les données DXF des entités que pour les ellipses, CF un récent challenge). J'avais essayé, il y a quelques temps maintenant de démarrer un sujet sur les paramètres des objets curvilignes. En .NET la classe Curve2d (il y a un équivalent Curve3d) est la classe de base pour, entre autres, les classes CompositeCurve2d, CircularArc2d et LinearEntity2d, cette dernière étant la classe de base pour LineSegment2d. Dans cet environnement, une polyligne correspond à un CompositeCurve2d qui est une succession de LineSegment2d ou de CircularArc2d jointifs. Avec .NET on récupère directement l'objet géométrique correspondant à un segment de polyligne en arc via la méthode GetArcSegment2dAt(index) et on accède ainsi directement à toutes ses propriétés. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
zebulon_ Posté(e) le 5 mai 2021 Auteur Posté(e) le 5 mai 2021 Bonjour Pour les polylignes, les paramètres sont clairement identifiés, plus par des observations concrètes que par ce qu'on trouve au niveau de l'aide. Par ailleurs, les paramètres renvoyés par d'autres types d'entités ne sont pas du tout de même nature que ceux de la polyligne et restent assez ésotériques pour certaines Amitiés Vincent C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme) C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)
Messages recommandés
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 compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant