AzRoDoRzA Posté(e) le 31 juillet 2019 Posté(e) le 31 juillet 2019 Hello, Petite question, est-ce que c'est possible de récupérer le nombre de polyligne situé sur une polyligne avec une plus grosse épaisseur ? Exemple: Multiple polyligne J'aimerai récupérer le chiffre "3" car il y a 3 polylignes qui passent sur la polyligne orange. Merci bye! Citer
COME Posté(e) le 31 juillet 2019 Posté(e) le 31 juillet 2019 Hello, Petite question, est-ce que c'est possible de récupérer le nombre de polyligne situé sur une polyligne avec une plus grosse épaisseur ? Exemple: Multiple polyligne J'aimerai récupérer le chiffre "3" car il y a 3 polylignes qui passent sur la polyligne orange. Merci bye! Salut, comment cela récupérer "3" ? Avec un lisp ? En valeur ? En... je sais pas ! Quel est le but final ? Citer COME La vie sans musique est tout simplement une erreur, une fatigue, un exil. »Friedrich Nietzsche
>>NicoM Posté(e) le 31 juillet 2019 Posté(e) le 31 juillet 2019 Je pense que la programmation de ce que tu décrit est une vrai usine à gaz :blink: Citer Projeteur Béton Armé sur Revit et AutoCAD 2023 Une connaissance acquise ne devient vivante que si on l’a repensée par soi-même.
AzRoDoRzA Posté(e) le 31 juillet 2019 Auteur Posté(e) le 31 juillet 2019 COME: effectivement, quand je dis 3, je parle de récupérer la valeur "3" qui correspond aux nombre de polylignes qui se situe sur la polyligne orange, et oui, je cherche à faire ça en Lisp, mais si une commande existe, je pourrai l'utiliser dans mon programme :) NicoM: Ah mince.. :( Citer
AzRoDoRzA Posté(e) le 31 juillet 2019 Auteur Posté(e) le 31 juillet 2019 Bon et bien je vais me contenter d'un getkword qui demande le nombre de cable sur ces polylignes, ça fera l'affaire. Merci à vous Citer
Fraid Posté(e) le 31 juillet 2019 Posté(e) le 31 juillet 2019 Bonjour, Tu peux facilement obtenir la liste des points de ta polyligne avec ceci ;Retourne la liste des points 2d (coordonnées SCO) des sommets de la polyligne sélectionnée. (defun massoc (key alst) (if (setq alst (member (assoc key alst) alst)) (cons (cdar alst) (massoc key (cdr alst))) ) ) puis l'utiliser comme ceci (- (sslength (ssget "_F" (massoc 10 (entget (car (entsel "\n Sélectionnez une polyligne: ")))))) 1) Citer https://github.com/Fraiddd
AzRoDoRzA Posté(e) le 31 juillet 2019 Auteur Posté(e) le 31 juillet 2019 Salut Fraid, J'avais pensé à cet idée, mais le problème c'est que même si ma polyligne est énorme, elle n'a que 2 sommet au centre des extrémité de celle-ci et donc avec ton programme, il me retourne 1 car il n'y a qu'une polyligne qui passe par ses sommets, il faudrait trouver un moyen de pouvoir lui dire "ce sommet la et ses alentours", exemple: Le sommet de ma polyligne est (25.8524 82.6763) et mon autre polyligne à son sommet en (25.7399 82.461), est-ce que c'est possible de comparer ces valeurs avec un arrondi fournis ? Du style à 0.2 près ? Citer
Fraid Posté(e) le 31 juillet 2019 Posté(e) le 31 juillet 2019 Je ne comprend rien à ce que tu dit.Du moment qu'une polyligne croise celle sélectionnée, elle est prise en compte grâce à ssget "_F" qui sélectionne selon un trajet.Cela n'a rien à voir avec le nombre de sommet. Citer https://github.com/Fraiddd
Fraid Posté(e) le 31 juillet 2019 Posté(e) le 31 juillet 2019 après si c'est pour sélectionner des polylignes similaires et très proches, tu fais une sélections rectangulaire autour du premier point. Citer https://github.com/Fraiddd
AzRoDoRzA Posté(e) le 1 août 2019 Auteur Posté(e) le 1 août 2019 Comme le montre la photo, mes polylignes ne se superposent pas (elle superposent uniquement la polyligne orange mais elle ne la "croise" pas car elle est juste plus épaisse et l'épaisseur n'est que graphique). Du coup oui j'aimerai donc sélectionner des polylignes très proches, la solution de sélection rectangulaire n'est pas bête, je vais tester ça merci! Citer
Fraid Posté(e) le 2 août 2019 Posté(e) le 2 août 2019 Comme le montre la photoje n'avais pas vu ton image .... en effet j’étais à coté je te propose cette petite fonction ;nbpolep : Renvois le nombre de polylignes passant sur la largeur de la polyligne sélectionnée, nil si échoue. (defun nbpolep ( / oldosmode pol pt pt1 pt2 ep in nb) (setq oldosmode (getvar 'osmode) pol (entget (car (entsel "\n Sélectionnez une polyligne: "))) pt (cdr (assoc 10 pol));premier point ep (cdr (assoc 43 pol));largeur ) (setvar 'osmode 0) (if (> ep 0) (setq in (+ (/ ep 2) (/ ep 100));incrément légèrement supérieur à la moitié de la largeur pt1 (mapcar '(lambda (x) (- x in)) pt) pt2 (mapcar '(lambda (x) (+ x in)) pt) nb (- (sslength (ssget "_C" pt1 pt2 )) 1) ) (princ "\nLa polyligne doit avoir une largeur") ) (setvar 'osmode oldosmode) nb ) Citer https://github.com/Fraiddd
AzRoDoRzA Posté(e) le 2 août 2019 Auteur Posté(e) le 2 août 2019 Pas mal du tout merci! Il faut juste que je modifie le code pour ne compter que les polylignes car, à première vue, il compte aussi les blocs ^^ Mais j'ai la base c'est impeccable merci beaucoup! Citer
Fraid Posté(e) le 2 août 2019 Posté(e) le 2 août 2019 c'est effectivement une base de travail, il y a d'autre testes et filtres à mettre en place.comme le SCU, je pense que cela plante si il n'est pas en général. n’hésite pas à demander si tu ne t'en sort pas. Citer https://github.com/Fraiddd
AzRoDoRzA Posté(e) le 2 août 2019 Auteur Posté(e) le 2 août 2019 C'est gentil merci! Je posterai le lisp qui prend en compte uniquement les polyligne dès que je l'aurai terminé (ça devrait pas être trop long mais on sait jamais ;) ) Citer
AzRoDoRzA Posté(e) le 2 août 2019 Auteur Posté(e) le 2 août 2019 Bon bah voila le code qui permet d'obtenir le nombre de polyligne situé sur une polyligne (en largeur): ;nbpolep : Renvois le nombre de polylignes passant sur la largeur de la polyligne sélectionnée, nil si échoue. (defun nbpolep ( / oldosmode pol pt pt1 pt2 ep in nb) (setq oldosmode (getvar 'osmode) pol (entget (car (entsel "\n Sélectionnez une polyligne: "))) pt (cdr (assoc 10 pol));premier point ep (cdr (assoc 43 pol));largeur ) (setvar 'osmode 0) (if (> ep 0) (setq in (+ (/ ep 2) (/ ep 100));incrément légèrement supérieur à la moitié de la largeur pt1 (mapcar '(lambda (x) (- x in)) pt) pt2 (mapcar '(lambda (x) (+ x in)) pt) listPoly (ssget "_C" pt1 pt2 ) ) (princ "\nLa polyligne doit avoir une largeur") ) (setq i 0) (setq nb 0) (while(< i (sslength listPoly)) (setq isPoly (entget(ssname listPoly i))) (if(= (cdr (nth 1 isPoly)) "LWPOLYLINE") (setq nb (+ nb 1)) (prin1 "Pas une polyligne") ) (setq i (+ i 1)) ) (setq nb (- nb 1)) (setvar 'osmode oldosmode) nb ) Désolé pour la propreté je débute en Lisp Citer
Fraid Posté(e) le 2 août 2019 Posté(e) le 2 août 2019 Désolé pour la propreté je débute en Lisp il ne faut pas, nous sommes tous des débutant, depuis plus ou moins longtemps... tu fait des efforts, et c'est cela qui compte. sans vouloir te décourager, il y avais juste à rajouter un filtre au ssget comme cela nb (- (sslength (ssget "_C" pt1 pt2 '((0 . "LWPOLYLINE")))) 1) et bravo Citer https://github.com/Fraiddd
AzRoDoRzA Posté(e) le 2 août 2019 Auteur Posté(e) le 2 août 2019 Non non pas de problème je suis là pour apprendre! Justement, j'avais vu que je pouvais le faire avec ça mais j'ai essayé mais ça me mettait "nombre d'arguments trop importants" quand je rajoutait ce petit bout de code et donc j'ai cherché une autre solution. Et là je viens de retester et ça fonctionne, c'est à n'y rien comprendre, peut-être que j'avais oublié la double parenthèse :huh: Merci en tout cas! Citer
Messages recommandés