Aller au contenu

Messages recommandés

Posté(e)

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)

Posté(e)
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.

  • Like 1

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

Posté(e)
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

bulge_2.jpg

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)

Posté(e)

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)

Posté(e)

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.

Posté(e)
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

Posté(e)

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.

Posté(e) (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é par Luna
Correction du code
Posté(e)

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")))
                )
             )
      )

 

Posté(e)

@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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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

Posté(e)

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)

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é