FastFiber

Volgorde van acties in een lisproutine

Gestart door Reimer, do 25 12 2008, 14:16:58

Vorige topic - Volgende topic

Reimer

Ik heb een lisproutine gemaakt, maar de volgorde van de acties is niet juist. Ik vraag me af hoe ik dit kan beïnvloeden. Er moet eerst een uitgavenummer opgegeven worden. (bv. 0.1, 2, 2.15, etc). Wanneer dit een rond getal is wordt er niks gedaan, anders moet er een tekst "CONCEPT" verwijderd worden en daarna de tekening op een A3 in PDF plotten. Op zich werkt het, alleen wordt eerst de PDF gemaakt en daarna de tekst verwijderd. Hierdoor staat er nog altijd CONCEPT op de PDF. Kan ik deze volgorde beïnvloeden?

Groeten,
Reimer

(defun c:def ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq uitgreal (atof uitg))
  (if
    (= (- uitgreal (fix uitgreal)) 0) ;ALS: uitg = heel getal
    (alert "uitgave is een heel getal; geen actie") ;DAN: geen actie
    ((command "erase" (ssget "c" '(0 0) '(-210 297)  '((0 . "Mtext") (1 . "CONCEPT"))) "") ;ANDERS: erase tekst en
     (command "-plot" "y" "" "adobe PDF" "A3" "" "L" "" "w" "-420,0" "0,297" "1:1" "0,0" "" "BWO-kleur.ctb" "" "" "" "" ""

"No" "Y") ;plot een pdf
    ) ;einde niet1
  ) ;einde als1
)

Reimer

Geen lisp-kenners die een antwoord hebben? Of is de vraagstelling niet duidelijk?
Ik zit behoorlijk klem door dit probleem.

Reimer.

Kenny H

Beste Reimer,

Probeer het volgende eens!

Citeer(defun c:def ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq uitgreal (atof uitg))
  (if
    (= (- uitgreal (fix uitgreal)) 0)               ;ALS: uitg = heel getal
    (alert "uitgave is een heel getal; geen actie")         ;DAN: geen actie
    ((command "erase" (ssget "x" (list (cons 0 "Mtext") (cons 1 "CONCEPT"))) "")   ;ANDERS: erase tekst en
     (command "-plot" "y" "" "adobe PDF" "A3" "" "L" "" "w" "-420,0" "0,297" "1:1" "0,0" "" "BWO-kleur.ctb" "" "" "" "" ""

"No" "Y")                        ;plot een pdf
    )                           ;einde niet1
  )                           ;einde als1
)

(command "erase" (ssget "x" (list (cons 0 "Mtext") (cons 1 "CONCEPT"))) "")
de combinatie met 0,0 en -210,297 wil bij mij niet lukken, maar zo werkt het volgens mij wel

Mvg

Kenny
8) Volvo 4 Life 8)

Reimer

#3
Beste Kenny,

bedankt voor je reactie.
Ik kan mijn probleem geloof ik omzeilen. Ik merkte net dat de eerste actie binnen de IF-functie als laatste wordt uitgevoerd. Bij de volgende test krijg ik de meldingen 2, 3, 4 en 1.

Citeer(defun c:defje ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq uitgreal (atof uitg))
  (if
    (= (- uitgreal (fix uitgreal)) 0)                 ;ALS: uitg = heel getal
    (alert "uitgave is een heel getal; geen actie")   ;DAN: geen actie
    (                                                 ;NIET: geef opsomming
      (alert "1")
      (alert "2")
      (alert "3")
      (alert "4")
    )                                                 ;einde NIET
  )                                                   ;einde ALS
)

Om dit te omzeilen heb ik er een "Delay" voor gezet:

Citeer(defun c:defje ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq uitgreal (atof uitg))
  (if
    (= (- uitgreal (fix uitgreal)) 0)                 ;ALS: uitg = heel getal
    (alert "uitgave is een heel getal; geen actie")   ;DAN: geen actie
    (                                                 ;NIET: geef opsomming
      (command "delay" "3000")
      (alert "1")
      (alert "2")
      (alert "3")
      (alert "4")
    )                                                 ;einde NIET
  )                                                   ;einde ALS
)

Nu krijg ik netjes: 1, 2, 3 en 4 en daarna even wachten (en deze kan natuurlijk ook op 1 staan).
Ik snap alleen nog niet waarom er in dit geval niet van voren naar achteren wordt gewerkt.

Groeten,
Reimer.

Kenny H

#4
Reimer,

Allereerst men beste wensen voor 2009!!  :pintje:

Om u te helpen; zet er eens progn voor!
dit zorgt ervoor dat je meerdere regels in uw of kunt plaatsen

vb
  (if (or (= tipe "M") (= tipe ""))
    (progn
      (setvar "celtype" "bylayer")
      (setq hoogte (- hoogte 2))
      (command "color" "red")
      (command "rectangle"
       raama
       (strcat "@" (rtos breedte) ",-2")
      )
      (setq ABSPROF 2)
      (setvar "textstyle" "sam65")
      (command "text"
       (list (+ (car raama) breedte 200) (cadr raama))
       0
       (strcat "ABS " (rtos ABSPROF))
      )
      (command "color" "bylayer")
    )
  )

als het in mijn voorbeeld waar is moet hij het bovenste uitvoeren, anders niets!

Mvg

Kenny

Citeer(defun c:def ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq uitgreal (atof uitg))
  (if
    (= (- uitgreal (fix uitgreal)) 0)               ;ALS: uitg = heel getal
    (alert "uitgave is een heel getal; geen actie")         ;DAN: geen actie
    (PROGN (command "erase" (ssget "x" (list (cons 0 "Mtext") (cons 1 "CONCEPT"))) "")   ;ANDERS: erase tekst en
     (command "-plot" "y" "" "adobe PDF" "A3" "" "L" "" "w" "-420,0" "0,297" "1:1" "0,0" "" "BWO-kleur.ctb" "" "" "" "" ""

"No" "Y")                        ;plot een pdf
    )                           ;einde niet1
  )                           ;einde als1
)
8) Volvo 4 Life 8)

sschevers

Ik heb je code een klein beetje aangpast. Zoasl eerder gemeld progn gebruiken is aan te bevelen. Check ook even of je selectie sets gevuld zijn voordat je allerlei acties gaat doen. Is wel zo netjes. En declareer je variabelen globale variabelen kunnen nogal eens vervelende neven effecten hebben.

(defun c:def (/ DELTEXT UITG UITGREAL )
   (setq uitg (getstring "geef het uitgavenummer op:     "))
   (setq uitgreal (atof uitg))
   (if (= (- uitgreal (fix uitgreal)) 0)
      ;ALS: uitg = heel getal
      (progn
         ;DAN: geen actie
         (alert "uitgave is een heel getal; geen actie")
      );end progn
      (progn
         (setq deltext
            (ssget "c"
               (list 0 0)
               (list 210 297)
               (list
                  (cons -4 "<and")
                   (cons 0  "MTEXT")
                   (cons 1 "Concept")
                  (cons -4 "and>")
                 
               )
            )
         )

         (if (/= deltext nil)
            (progn
               (command "erase" deltext "")
               (command "-plot"  "y"      ""       "adobe PDF"
                    "A3"     ""       "L"      ""       "w"
                    "-420,0" "0,297"  "1:1"    "0,0"    ""
                    "BWO-kleur.ctb"   ""       ""       ""
                    ""       ""       "No"     "Y"
                )
            );end prong
         );end if
          ;plot een pdf
     ) ;end progn
   ) ;einde als1
)



greetz stephan

FastFiber