CADsite forum

AutoCAD => Autolisp => Topic gestart door: martijn op vr 19 03 2010, 13:11:11

Titel: Lisp met babe OPGELOST !!
Bericht door: martijn op vr 19 03 2010, 13:11:11
Goedemiddag,

Misschien dat iemand van jullie mij iets verder op weg kan helpen.
Ik gebruik babe om bepaalde instellingen in tekeningen die we binnen krijgen te veranderen.
Nu is het geval dat er een oud blokje is gebruikt  en deze wil ik dan door middel van redefine aanpassen.
Als je dit handmatig doet, dan kun je op escape drukken om het blok niet werkelijk ook in je tekening te zetten, want dan is het bestaande blok in de tekening al aangepast.
Dit gaat met onderstaande lisp helemaal goed, maar de babe loopt niet door en ik heb het idee dat met het commando /e alles gecanceld wordt.
Weet iemand wat kan ik doen om dit programma toch door te laten lopen?

Met vriendelijke groet,

Martijn Jongeneel

(defun c:DoIt ()
 (command "purge"
      "all"
      "*"
      "n"
      "Measurement"
      "1"
      "Imageframe"
      "0"
      "LTScale"
      "10"
      "PSLTScale"
      "0"
      "plquiet"
      "1"
      "-vbarun"
      "printerdelete"
      "limits"
      "off"
      "PSetupIn"
      "H:/Acad/10-DKB Tekeningen/Tek/Printers.dwg"
      "*"
      "-insert"
      "ohdkb_x_eng="
      "y"
      \e
           
 ) ;_ end of command
 (princ)
) ;_ end of defun
Titel: Re:Lisp met babe
Bericht door: roy_043 op vr 19 03 2010, 13:22:55
Probeer dit:

(defun c:DoIt ()
  (command "purge"
      "all"
      "*"
      "n"
      "Measurement"
      "1"
      "Imageframe"
      "0"
      "LTScale"
      "10"
      "PSLTScale"
      "0"
      "plquiet"
      "1"
      "-vbarun"
      "printerdelete"
      "limits"
      "off"
      "PSetupIn"
      "H:/Acad/10-DKB Tekeningen/Tek/Printers.dwg"
      "*"
     "-insert"
      "ohdkb_x_eng="
      "y" ; misschien overbodig of ongewenst?
  ) ;_ end of command
  (command) ; functioneert als Escape
  (princ)
) ;_ end of defun
Titel: Re:Lisp met babe
Bericht door: martijn op vr 19 03 2010, 13:36:13
Bedankt voor je reactie, maar hiermee lukt het ook niet. Het maakt idd niet uit of in "y" wel of niet aanstaat.

Iemand anders nog een idee??
Titel: Re:Lisp met babe
Bericht door: roy_043 op vr 19 03 2010, 14:04:52
Misschien werkt deze?:

(defun c:DoIt ()
  (command "purge"
      "all"
      "*"
      "n"
      "Measurement"
      "1"
      "Imageframe"
      "0"
      "LTScale"
      "10"
      "PSLTScale"
      "0"
      "plquiet"
      "1"
      "-vbarun"
      "printerdelete"
      "limits"
      "off"
      "PSetupIn"
      "H:/Acad/10-DKB Tekeningen/Tek/Printers.dwg"
      "*"
      "-insert"
      "ohdkb_x_eng="
      ; "y" ; Misschien nu toch nodig?
  ) ;_ end of command
  (while (> (getvar "cmdactive") 0)
    (command) ; functioneert als Escape
  )
  (princ)
) ;_ end of defun

Als deze werkt dan liep Babe vast omdat een commando actief bleef.
Titel: Re:Lisp met babe
Bericht door: martijn op vr 19 03 2010, 17:03:57
Helaas, dit werkt ook niet. Hieronder wat er gebeurt, misschien dat jullie dit snappen

Command: -insert Enter block name or [?]: ohdkb_x_eng= Duplicate definition of
block DKB Logo kleur klein  ignored.
Block "ohdkb_x_eng" redefined

Units: Millimeters   Conversion:    1.0000
Specify insertion point or [Basepoint/Scale/X/Y/Z/Rotate]: y Specify Y scale
factor <1>:
Command: nil

Titel: Re:Lisp met babe
Bericht door: roy_043 op vr 19 03 2010, 21:33:58
Ik heb jouw lisp (of althans het insert-gedeelte) nu getest in combinatie met een script en ik krijg hetzelfde resultaat. Blijkbaar is het zo dat het gebruik van escape niet alleen het insert-commando maar ook het lopende script afbreekt. De enige oplossing die ik nu kan bedenken is om het insert-commando gewoon helemaal af te ronden en vervolgens het laatste element te wissen. Dus:

(defun c:DoIt ()
  (command "purge"
      "all"
      "*"
      "n"
      "Measurement"
      "1"
      "Imageframe"
      "0"
      "LTScale"
      "10"
      "PSLTScale"
      "0"
      "plquiet"
      "1"
      "-vbarun"
      "printerdelete"
      "limits"
      "off"
      "PSetupIn"
      "H:/Acad/10-DKB Tekeningen/Tek/Printers.dwg"
      "*"
      "-insert" "ohdkb_x_eng=" '(0 0 0) "xyz" 1.0 1.0 1.0 0.0
      "erase" (entlast) ""
  ) ;_ end of command
  (princ)
) ;_ end of defun
Titel: Re:Lisp met babe
Bericht door: martijn op ma 22 03 2010, 07:48:27
Dat is grappig, hier had ik het weekend ook over nagedacht (wist alleen nog niet hoe), alleen het vervelende is dat het een onderhoek is van een tekening, waarbij hij nu eerst nog gaat vragen om alle attributen in te gaan vullen. Deze zouden dan eerst uitgelezen moeten worden en vervolgens opnieuw moeten worden ingevult, maar dit gaat me iets boven m'n pet, zeker met lisp.
Is er misschien nog een andere manier om het commando af te breken en daarna toch het commando babe voort te zetten? Ik ga hier zo niet uitkomen ben ik bang.
Titel: Re:Lisp met babe
Bericht door: roy_043 op ma 22 03 2010, 08:50:22
Het idee is dat de insert een dummy is. Deze wordt gewist. Je hoeft dus niets uit te lezen. Je kunt het attributen-probleem op twee manieren benaderen. Of je vult dummy teksten in of je vult helemaal niet in. In de code hieronder is voor het laatste gekozen:

(defun c:DoIt ()
  (setvar "attreq" 0)
  (command
    "purge"
    "all"
    "*"
    "n"
    "Measurement"
    "1"
    "Imageframe"
    "0"
    "LTScale"
    "10"
    "PSLTScale"
    "0"
    "plquiet"
    "1"
    "-vbarun"
    "printerdelete"
    "limits"
    "off"
    "PSetupIn"
    "H:/Acad/10-DKB Tekeningen/Tek/Printers.dwg"
    "*"
    "-insert" "ohdkb_x_eng=" '(0 0 0) "xyz" 1.0 1.0 1.0 0.0
    "erase" (entlast) ""
  )
  (setvar "attreq" 1)
  (princ)
)
Titel: Re:Lisp met babe
Bericht door: martijn op ma 22 03 2010, 14:40:16
Mooi man, gaat helemaal goed zo. Super bedankt, ben weer een stukje wijzer geworden.