doublecriquet Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Bonjour, Je me retrouve fréquemment confronté à un problème que je n'arrive pas à résoudre et qui me fait perdre beaucoup de temps dans mes conceptions de routes dans Autocad. Je m'explique,Je travaille régulièrement sur les mêmes projets :J'importe dans Autocad une route représentée par une polyligne créé par Geomedia 5.2. Geomedia me permet également d'importer dans Autocad, sur 2 calques séparés, des points kilométriques le long de cette route (tous les 1km), 1 calque avec les kp dans un sens, et l'autre dans le sens inverse. Ces kp sont représentés par de simples points, que je transforme dans un second temps en symboles kilométriques grâce à la routine lisp PT-BLC.Le souci est que l'export "douteux" depuis Geomedia en dwg fait que, bien que quasi-correctement placés, les points ne sont pas parfaitement sur ma polyligne : quand je zoom de très près, certains sont parfois bizarrement juste à côté de la poly mais pas vraiment dessus (ce décalage est très très infime). Je voulais savoir s'il existe une routine permettant de sélectionner tous mes points bien placés et quasiment bien placés en une seule sélection, et permettant de tous les aligner,selon un déplacement perpendiculaire vers cette poly, exactement sur elle ? je ne connais pas grand chose en dev, et en cor moins en LISP, merci à ceux qui pourront m'éclairer... Lien vers le commentaire Partager sur d’autres sites More sharing options...
Bred Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Salut,quand je zoom de très près, certains sont parfois bizarrement juste à côté de la poly mais pas vraiment dessusAs-tu essayer de faire un regen ? Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose... Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Hello Non je pense que cela provient de la précision de Geomedia qui n'est pas celle d'AutoCAD ! Donc il faudrait une routine AutoLisp/V-Lisp qui projette en ortho tous les points sélectionnés sur la polyligne sélectionnée avec par sécurité une question relative à la distance maximum de projection ! Le Decapode Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
doublecriquet Posté(e) le 15 octobre 2008 Auteur Partager Posté(e) le 15 octobre 2008 Merci pour vos réponse. REGEN ne fait rien. Je suis de l'avis du crabe, je pense effectivement qu'il s'agit d'une imprécision de Geomedia. Pour plus de clarté, voici mon soucis en illustré : Sur la première image (zoom éloigné), on peut voir/croire que les points sont placés correctement sur la polyligne Sur la seconde image (zoom très proche d'un point), on peut facilement constater l'imprécision (infime, mais certes présente quand même) http://images4.hiboox.com/vignettes/4208/b706be0abf44e8d31a1ba0cb2b1b1681.jpghttp://www.hiboox.fr/go/images/informatique/kp-polyligne-1,b706be0abf44e8d31a1ba0cb2b1b1681.jpg.html http://images2.hiboox.com/vignettes/4208/2e6a985021c53e355dc1bb7aff602b7c.jpg http://www.hiboox.fr/go/images/informatique/kp-polyligne-2,2e6a985021c53e355dc1bb7aff602b7c.jpg.html PS : Merci au passage à lili... pour ce lien hiboox, site d'hébergment d'images gratuit et simplissime [Edité le 15/10/2008 par doublecriquet] Lien vers le commentaire Partager sur d’autres sites More sharing options...
lovecraft Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Bonjour, dans un premier temps ce sont des Pk et non des Kp.A premiere vue l'illustration ci-dessus, il semble que la polyligne soit lissée !!!Peut on connaitre la distance de l'imprécision ? Peut etre qu'elle est insignifiante ?Autrement si tu veux je dois avoir un lisp qui permet de projeter des points sur une polyligne (une de bonuscad) @plus LB PS: je doute que la precision de covadis soit incorrecte. http://www.youtube.com/user/CADMINATOR?feature=mhee Lien vers le commentaire Partager sur d’autres sites More sharing options...
didier Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 coucou je confirme pour les PK pourquoi ne pas faire un segment de droite comme bloc,comme ça tu auras une intersection. amicelement Éternel débutant... Mon site perso : Programmer dans AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
doublecriquet Posté(e) le 15 octobre 2008 Auteur Partager Posté(e) le 15 octobre 2008 Merci lovecraft et didier pour vos réponses. kp, c'est en anglais, je travaille dans une entreprise internationale.Désolé, je sais bien que CADXP est français, mais comme on utilise chez nous en général plus le terme kp pour "kilometer point" que pk pour "point kilométrique", j'espère que vous comprendrez... lovecraft,la polyligne n'est pas lissée, c'est l'effet d'éloignement du zoom sur la photo qui donne cette impression.On ne peut pas connaitre la distance de l'imprécision, étant donné qu'elle diffère pour chaque point, la plupart d'entre eux sont même bien placés. Vu qu'il y a plusieurs centaines de kms sur chacune de mes routes, je vais pas m'amuser à calculer la distance de l'imprécision pour chacun des points.Le lisp de bonuscad que tu proposes, qui permet de projeter des points sur une polyligne, m'intéresse beaucoup, je crois que ça pourrait être une solution intéressante. Didier,pourrais-tu developper ton idée d'intersection stp ? Qu'est ce que je fais une fois que j'ai des centaines d'intersections sur ma route ? Y'a un lisp qui existe pour insérer automatiquement des points ou des blocs à toutes les intersections ? Juste une question, connaitriez vous le coût approximatif de covadis ? Car il faudrait que j'en parle à mon responsable.On travaille dans le câble sous-marin, et on pensait plutôt investir dans Autochart développé par wishsoftware. Qqun connait ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
bonuscad Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Salut, Ta demande est très similaire à celle que tu avais faite ici Il était facile d'adapter la précédente réponse, tu aurais presque pu t'y coller... ;) Enfin voici ce que l'on pourrait faire d'après le code précédent: (defun c:rabat_pt ( / js n pojs vla_po vla_obj pt) (princ "\nSélectionner les points à rabattre. ") (setq js (ssget '((0 . "POINT"))) n -1) (cond (js (vl-load-com) (princ "\nSélectionner l'objet curviligne où les points seront rabattus. ") (while (null (setq pojs (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons -4 "[b]<[/b]NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) ) (setq vla_po (vlax-ename->vla-object (ssname pojs 0))) (repeat (sslength js) (setq vla_obj (vlax-ename->vla-object (ssname js (setq n (1+ n)))) pt (vlax-curve-getClosestPointTo vla_po (vlax-get vla_obj 'Coordinates)) ) (vlax-put vla_obj 'Coordinates pt) ) ) ) (prin1) ) Cela m'a pris 5 mn d'adaptation :casstet: [Edité le 15/10/2008 par bonuscad] Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Salut, Un petit LISP, l'utilisateur, spécifie la longueur maximale au delà de laquelle les points ne sont pas déplacés, sélectionne la polyligne puis les points (ou Entrée pour "tous"). ;; PtOnPline (gile) ;; Replace les points sur la polyligne (defun c:PtOnCurve (/ dist curve pts coord) (vl-load-com) (if (and (setq dist (getdist "\nSpécifiez la longueur maximale: ")) (setq curve (car (entsel "\nSélectionnez la polyligne: "))) (IsCurveObject curve) (princ "\nSélectionnez les points ou [b]: ") (or (ssget '((0 . "POINT"))) (ssget "_X" (list '(0 . "POINT") (cons 410 (getvar "CTAB"))) ) ) ) (progn (vlax-for pt (setq pts (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object) ) ) ) (setq coord (vlax-get pt 'Coordinates)) (if (and (not (equal (setq nea (vlax-curve-getClosestPointTo curve coord)) pt 1e-9 ) ) ( ) (vlax-put pt 'Coordinates nea) ) ) (vla-delete pts) ) ) (princ) ) ;; IsCurveObject ;; Evalue si un objet (ename ou vla-object) est un "CurveObject" (defun IsCurveObject (obj) (and (or (= (type obj) 'VLA-OBJECT) (setq obj (vlax-ename->vla-object obj)) ) (member (vla-get-ObjectName obj) '("AcDbArc" "AcDbCircle" "AcDbEllipse" "AcDbLine" "AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline" "AcDbSpline" ) ) ) ) Doublé par bonuscad...[Edité le 15/10/2008 par (gile)][Edité le 15/10/2008 par (gile)][Edité le 16/10/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Hello Je viens de tester sur MAP 2006 en 2D ta routine Gilles, elle fonctionne bien :) Par contre avec le meme DWG de test sur MAP 2008 ! Commande: ptonpline Spécifiez la longueur maximale: 30 Sélectionnez la polyligne: ; erreur: no function definition: VLAX-ENAME->VLA-OBJECT Cette erreur est générée AVANT la sélection des points !! La polyligne est en 2D (Z=0) et tous les points (Z=0) sauf UN sont à moins de 30 mètres Le Decapode "chieur" Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Encore une fois, j'ai oublié le (vl-load-com) qui était probablement chargé sur MAP 2006. Je corrige... :P Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
lili2006 Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Bonsoir à toutes et tous, Le non moins fameux "(vl-load-com)", peut-être ? Civil 3D 2025 - COVADIS_18.3b https://www.linkedin...3%ABt-95313341/ Lien vers le commentaire Partager sur d’autres sites More sharing options...
lecrabe Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Hello - GAGNE ! Mon Map 2004 avait plusieurs routines dans sa valise de démarrage et mon MAP 2008 : rien du tout ! Merci a Lili et Gilles pour leur promptitude :) Le Decapode Autodesk Expert Elite Team Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 15 octobre 2008 Partager Posté(e) le 15 octobre 2008 Re, J'ai modifié le code pour qu'il fonctionne avec tout type d'objet curviligne (comme celui de bonuscad). Le problème du filtre des objets curvilignes se pose presque à chaque fois qu'on utilise les fonction vlax-curve-*.Dans la routine ci dessus, j'utilise (car (entsel ...) et une petite routine qui évalue si l'objet sélectionné est bien un CurveObject .Bonuscad, de son côté, utilise (ssget "_+.:E:S" ...) avec un filtre de calque. et cette routine me fait penser que l'utilisation du code DXF 100 (plus fin que le code 0 sur les polylignes) dans le filtre permettrait d'éviter l'utilisation d'opérateurs logiques dans ce filtre : (ssget '((100 . "AcDbArc,AcDbCircle,AcDbEllipse,AcDbLine,AcDbPolyline,AcDb2dPolyline,AcDb3dPolyline,AcDbSpline"))) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
doublecriquet Posté(e) le 16 octobre 2008 Auteur Partager Posté(e) le 16 octobre 2008 salut, merci bonuscad et gile pour vos routines, je me retrouve désormais avec 2 super outils face à mon problème !!! excelllent ! dans mon domaine, et à mon niveau , la routine de bonuscad "rabat_pt" correspond un peu plus, car plus simple et directe par rapport à ma demande. en fait, je ne vois pas trop à quoi sert la "sécurité" "spécifie la longueur maximale au delà de laquelle les points ne sont pas déplacés" sur la routine de gile "PtOnCurve" ? puisque le but final est que les pts se déplacent sur la poly et rien d'autre, comme c'est le cas sur la routine de bonuscad.... Même si le résultat est le même au final avec les 2 routines ! en tous cas, encore merci, car contrairement à ce que tu penses bonuscad, jamais je n'aurais pu faire la modif moi même de la routine "multi_align_text", ou en tous les cas certainement pas en 5min, mais plutôt en 5 jours de recherche et d'autoformation.... j'y viendrai un jour ! a bientôt Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 16 octobre 2008 Partager Posté(e) le 16 octobre 2008 je ne vois pas trop à quoi sert la "sécurité" "spécifie la longueur maximale au delà de laquelle les points ne sont pas déplacés" sur la routine de gile "PtOnCurve" ? Cette "sécurité" répond à la demande de lecrabe et une à utilisation plus générale de la routine.Par exemple, le dessin pourrait contenir plusieurs polylignes et différentes entités point à "recoller" sur chacune d'elles. PtOnCurve permet alors 2 façons de procéder : soit on sélectionne les points par rapport à une polyligne (ou autre objet curviligne) soit on sélectionne tous les points (avec Entrée, Espace ou clic droit) et c'est la distance de "sécurité" qui filtrera les points à recoller.Avec cette deuxième méthode, le traitement (exécution de la routine) risque d'être un peu plus long, mais demandera certainement beaucoup moins de temps qu'une sélection par polygone faite par l'utilisateur. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
doublecriquet Posté(e) le 17 octobre 2008 Auteur Partager Posté(e) le 17 octobre 2008 ok, je comprends mieux.... effectivement cela peut s'avérer très utile.merci gile pour ta réponse. a bientôt Lien vers le commentaire Partager sur d’autres sites More sharing options...
Figomes Posté(e) le 31 octobre 2008 Partager Posté(e) le 31 octobre 2008 Bonjour à tous!! J'aurai une petite requête à faire, ressemblant à ce qui est demandé ici. J'ai des points alignés à projeter sur une polyligne. Mais ces points ne doivent pas être projetés sur le point le plus proche de la polyligne! Ils doivent être renvoyés parfaitement verticalement sur celle-ci.. Y a-t-il une modification possible à faire sur un des LISP présentés ici? Merci pour votre partage en tout cas!! Filipe Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 31 octobre 2008 Partager Posté(e) le 31 octobre 2008 Salut, Voilà ;; PtOnCurveY (gile) ;; Déplace parallèlement à l'axe Y les points sur la courbe (defun c:PtOnCurveY (/ space dist curve pts coord line) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (setq space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) (if (and (setq dist (getdist "\nSpécifiez la longueur maximale: ")) (setq curve (car (entsel "\nSélectionnez la courbe: "))) (setq curve (vlax-ename->vla-object curve)) (IsCurveObject curve) (princ "\nSélectionnez les points ou : ") (or (ssget '((0 . "POINT"))) (ssget "_X" (list '(0 . "POINT") (cons 410 (getvar "CTAB"))) ) ) ) (vlax-for pt (setq pts (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object) ) ) ) (setq coord (vlax-get pt 'Coordinates)) (setq line (vla-addLine space (vlax-3d-point (list (car coord) (- (cadr coord) dist) (caddr coord)) ) (vlax-3d-point (list (car coord) (+ (cadr coord) dist) (caddr coord)) ) ) ) (if (setq int (vlax-invoke curve 'IntersectWith line acExtendNone)) (vlax-put pt 'Coordinates (list (car int) (cadr int) (caddr int)) ) ) (vla-delete line) ) ) (princ) ) ;; IsCurveObject ;; Evalue si un objet (ename ou vla-object) est un "CurveObject" (defun IsCurveObject (obj) (and (or (= (type obj) 'VLA-OBJECT) (setq obj (vlax-ename->vla-object obj)) ) (member (vla-get-ObjectName obj) '("AcDbArc" "AcDbCircle" "AcDbEllipse" "AcDbLine" "AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline" "AcDbSpline" ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
Figomes Posté(e) le 1 novembre 2008 Partager Posté(e) le 1 novembre 2008 Merci beaucoup gile, ça fonctionne tout à fait bien!! Lien vers le commentaire Partager sur d’autres sites More sharing options...
Figomes Posté(e) le 3 novembre 2008 Partager Posté(e) le 3 novembre 2008 Désolé de continuer sur ce topic, mais n'auraiez vous rien de similaire pour des BLOCS ou des groupes de TEXTE à la place des points (toujours paralèllement à l'axe Y) ? J'ai cherché sur le forum, mais je dois ne pas utiliser les bons termes pour la recherche, je ne trouve rien de concluant.. :( Lien vers le commentaire Partager sur d’autres sites More sharing options...
(gile) Posté(e) le 3 novembre 2008 Partager Posté(e) le 3 novembre 2008 Salut, Ce code fonctionne avec les points, blocs, textes et textes multiligne. ;; PtOnCurveY (gile) ;; Déplace parallèlement à l'axe Y les points, blocs textes sélectionnés sur la courbe (defun c:MoveOnCurveY (/ space dist curve pts coord line) (vl-load-com) (or *acdoc* (setq *acdoc* (vla-get-ActiveDocument (vlax-get-acad-object))) ) (setq space (if (= (getvar "CVPORT") 1) (vla-get-PaperSpace *acdoc*) (vla-get-ModelSpace *acdoc*) ) ) (if (and (setq dist (getdist "\nSpécifiez la longueur maximale: ")) (setq curve (car (entsel "\nSélectionnez la courbe: "))) (setq curve (vlax-ename->vla-object curve)) (IsCurveObject curve) (princ "\nSélectionnez les points, blocs ou textes: ") (ssget '((0 . "POINT,INSERT,MTEXT,TEXT"))) ) (vlax-for pt (setq pts (vla-get-ActiveSelectionSet (vla-get-ActiveDocument (vlax-get-acad-object) ) ) ) (if (= (vla-get-ObjectName pt) "AcDbPoint") (setq coord (vlax-get pt 'Coordinates)) (setq coord (vlax-get pt 'InsertionPoint)) ) (setq line (vla-addLine space (vlax-3d-point (list (car coord) (- (cadr coord) dist) (caddr coord)) ) (vlax-3d-point (list (car coord) (+ (cadr coord) dist) (caddr coord)) ) ) ) (if (setq int (vlax-invoke curve 'IntersectWith line acExtendNone)) (vlax-put pt (if (= (vla-get-ObjectName pt) "AcDbPoint") 'Coordinates 'InsertionPoint ) (list (car int) (cadr int) (caddr int)) ) ) (vla-delete line) ) ) (princ) ) ;; IsCurveObject ;; Evalue si un objet (ename ou vla-object) est un "CurveObject" (defun IsCurveObject (obj) (and (or (= (type obj) 'VLA-OBJECT) (setq obj (vlax-ename->vla-object obj)) ) (member (vla-get-ObjectName obj) '("AcDbArc" "AcDbCircle" "AcDbEllipse" "AcDbLine" "AcDbPolyline" "AcDb2dPolyline" "AcDb3dPolyline" "AcDb2dSpline" ) ) ) ) Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD Lien vers le commentaire Partager sur d’autres sites More sharing options...
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