pierrevigneux Posté(e) le 23 mai 2014 Posté(e) le 23 mai 2014 Bonjour à tous ! Ma question existe t'il une routine, pour définir des points (xy) de chaque côté d'une polyligne à distances définie, par l'utilisateur. J'ai trouvé un lisp, mais ne fonctionne pas, Merci à l'avanceGE_GetOffsetPts.lsp Acadnadien
DenisHen Posté(e) le 23 mai 2014 Posté(e) le 23 mai 2014 Salut, j'avais une routine qui le fait, mais point par point... Si ta polyligne comporte beaucoup de sommet, c'est long à faire, mais tu positionne tes XY ou tu veux... Pour éviter les chevauchements... La commande est XY pour les points en 2D et XYZ pour les points en 3D (avec le Z)... Tu clic ton point et tu clique la position des coordonnées... Denis... Windows 11 / AutoCAD 2024 Sur terre, il y a 10 types de personnes, celles qui comptent en binaire et les autres (developpez.net). Davantage d'avantages, avantagent davantage (Bobby Lapointe). La connaissance s'accroît quand on la partage (Socrate). Tant va la cruche à l'eau que l'habit n'amasse pas mousse avant de l'avoir tué. (Moi)
pierrevigneux Posté(e) le 23 mai 2014 Auteur Posté(e) le 23 mai 2014 Salut, j'avais une routine qui le fait, mais point par point... Si ta polyligne comporte beaucoup de sommet, c'est long à faire, mais tu positionne tes XY ou tu veux... Pour éviter les chevauchements... La commande est XY pour les points en 2D et XYZ pour les points en 3D (avec le Z)... Tu clic ton point et tu clique la position des coordonnées... Denis...Bonsoir Denis ! Je te remercie Beaucoup. Mais j'en avais une commande lisp qui fait exactement la même chose,sauf que j'ai inversé les données nord est. Ce que je cherche c'est, dessiner des points offset.par rapport à ma ligne de centre, pour en sortir ses coordonnées.Merci encore et bon weekend ! Acadnadien
bonuscad Posté(e) le 26 mai 2014 Posté(e) le 26 mai 2014 Bonjour, Tu peux essayer de "bricoler" ma réponse faite ici Au lieu d’exécuter les dernières lignes pour dessiner la polyligne: (setq nw_pl (vlax-invoke Space 'AddLightWeightPolyline (apply 'append (mapcar 'list (mapcar 'car l_pt) (mapcar 'cadr l_pt))))) (vla-put-Closed nw_pl 1) Tu utilise la liste l_pt pour récupérer les points de définitions. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 26 mai 2014 Auteur Posté(e) le 26 mai 2014 Merci Bonuscad ! La routine dessine ma polygne de part et d'autre de la ligne de centre, c'est bien, mais ce que je recherche, c'est de pouvoir, faire une liste de points à distances fixe. Ex: 0+020 à -10 m. (x,y) pour côté gauche 10 m. (x,y) pour côté droitetc. Bonne journée ! Acadnadien
bonuscad Posté(e) le 26 mai 2014 Posté(e) le 26 mai 2014 Alors ce serait plus proche de ce genre de fonction ? -> mesure_PK.lspIci tout sera dessiné et noté, mais le mode de fonctionnement peut être modifié. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 26 mai 2014 Auteur Posté(e) le 26 mai 2014 Alors ce serait plus proche de ce genre de fonction ? -> mesure_PK.lspIci tout sera dessiné et noté, mais le mode de fonctionnement peut être modifié. Non J'ai déjà mesure_pk ! Merci de ton attention. Je cherche à sortir des coordonnées de ch. côtés de ma ligne de centre à des distances égales choisis par l'utilisateur. Bonne journée Acadnadien
bonuscad Posté(e) le 26 mai 2014 Posté(e) le 26 mai 2014 (modifié) Je cherche à sortir des coordonnées de ch. côtés de ma ligne de centre à des distances égales choisis par l'utilisateur. J'avais bien compris; les coordonnées de chaque extrémités du peigne. En épurant le code dans le lien donné pour avoir les coordonnée (par paire dans la liste lnw_pt) (vl-load-com) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (defun c:peigne ( / js dxf_obj obj_vlax pt_start pt_end total_dist partial_dist ori_dist tooth lst_pt increment_dist ang dxf_210 lnw_pt) (princ "\nSélectionner un objet curviligne à mesurer: ") (while (not (setq js (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons -4 "<NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!") ) (setq dxf_obj (entget (ssname js 0)) obj_vlax (vlax-ename->vla-object (ssname js 0)) pt_start (vlax-curve-getStartPoint obj_vlax) pt_end (vlax-curve-getEndPoint obj_vlax) total_dist (vlax-curve-getDistAtParam obj_vlax (vlax-curve-getEndParam obj_vlax)) ) (initget 6) (setq partial_dist (getdist "\nEntrez la distance partielle <20.0>: ")) (if (not partial_dist) (setq partial_dist 20.0)) (setq ori_dist 0.0 increment_dist 0.0) (cond ((> total_dist partial_dist) (initget 6) (setq tooth (getdist "\nEntrez une nouvelle distance de peigne <7.5>: ")) (if (not tooth) (setq tooth 7.5)) (setq lst_pt (list pt_start)) (while (< increment_dist total_dist) (setq lst_pt (cons (vlax-curve-getPointAtDist obj_vlax increment_dist) lst_pt) increment_dist (+ increment_dist partial_dist) ) ) (setq lst_pt (reverse (cons pt_end lst_pt)) lnw_pt nil) (foreach n lst_pt (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv obj_vlax (vlax-curve-getParamAtPoint obj_vlax n))) dxf_210 (z_dir n (polar n ang (* 0.1 partial_dist))) ) (setq lnw_pt (cons (list (polar (trans n 0 dxf_210) (+ (/ pi 2) ang) tooth) (polar (trans n 0 dxf_210) (- ang (/ pi 2)) tooth) ) lnw_pt ) ) ) (print lnw_pt) ;(mapcar '(lambda (x) (command "_.line" "_none" (car x) "_none" (cadr x) "")) lnw_pt) ) (T (princ "\nLa longueur est trop grande pour l'objet!")) ) (prin1) ) Modifié le 28 mai 2014 par bonuscad Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 26 mai 2014 Auteur Posté(e) le 26 mai 2014 Merci Bruno! J'obtient La longueur est trop grande pour l'objet! Acadnadien
bonuscad Posté(e) le 27 mai 2014 Posté(e) le 27 mai 2014 Ex: 0+020 à -10 m. (x,y) pour côté gauche Dans mon code, j'ai partial_dist 1000.0 (pour déterminer les points kilométrique tout les 1000 mètres)Si tu veux déterminer tous les 0+020, il te faut simplement mettre partial_dist 20.0Bien sur dans ce cas tu ne pourra exécuter le code que sur des objets supérieur à 20m. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 27 mai 2014 Auteur Posté(e) le 27 mai 2014 Bonjour BonusCad ! Je vois que je me suis mal exprimé. Ci-inclus un dessin exemple, dessiné manuellement et j'aimerais l'automatiser ? Bonne journée !getfile.htm Acadnadien
bonuscad Posté(e) le 27 mai 2014 Posté(e) le 27 mai 2014 Le lien ne mène à rien...., j'ouvre simplement une copie sur mon disque de ta page de téléchargement sur free Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 27 mai 2014 Auteur Posté(e) le 27 mai 2014 Le lien ne mène à rien...., j'ouvre simplement une copie sur mon disque de ta page de téléchargement sur free http://dl.free.fr/jqMObwxsL Acadnadien
bonuscad Posté(e) le 28 mai 2014 Posté(e) le 28 mai 2014 Je n'ai pas de soucis J'ai édité le code en #3 où j'ai modifié les valeur par défauts et j'ai rajouté une ligne commentée pour te prouver que cela fonctionne. (il te suffit de la dé-commenter; enlever le semi-colon, pour qu'il trace le peigne) Cette ligne commentée peut être remplacer par une autre action (inscrire les coordonnées?, insérer un bloc?), tu as les points de définitions (la liste lnw_pt), à toi d'en faire ce que tu veux... moi je t'ai donné le principe. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 28 mai 2014 Auteur Posté(e) le 28 mai 2014 Merci Bruno ! Tout d'abbord, je suis nul en lisp Est ce qu'il y a moyen de 421916.0 5.03556e+006 0.0 l'afficher en nombre reel ?inscrire les coordonnées?] Je te remercie pour ton attention Acadnadien
bonuscad Posté(e) le 28 mai 2014 Posté(e) le 28 mai 2014 Tout d'abbord, je suis nul en lisp Quand on a des demandes si spécifiques, je pense qu'il serait bien se s'y pencher un peu... Néanmoins le code basique, à toi de fignoler si besoin! (vl-load-com) (defun z_dir (p1 p2 / ) (trans '(0.0 1.0 0.0) (mapcar '(lambda (k) (/ k (sqrt (apply '+ (mapcar '(lambda (x) (* x x)) (mapcar '- p2 p1) ) ) ) ) ) (mapcar '- p2 p1) ) 0 ) ) (defun c:peigne ( / js dxf_obj obj_vlax pt_start pt_end total_dist partial_dist ori_dist tooth lst_pt increment_dist ang dxf_210 lnw_pt) (princ "\nSélectionner un objet curviligne à mesurer: ") (while (not (setq js (ssget "_+.:E:S" (list (cons 0 "*POLYLINE,LINE,ARC,CIRCLE,ELLIPSE,SPLINE") (cons 67 (if (eq (getvar "CVPORT") 2) 0 1)) (cons 410 (if (eq (getvar "CVPORT") 2) "Model" (getvar "CTAB"))) (cons -4 "<NOT") (cons -4 "&") (cons 70 112) (cons -4 "NOT>") ) ) ) ) (princ "\nCe n'est pas un objet curviligne valable pour cette fonction!") ) (setq dxf_obj (entget (ssname js 0)) obj_vlax (vlax-ename->vla-object (ssname js 0)) pt_start (vlax-curve-getStartPoint obj_vlax) pt_end (vlax-curve-getEndPoint obj_vlax) total_dist (vlax-curve-getDistAtParam obj_vlax (vlax-curve-getEndParam obj_vlax)) ) (initget 6) (setq partial_dist (getdist "\nEntrez la distance partielle <20.0>: ")) (if (not partial_dist) (setq partial_dist 20.0)) (setq ori_dist 0.0 increment_dist 0.0) (cond ((> total_dist partial_dist) (initget 6) (setq tooth (getdist "\nEntrez une nouvelle distance de peigne <7.5>: ")) (if (not tooth) (setq tooth 7.5)) (setq lst_pt (list pt_start)) (while (< increment_dist total_dist) (setq lst_pt (cons (vlax-curve-getPointAtDist obj_vlax increment_dist) lst_pt) increment_dist (+ increment_dist partial_dist) ) ) (setq lst_pt (reverse (cons pt_end lst_pt)) lnw_pt nil) (foreach n lst_pt (setq ang (angle '(0.0 0.0 0.0) (vlax-curve-getFirstDeriv obj_vlax (vlax-curve-getParamAtPoint obj_vlax n))) dxf_210 (z_dir n (polar n ang (* 0.1 partial_dist))) ) (setq lnw_pt (cons (list (polar (trans n 0 dxf_210) (+ (/ pi 2) ang) tooth) (polar (trans n 0 dxf_210) (- ang (/ pi 2)) tooth) ) lnw_pt ) ) ) (mapcar '(lambda (x) (vla-addMtext (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) (vlax-3d-point (polar (car x) (* pi 0.5) (getvar "TEXTSIZE"))) 0.0 (strcat "N "(rtos (cadar x) 2 3) "\\PE " (rtos (caar x) 2 3)) ) (vla-addMtext (if (= 1 (getvar "CVPORT")) (vla-get-PaperSpace (vla-get-ActiveDocument (vlax-get-acad-object))) (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object))) ) (vlax-3d-point (polar (cadr x) (* pi 0.5) (getvar "TEXTSIZE"))) 0.0 (strcat "N "(rtos (cadadr x) 2 3) "\\PE " (rtos (caadr x) 2 3)) ) ) lnw_pt ) ) (T (princ "\nLa longueur est trop grande pour l'objet!")) ) (prin1) ) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 28 mai 2014 Auteur Posté(e) le 28 mai 2014 Merci beaucoup Bonuscad ! Ma dernière demande, serait d'avoir les coordonnées en mm. et en nombre entier. soit5.03554e+006 5 035 554,232 Merci encore de ta patience ! Acadnadien
bonuscad Posté(e) le 30 mai 2014 Posté(e) le 30 mai 2014 avoir les coordonnées en mm. et en nombre entier. ??? Dans le dernier code posté:(strcat "N "(rtos (cadar x) 2 3) "\\PE " (rtos (caar x) 2 3))Fais ce que tu demandes. Quand je l'applique à ton dessin test, j'obtiens le même formatage des nombres que celui fait dans le dessin.Si c'est vraiment des millimètres que tu veux (alors que ton dessin à l'air en mètres)(strcat "N "(rtos (* 1000.0 (cadar x)) 2 3) "\\PE " (rtos (* 1000.0 (caar x)) 2 3)) rtos (Real TO String) formate un nombre réel suivant le système d'unité et la précision demandé (si ceux-ci sont fournis, autrement c'est les valeur courante du dessin): (rtos réel mode précision) Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
pierrevigneux Posté(e) le 30 mai 2014 Auteur Posté(e) le 30 mai 2014 Bravo Bruno ! T'est un champion, c'est exactement ce que je demandais, en plus in inscrit toutes les coordonnées sont les mêmes. Encore une fois un gros merci et bon week-end Acadnadien
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