CADsite forum

AutoCAD => AutoCAD probleem => Topic gestart door: Sven op di 10 03 2009, 11:02:13

Titel: alle blocks selecteren (opgelost)
Bericht door: Sven op di 10 03 2009, 11:02:13
Is er een mogelijkheid om alle blocks in 1 tekening te selecteren, maar dan puur door met de commandoregel te werken of met lisp of VBA (heb mijn vraag daar ook reeds gesteld maar daar komt geen antwoord op). De bedoeling is om daarna geautomatiseerd bewerkingen uit te voeren met deze blocks.

alvast bedankt, Sven
Titel: Re: alle blocks selecteren
Bericht door: Wimhardeman op di 10 03 2009, 11:26:16
Hiermee kun je via je commando-regel alle blocks selecteren.

- Ctrl-A
- Filter
- Block

Dit moet dan toch ook in VBA of LISP geplaatst kunnen worden, maar daar heb ik te weinig kaas van gegeten.

Succes
Titel: Re: alle blocks selecteren
Bericht door: HofCAD op di 10 03 2009, 12:57:17
Beste Sven,

Ik ga er van uit dat je 'Block referenties' bedoeld.
Nadat je (ssget "X" (list '(0 . "INSERT"))) ingevoerd hebt,
kun je de selectieset selecteren met Previous.
Bijv. ERASE P <enter>

Nadat je (setq ss (ssget "X" (list '(0 . "INSERT")))) ingevoerd hebt,
kun je de selectieset selecteren met !SS en met  Previous.
Bijv. ERASE !SS <enter> of  ERASE P <enter>

Met vriendelijke groet, HofCAD CSI.
Titel: Re: alle blocks selecteren
Bericht door: Sven op di 10 03 2009, 13:29:23
Hartelijke dank voor uw hulp  8)
Titel: Re: alle blocks selecteren
Bericht door: Sven op di 10 03 2009, 15:33:51
bij nader inzien heb ik toch nog een vraag.
Ik heb deze code in een lisp-je gegoten, maar ik kan de selectieset maar niet oproepen om er mee te werken.

(defun c:Blocks_na_flatten (/ ss X)

(command "-layer" "new" "BT_blocks_na_flatten" "")
(command "-layer" "set" "BT_blocks_na_flatten" "")
(setq ss(ssget "X" (list '(0 . "INSERT"))))
(command "_explode" "group" "!ss"))


Weet iemand wat ik verkeerd doe?
Titel: Re: alle blocks selecteren
Bericht door: Sven op wo 11 03 2009, 09:36:08
het probleem zou moeten zitten in het oproepen van de selectie na het commande "explode". Misschien helpt dit de zoektocht?  :oops:

Weet er trouwens iemand waarom het commando flatten niet werkt vanuit lisp?  :oops:
Titel: Re: alle blocks selecteren
Bericht door: Joop op wo 11 03 2009, 12:15:48
In het geval van vanuit lisp:

(command "explolde" ss '''')
Titel: Re: alle blocks selecteren
Bericht door: HofCAD op wo 11 03 2009, 12:45:26
Citaat van: Sven op di 10 03 2009, 15:33:51
bij nader inzien heb ik toch nog een vraag.
Ik heb deze code in een lisp-je gegoten, maar ik kan de selectieset maar niet oproepen om er mee te werken.

(defun c:Blocks_na_flatten (/ ss X)

(command "-layer" "new" "BT_blocks_na_flatten" "")
(command "-layer" "set" "BT_blocks_na_flatten" "")
(setq ss(ssget "X" (list '(0 . "INSERT"))))
(command "_explode" "group" "!ss"))


Weet iemand wat ik verkeerd doe?
Beste Sven,

Probeer dit:
(defun c:Blocks_na_flatten (/ i ss X)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq i 0 ss nil ss (ssget "X" (list '(0 . "INSERT"))))
(if SS (progn
(repeat (sslength ss)
(command "_explode" (ssname ss i))
(setq i (1+ i))
)))
)

Verder is de combinatie van de opties Thaw en Make bij het commando LAYER beter dan
de combinatie van de opties New en Set.

Met vriendelijke groet, HofCAD CSI.

PS 1 Zie bijv. ook Boem in http://www.cadsite.be/smf/index.php/topic,791.0.html
PS 2 De manier die Joop voorstelt (command "explode" ss "") werkt niet.
Titel: Re: alle blocks selecteren
Bericht door: Indo_Jim op do 12 03 2009, 12:21:59
Citaat van: Sven op di 10 03 2009, 11:02:13
Is er een mogelijkheid om alle blocks in 1 tekening te selecteren, maar dan puur door met de commandoregel te werken of met lisp of VBA (heb mijn vraag daar ook reeds gesteld maar daar komt geen antwoord op). De bedoeling is om daarna geautomatiseerd bewerkingen uit te voeren met deze blocks.

alvast bedankt, Sven


De bedoeling is om daarna geautomatiseerd bewerkingen uit te voeren met deze blocks.
Wat wil je dan geautomatiseerd bewerken?

Titel: Re: alle blocks selecteren
Bericht door: Sven op ma 16 03 2009, 10:17:41
@ HofCAD: hartelijk bedankt voor jouw oplossing, ze werkt perfect.

@ Indo_Jim: met het automatiseren van deze bewerking bedoel ik eigenlijk dat ik deze lisp aan een button wil hangen, zodat iedereen deze bewerking op dezelfde manier doet. Het is eigenlijk een poging om kleine dingen uniform te doen zonder dat de tekenaar met vele instellingen rekening moeten houden.

@ allen: nu zit ik nog met een vraag die open blijft: hoe kan je het commando flatten uitvoeren in lisp? (command "_flatten" "all") werkt blijkbaar niet.
Titel: Re: alle blocks selecteren
Bericht door: Sven op di 17 03 2009, 10:26:56
Flatten is blijkbaar geen commando, maar zelf ook een lisp., op te roepen met
(c:flatten)

Maar dan ben ik een ander probleem tegen gekomen.
Kan ik bij deze code ook 1 bepaalde bloknaam (T1) uit deze selectie verwijderen (of simpelweg niet selecteren)?

(defun c:Blocks_na_flatten (/ i ss X)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq i 0 ss nil ss (ssget "X" (list '(0 . "INSERT"))))
(if SS (progn
(repeat (sslength ss)
(command "_explode" (ssname ss i))
(setq i (1+ i))
)))
)


Titel: Re: alle blocks selecteren
Bericht door: HofCAD op di 17 03 2009, 14:30:08
Beste Sven,

Met de volgende code van http://forums.augi.com/archive/index.php/t-11688.html
kan je ook je selectieset exploderen:

(defun c:Blocks_na_flatten (/ flag ss)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq ss nil ss (ssget "X" (list '(0 . "INSERT"))))
(if SS (progn
(setq flag (getvar "qaflags"))
(setvar "qaflags" 5)
(command "_explode" SS "")
(setvar "qaflags" flag)
))
)


QAFLAGS bitcode, introduced in R11, an integer range from -32768 to +32767,
changed to 0 - 32767 in R12.

bit 0 (1) : ^C in menu macro cancels grips (acts like keyboard <Esc>).
bit 1 (2) : no pause during text screen listings.
bit 2 (4) : no "alert" dialogs (text display instead).
bit 7 (128 ) : accepts "screen picks" (point lists) via (command) function.
bit 9 (512) : sets Bind type to insert in R14

I do not know why it helps You exploding things...
but the main thing is that bit 0 (1) is set. (setvar "QAFLAGS" 1 )

Met vriendelijke groet, HofCAD CSI

PS Uit http://www.jtbworld.com/autocadtips.htm
What is QAFLAGS?
QAFLAGS been used a long time (<r12) by developers and autodesk themself too.

QAFLAGS acceps a value between 0 and 32767
bit 0 (1) : ^C in menu macro cancels grips (acts like keyboard <Esc>).
bit 1 (2) : no pause during text screen listings.
bit 2 (4) : no "alert" dialogs (text display instead).
bit 7 (128) : accepts "screen picks" (point lists) via (command) function.

Normally QAFLAGS should be set to 0.
Because it might be set to other values it is a good idea to put (setvar "QAFLAGS" 0)
in acaddoc.lsp or any other of your lisp files that you use for startup.
Titel: Re: alle blocks selecteren
Bericht door: Sven op di 17 03 2009, 14:53:04
hmm, ok.

Maar daarmee is mijn probleem voor het niet selecteren van een bepaalde blocknaam niet opgelost denk ik. Of heb ik het niet goed verstaan?
Titel: Re: alle blocks selecteren
Bericht door: HofCAD op di 17 03 2009, 15:34:11
Citaat van: Sven op di 17 03 2009, 14:53:04
hmm, ok.

Maar daarmee is mijn probleem voor het niet selecteren van een bepaalde blocknaam niet opgelost denk ik. Of heb ik het niet goed verstaan?

Beste Sven,

Stel de bloknaam is "MijnBLK" dan wordt de code:
(defun c:Blocks_na_flatten2a (/ i ss)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq i 0 ss nil ss (ssget "X" (list '(0 . "INSERT") '(2 . "MijnBLK"))))
(if SS (progn
(repeat (sslength ss)
(command "_explode" (ssname ss i))
(setq i (1+ i))
)))
)

of
(defun c:Blocks_na_flatten2b (/ flag ss)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq ss nil ss (ssget "X" (list '(0 . "INSERT") '(2 . "MijnBLK"))))
(if SS (progn
(setq flag (getvar "qaflags"))
(setvar "qaflags" 5)
(command "_explode" SS "")
(setvar "qaflags" flag)
))
)


Met vriendelijke groet, HofCAD CSI.
Titel: Re: alle blocks selecteren
Bericht door: Sven op di 17 03 2009, 15:57:06
sorry hoor hofcad, dat ik jouw geduld zo op de proef stel, maar er zijn tientallen bloknamen die WEL geselecteerd moeten worden, enkel de bloknaam "MijnBLK" NIET. Ik denk dat jouw code net het omgekeerde doet.

Bestaat er geen mogelijk om alles te selecteren, behalve een bepaalde voorwaarde (in dit geval een bloknaam)?
Titel: Re: alle blocks selecteren
Bericht door: HofCAD op di 17 03 2009, 16:13:01
Citaat van: Sven op di 17 03 2009, 15:57:06
sorry hoor hofcad, dat ik jouw geduld zo op de proef stel, maar er zijn tientallen bloknamen die WEL geselecteerd moeten worden, enkel de bloknaam "MijnBLK" NIET. Ik denk dat jouw code net het omgekeerde doet.

Bestaat er geen mogelijk om alles te selecteren, behalve een bepaalde voorwaarde (in dit geval een bloknaam)?
Beste Sven,

Zie mijn bijdrage in: http://www.cadsite.be/smf/index.php/topic,2846.msg14598.html#msg14598
Stel je wil alle blocks selecteren maar het block "MijnBlk" niet dan wordt je programma bijv.:

(defun c:Blocks_na_flatten3a (/ i ss)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq i 0 ss nil ss (ssget "X" (list '(0 . "INSERT") '(-4 . "<NOT") '(2 . "MijnBlk") '(-4 . "NOT>"))))
(if SS (progn
(repeat (sslength ss)
(command "_explode" (ssname ss i))
(setq i (1+ i))
)))
)

of
(defun c:Blocks_na_flatten3b (/ flag ss)
(command "_-layer" "_T" "BT_blocks_na_flatten" "_M" "BT_blocks_na_flatten" "")
(setq ss nil ss (ssget "X" (list '(0 . "INSERT") '(-4 . "<NOT") '(2 . "MijnBlk") '(-4 . "NOT>"))))
(if SS (progn
(setq flag (getvar "qaflags"))
(setvar "qaflags" 5)
(command "_explode" ss "")
(setvar "qaflags" flag)
))
)


Heb je meerdere blocks(bijv. "MijnBlk1", "MijnBlk2" en "MijnBlk3")  die je niet wil selecteren dan wordt de selectieset:
(setq ss nil ss (ssget "X" (list '(0 . "INSERT")
'(-4 . "<NOT") '(-4 . "<OR") '(2 . "MijnBlk1") '(2 . "MijnBlk2") '(2 . "MijnBlk3") '(-4 . "OR>")'(-4 . "NOT>"))))


Met vriendelijke groet, HofCAD CSI.

PS Moet dit topic door Julien niet verplaatst worden naar Autolisp?
Of ben ik diegene die er een een Autolisp topic van maakt.
Titel: Re: alle blocks selecteren
Bericht door: Sven op wo 18 03 2009, 08:14:06
PERFECT, hartelijk bedankt HofCAD.

PS: je hebt gelijk, deze topic is eigenlijk geëvolueerd naar een LISP-topic
Titel: Re: alle blocks selecteren
Bericht door: Reimer op wo 18 03 2009, 08:24:51
Citaat van: Sven op di 10 03 2009, 11:02:13
Is er een mogelijkheid om alle blocks in 1 tekening te selecteren, maar dan puur door met de commandoregel te werken of met lisp of VBA (heb mijn vraag daar ook reeds gesteld maar daar komt geen antwoord op). De bedoeling is om daarna geautomatiseerd bewerkingen uit te voeren met deze blocks.

alvast bedankt, Sven

Volgens mij was dit vanaf het begin al een LISP-topic.  :wink:
Maar ook ik heb weer wat bijgeleerd m.b.t. lisp.

Reimer