thierry.garré Posté(e) le 1 mars 2007 Posté(e) le 1 mars 2007 Amis lispeurs Bonsoir je cherche à modifier le point origine d'une polyligne 2D fermée en principe dans les propriété de la polyligne le sommet appelé numéro 1 est le premier clicquer lors de la création. moi j'aimerai bien pouvoir en changer en en choisissant un autre merci d'avange aux bonnes ames..... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
Bred Posté(e) le 1 mars 2007 Posté(e) le 1 mars 2007 Salut,Tu cherches à faire quoi, exactement ? pour info, tu peux extraire tous les sommets d'une lwpolyligne avec ça :(setq ent (entget (car (entsel "\n choisir lwpolyligne :")))) (foreach n ent (if (equal (car n) 10) (setq lst (append lst (list (cdr n))))))(la liste des coordonnées se trouvant dans lst) ... si tu cherches à modifier les coordonnées du premier point, tu peux faire un(setq nvlle-coord '(0 0)) (entmod (subst (cons 10 nvlle-coord) (assoc 10 ent) ent)) par contre, j'aimerai bien pouvoir en changer en en choisissant un autre... je ne comprends pas.... [Edité le 1/3/2007 par Bred] Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 2 mars 2007 Posté(e) le 2 mars 2007 Salut, vite fait, et pas testé en profondeur. Edit : Fonctionne désormais avec les polylignes créées dans des systèmes de coordonnées non parallèles au SCG. Edit 2 : Prise en compte de remarques et suggestions de Bonuscad. ;;; MEMBER-FUZZ Comme MEMBER avec une tolérance dans la comparaison (defun member-fuzz (expr lst fuzz) (while (and lst (not (equal (car lst) expr fuzz))) (setq lst (cdr lst)) ) ) ;;; TRUNC-FUZZ Retourne la liste tronquée à partir de la première occurrence ;;; de l'expression (liste complémentaire de celle retournée par MEMBER-FUZZ) (defun trunc-fuzz (expr lst fuzz) (if (and lst (not (equal (car lst) expr)) ) (cons (car lst) (trunc-fuzz expr (cdr lst) fuzz)) ) ) ;;; PlineOrg Change le point de départ de la polyligne fermée (defun c:plineorg (/ erreur os pt ent plst dlst elst) (defun erreur (msg) (if (= msg "Fonction annulée") (princ) (princ (strcat "\nErreur: " msg)) ) (setvar "OSMODE" os) (setq *error* m:err m:err nil ) ) (setq m:err *error* *error* erreur os (getvar "OSMODE")) (setvar "OSMODE" 1) (if (and (setq pt (getpoint "\nSélectionnez le nouveau point de départ sur la polyligne: " ) ) (setq ent (car (nentselp pt))) (setq elst (entget ent)) (= "LWPOLYLINE" (cdr (assoc 0 elst))) (= 1 (logand 1 (cdr (assoc 70 elst)))) (setq plst (vl-remove-if-not '(lambda (x) (member (car x) '(10 40 41 42)) ) elst ) ) (setq dlst (member-fuzz (setq pt (cons 10 (reverse (cdr (reverse (trans pt 1 ent) ) ) ) ) ) plst 1e-9 ) ) (setq elst (vl-remove-if '(lambda (x) (member (car x) '(10 40 41 42)) ) elst ) ) ) (entmod (append elst dlst (trunc-fuzz pt plst 1e-9))) (prompt "\nEntité non valide.") ) (setvar "OSMODE" os) (setq *error* m:err m:err nil ) (princ) ) [Edité le 2/3/2007 par (gile)] [Edité le 4/3/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
thierry.garré Posté(e) le 2 mars 2007 Auteur Posté(e) le 2 mars 2007 merci gile, plineorg c'est exactement ce que je recherche (il va tout de même falloir que je finisse par m'offir une formation Lisp)...... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
Bred Posté(e) le 2 mars 2007 Posté(e) le 2 mars 2007 Donc c'est bien exactement ce que tu expliquais....Mais pourrais-tu m'expliquer quel en est l'utilité ?merci Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
(gile) Posté(e) le 2 mars 2007 Posté(e) le 2 mars 2007 J'ai modifié le LISP pour qu'il fonctionne aussi avec les polylignes créées dans des systèmes de coordonnées non parallèles au SCG. Il faut une légère tolérance dans la comparaison du point acquis par la sélection avec ceux de la base de données (fonctions member-fuzz et trunc-fuzz). Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
bonuscad Posté(e) le 3 mars 2007 Posté(e) le 3 mars 2007 Gilles, Un oubli de parenthèse fermante pour le (and , [le premier dans plineorg], fausse le message final."entité non valide" est retourné dans le cas d'un bon déroulement et rien dans le cas contraire. En fait tes instructions font partie du and, mais cela n'empêche pas le bon déroulement. Bon travail, j'aurais peut être simplement rajouté une indication visuelle sur le sommet concerné comme peut le faire pedit lors de la modification des sommets. ;) NB lors de mes test, ta fonction avant modification, fonctionnait dans les scu non parallèles. Mais je n'ai peut être pas assez poussé les tests. Choisissez un travail que vous aimez et vous n'aurez pas à travailler un seul jour de votre vie. - Confucius
(gile) Posté(e) le 4 mars 2007 Posté(e) le 4 mars 2007 Merci pour le retour Bonuscad, c'est corrigé et la suggestion a été prise en compte. [Edité le 4/3/2007 par (gile)] Gilles Chanteau - gileCAD - GitHub Développements sur mesure pour AutoCAD
thierry.garré Posté(e) le 5 mars 2007 Auteur Posté(e) le 5 mars 2007 Merci à tous Pour Bred. l'utilité c'est que j'ai un aplicatif qui me permet de gérer cette polyligne comme un contour de parking "par exemple" et je peu jouer sur l'altitude de chaque sommet par interpolation . Sauf le premier qui est fixe dans la liste...... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
Bred Posté(e) le 5 mars 2007 Posté(e) le 5 mars 2007 Re,Il y a quelque chose qui m'échappe là, je dois me tromper, car pour moi, une "LWPOLYLIGNE" ne peut avoir qu'une seule altitude (Z) pour tout ces sommets, et c'est ce que traite le lisp de (gile).Par contre, une "POLYLIGNE" (dites "3D") peut avoir des sommets de valeurs Z différent, mais le premier point peut se déplacer sur les Z comme on le désire.......non ? :casstet: Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
thierry.garré Posté(e) le 9 mars 2007 Auteur Posté(e) le 9 mars 2007 oui bien d'accord avec toi, mais mon soucis c'est que dans mon logiciel (covadis) je saisis une polyligne 2D et le logiciel me la transforme en polyligne 3D avec un assistant pour fixer les z des différents sommets (interpolation de pente etc) par contre le premier sommet de ma polyligne 2D de base qui devient le premier point de ma nouvelle polyligne 3D (plateforme) et je ne peut pas interpoler l'altitude de ce sommet entre deux autres sommets car il est en tête de liste dans mon assistant et c'est tres ennuyeux... je ne sais pas si je suis tres clair , mais je pense qu'il faudrait le voir pour comprendre mieux. Je pense que ceux qui utilise cette partie du logiciel COVADIS doivent voir de quoi je parle... :) :) :) Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
Bred Posté(e) le 9 mars 2007 Posté(e) le 9 mars 2007 OK, je comprends.En fait, COVADIS aurait dû te proposer dans la liste de ton "assistant" une "copie" du dernier point avant le premier.... (en laissant le dernier point où il est), afin d'extrapoler le premier point entre le dernier et le second.... Si vous êtes persuadés de tout savoir sur un sujet, c''est que vous en ignorez quelque chose...
thierry.garré Posté(e) le 10 mars 2007 Auteur Posté(e) le 10 mars 2007 Exactement et ja pense que cette amélioration ne serait tarder. Mais dans l'attente merci à vous trois...... Thierry Garré Géorail-Covadis-Autopiste-Autocad-Autocad Map-Infraworks 360- Navisworks -Recap
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