Aller au contenu

(résolu) point milieu d'un arc


Messages recommandés

Posté(e)

Bonjour

 

je cherche à déterminer le point milieu d'un arc (celui sur lequel il y a la poignée quand on le sélectionne).

Pour une ligne j'avais pondu ça

;;;ft de calcul du point milieu pour les lignes
(defun ptmid (entite / pl1 pl2)
 (setq Pl1 (cdr (assoc 10 entlst)))
 (setq Pl2 (cdr (assoc 11 entlst)))
 (setq
Pmide
	(list (+ (car Pl1) (/ (- (car pl2) (car pl1)) 2))
      (+ (cadr Pl1) (/ (- (cadr pl2) (cadr pl1)) 2))
	)
 )
 
)

au préalable j’extraie Pl1 et Pl2 des données dxf, pour une ligne c'est facile. (même si c'est sans doute perfectible)

Mais pour les arc, je sèche. On a accès au centre, au rayon, au départ et à la fin de l'angle... je suis un peu une grosse buse en trigo ce qui n'arrange rien

 

Si quelqu'un à un petit bout de routine qui traine, je vous remercie d'avance pour le coup de main.

Posté(e)

Bonjour,

 

Puisque tu exploite les données DXF, je vais te donner une piste avec ceux-ci. Avec les fonctions vlax-curve cela aurait été encore plus simple... (milieu de l'objet curviligne)

 

((lambda ( / ent dxf_ent dxf_10 dxf_40 dxf_50 dxf_51)
 (cond
   ((setq ent (entsel))
     (setq
       dxf_ent (entget (car ent))
       dxf_10 (cdr (assoc 10 dxf_ent)); le centre
       dxf_40 (cdr (assoc 40 dxf_ent)); le rayon
       dxf_50 (cdr (assoc 50 dxf_ent)); l'angle de départ (sens trigo)
       dxf_51 (cdr (assoc 51 dxf_ent)); l'angle d'arrivée (idem)
     )
     (trans
       (polar
         dxf_10
         (+
           dxf_50
           (* 0.5
             (-
               (if (< dxf_51 dxf_50); test du passage du dernier quadrant à un quadrant inférieur
                 (+ (* 2 pi) dxf_51)
                 dxf_51
               )
               dxf_50
             )
           )
         )
         dxf_40
       )
       0
       1
     )
   )
 )
))

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

je prend la piste.... bien que mon "temps libre" vient d'en prendre un coup "d'urgence absolue" dans les dents.

 

mais je ne suis pas sectaire, je me sert des dxf car avec mes maigres connaissances je n'ai jamais réussi à absorber le backgrond nécessaire pour être autonome avec le VB

On ne trouve pas beaucoup de littérature en français. En lisp, j'avais choppé un bouquin, mais c'est surtout l'initiation de (gile) qui m'a permis de mettre le pied à l'étrier. Après le peu de fois ou j'ai du me frotter au VB, c'est de mémoire pour des attributs dans des blocs dynamiques. Encore (gile) avait pondu une bonne initiation ici, mais pour un pur benêt, c'est quand même pas évident et j'avais du me faire aider pas mal par des bonnes volontés du forum...

 

Je ne sais pas bien quand j'aurai du temps professionnel pour m'y remettre. mais je garde tout ça au chaud

 

merci encore...

Posté(e)

C'est déjà bien d'essayer de s'y mettre ;)

 

Dans la foulée je te présente du brut en vlax-curve (sans contrôle d'erreur)

Celui devrait fonctionner pour toutes les objets curvilignes: ligne, arc, polyligne, spline, ellipse et cercle (mais ces 2 dernier n'ont pas trop d’intérêt).

Quand tu auras le temps de t'y remettre...

 

((lambda ( / vlaobj)
 (setq vlaobj (vlax-ename->vla-object (car (entsel))))
 (trans
   (vlax-curve-getPointAtParam vlaobj
     (+
       (vlax-curve-getStartParam vlaobj)
       (* 0.5
         (- (vlax-curve-getEndParam vlaobj) (vlax-curve-getStartParam vlaobj))
       )
     )
   )
   0
   1
 )
))

Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius

Posté(e)

Hou lala.. je note encore plus celle là bien que j'ai encore du mal à comprendre comment l'intégrer à mon machin, mais ça va m'éviter de tester si c'est une ligne ou autre chose bref le VB fait d'une paire pas mal de coups.

 

Pour info c'est une routine pour colorier les coupes que je tentais d'améliorer car je ne traite pour l'instant que les lignes mais qu'il y a aussi des arcs, des éclipses et des splines donc ça va le faire pile poil...j'ai besoin pour chaque entité de choper un point à peut près au milieu.

 

merci beaucoup, je redemanderai peut être un coup de main si je m'en sort pas, ...

Posté(e)

je note comme résolu, mais je n'ose partager mon code tant il est imparfait...c'est vraiment codé à l'arrache, je ne gère pas les erreurs et si la moulinette me fait gagner pas mal de temps, j'ai peur que pour qq1 qui en aurai l'utilité elle ne sois pas assez finalisée pour être fiable...

 

mais merci tout plein ça me sort d'une bonne galère.

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é