bonuscad Posté(e) le 17 avril 2014 Posté(e) le 17 avril 2014 Bonjour, Quelqu'un aurait t-il une idée pour que le retour de (vlax-curve-getparamatpoint) soit bien évalué dans ce bout de code suivant: (setq vlaobj (vlax-ename->vla-object (car (setq ent (entsel)))) pt (vlax-curve-getClosestPointTo vlaobj (trans (cadr ent) 1 0) ) param (vlax-curve-getparamatpoint vlaobj pt) ) Pour moi j'ai un souci d'évaluation, nil m'est retourné alors que logiquement il devrait me renvoyer un résultat. Le cas ce produit dans un système de coordonnée élevée (mantisse des nombres importante) par exemple du Lambert RGF93Si je dessine simplement une ligne en 2D dans ce système, le code peut me renvoyer nil suivant le point de sélection (c'est très aléatoire, des fois ça fonctionne)Si je déplace ma ligne vers 0,0 , je n'ai plus ce dysfonctionnement. Comment feriez vous pour contourner ce problème (sans faire un kilomètre de code)? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
lecrabe Posté(e) le 17 avril 2014 Posté(e) le 17 avril 2014 Hello Bruno Desole de ne pas pouvoir t'aider car je suis NUL en Lisp/VLisp mais pour Info, j'ai des problemes comparables avec cette excellente routine de Gilles ... C fou de voir comme ca marche mieux en etant proche du 0,0 !? Bye, lecrabe Autodesk Expert Elite Team
(gile) Posté(e) le 17 avril 2014 Posté(e) le 17 avril 2014 Salut, J'ai rencontré ce genre de problème en faisant un programme de simulation de sortie de route sur des circuits automobile (ce n'était pas en LISP mais je pense que le problèmes est le même).Pour contourner ce problème, j'ai déplacé les courbes vers l'origine, fait mon traitement, puis re-déplacé les courbes et les nouveaux objets créés dans l'autre sens. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 17 avril 2014 Auteur Posté(e) le 17 avril 2014 Bonjour (gile) Pour contourner ce problème, j'ai déplacé les courbes vers l'origine, fait mon traitement, puis re-déplacé les courbes et les nouveaux objets créés dans l'autre sens. Mouais, j'aurais bien voulu éviter cette acrobatie... Et en passant par une matrice de déplacement (ce serait plus élégant), tu penses que le résultat serait évalué?Tu y a peut être déjà réfléchi ? Ça serait peut être une solution générale à appliquer, dès que les coordonnées sont importantes, on passe systématiquement les données à une matrice de déplacement en aller-retour. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 17 avril 2014 Posté(e) le 17 avril 2014 Si c'est juste un déplacement de coordonnées, pas besoin de matrice, il suffit d'ajouter ou soustaire un vecteur au point avec mapcar.Mais si tu veux utiliser les fonctions vlax-curve, il faut déplacer les courbes avec vla-Move (ou vla-TransformBy et une matrice, mais c'est un peu compliquer les choses à mon avis). Je n'ai pas d'autre idée. Pour ce problème d'imprécision avec les coordonnées ayant une grande mantisse, le déplacement près de l'origine mes semble le "moins pire". Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 17 avril 2014 Auteur Posté(e) le 17 avril 2014 Mais si tu veux utiliser les fonctions vlax-curve, il faut déplacer les courbes avec vla-Move (ou vla-TransformBy et une matrice, mais c'est un peu compliquer les choses à mon avis). Oui tu as raison! il faut que l'objet reste identifié pour les fonctions vlax-curve, donc vla-move reste la solution la plus simple. Enfin j'espère... car ce bout de code n'était qu'une partie, il faut que je vois l'incidence sur l'ensemble. Je pense être obligé de construire des jeux de sélection pour les entités crées ultérieurement afin de les déplacer en fin d'exécution.(c'est un peu pour ça que je pensais à une matrice, pour les créer directement au bon endroit, enfin je vais voir...) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 17 avril 2014 Auteur Posté(e) le 17 avril 2014 Bon, ça à l'air de fonctionner.Le code que j'ai appliqué pour ceux que ça pourrait intéresser , ramené à l'exemple ça donne ceci (je ne fais le déplacement que si >1E6) ((lambda ( / ent vlaobj mkv vector pt param) (setq vlaobj (vlax-ename->vla-object (car (setq ent (entsel))))) (if (or (> (fix (car (trans (cadr ent) 1 0))) 1E6) (> (fix (cadr (trans (cadr ent) 1 0))) 1E6)) (setq mkv T vector (trans (cadr ent) 0 0 T)) (setq mkv nil vector '(0.0 0.0 0.0)) ) (if mkv (vla-move vlaobj (vlax-3d-point (trans (cadr ent) 1 0)) (vlax-3d-point '(0.0 0.0 0.0)))) (setq pt (vlax-curve-getClosestPointTo vlaobj (if mkv '(0.0 0.0 0.0) (trans (cadr ent) 1 0)) ) param (vlax-curve-getparamatpoint vlaobj pt) ) (if mkv (vla-move vlaobj (vlax-3d-point '(0.0 0.0 0.0)) (vlax-3d-point vector))) param )) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
bonuscad Posté(e) le 17 avril 2014 Auteur Posté(e) le 17 avril 2014 Hello Bruno Desole de ne pas pouvoir t'aider car je suis NUL en Lisp/VLisp mais pour Info, j'ai des problemes comparables avec cette excellente routine de Gilles ... C fou de voir comme ca marche mieux en etant proche du 0,0 !? Bye, lecrabe Je viens de regarder la routine et essayer avec des coordonnées très élevées, mais je n'ai pas rencontré de problème avec celle-ci (Je n'ai pas fait de tests très poussé non plus!). D'ailleurs aucun appel a (vlax-curve-getparamatpoint) n'est fait dans celle-ci. Avec quel type d'entité as tu des problème, 2D, 3D? Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
GEGEMATIC Posté(e) le 17 avril 2014 Posté(e) le 17 avril 2014 Salut Bonuscad,moi aussi j'ai remarqué des problèmes dès que je suis loin du zéro.tes courbes, elles sont dans un systèmes géoreférencé, de type Rgf93 ou lambert?c'est ça ?Gérald ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
krunch Posté(e) le 17 avril 2014 Posté(e) le 17 avril 2014 BonjourIl me semble me souvenir que j'avais des problèmes avec ces fonctions quand les coordonnées (z en particulier) n'étaient pas tout à fait nulles (genre 1.23E-17), ce qui peut arriver avec trans.D'autre part rien à voir mais vlax-ename->vla-object n'est pas nécessaire je crois (les ename marchent 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