Bonjour, j'aimerais une fonction permettant de tourner automatiquement l'attribut ALT du bloc TCPOINT parallele à la polyligne la plus proche.
Covadis permet la rotation suivant une polyligne unique et non pas la polyligne la plus proche avec un rayon de recherche.
1) selection des objets par une capture
2) Valider
3) la rotation de tous les attributs se fait automatiquement
Merci d'avance
En pièce jointe un extrait de mon fichier
Résolu ! Accéder à la solution.
Résolu par O_Eckmann. Accéder à la solution.
Bonjour,
Bien que je ne crois pas trop à ce genre de fonction magique!
Pour le fun j'ai fais cela rapidement pour te monter que le résultat souhaité risque d'être pire que l'initial.
Après le code est sommaire, voir si tu te sens de l'améliorer, pour ma part je juge inutile d'aller plus loin. Il faudrait construire des algos décisionnels et c'est une autre paire de manches...
Pour essayer tu copie-colles directement le code en ligne de commande.
((lambda ( / js d_ray n ent pt_ins js_pl nb ent_pl l_pl l_near l_d ent_near param deriv alpha) (setq js (ssget '((0 . "INSERT") (2 . "TCPOINT")))) (cond (js (initget 1) (setq d_ray (getdist (getvar "VIEWCTR") "\nDistance de recherche?: ")) (repeat (setq n (sslength js)) (setq ent (ssname js (setq n (1- n))) pt_ins (trans (cdr (assoc 10 (entget ent))) 0 1) js_pl (ssget "_C" (mapcar '- pt_ins (list d_ray d_ray 0.0)) (mapcar '+ pt_ins (list d_ray d_ray 0.0)) '((0 . "LWPOLYLINE"))) ) (cond (js_pl (repeat (setq nb (sslength js_pl)) (setq ent_pl (ssname js_pl (setq nb (1- nb))) l_pl (cons ent_pl l_pl) l_near (cons (vlax-curve-getClosestPointTo ent_pl pt_ins T) l_near) l_d (mapcar '(lambda (x) (distance pt_ins x)) l_near) ent_near (nth (vl-position (apply 'min l_d) l_d) l_pl) ) ) (cond (ent_near (setq param (vlax-curve-getParamAtPoint ent_near (vlax-curve-getClosestPointTo ent_near pt_ins T)) deriv (vlax-curve-getfirstderiv ent_near param) alpha (atan (cadr deriv) (car deriv)) ) (vlax-put (vlax-ename->vla-object ent) 'Rotation alpha) ) ) ) ) (setq l_pl nil l_near nil l_d nil ent_near nil) ) ) ) ))
Bonjour,
Avez vous pu avancer de votre coté vers une solution?
Bonjour,
dans le dessin, tous les blocs ont la même rotation, mais les attributs ont été tournés à l'intérieur. Or le Lisp proposé applique une rotation aux blocs donc les rotations relatives internes des attributs ne permettent pas d'aligner les attributs sur les polylignes.
2 solutions:
- BATTMAN pour synchroniser les attributs, ce qui réinitialise les rotations donc les attributs se retrouvent bien parallèle à la ligne la plus proche, mais ça réinitialise également la position des attributs sur les blocs non proches
- modifier le Lisp pour faire tourner les attributs au lieu du bloc
Autre solution, ça ressemble à des points topo issus de Covadis. Si c'est un levé codé, modifier la table de géocodification pour appliquer une rotation au points topo et les aligner sur la ligne la plus proche dès le traitement.
Olivier
Olivier Eckmann
Les points sont bien généré avec Covadis mais ce n'est pas une codification Covadis donc pas possibilité d'avoir cette option lors de la génération.
Cordialement
Pourquoi le lisp ne fonctionne pas sur ce fichier ?
LISP puis fonction BATTMAN
Cordialement
Bonjour,
le lisp ne recherche que les polylignes allégées (LWPOLYLINE) or le dessin ne contient que des polyligne 2D (POLYLINE), donc il faut convertir les anciennes poly en nouvelle avec la commande CONVERT puis option P puis option T
Dans ce dessin, les points topo sont codés (voir si table de codif bien adaptée)
Olivier
Olivier Eckmann
@arbtlm Bonjour,
Votre problème a-t-il été résolu? Si oui, pouvez vous nous indiquer de quelle façon pour que cela profite à la communauté, si non, pouvez vous nous dire si vous avez pu essayer les suggestions qui vous ont été faites?
Si une des réponses à votre question résout votre problème, vous a permis de le comprendre ou contribue significativement à sa résolution, voulez vous avoir l'amabilité de cliquer sur le bouton "Accepter comme solution" en bas de la réponse? Merci.
Vous n'avez pas trouvé ce que vous recherchiez ? Posez une question à la communauté ou partagez vos connaissances.