Aller au contenu

Lancer une foncion depuis un lisp avec paramètres


Messages recommandés

Posté(e)

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

Posté(e)

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."

Posté(e)

Salut

Recopié 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 Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

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

Posté(e)

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."

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité