CADsite forum

AutoCAD => Autolisp => Topic gestart door: roy_043 op ma 22 06 2009, 17:07:17

Titel: Probleem met tblnext-lus (OPGELOST)
Bericht door: roy_043 op ma 22 06 2009, 17:07:17
Beste Forumleden,

Als ik in de onderstaande code de regel met command weghaal dan gedraagt de tblnext-lus zich zoals verwacht: alle laagnamen worden weergegeven. Met deze regel stopt de tblnext-lus na de eerste laag. Het kan zijn dat dit een bug is in Bricscad 7.

Mijn vragen zijn:

1. Treedt dit probleem ook op in AutoCAD?
2. En zo ja: waarom treedt dit probleem op. Ik snap het niet maar misschien is het juist heel logisch dat de lus stopt.


(defun c:TestLL ( / layerEntLst layerName )
(setq layerEntLst (tblnext "LAYER" T))
(while layerEntLst
(setq layerName (cdr (assoc 2 layerEntLst)))
(princ (strcat "\n" layerName))
(setvar "cmdecho" 0)
(command "_.layer" "_unlock" layerName "_thaw" layerName "") ; conflict met tblnext-lus
(setvar "cmdecho" 1)
(setq layerEntLst (tblnext "LAYER"))
)
(princ)
)


Groet, Roy.
Titel: Re:Probleem met tblnext-lus
Bericht door: WebRacer op ma 22 06 2009, 19:36:11
al eens getracht om de commando's afzonderlijk uit te voeren in BricsCad?
   _layer
   _unlock
   "0"
   _thaw
   "0"
   ""
ik denk dat het er in BricsCad zo moet uit zien:

(command "layer" "U" layerName "T" layername "")

in ieder geval, als het een bug is --> zeker melden
Titel: Re:Probleem met tblnext-lus
Bericht door: roy_043 op ma 22 06 2009, 21:33:09
Beste WebRacer,

Bedankt voor jouw antwoord. Maar de lisp loopt niet vast op het commando "layer". Het probleem is dat door het aanroepen van het commando de tblnext-lus blijkbaar wordt verstoord. Als ik de aangepaste code hieronder gebruik in een tekening waarin alle lagen gelockt zijn dan staat dit in de history:

: testll
0
TestLL voltooid!

En inderdaad is dan alleen laag 0 ge-unlockt.

Vandaar de 2 vragen in mijn eerste post.


(defun c:TestLL ( / layerEntLst layerName )
(setq layerEntLst (tblnext "LAYER" T))
(while layerEntLst
(setq layerName (cdr (assoc 2 layerEntLst)))
(princ (strcat "\n" layerName))
(setvar "cmdecho" 0)
(command "layer" "u" layerName "t" layerName "") ; conflict met tblnext-lus
(setvar "cmdecho" 1)
(setq layerEntLst (tblnext "LAYER"))
)
(princ "\nTestLL voltooid! ")
(princ)
)


Groet, Roy.
Titel: Re:Probleem met tblnext-lus
Bericht door: WebRacer op ma 22 06 2009, 21:58:31
probeer deze eens:


(defun c:laylckall (/ lst lay)
  (setq lst nil)
  (setq lay (tblnext "LAYER" T))
  (while (/= lay nil)
    (setq lst (append (list (cdr (assoc 2 lay))) lst))
    (setq lay (tblnext "LAYER")))
  (foreach elm lst
    (command "layer" "u" elm "t" elm "")))
Titel: Re:Probleem met tblnext-lus
Bericht door: HofCAD op di 23 06 2009, 08:46:53
Beste Roy,

Bij mij werkt in AutoCAD 2008 het programma TestLL
en het programma LAYLCKALL goed.
Hoe werkt onderstaand in Bricscad 7:
(defun C:TestLL2()
(vl-load-com)
(vlax-for vlaLayer (vla-get-layers (vla-get-activedocument (vlax-get-acad-object)))
(if (= :vlax-true (vla-get-lock vlaLayer))(vla-put-lock vlaLayer :vlax-false))
(if (/= :vlax-false (vla-get-freeze vlaLayer))(vla-put-freeze vlaLayer :vlax-false))
))


Met vriendelijke groet, HofCAD CSI.
Titel: Re:Probleem met tblnext-lus
Bericht door: roy_043 op di 23 06 2009, 10:08:02
Beste HofCAD en WebRacer,

Hartelijk dank voor jullie antwoorden. Het is nu duidelijk dat het onderbreken van de tblnext-lus een bug is in Bricscad 7.

De workaround van WebRacer werkt.

De code van HofCAD werkt niet in Bricscad 7. De vla*-functies worden niet ondersteund in Bricscad 7. In Bricscad 9 (http://www.bricsys.com/bricscad/help/en_US/V9/DevRef/source/IDR_LISP_VLR_VLA_VLAX.htm) worden de belangrijkste vla*-functie wel ondersteund. Misschien tijd voor een upgrade...

Groet, Roy.