FastFiber

Allow exploding variabele?

Gestart door DIJKHUIS, do 11 09 2008, 11:20:18

Vorige topic - Volgende topic

DIJKHUIS

We hebben een onbekend aantal blokken die we niet kunnen exploderen nadat ze in de tekening zijn geinsert. Mijn idee is om m.b.v. BaBe een routine te maken die alle blokken bijlangs gaat en de variabele allow exploding aan zet.

De grote vraag is : Is er een variabele die je daar voor aan kunt zetten???

Of heeft er iemand een ander idee om alle blokken explodeerbaar te maken, zondar dat ik ze 1 voor 1 bijlangs moet gaan?

Michel

Joop

Alsje met
(SETQ BLOCK (CAR (ENTSEL)))
een block selecteerd en daarna met de rechter muisknop op de variabele BLOCK klikt kunje kiezen voor "Inspect".
Dubbelklik daarna op de verschenen entity naam en kies voor "Inspect raw data".
In het daaropvolgende venster dubbelklik je op de "[330 .  " groep met een entityname.
Klik vervolgens dubbel op op de [cdr] groep.
Proficiat: je hebt nu de "ACAD BLOCK_RECORD" van het geselecteerde blok gevonden.
Dubbelklik op de entity naam en kies weer voor "Inspect raw data".

En dan nu het moeilijkste:
Er staat een groep "(280 . ?)".
Dit is de waarde die aangeeft wat de "Block explodability" van het block is.
Bij al mijn bloken is dit 1.

Plaats hier even de waarde die jij op de plaats van het vraagteken hebt staan.
Een gelovig volger van
"de Sacrale Kunst van Luiheid",
zijn leider "Lisp" en acoliet "Script".

DIJKHUIS

Citaat van: Joop op do 11 09 2008, 12:15:21
Alsje met
(SETQ BLOCK (CAR (ENTSEL)))
een block selecteerd en daarna met de rechter muisknop op de variabele BLOCK klikt kunje kiezen voor "Inspect".

Joop, bedankt voor je snelle reactie, maar vanaf hier gaat lukt het al niet. Is dit gewoon in acad(2009) ? Of moet ik diet ergens anders doen (rechts klikken)

Michel

DIJKHUIS

Citaat van: DIJKHUIS op do 11 09 2008, 11:20:18
Of heeft er iemand een ander idee om alle blokken explodeerbaar te maken, zondar dat ik ze 1 voor 1 bijlangs moet gaan?

Ja mijn eigen collega kwam met het idee :idea: om er een action recorder van te maken. Daar komt het volgende probleem bij kijken mat Babe.
Als ik 1 block open dan wordt gevraagd of ik die in de block editor wil openen. JA IK WIL. Dan geef ik het commando
(command "Allow_exploding")
En mij block is explodeerbaar. :vreegoe:
Deze regel aan babe toegevoegd volgens de gebruiksaanwijzing. Maar babe opent het block niet in de block editor maar in de tekenmodus.
Kan ik dit omzeilen zodat babe WEL in de block editor opent??

Michel

HofCAD

#4
Citaat van: DIJKHUIS op do 11 09 2008, 13:55:18
Citaat van: DIJKHUIS op do 11 09 2008, 11:20:18
Of heeft er iemand een ander idee om alle blokken explodeerbaar te maken, zondar dat ik ze 1 voor 1 bijlangs moet gaan?

Ja mijn eigen collega kwam met het idee :idea: om er een action recorder van te maken. Daar komt het volgende probleem bij kijken mat Babe.
Als ik 1 block open dan wordt gevraagd of ik die in de block editor wil openen. JA IK WIL. Dan geef ik het commando
(command "Allow_exploding")
En mij block is explodeerbaar. :vreegoe:
Deze regel aan babe toegevoegd volgens de gebruiksaanwijzing. Maar babe opent het block niet in de block editor maar in de tekenmodus.
Kan ik dit omzeilen zodat babe WEL in de block editor opent??

Michel

Beste Dijkhuis,
Het volgende commando ken ik niet:
(command "Allow_exploding")
Net als Joop voorstelde, doe ik het met:
(defun BlkExplodeMode(BlockName ExplodeMode / e ed ed330 ed330d ed280)
;ExplodeMode 0 niet explodeerbaar en ExplodeMode 1 wel explodeerbaar
(setq e (tblobjname "block" BlockName)
         ed (entget e)
         ed330 (cdr (assoc 330 ed))
         ed330d (entget ed330)
         ed280 (subst (cons 280 ExplodeMode) (assoc 280 ed330d) ed330d)
   );setq
   (entmod ed280)
   (prin1)
)

Met als voorbeeld voor een block met de naam MijnBlock:
(BlkExplodeMode "MijnBlock" 0); Niet te exploderen
(BlkExplodeMode "MijnBlock" 1); Wel te exploderen


Of bijv. met:
(defun C:BEMN( / oke ent entd ed ed330 ed330d ed280)
(setq oke nil)
(while (not oke)
(setq ent (car (entsel "\nSelecteer een Block voor ExplodeMode op 0")))
(setq entd (entget ent))
(if (= (cdr (assoc 0 entd)) "INSERT") (setq oke T))
)
(setq ed (entget (tblobjname "block" (cdr (assoc 2 entd))))
         ed330 (cdr (assoc 330 ed))
         ed330d (entget ed330)
         ed280 (subst (cons 280 0) (assoc 280 ed330d) ed330d)
   );setq
   (entmod ed280)
   (prin1)
)


