FastFiber

wat is de snelste manier?

Gestart door marcelmaas, vr 10 07 2009, 10:23:07

Vorige topic - Volgende topic

marcelmaas

Hi,

Ik ben een bouwkundige tekening van een architect aan het opschonen, om die daarna als onderlegger te kunnen gebruiken.
Nou ga ik die in de blockeditor openen, en dan dingen verwijderen, daarna weer uit de blockeditor en weer iets anders selecteren en in de blockeditor bewerken.
Als ik alles explodeer krijg ik volgens mij een veeeeel te zware tekening.
Hij was namelijk net 19mb, veel te zwaar dus.
Ik heb hem nou zover uitgekleed en hij is nu bijna 1mb, alleen moet nu alles nog in een nieuwe laag van ons zelf gezet worden, met dan ook 1 laagkleur.
Nu is het nog zo dat er nog blocken inzitten die allemaal verschillende kleuren hebben, die moet ik dus nu nog een keer ieder in een de blockeditor gaan bewerken en in onze laag zetten.
Dit is heel veel werk, dus vroeg ik me af, kan dit anders of doe ik misschien iets verkeerd.???
Als ik die blocken meerdere malen zou exploderen om ze in onze laag te kunnen gaan zetten met de goede kleur, dan neemt de bestandsgrootte enorm toe.


Groeten Marcel..

HofCAD

Beste Marcel,

Ken je het commando LAYTRANS?

Met vriendelijke groet, HofCAD CSI.
ACADcadabra

Reimer

Ik heb wel eens gelezen over een lisproutine die van alle blocken de eigenschappen op Bylayer of Byblock zet en de inhoud van het block op laag 0. Misschien is dit een goede start. Even googlen of misschien zijn er anderen op cadsite die iets weten.

Reimer.

marcelmaas

Hi Hofcad,

Het commado laytrans heb ik wel eens gezien, maar weet niet hoe het werkt.
Kun je daarmee alle lagen in verschillende blocken in color ontrol, en linecontrol enz.. in bylayer zetten.?


groeten Marcel..

marcelmaas

beste Reimer,

Ik zou graag zo'n lisp routine vinden die alle block eigenschappen omzet naar bylayer, ik ga eens zoeken want dat zou denk ik de snelste optie zijn.

Als iemand weet waar ik zoiets kan vinden mag hij het zeggen.

In ieder geval alvast bedankt.

groeten Marcel..

Reimer

Marcel,

ik heb net even snel op cadsite.be gezocht. In het volgende onderwerp kwam ik een bruikbare lisp tegen (met dank aan Manu):
http://www.cadsite.be/smf/index.php?topic=925.msg4888#msg4888

Misschien kun je er iets mee.
Reimer.

;;;   File Name: Layerfix.LSP
;;;   Description:  Changes the block definitions to BYLAYER .  Will skip all
;;;                 XREF & XREF dependent blocks.
;;;
;;;   Global Variables:  None
;;;
;;;   Local Variables:  Self-explanatory
;;;
;;;   Program Arguments:  None
;;;   Subroutines/Functions Defined or Called:  None
;;;
;;;***************************************************************************


(defun LAYERFIX (/ BLKDATA NEWCOLOR NEWCOLOR NEWLAYER LAYER XREFFLAG XDEPFLAG BLKENTNAME
                     COUNT ENTDATA ENTNAME ENTTYPE OLDCOLOR OLDLAYER SSCOUNT SS)
   
   (command ".undo" "group")
   (setq BLKDATA (tblnext "BLOCK" t))
   (setq NEWCOLOR (cons 62 256))  ;this will set 62 (color) to bylayer
;   (setq NEWLAYER (cons 8 "0"))  ;this will set 8 (layer) to 0
   ; While there is an entry in the block table to process, continue
   (while BLKDATA
      (prompt "\nRedefining colors for block: ")
      (princ (cdr (assoc 2 BLKDATA)))
      ; Check to see if block is an XREF or is XREF dependent
      (setq XREFFLAG (assoc 1 BLKDATA))
      (setq XDEPFLAG (cdr (assoc 70 BLKDATA)))
      ; If block is not XREF or XREF dependent, i.e., regular block, then proceed.
      (if (and (not XREFFLAG) (/= (logand XDEPFLAG 32) 32))
         (progn
            (setq BLKENTNAME (cdr (assoc -2 BLKDATA)))
            (setq COUNT 1)
            (terpri)
            ; As long as we haven't reached the end of the block's defintion, get the data
            ; for each entity and change its color assignment to BYLAYER.
            (while BLKENTNAME
               (princ COUNT)
               (princ "\r")
               (setq ENTDATA (entget BLKENTNAME)); get entities data
               (setq OLDCOLOR (assoc 62 ENTDATA))  ;get entities old color value
               (if OLDCOLOR                         ; if value exist (null = bylayer)
                  (entmod (subst newcolor oldcolor ENTDATA)) ; substitute old color to byblock
                  (entmod (cons newcolor ENTDATA))      ; modify ent data w/ byblock values
               )
               (setq BLKENTNAME (entnext BLKENTNAME)) ;if attributes exist, then edit next one
               (setq COUNT (+ COUNT 1));
            ) ;end while for attribute trap
         ) ;progn
         (progn
            (princ "    XREF...skipping!")
         ) ;progn
      );end if not an Xref
      (setq BLKDATA (tblnext "BLOCK")) ;next block please
   ) ;end while loop of blk data available to edit
   (command ".undo" "end")
   (command ".regen")
   (PROMPT "\nDone... ")
   (princ)
)
(LAYERFIX)

