fabcad Posté(e) le 16 janvier 2008 Posté(e) le 16 janvier 2008 Je réitère mon souhait de faire correspondre les sommets d'une polyligne ou plusieurs polylignes cible d'après une autre polyligne source en ajoutant les sommets manquants ou en supprimant les sommets en trop. J'ajoute que mon travail se situe dans le domaine du SIG et donc il n'y a pas de segments arcs dans mes polylignes. Mon algorithme serait le suivant :1 Sélectionnez une ou plusieurs polylignes cible :2 Sélectionnez une polyligne source : Traitement sur chaque polyligne source, soit par la fonction pedit ou alors directement en modifiant les sommets par SUBST et ASSOC. 3 Continuer les points manquants : oui/non : 4 Supprimer les points manquants : oui/non : Merci pour vos développements, A plus
(gile) Posté(e) le 16 janvier 2008 Posté(e) le 16 janvier 2008 Salut, Ta demande est toujours incompréhensible pour moi. Peut-être qu'en postant une image de ce que tu veux faire... Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 16 janvier 2008 Posté(e) le 16 janvier 2008 hello, je n'ai pas de réponse plus satisfaisante à te faireque lors de ton message initial. Ta polyligne Source, qu'est ce qu'elle a de spécial ?Ta polyligne Cible, que doit elle "piquer" à la Source ? je cherche à comprendre.. ps: j'ai répondu comme (Gile) mais je l'avais pas envoyé (hihihi) amicalement [Edité le 16/1/2008 par didier] Éternel débutant... Mon site perso : Programmer dans AutoCAD
fabcad Posté(e) le 16 janvier 2008 Auteur Posté(e) le 16 janvier 2008 ah la la, Modifier les coordonnées xy des sommets de polylignes d'après les coordonnées xy d'une polyligne source. Cas d'ajout de sommets :polyligne source --> polylignes ciblesPT1 = PT1PT2 = PT2PT3 = PT3PT4 = PT4PT5 = PT5PT6 = PT6PT7 = PT7PT8 = PT8PT9 = PT9PT10 = PT10PT11 = ajout pointPT12 = ajout pointPT13 = ajout pointPT14 = ajout pointPT15 = ajout pointPT16 = ajout point Cas de suppression de sommets de sommets :polyligne source --> polylignes ciblesPT1 = PT1PT2 = PT2PT3 = PT3PT4 = PT4PT5 = PT5PT6 = PT6PT7 = PT7PT8 = PT8PT9 = PT9PT10 = PT10Pas de sommet = PT11 = suppression du pointPas de sommet = PT12 = suppression du pointPas de sommet = PT13 = suppression du pointPas de sommet = PT14 = suppression du pointPas de sommet = PT15 = suppression du pointPas de sommet = PT16 = suppression du point Sinon j'essayerai d'illustrer par une image. A+
(gile) Posté(e) le 16 janvier 2008 Posté(e) le 16 janvier 2008 Voilà un essai, ça correspond à ce qu'il me semble avoir compris EDIT : corrigé un bug (defun tempcross (pt / l) (setq l (/ (getvar "VIEWSIZE") 40.0)) (grvecs (list (polar pt (* pi 1.25) l) (polar pt (* pi 0.25) l) (polar pt (* pi 0.75) l) (polar pt (* pi 1.75) l) ) ) ) (defun c:correspline (/ ajouter supprimer source cible l1 l2 l3 vec nor) (defun ajouter () (tempcross (trans (cdar l1) nor 1)) (initget "Oui Non") (if (= "Non" (getkword "\nAjouter le sommet [Oui/Non] ? [b]<[/b]Oui>: ") ) (setq l1 (cdr l1)) (progn (setq l3 (cons (cons 10 (mapcar '+ (cdar l1) vec)) l3) l1 (cdr l1) ) (entmod (append (subst (cons 90 (+ (length l3) (length l2))) (assoc 90 cible) cible ) (reverse l3) l2 ) ) ) ) (redraw) ) (defun supprimer () (tempcross (trans (cdar l2) nor 1)) (initget "Oui Non") (if (= "Non" (getkword "\nSupprimer le sommet [Oui/Non] ? [b]<[/b]Oui>: ") ) (setq l3 (cons (car l2) l3) l2 (cdr l2) ) (progn (setq l2 (cdr l2)) (entmod (append (subst (cons 90 (+ (length l3) (length l2))) (assoc 90 cible) cible ) (reverse l3) l2 ) ) ) ) (redraw) ) (while (not (and (setq source (car (entsel "\nSélectionnez la polyligne source: "))) (setq source (entget source)) (= (cdr (assoc 0 source)) "LWPOLYLINE") ) ) (princ "Entité non valide.") ) (while (not (and (setq cible (car (entsel "\nSélectionnez la polyligne cible "))) (setq cible (entget cible)) (= (cdr (assoc 0 cible)) "LWPOLYLINE") ) ) (princ "Entité non valide.") ) (setq l1 (vl-remove-if-not (function (lambda (x) (= (car x) 10))) source ) l2 (vl-remove-if-not (function (lambda (x) (= (car x) 10))) cible ) cible (vl-remove-if (function (lambda (x) (member (car x) '(10 40 41 42)))) cible ) vec (mapcar '- (cdar l2) (cdar l1)) nor (cdr (assoc 210 cible)) ) (while (and l1 l2) (if (equal (cdar l2) (mapcar '+ (cdar l1) vec)) (setq l3 (cons (car l2) l3) l1 (cdr l1) l2 (cdr l2) ) (if (or (member (cons 10 (mapcar '+ (cdar l1) vec)) l2) (null (cdr l2)) ) (supprimer) (ajouter) ) ) ) (and l1 (while l1 (ajouter))) (and l2 (while l2 (supprimer))) (princ) ) [Edité le 16/1/2008 par (gile)][Edité le 17/1/2008 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
didier Posté(e) le 17 janvier 2008 Posté(e) le 17 janvier 2008 hello, j'attendrai l'image ... amicalement Éternel débutant... Mon site perso : Programmer dans AutoCAD
fabcad Posté(e) le 17 janvier 2008 Auteur Posté(e) le 17 janvier 2008 Bravo Gile c'est exactement ce que je souhaitais. Je pense que tu pourras l'ajouter à ta liste de fonctions. Merci encore, je vais pouvoir faire mes filaires de voies plus facilement. Fabrice
(gile) Posté(e) le 17 janvier 2008 Posté(e) le 17 janvier 2008 Salut, Je suis content que ça corresponde à ce que tu voulais, même si je n'ai aucune idée de l'utilité de ce code, c'était un exercice plaisant. PS : J'ai edité le code, les options par défaut ("Oui") pour supprimer ou ajouter avaient disparu. Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
fabcad Posté(e) le 22 mars 2012 Auteur Posté(e) le 22 mars 2012 Bonjour, J'utilise beaucoup cette fonction, et je me demandais si on pouvait éviter les Oui ou Non en ajoutant une option "Identique à l'original". Afin d'éviter de rentrer oui ou non. C'est peut-être complexe. Bonne journée, Cordialement, Fabcad le sigiste
fabcad Posté(e) le 26 mars 2012 Auteur Posté(e) le 26 mars 2012 Bonsoir, J'ai créé une routine LISP pour faire ce genre de traitement elle se trouve sur cette page : Mon lien Bonne soirée, Fabcad
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