(defun C:BEMY( / oke ent entd ed ed330 ed330d ed280)
(setq oke nil)
(while (not oke)
(setq ent (car (entsel "\nSelecteer een Block voor ExplodeMode op 1")))
(setq entd (entget ent))
(if (= (cdr (assoc 0 entd)) "INSERT") (setq oke T))
)
(setq ed (entget (tblobjname "block" (cdr (assoc 2 entd))))
         ed330 (cdr (assoc 330 ed))
         ed330d (entget ed330)
         ed280 (subst (cons 280 1) (assoc 280 ed330d) ed330d)
   );setq
   (entmod ed280)
   (prin1)
)


Om alle blocks te veranderen, zou je zo iets als onderstaand kunnen gebruiken:
(defun BlkExplodeModeAll (ExplodeMode / i BlkNames e ed ed330 ed330d ed280)
;ExplodeMode 0 niet explodeerbaar en ExplodeMode 1 wel explodeerbaar
(defun sym_table (tabletype / entry entries nam)
       (setq entry (cdr (assoc 2 (tblnext tabletype T))) ;;rewind symbol table
             entries (list entry))
       (while (setq entry (tblnext tabletype)) ;;construct symbol list
              (setq nam (cdr (assoc 2 entry))
                    entries (cons nam entries)))
       (reverse entries)
)
(setq i 0 BlkNames (sym_table "BLOCK"))
(repeat (length BlkNames)
(setq e (tblobjname "block" (nth i BlkNames))
         ed (entget e)
         ed330 (cdr (assoc 330 ed))
         ed330d (entget ed330)
         ed280 (subst (cons 280 ExplodeMode) (assoc 280 ed330d) ed330d)
   );setq
   (entmod ed280)
(setq i (1+ i))
)
   (prin1)
)

Met
(BlkExplodeModeAll 0); Niet te exploderen
(BlkExplodeModeAll 1); Wel te exploderen


Met vriendelijke groet,
HofCAD CSI
ACADcadabra

EddyBeerke

Citaat van: HofCAD op vr 12 09 2008, 13:44:44
...
Met vriendelijke groet,
HofCAD CSI

Dat staat in de help: "Overview of Specifying Custom Properties for Dynamic Blocks"
Maar "Allow_exploding" is (in acad 2007) geen commando, wél een instelling.
Civil3d 2026, Blender 4.x gebruiker
Gebruiker sinds AutoCAD R12

http://eddylucas.c1.biz/
https://www.google.com/maps/contrib/109381066561676463628/photos/

DIJKHUIS

Citaat van: EddyBeerke op vr 12 09 2008, 13:55:38
Citaat van: HofCAD op vr 12 09 2008, 13:44:44
...
Met vriendelijke groet,
HofCAD CSI

Dat staat in de help: "Overview of Specifying Custom Properties for Dynamic Blocks"
Maar "Allow_exploding" is (in acad 2007) geen commando, wél een instelling.

Sorry, Niet duidelijk genoeg geweest. Ik heb een actionrecorder gemaakt en die allow_exploding genoemd. Die kan ik wel in een lisp starten met (command "allow_exploding") Ik moet daarvoor echter wel in de Block editor staan.
Zie verder mijn eerder post.

@Hofcad Ik zal jou post eens proberen.

Michel

DIJKHUIS

HofCAD,

Ik heb jouw code uitgeprobeerd. Het werk goed binnen een tekening met blokken.
Echter, mijn bedoeling was om onze bibliotheek met (dynamic) blokken 1 keer te door lopen en dan van alle blokken de explodemode op 1 te zetten. Zo is het een eenmalige actie. Met jouw codes moet ik ieder keer als ik een blok wil exploderen eerst BEMY activeren.

Want als ik BEMY in Babe stop dan vindt hij geen blok, maar is het een tekening geworden met losse elementen.

Michel

HofCAD

#8
Citaat van: DIJKHUIS op vr 12 09 2008, 16:21:57
HofCAD,

Ik heb jouw code uitgeprobeerd. Het werk goed binnen een tekening met blokken.
Echter, mijn bedoeling was om onze bibliotheek met (dynamic) blokken 1 keer te door lopen en dan van alle blokken de explodemode op 1 te zetten. Zo is het een eenmalige actie. Met jouw codes moet ik ieder keer als ik een blok wil exploderen eerst BEMY activeren.

Want als ik BEMY in Babe stop dan vindt hij geen blok, maar is het een tekening geworden met losse elementen.

Michel

Beste Michel,

Waarom gebruik je BEMY in BABE en niet een variant van BlkExplodeModeAll,
want bij BEMY moet je selecteren.

(defun C:Doit ( / i BlkNames e ed ed330 ed330d ed280)
(setq ExplodeMode 1)
;ExplodeMode 0 niet explodeerbaar en ExplodeMode 1 wel explodeerbaar
(defun sym_table (tabletype / entry entries nam)
       (setq entry (cdr (assoc 2 (tblnext tabletype T))) ;;rewind symbol table
             entries (list entry))
       (while (setq entry (tblnext tabletype)) ;;construct symbol list
              (setq nam (cdr (assoc 2 entry))
                    entries (cons nam entries)))
       (reverse entries)
)
(setq i 0 BlkNames (sym_table "BLOCK"))
(repeat (length BlkNames)
(setq e (tblobjname "block" (nth i BlkNames))
         ed (entget e)
         ed330 (cdr (assoc 330 ed))
         ed330d (entget ed330)
         ed280 (subst (cons 280 ExplodeMode) (assoc 280 ed330d) ed330d)
   );setq
   (entmod ed280)
(setq i (1+ i))
)
   (prin1)
)


Het bijgevoegde bestand werkt namelijk bij mij wel.

Met vriendelijke groet,
HofCAD CSI
ACADcadabra

FastFiber