bart

#6
@reimier setbylayer is een standaard autocad commando vanaf versie 2008
ook blocken worden hierdoor aangepast.


@ marcel
laytrans is voor jouw de snelste manier

stripmtext is een handige lisp als er met mtext is gewerk waarvan in de editor bijvoorbeeld de kleur is aangepast.
http://cadabyss.wordpress.com/2007/04/01/stripmtext-v309/
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

HofCAD

#7
Citaat van: marcelmaas op vr 10 07 2009, 11:23:27
Hi Hofcad,

Het commado laytrans heb ik wel eens gezien, maar weet niet hoe het werkt.
Kun je daarmee alle lagen in verschillende blocken in color ontrol, en linecontrol enz.. in bylayer zetten.?

groeten Marcel..

Beste Marcel,

Kijk naar bijv. http://cadecorner.blogspot.com/2006/08/layer-translator.html
of zie het boek van ir. Ronald Boeklagen Computer ondersteund Ontwerpen
in het hoofdstuk Lagenvertaler.

Met vriendelijke groet, HofCAD CSI.

PS Voor een Lisp die met een *.dws werkt zie de bijlage.
Zie ook http://www.cadsite.be/smf/index.php?topic=3517.0 voor een VBA sub.
ACADcadabra

marcelmaas

Hi Bart,

setbylayer plaatst inderdaad ook de blocken bylayer maar daarna kan ik nog steeds niet zonder in de blockeditor te gaan de blocklaag veranderen.
Ik hoop dat het met laytrans wel kan, ga vanavond eens in het boek lezen zoals Hofcad net laat weten.

Bedankt tot zover.

groeten Marcel..

marcelmaas

Hi,

Met layertrans in combinatie met setbylayer kom ik een heel eind.
Nou blijft het helaas nog wel zo dat de layers die in de blocken zitten niet te veranderen zijn zonder deze te exploderen.

Er zitten zoveel blocken in die je anders een voor een moet gaan exploderen en dan veranderen, soms nog een block in een block schiet niet echt op zo dus.

Vandaar mijn vraag:
Is er niet een vba of lsp routine te maken die dat zou kunnen?
Ik wil dus in een bouwkundige tekening alle lagen omzetten naar een laag "HCKP_bouwkundige onderlegger"
Daarin mogen best de blocken geexplodeerd worden als de bestandsgrootte daarmee maar niet enorm toeneemt!

groeten Marcel..

Reimer

Volgens mij is de lisproutine die ik heb aangedragen wel aan te passen zodat alle objecten in het block op een specifieke laag komen. Misschien zijn hier lisp-kenners die dat in een handomdraai kunnen. Ik moet altijd even zoeken hoe het ook al weer zit. De aanzet lijkt al gegeven met de regel:
;   (setq NEWLAYER (cons 8 "0"))  ;this will set 8 (layer) to 0

Reimer.

bart

Laytrans past alle elementen die in de tekening zitten aan ook blocken.


eerst zet je onder zetting de nodige vinkjes aan of uit

als je vervolgens in het linker venster een nieuwe laag aanmaak b.v mijnlaagje
deze selecteer je
vervolgens ga je naar het rechter venster en rechtermuisknop select all

klikken op map en dan translate en je houd een tekening over met alles op de laag mijn laag.
met de door jouw onder settings ingestelde voorwaarden.

een uitzondering hierop is in mtext die niet "bylayer" is
als dit in de tekening zit eerst de al eerder genoemde lisp stripmtext toepassen
Domme vragen bestaan niet.
Domme antwoorden wel.

m.vr. groet Bart

marcelmaas

Hi Bart,

Zoals jij het uitlegde had ik het al gedaan.
Maar op deze manier blijven de volgende dingen nog op kleur staan en niet op bylayer:
dim line color
ext line color
text color

Is er een manier om die ook makkelijk op bylayer te zetten?
Met setbylayer lukt het niet!

groeten Marcel..

roy_043

Beste Marcel,

Misschien werkt LayerFix3.lsp

Groet, Roy.

marcelmaas

Hi Roy,

Ook na jou Layerfix3.lsp blijven er bij enkele niet bij alle dus, de dimline, ext line en de textcolor nog op kleur staan en veranderen niet naar bylayer.

Zouden we in de lisp nog wat kunnen aanpassen zodat het helemaal gaat werken.??

groeten Marcel..

yoin