yoin

Reimer

Beste cadfans,

ik gebruik al langere tijd een zelfgemaakte (met hulp van cadsite :mrgreen:) lisproutine. Hiermee sla ik een bestand op met de toevoeging _n aan de bestandsnaam. Er wordt eerst gecontroleerd of deze naam al bestaat.
Nu BIND ik meestal alle xrefs en sla het bestand vervolgens op onder de nieuwe uitgave. (bijvoorbeeld tekening-1_A.dwg) Ik wil dit BINDen graag automatiseren door met een dialoogbox aan de gebruiker te vragen of hij/zij de xref's gebind wil hebben. In het boek van R. Boeklage staat het mooi beschreven, echter in mijn lisp wil het niet lukken. Er lijkt wel iets door mijn scherm te flitsen, dit gaat echter te snel om te zien of het een dialoogbox is. Kan iemand mij helpen?

Originele werkende lisp:
(defun C:def ()
(setq uitg (getstring "geef het uitgavenummer op:     "))
(setq dwgnaamext (getvar "dwgname"))                                             ;vraag de bestandsnaam met extensie op
(setq naamlengtetot (strlen dwgnaamext))                                         ;vraag de lengte van de bestandsnaam incl. extensie op
(setq naamlengte (- naamlengtetot 4))                                            ;verminder de naamlengte met 4 (geen extensie)
(setq dwgnaam (substr dwgnaamext 1 naamlengte))                                  ;pas de bestandsnaam aan (verwijder de extensie)
(setq dwgnaam_n.dwg (strcat dwgnaam "_" uitg ".dwg"))                            ;voeg _n.dwg toe aan de bestandsnaam
(setq dwgpadnaam_n.dwg (strcat (getvar "dwgprefix") dwgnaam_n.dwg))              ;voeg samen: padnaam+bestandsnaam_n.dwg
(if (/= dwgpadnaam_n.dwg (findfile dwgnaam_n.dwg))                               ;ALS nieuwe naam nog niet bestaat
      (command "saveas" "" dwgpadnaam_n.dwg)                                     ;DAN: sla het bestand op onder de nieuwe naam
      (alert "Deze uitgave bestaat al. De uitgave is NIET opnieuw opgeslagen!")   ;ANDERS: melding: bestand bestaat al, geen verdere actie
     )                                                                            ;einde ALS
(princ)
)


Nu wil ik een dialoogbox toevoegen en aan de hand van het resultaat de xref's wel of niet binden.

(defun C:defbind ()
(setq uitg (getstring "geef het uitgavenummer op:     "))

((setq Waarde "0")
  (setq nr (load_dialog "o:/Plan Ontwikkeling/Acad/BWO_layout/BWO_menu/BWO_Lisp/cursus-RR/Cursus.DCL"))
  (new_dialog "VB" nr)
  (set_tile "TOGGLEXREF" Waarde)
  (action_tile "TOGGLEXREF" "(SETQ WAARDE $VALUE)")
  (start_dialog)
  (unload_dialog nr)
  (alert waarde)
)

(setq dwgnaamext (getvar "dwgname"))                                             ;vraag de bestandsnaam met extensie op
(setq naamlengtetot (strlen dwgnaamext))                                         ;vraag de lengte van de bestandsnaam incl. extensie op
(setq naamlengte (- naamlengtetot 4))                                            ;verminder de naamlengte met 4 (geen extensie)
(setq dwgnaam (substr dwgnaamext 1 naamlengte))                                  ;pas de bestandsnaam aan (verwijder de extensie)
(setq dwgnaam_n.dwg (strcat dwgnaam "_" uitg ".dwg"))                            ;voeg _n.dwg toe aan de bestandsnaam
(setq dwgpadnaam_n.dwg (strcat (getvar "dwgprefix") dwgnaam_n.dwg))              ;voeg samen: padnaam+bestandsnaam_n.dwg
(if (/= dwgpadnaam_n.dwg (findfile dwgnaam_n.dwg))                               ;ALS nieuwe naam nog niet bestaat
      (

      (if (= waarde 1) (command "xref" "bind" "*"))
       (command "saveas" "" dwgpadnaam_n.dwg)                                     ;DAN: sla het bestand op onder de nieuwe naam
      )
      (alert "Deze uitgave bestaat al. De uitgave is NIET opnieuw opgeslagen!")   ;ANDERS: melding: bestand bestaat al, geen verdere actie
     )                                                                            ;einde ALS
;(princ)
)

Kenny H

Beste Reimer,

Voeg uw .dcl eens toe... aub
Dan kan ik eens kijken waar het fout loopt....

