DenisHen Posté(e) le 27 octobre 2006 Posté(e) le 27 octobre 2006 Bonjour à tous... Voilà, j'ai un petit soucis... Pour les besoins du service du Cadastre, nous, les géomètres, devons fournir une feuille de calcul qui se résume aux coordonnées d'une polyligne ainsi que la longueur de ses segments, en gros, ça donne : .Pt X Y. Distances.1 1081.02 5092.66. 40.91m.2 1121.44 5086.31. 97.15m.3 1109.31 4989.92. 18.50m.4 1090.84 4990.78. 56.57m.5 1098.92 5046.77. 24.23m.6 1076.40 5055.72. 37.23m.1 .Superficie = 2673.2 m² Mon problème est, si j'ai plusieurs polylignes et que j'ai des sommets communs, ils ne vont pas porter le même numéro... Alors qu'il le faudrait... J'ai donc pensé à : (vlax-ldata-put return) ;return est ma liste de coordonnées Mais je n'ai pas les "matricules" des sommets ! ! Je ne sais pas comment faire, en lisp, pour stocker des données telles que :(1,1081.02,5092.66)(2,1121.44,5086.31)(3,.......ou(1,1081.02,5092.66,2,1121.44,5086.31,3,.......ou encore(1 1081.02 5092.66 2 1121.44 5086.31 3 ....... Je ne sais pas comment Lisp va les stocker et surtout, comment lui imposer un "style de stockage" pour qu'il soit plus facile pour moi de chercher les point existant dans cette liste... Merci et si vous avez compris... Chapeau bas, 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)
Patrick_35 Posté(e) le 27 octobre 2006 Posté(e) le 27 octobre 2006 Eh bien non, je n'arrive pas à comprendre ? Je pense à un truc de ce style(vlax-ldata-put "Mon_Appli" (if (vlax-ldata-list "Mon_Appli") 0 (length (1+ (vlax-ldata-list "Mon_Appli"))) ) (cons (cdr (assoc -1 "Ma_poly")) (mapcar 'cdr (vl-remove-if-not '(lambda (x) (= (car x) 10)) "Ma_poly")) ) ) Mais est-ce bien cela ? Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Bred Posté(e) le 27 octobre 2006 Posté(e) le 27 octobre 2006 Je ne sais pas si j'ai bien compris...un truc vite fait : (defun c:tab_coord_poly ( / TAB_POLY) (setq polyS (ssget "_X" '((0 . "LWPOLYLINE")))) (setq COMPT 1) (setq x 0) (repeat (sslength polyS) (setq ent_poly (entget (ssname polyS x))) (while (assoc 10 ent_poly) (setq dxf_10 (assoc 10 ent_poly)) (setq list_coord_somm_poly (append (list dxf_10) list_coord_somm_poly)) (setq ent_poly (vl-remove (assoc 10 ent_poly) ent_poly)) ) (setq list_coord_somm_poly (append (list (strcat "Polyligne N°" (rtos COMPT) " : ")) list_coord_somm_poly)) (setq TAB_POLY (append (list list_coord_somm_poly) TAB_POLY) list_coord_somm_poly nil) (setq COMPT (+ COMPT 1) x (+ x 1)) ) (setq TAB_POLY (reverse TAB_POLY)) (princ TAB_POLY) (princ) ) [Edité le 27/10/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
Bred Posté(e) le 27 octobre 2006 Posté(e) le 27 octobre 2006 mmm... j'ai corrigé une erreur dans le prog ci-dessus, mais je commence à entrevoir ce que tu veux et je pense que je n'y répond pas...je cherche... [Edité le 21/12/2006 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
DenisHen Posté(e) le 27 octobre 2006 Auteur Posté(e) le 27 octobre 2006 Merci à vous, Une petite question pour Patrick_35 Ton truc traite-il la liste ( nommée "return" dans ma routine ) comme une entité AutoCAD avec ses code DXF ? D'après ce que je comprend, ma liste serait ainsi :(1 1081.02 5092.66)(2 1121.44 5086.31)(3 1109.31 4989.92)(4 ....... mais je n'ai pas compris comment s'éfectue la recherche... Mais je pense que tu as compris ma question... Pour une fois... J'ai réussi à m'expliquer à peut près correctement ;) Merci encore à vous, Denis (qui a un super site avec des méga infos : http://www.phalenecad.fr ) 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)
Patrick_35 Posté(e) le 27 octobre 2006 Posté(e) le 27 octobre 2006 Pas tout à fait mais plutôt de cette manière( < Nom d'entité: 7e07a488 > (377.5 222.5) (377.5 247.5) (402.5 255.0) (417.5 237.5) (425.0 202.5) (385.0 175.0) (370.0 197.5))que l'on peut récupérer avec par exemple (vlax-ldata-get "Mon_Appli" 0) --> le 0 pour la première entrée Je ne comprends pas ce que tu cherches, mais si ça répond à ta question Encore une chose qui me surprend un peu. Tu peux stocker ton entité avec un vlax-ldata mais pourquoi ses coordonnées ? . Si jamais elles bougent, la valeur retournée d'un vlax-ldata sera fausse par rapport à ta poly. Il vaudrait mieux dans ce cas regarder de nouveaux ses coordonnées Et si jamais on efface la poly stocké dans la base "Mon_Appli", il faut aussi penser à remettre à jour la base @+ [Edité le 27/10/2006 par Patrick_35] Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
DenisHen Posté(e) le 27 octobre 2006 Auteur Posté(e) le 27 octobre 2006 Merci Patrick_35, Je pense que tu as saisi le plus difficile à faire comprendre... Je te fais un petit exemple et te ferai un lien pour ce soir... Merci encore, 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)
didier Posté(e) le 28 octobre 2006 Posté(e) le 28 octobre 2006 coucou, Je pense qu'une autre solution est à envisager. je ne sais si tu es équipé de Covadis, mais peu importecar il est possible de mettre un bloc sur chaque sommet,ce bloc aura un attribut : Matricule,ça se lispe en deux coups de clavier. Ensuite, il sera aisé d'extraire les sommets d'une polyligne,vérifier le matricule du sommet, et l''intéger devant les coordonnées du sommet. si je suis hors sujet, je vous balbutie mes plus plates excuses. amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
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