Luna Posté(e) le 23 mars 2022 Posté(e) le 23 mars 2022 Coucou, Je me souviens avoir écrit une fonction dans ce principe il y a longtemps : ; Permet de récupérer les coordonnées et données associées d'un point situé à une distance spécifiée d'un élément linéaire : ;--- La fonction (get-AlignPoint-AtDist) possède 3 arguments ;--- curve-obj correspond au nom d'entité de l'objet servant de référence (peut être le nom d'entité ou le VLA-Object) ;--- dist correspond à l'emplacement du point situé sur la courbe pour une distance donnée depuis le point de départ ;--- e correspond au décalage de la courbe de référence. Une valeur positive placera le point calculé au-dessus de la courbe de référence et une valeur négative ; placera le point calculé au-dessous de la courbe de référence (dans le sens de lecture de la courbe) ;---Renvoie une liste de paire pointée de la forme ; ((-1 . <Nom d'entité>) (10 . PointOnCurve) (11 . PointOutsideCurve) (50 . Angle-Rad_Tangente) (1041 . DistanceOnCurve)) ; si l'objet n'est pas un objet linéaire, retourne nil (defun get-AlignPoint-AtDist (curve-obj dist e / lg u a b pt Ang Align) (cond ((= (type curve-obj) 'VLA-OBJECT) (setq curve-obj (vlax-vla-object->ename curve-obj))) ((= (type curve-obj) 'ENAME) (setq curve-obj curve-obj)) (t ((exit) (princ))) ) (if (wcmatch (cdr (assoc 0 (entget curve-obj))) "ARC,CIRCLE,ELLIPSE,*LINE") (progn (cond ((> dist (setq lg (vlax-curve-getdistatparam curve-obj (vlax-curve-getendparam curve-obj)))) (setq dist lg) ) ((< dist 0) (setq dist 0.0) ) ) (setq u (vlax-curve-getfirstderiv curve-obj (vlax-curve-getparamatdist curve-obj dist)) a (car u) b (cadr u) pt (vlax-curve-getpointatdist curve-obj dist) Align (polar pt (setq Ang (angle '(0.0 0.0 0.0) (list (- b) a 0.0))) e) ) (list (cons -1 curve-obj) (cons 10 pt) (cons 11 Align) (cons 50 (cond ((not (minusp e)) (- Ang (/ pi 2.0))) ((minusp e) (+ Ang (/ pi 2.0))))) (cons 1041 dist)) ) ) ) Donc si on épure la fonction pour pouvoir ensuite l'intégrer dans le programme SEGLEN, on peut avoir ceci : (defun AlignPoint (curve pt d / u a b) (setq u (vlax-curve-getFirstDeriv curve (vlax-curve-getParamAtPoint curve pt)) a (car u) b (cadr u) pt (polar pt (angle '(0.0 0.0 0.0) (list (- b) a 0.0)) d) ) ) Et du coup il te suffit de remplacer les lignes (vlax-3d-point pt) par (vlax-3d-point (AlignPoint obj pt d)) et d'ajouter la ligne (setq d 0.15) (ou autre valeur, car je ne sais pas dans quelle unité de dessin tu travailles..) au début du programme, voire si besoin si tu veux avoir le choix pour la distance 😉 (setq d (getreal "\nSpécifier la distance entre chaque segment et le texte implanté : ")) Ne pas oublier de rajouter la variable 'd' dans les variables locales et la fonction (AlignPoint) si tu veux que chat marche ! Si c'est trop compliqué à faire ou si tu as peur d'oublier quelque chose, je peux aussi re-poster le programme modifié si besoin 🙂 Autre information importante, si 'd' est positif alors le décalage se fera à gauche du segment (en suivant le sens de lecture de la polyligne), et si 'd' est négatif alors le décalage se fera à droite du segment (en suivant le sens de lecture). Bisous, Luna
barbichette Posté(e) le 23 mars 2022 Posté(e) le 23 mars 2022 Salut Luna, Tout d'abord, merci pour ton aide précieuse... ça a fonctionné, mais j'ai maintenant un "problème" : Quand la polyligne est orienté de droite à gauche, le décalage du texte de 15cm (ou de la valeur définie) fait que celui-ci se retrouve "sur la ligne" (par exemple pour 7.02, 1.94, 4.92, 0.58....) Je pense que cela est dû au problème que tu évoques quand à la valeur de "d". ***********************Rien ne sert de courrir, il faut partir à point.
drault Posté(e) le 12 juillet 2023 Posté(e) le 12 juillet 2023 Bonsoir, je retrouve le même problème. Est le style à redéfinir ou dans le code à traiter ? Par avance, merci
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