Kenny
8) Volvo 4 Life 8)

Reimer

Even vergeten.

VB : dialog {
     : toggle {
       label = "Bind alle xref's";
       key = "TOGGLEXREF";
     }
     ok_only;
}


Reimer

Kenny H

Reimer,

Probeer dit eens

Citeer(defun C:defbind ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq Waarde "0")
  (setq nr (load_dialog "Cursus.DCL")) ;;; enkel de naam is voldoende.
;;; anders moet je 2 \\ voorzien!
  (new_dialog "VB" nr)
;;;  (set_tile "TOGGLEXREF" Waarde) ;;; mag ook weg
  (action_tile "TOGGLEXREF" "(SETQ WAARDE $VALUE)")
  (start_dialog)
;;;  (unload_dialog nr) ;;; volgens mij niet nodig
(alert waarde)
(setq dwgnaamext (getvar "dwgname"))   ;vraag de bestandsnaam met extensie op
(setq naamlengtetot (strlen dwgnaamext));vraag de lengte van de bestandsnaam incl. extensie op
(setq naamlengte (- naamlengtetot 4))   ;verminder de naamlengte met 4 (geen extensie)
(setq dwgnaam (substr dwgnaamext 1 naamlengte))
               ;pas de bestandsnaam aan (verwijder de extensie)
(setq dwgnaam_n.dwg (strcat dwgnaam "_" uitg ".dwg"))
               ;voeg _n.dwg toe aan de bestandsnaam
(setq dwgpadnaam_n.dwg (strcat (getvar "dwgprefix") dwgnaam_n.dwg))
               ;voeg samen: padnaam+bestandsnaam_n.dwg
(if (/= dwgpadnaam_n.dwg (findfile dwgnaam_n.dwg))
               ;ALS nieuwe naam nog niet bestaat
  (
   (if (= waarde 1)
     (command "xref" "bind" "*")
   )
    (command "saveas" "" dwgpadnaam_n.dwg)
               ;DAN: sla het bestand op onder de nieuwe naam
  )
  (alert
    "Deze uitgave bestaat al. De uitgave is NIET opnieuw opgeslagen!"
  )               ;ANDERS: melding: bestand bestaat al, geen verdere actie
)               ;einde ALS
               ;(princ)
)

Hopelijk werkt dit nu ...

Mvg

Kenny
8) Volvo 4 Life 8)

Reimer

Kenny,
bedankt voor je hulp. Het onjuiste pad was dus het probleem.

Toch werkt het nog niet helemaal. Er worden geen xref's gebind. Ik heb in mijn orriginele lisp nog twee regels staan. Één om de text "concept" te verwijderen en één om het uitgave nummer te wijzigen in het tekenhoofd. Dit werkt allemaal nog steeds. Alleen het binden van de xrefs gebeurt niet.
Ook krijg ik in acad nog een foutmelding: Command: ; error: no function definition: nil

Kan iemand mij nog weer helpen dit op te lossen?

Reimer
(hieronder de nieuwe lisproutine)

Citeer(defun C:defbind ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
  (setq Waarde "1")
  (setq nr (load_dialog "Cursus.DCL"))
  (new_dialog "VB" nr)
  (action_tile "TOGGLEXREF" "(SETQ WAARDE $VALUE)")
  (start_dialog)
  (setq dwgnaamext (getvar "dwgname"))               ;vraag de bestandsnaam met extensie op
  (setq naamlengtetot (strlen dwgnaamext))            ;vraag de lengte van de bestandsnaam incl. extensie op
  (setq naamlengte (- naamlengtetot 4))               ;verminder de naamlengte met 4 (geen extensie)
  (setq dwgnaam (substr dwgnaamext 1 naamlengte))         ;pas de bestandsnaam aan (verwijder de extensie)
  (setq dwgnaam_n.dwg (strcat dwgnaam "_" uitg ".dwg"))         ;voeg _n.dwg toe aan de bestandsnaam
  (setq dwgpadnaam_n.dwg (strcat (getvar "dwgprefix") dwgnaam_n.dwg))   ;voeg samen: padnaam+bestandsnaam_n.dwg
  (if (/= dwgpadnaam_n.dwg (findfile dwgnaam_n.dwg))         ;ALS nieuwe naam nog niet bestaat
    (
      (command "erase" (ssget "c" '(0 0) '(-210 297) (list (cons 0  "Mtext")(cons 1 "CONCEPT"))) "")   ;DAN: erase de tekst CONCEPT
      (command "-attedit" "y" "" "" "" "c" "-15,12" "-20,14" "v" "r" uitg "")            ;DAN: vul het juiste uitgavenummer in
      (if (= waarde 1)                     ;sub-ALS: als waarde is 1
        (command "xref" "bind" "*")               ;sub-DAN: BIND alle xref's
      )
      (command "saveas" "" dwgpadnaam_n.dwg)            ;DAN: sla het bestand op onder de nieuwe naam
    )
    (alert
    "Deze uitgave bestaat al. De uitgave is NIET opnieuw opgeslagen!"
    )               ;ANDERS: melding: bestand bestaat al, geen verdere actie
  )                           ;einde ALS
;(princ)
)

