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
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
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??
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.
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
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
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.
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)
)
Mooi man, gaat helemaal goed zo. Super bedankt, ben weer een stukje wijzer geworden.