LUDWIG Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Bonjour, Je me remet légèrement au lisp depuis que j'ai changé de boulot il y a un an et demi. C'est dur dur ! Dans un petit lisp, je veux lancer une fonction (flatten) qui vient d'un autre lisp : (defun () (while (setq jeu (ssget "x" (list '(0 . "*face*")))) (setq j 0) (while (ssname jeu j) (setq NB (sslength JEU)) (sssetfirst nil JEU) (c:flatten) (setq j (+ NB j))) (setq i (+ i j))) ) Or FLATTEN pose une question ("remove hidden lines") et je n'arrive pas à y répondre automatiquement dans mon lisp.J'ai essayé sans succès :(c:flatten n)(c:\flatten "n")(c:flatten \ n)(c:\flatten \ "n")(c:flatten / n)(c:\flatten /"n")(c:flatten) (print "n")(c:\flatten)(command "n") Quelle serait la nomenclature à adopter ? Merci d'avance ! Autocad 2021 - Revit 2022 - Windows 10
Matt666 Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Une petite chose comme ça peut-être ? (command "(c:flatten)" "y ") à la place de ton (c:flatten) [Edité le 6/9/2007 par Matt666] "Chacun compte pour un, et nul ne compte pour plus d'un."
Patrick_35 Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 SalutRecopié depuis le lisp Flatten.lsp (setq ans "No") ; Si la réponse est non (if (and (setq ss (ssget "_:l" '((-4 . "[b]<[/b]NOT") (0 . "VIEWPORT") (-4 . "NOT[b]>[/b]")))) (setq ss (car (acet-ss-filter (list ss nil T)))) ) (if (equal ans "No") (acet-flatn ss nil) (acet-flatn ss T) ) ) @+ [Edité le 6/9/2007 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
LUDWIG Posté(e) le 6 septembre 2007 Auteur Posté(e) le 6 septembre 2007 Merci les amis ! J'ai essayé (command "(c:flatten)" "n") mais ça ne fonctionne pas... Quand à l'astuce de Patrick_35, je viens de l'appliquer et de faire un test, ça tourne depuis un peu trop longtemps pour être normal... Je suis obligé d'arrêter à la sauvage. Comment appliquer ce bout de code à ma sélection ? Est-ce que mon sssetfirst est convenable ? Autocad 2021 - Revit 2022 - Windows 10
Matt666 Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 C'est bien la routine Flatten de Mark Middlebrook ? "Chacun compte pour un, et nul ne compte pour plus d'un."
Patrick_35 Posté(e) le 6 septembre 2007 Posté(e) le 6 septembre 2007 Le filtre était mal passé. C'est corrigé @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
LUDWIG Posté(e) le 7 septembre 2007 Auteur Posté(e) le 7 septembre 2007 merci !mais maintenant : "; erreur: no function definition: ACET-FLATN" Autocad 2021 - Revit 2022 - Windows 10
Patrick_35 Posté(e) le 7 septembre 2007 Posté(e) le 7 septembre 2007 Tu charges flatten ou tu fais ceci (acet-autoload2 '("FLATTENSUP.LSP" (acet-flatn ss hide))) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
LUDWIG Posté(e) le 7 septembre 2007 Auteur Posté(e) le 7 septembre 2007 nickel ! merci, je déposerais bintôt ma petite routine Autocad 2021 - Revit 2022 - Windows 10
Matt666 Posté(e) le 7 septembre 2007 Posté(e) le 7 septembre 2007 Sinon tu peux faire comme ça :Routine de sélection : (defun c:face0 () (if (setq jeux (ssget "x" (list '(0 . "LINE")))) (progn (c:flatten "Y" jeux) (sssetfirst nil JEUX) ) ) (princ) ) J'ai remplacé *face* par LINE, pour voir les résultats.Comme tu peux voir, on a 2 paramètres après la fonction flatten (c:flatten "Y" jeux) J'ai un peu changé la routine FLATTEN pour ajouter deux paramètres...Comme suit : (defun c:FLATTEN (quest sset / *ERROR* CRZ ELIST ENAME ETYPE I NUMCHG NUMNO0 NUMNOT OLDCMD OLDERR SS1 SS1LEN SSNO0 TMPUCS VRT ) (setq tmpucs "$FLATTEN-TEMP$" olderr *error* ) (defun *error* (msg) (if (or (= msg "Function cancelled") (= msg "quit / exit abort")) (princ) (princ (strcat "\nError: " msg)) ) (setq *error* olderr) (if (tblsearch "UCS" tmpucs) (command "._UCS" "_Restore" tmpucs "._UCS" "_Delete" tmpucs) ) (command "._UNDO" "_End") (setvar "CMDECHO" oldcmd) (princ) ) (defun zeroze (key zelist / oplist nplist) (entmod (subst (reverse (append '(0.0) (cdr (reverse (assoc key zelist))))) (assoc key zelist) zelist ) ) ) (setq oldcmd (getvar "CMDECHO")) (setvar "CMDECHO" 0) (command "._UNDO" "_Group") (command "._UCS" "_Delete" tmpucs "._UCS" "_Save" tmpucs "._UCS" "_World") (prompt (strcat "\nFLATTEN sets the Z coordinates of most objects to zero.")) (if (not quest) (progn (initget "Y,Yes N,No") (setq quest (getstring "\nDo you want to continue : ")) (if (eq quest "")(setq quest "y")) )) (cond ((and (/= (strcase quest) "NO") (/= (strcase quest) "N") (or (eq (strcase quest) "Y") (eq (strcase quest) "YES")) ) (graphscr) (if (not sset)(progn (setq sset (ssget)) (if (null sset) (setq sset (ssget "_X")) ) )) (setq ss1 sset ss1len (sslength ss1) i 0 numchg 0 numnot 0 numno0 0 ssno0 (ssadd) ) (prompt "\nWorking.") (while (< i ss1len) (if (= 0 (rem i 10)) (prompt ".") ) (setq ename (ssname ss1 i) elist (entget ename) etype (cdr (assoc 0 elist)) ) (if (not (member etype '("3DFACE" "ARC" "ATTDEF" "CIRCLE" "DIMENSION" "ELLIPSE" "HATCH" "INSERT" "LINE" "LWPOLYLINE" "MTEXT" "POINT" "POLYLINE" "SOLID" "TEXT" ) ) ) (progn (setq numnot (1+ numnot)) (if (/= 0.0 (car (reverse (assoc 10 elist)))) (progn (setq numno0 (1+ numno0)) (ssadd ename ssno0)) ) ) ) (if (member etype '("3DFACE" "ARC" "ATTDEF" "CIRCLE" "DIMENSION" "ELLIPSE" "HATCH" "INSERT" "LINE" "MTEXT" "POINT" "POLYLINE" "SOLID" "TEXT" ) ) (setq elist (zeroze 10 elist) numchg (1+ numchg) ) ) (if (member etype '("3DFACE" "ATTDEF" "DIMENSION" "LINE" "TEXT" "SOLID")) (setq elist (zeroze 11 elist)) ) (if (member etype '("3DFACE" "SOLID")) (progn (setq elist (zeroze 12 elist) elist (zeroze 13 elist) ) ) ) (if (member etype '("DIMENSION")) (progn (setq elist (zeroze 13 elist) elist (zeroze 14 elist) elist (zeroze 15 elist) elist (zeroze 16 elist) ) ) ) (if (= etype "POLYLINE") (progn (setq vrt ename) (while (not (equal (cdr (assoc 0 (entget vrt))) "SEQEND")) (setq elist (entget (entnext vrt)) crz (cadddr (assoc 10 elist)) ) (if (/= crz 0) (progn (zeroze 10 elist) (entupd ename)) ) (setq vrt (cdr (assoc -1 elist))) ) ) ) (if (member etype '("LWPOLYLINE")) (progn (setq elist (subst (cons 38 0.0) (assoc 38 elist) elist) numchg (1+ numchg) ) (entmod elist) ) ) (setq i (1+ i)) ) (prompt " Done.") (prompt (strcat "\n" (itoa numchg) " object(s) flattened.")) (prompt (strcat "\n" (itoa numnot) " object(s) not flattened.")) (if (/= 0 numno0) (progn (prompt (strcat " [" (itoa numno0) " with non-zero base points]")) (getstring "\nPress enter to see non-zero unchanged objects... ") (command "._SELECT" ssno0) (getstring "\nPress enter to unhighlight them... ") (command "") ) ) ) ) (command "._UCS" "_Restore" tmpucs "._UCS" "_Delete" tmpucs) (command "._UNDO" "_End") (setvar "CMDECHO" oldcmd) (setq *error* olderr) (princ) ) Le problème est que si tu utilises la routine flatten ailleurs, il faudra changer FLATTEN en lui ajoutant des conditions...Par exemple si tu veux la commande flatten normale, il ne faut pas saisir FLATTEN dans la ligne de commande, mais saisir : (c:flatten nil nil) Mais sinon ça fonctionne bien... A bientot.Matt. "Chacun compte pour un, et nul ne compte pour plus d'un."
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