Kenny H

Reimer,

Test dit eens als ge wilt...
Bij mij werkt die erase nu wel...

Al wat ik gewijzigd heb staat int oranje.  :wink:

Citeer
(defun C:defbind ()
  (setq uitg (getstring "geef het uitgavenummer op:     "))
(setq Waarde "0") ;;; Volgens mij moet dit op 0 staan anders is uw dialoogbox overbodig
  (setq nr (load_dialog "Cursus.DCL"))
  (new_dialog "VB" nr)
  (action_tile "TOGGLEXREF" "(SETQ WAARDE $VALUE)")
  (start_dialog)
  (setq dwgnaamext (getvar "dwgname"))               ;vraag de bestandsnaam met extensie op
  (setq naamlengtetot (strlen dwgnaamext))            ;vraag de lengte van de bestandsnaam incl. extensie op
  (setq naamlengte (- naamlengtetot 4))               ;verminder de naamlengte met 4 (geen extensie)
  (setq dwgnaam (substr dwgnaamext 1 naamlengte))         ;pas de bestandsnaam aan (verwijder de extensie)
  (setq dwgnaam_n.dwg (strcat dwgnaam "_" uitg ".dwg"))         ;voeg _n.dwg toe aan de bestandsnaam
  (setq dwgpadnaam_n.dwg (strcat (getvar "dwgprefix") dwgnaam_n.dwg))   ;voeg samen: padnaam+bestandsnaam_n.dwg
  (if (/= dwgpadnaam_n.dwg (findfile dwgnaam_n.dwg))         ;ALS nieuwe naam nog niet bestaat
    (
      (command "erase" (ssget "c" '(0 0) '(-210 297)  '((0 . "Mtext") (1 . "CONCEPT"))) "")    ;DAN: erase de tekst CONCEPT
      (command "-attedit" "y" "" "" "" "c" "-15,12" "-20,14" "v" "r" uitg "")            ;DAN: vul het juiste uitgavenummer in
     (if (= waarde "1")                      ;sub-ALS: als waarde is 1
        (command "xref" "bind" "*")               ;sub-DAN: BIND alle xref's
      )
      (command "saveas" "" dwgpadnaam_n.dwg)            ;DAN: sla het bestand op onder de nieuwe naam
    )
    (alert
    "Deze uitgave bestaat al. De uitgave is NIET opnieuw opgeslagen!"
    )               ;ANDERS: melding: bestand bestaat al, geen verdere actie
  )                           ;einde ALS
;(princ)
)

Mvg

Kenny
8) Volvo 4 Life 8)

Reimer

Kenny,

bedankt maar weer. Het werkt nu zoals ik bedoelde. :vreegoe:
Het binden werkte inderdaad niet doordat ik de aanhalingstekens vergeten was. (if (= waarde "1")

Je hebt ook gelijk met het vooraf instellen van WAARDE op 0. Ik had deze op 1 gezet omdat ik hoopte dat de checkbox dan standaard aangevinkt was. Dit werkt helaas niet zo. Het is de bedoeling dat de xrefs bijna altijd gebind worden. Alleen in uitzonderingen doe je dit niet. Ik kan natuurlijk ook gewoon de vraag omdraaien. "Zet het vinkje aan als je de xref's NIET wilt binden."
Bedankt voor de hulp. Ik ben weer wat verder in de wereld van LISP! :pintje:

Groeten,
Reimer

Kenny H

Reimer,

Das graag gedaan!
Voor uw standaard vinkje waarde "1" gebruiken bij value, anders "0"
Maw als dit leeg moet zijn gewoon value weglaten  :wink:

CiteerVB : dialog {
     : toggle {
       label = "Bind alle xref's";
       key = "TOGGLEXREF";
       value="1";
     }
     ok_only;
}

Mvg

Kenny



8) Volvo 4 Life 8)

Reimer

Alles is natuurlijk in te stellen. Mooi zo. Dit is opgelost.

Reimer