FastFiber

alle blocks selecteren (opgelost)

Gestart door Sven, di 10 03 2009, 11:02:13

Vorige topic - Volgende topic

Sven

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

Wimhardeman

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

HofCAD

#2
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.
ACADcadabra

Sven

Hartelijke dank voor uw hulp  8)

Sven

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?

Sven

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:

Joop

In het geval van vanuit lisp:

(command "explolde" ss '''')
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

HofCAD

#7
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.
ACADcadabra

Indo_Jim

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?

Praat geen poep,
want er is al genoeg schijt in de wereld.

Sven

@ 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.

Sven

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))
)))
)



HofCAD

#11
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.
ACADcadabra

Sven

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?

HofCAD

#13
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.
ACADcadabra

Sven

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)?

FastFiber