Weet iemand of er ergens een lisp of vba bestaat om in 1 keer een purge all, ook de overbodige layouts,
en save te doen.
Kan iemand mij helpen?
Wat zijn volgens jou "overbodige layouts"? Aan welke eigenschappen zou een lisproutine deze kunnen herkennen?
Reimer
Citaat van: Reimer op wo 30 03 2011, 16:51:40
Wat zijn volgens jou "overbodige layouts"? Aan welke eigenschappen zou een lisproutine deze kunnen herkennen?
Reimer
Beste Reimer,
Met overbodige layouts bedoel ik layouts waarin geen viewports in voorkomen.
Die dus niet van nut zijn in de tekening.
Rudy
Beste Rudy,
ik kan je wel op weg helpen met een purge en save routine, deze ziet er dan zo uit:
(defun c:pus ()
(command "-purge" "all" "*" "no")
(command "-purge" "regapps" "*" "no")
(command "qsave")
)
De tekst achter c: is de commandonaam, deze kun je naar behoefte aanpassen. Vervolgens wordt eerst Purge-all uitgevoerd en daarna nog een keer purge-regapps. Ten slotte wordt Qsave uitgevoerd.
Zet deze tekst in een txt-bestand en sla deze op als een *.lsp bestand (bv. PUS.lsp)
Ik hoop dat je hier al iets mee geholpen bent.
Reimer
Citaat van: Reimer op vr 01 04 2011, 09:29:52
Beste Rudy,
ik kan je wel op weg helpen met een purge en save routine, deze ziet er dan zo uit:
(defun c:pus ()
(command "-purge" "all" "*" "no")
(command "-purge" "regapps" "*" "no")
(command "qsave")
)
De tekst achter c: is de commandonaam, deze kun je naar behoefte aanpassen. Vervolgens wordt eerst Purge-all uitgevoerd en daarna nog een keer purge-regapps. Ten slotte wordt Qsave uitgevoerd.
Zet deze tekst in een txt-bestand en sla deze op als een *.lsp bestand (bv. PUS.lsp)
Ik hoop dat je hier al iets mee geholpen bent.
Reimer
Zelf heb ik hier een scriptje voor, zodat ik eventueel ook een grote groep tekeningen in 1x kan purgen en saven.
;PURGE 14-12-2009
;qsave toegevoegd 22-12-2009
-PURGE
A
*
N
-PURGE
R
*
N
qsave
Zet deze tekst in een txt-bestand en sla deze op als een *.scr bestand (bv. PURGE_REGAPPS.scr)
Sleep dit *.scr bestand je tekening in, waarna de acties worden uitgevoerd.
Richard
Beste reimer,
PUS helpt al een beetje, alles blijkt echter nog niet uit de tekening.
Ook blijven de ongebruikte layouts in de tekening zitten.
Is hier misschien een oplossing voor.
Aan Richard, hoe doe je het om met dit script een grote groep tekeningen te purgen?
Je moet dit script toch in elke tekening apart inlezen?
mvg
Rudy
Citaat van: Rudy op vr 01 04 2011, 10:42:45
Je moet dit script toch in elke tekening apart inlezen?
Daar hebben we Babe voor die je op deze site kunt downloaden:
http://www.cadsite.be/lisp/babe.php
Kijk ook even naar: http://www.cadsite.be/smf/index.php?topic=2811.0
Of kijk eens naar het progje SCRIPTPRO 2.0!
http://www.autocadexchange.com/U/ACE/Content/TipsTricks/tabid/223/ArticleType/ArticleView/ArticleID/2140/Default.aspx
Ik heb in mijn archieven nog een purge&save gevonden van een ex-collega.
Er is echter iets mis mee.
Wanneer het programma gebruikt wordt werkt copy past niet meer tot autocad opnieuw gestart wordt.
Ook worden de lege layouts niet gedeleted.
Ik heb de rourine bijgevoegd, kan iemand deze eventueel verbeteren want zelf kan ik niet overweg met lisp.
mvg
Rudy
Met het commando "_layout" ->> "Delete" kun je een naam opgeven van de layout die verwijdert moet worden.
Dit kun je ook in een macro of lisp verwerken.
Ook kun je met de action recorder commando's opnemen en op andere tekeningen afspelen.
Het probleem met copy&paste wordt waarschijnlijk veroorzaakt door deze regel:
(vlax-for item regapps (vl-catch-all-apply 'vla-delete (list item)))
Verwijder deze regel (of plaats een ; aan het begin) en probeer het opnieuw.
Citaat van: roy_043 op vr 01 04 2011, 14:41:43
Het probleem met copy&paste wordt waarschijnlijk veroorzaakt door deze regel:
(vlax-for item regapps (vl-catch-all-apply 'vla-delete (list item)))
Verwijder deze regel (of plaats een ; aan het begin) en probeer het opnieuw.
Neen, hiermee is het probleem niet opgelost :cry:
Geachte Lezers,
Denkt er ook nog iemand aan het commando WBLOCK en -WBLOCK? :mrgreen:
Met vriendelijke groet, HofCAD CSI.
PS1 Natuurlijk worden daarbij de overbodige Layouts niet verwijderd.
PS2 Je kan nooit alle Layouts verwijderen.
PS3 In je nieuwe tekening kunnen ook bij default Layouts met een Viewport aangemaakt worden.
Beste allen,
Ik denk dat ik gevonden heb wat ik zoek op:
http://cadtips.cadalyst.com/purge/purge-audit-and-save-tool
er is echter een probleem, de geldige layouts waar je niet actief in bent worden ook verwijderd.
Aangezien ik dus geen ervaring heb met lisp zou ik willen vragen of iemand deze routine zou willen bekijken en mij uitleggen wat er in feite gebeurt wanneer ik deze gebruik.
Ik heb de lisp in bijlage geplaatst.
Dank bij voorbaat.
Citaat van: Rudy op za 02 04 2011, 13:09:56
er is echter een probleem, de geldige layouts waar je niet actief in bent worden ook verwijderd.
Aangezien ik dus geen ervaring heb met lisp zou ik willen vragen of iemand deze routine zou willen bekijken en mij uitleggen wat er in feite gebeurt wanneer ik deze gebruik.
Beste Rudy,
In Pas.lsp staat de regel: (vla-get-blocks oDOC)
Via deze regel worden alle blockdefinities opgehaald.
Maar Modelspace en de Layouts zijn ook blocks.
(defun c:AllBlkNames (/ oDOC)
(vl-load-com)
(setq oDOC
(vla-get-Blocks
(vla-get-activedocument
(vlax-get-acad-object)
)
)
)
(vlax-for item oDOC
(princ (strcat "\nBlock Name: "
(vla-get-Name item)
)
)
)
(princ)
)
Definitie van Modelspace en definitie van één Layout(zeker niet het actieve) en
definities van ingevoegde blocks kunnen nooit verwijderd(gepurged) worden.
Omdat AutoCAD alleen deze voorwaarden stelt en je programma verder
niet discrimineert worden alle andere Layouts verwijderd.
Met vriendelijke groet, HofCAD CSI.
PS1 Ik vind dat je nog steeds geen antwoord heb gegeven op de vraag van Reimer:
Wat zijn volgens jou "overbodige layouts"? Aan welke eigenschappen zou een lisproutine deze kunnen herkennen?
Dit gezien door mijn opmerking:
In je nieuwe tekening kunnen ook bij default Layouts met een Viewport aangemaakt worden.
(kijk eens naar mijn vorig bericht)
PS2 Om bovenstaand programma geen listing te krijgen van Modelspace en Layouts (Block Name: *Model_Space
Block Name: *Paper_Space) kan je het als onderstaand veranderen:
(defun c:BlkNames1 (/ oDOC BlkName)
(vl-load-com)
(setq oDOC
(vla-get-Blocks
(vla-get-activedocument
(vlax-get-acad-object)
)
)
)
(vlax-for item oDOC
(setq BlkName (vla-get-Name item))
(or (wcmatch BlkName "`**_Space*")
(princ (strcat "\nBlock Name: "
BlkName
)
)
)
)
(princ)
)
of ook
(defun c:BlkNames2 (/ oDOC BlkName)
(vl-load-com)
(setq oDOC
(vla-get-Blocks
(vla-get-activedocument
(vlax-get-acad-object)
)
)
)
(vlax-for item oDOC
(setq BlkName (vla-get-Name item))
(and (/= "*Model_Space" (substr BlkName 1 12))
(/= "*Paper_Space" (substr BlkName 1 12))
(princ (strcat "\nBlock Name: "
BlkName
)
)
)
)
(princ)
)
Beste HofCad,
Ik denk dat ik het begrepen heb.
Als ik je uitleg zo een beetje volg, is het dus zo goed als onmogelijk om "lege" layouts (zonder een viewport)
uit de tekening te verwijderen via een lisp.
Ik zal de overbodige layouts, zoals voorheen manueel verwijderen.
Hiermee beschouw ik dit probleem als afgesloten.
Dank aan allen voor de hulp!
PS: HofCad
Zou je bijgevoegde lisp ook nog eens kunnen bekijken.
Wanneer ik deze toepas werkt copy paste niet meer en de inbreng van roy_043 (waarvoor dank) bracht ook geen soelaas.
Citaat van: Rudy op zo 03 04 2011, 10:03:57
Beste HofCad,
Ik denk dat ik het begrepen heb. :nigoe:
Als ik je uitleg zo een beetje volg, is het dus zo goed als onmogelijk om "lege" layouts (zonder een viewport)
uit de tekening te verwijderen via een lisp.
Beste Rudy,
Bovenstaande heb ik nooit geschreven en dus daar sta ik ook niet achter. :twisted: :twisted: :twisted:
Ik heb alleen bedoeld, dat je nog steeds geen echt goed criterium geeft. :shock: :shock: :shock:
Layouts met een viewport kunnen overbodig zijn, en layouts kunnen
zonder viewports nodig zijn.
In layouts kan een viewport bewust of onbewust aangemaakt zijn.
(Bijv.: door een bepaalde template of via OPTIONS->Display->'Create Viewport in New Layouts')
Een goed criterium zou kunnen zijn: In mijn DWG's beginnen alle layouts namen met de prefix 'Rudy'
en je kan mijn DWG's herkennen doordat 'Author' altijd 'Rudy' is.
Of in mijn DWG's met 'Author' is 'Rudy', zit er in een onnodige layout geen titelblok met de naam 'Rudy'.
Waarschuwing: DelLayouts kijkt alleen of er geen viewports zijn.
(defun c:DelLayouts (/ ~Tm LayoutsLst i Layout)
(Setq ~Tm (getvar "TILEMODE"))
(setvar "TILEMODE" 1)
(setq LayoutsLst (layoutlist))
(setq i 0)
(repeat (length LayoutsLst)
(setq Layout (nth i LayoutsLst))
(if (< (SSlength
(ssget "_X" (list '(0 . "VIEWPORT") (cons 410 Layout)))
)
2
)
(command "_.LAYOUT" "_D" Layout)
)
(setq i (1+ i))
)
(setvar "TILEMODE" ~Tm)
(princ)
)
Met vriendelijke groet, HofCAD CSI.
PS Vandaag is het dag van 'De Ronde' of de Hoofdmis.
Beste HofCad,
Wreed bedankt, dit is wat ik bedoelde. :vreegoe:
Deze opdracht zou nu moeten verwerkt worden in de lisp Purge&Save.lsp of PAS.lsp die ik eerder postte.
In Purge&Save.lsp zit echter een foutje, copy paste werkt niet meer na uitvoering hiervan.
Zou je dit nog eens willen bekijken? :roll:
Indien dit zou lukken ben ik je eeuwig dankbaar! :D
Met vriendelijk groet,
Rudy
Beste Rudy,
Het is van het programma Purge&Save dom :nigoe: om alle Named Object Dictionaries
te verwijderen met de regel: (PurgeAllNamedObjectDictionaries)
Bij de volgende Dictionaries wordt o.a. een poging gedaan tot verwijdering:
"ACAD_COLOR", "ACAD_GROUP", "ACAD_LAYOUT", "ACAD_MATERIAL", "ACAD_MLEADERSTYLE",
"ACAD_MLINESTYLE", "ACAD_PLOTSETTINGS", "ACAD_PLOTSTYLENAME", "ACAD_SCALELIST",
"ACAD_TABLESTYLE", "ACAD_VISUALSTYLE" en "AcDbVariableDictionary".
Na Purge&Save hou je daarvan enkel de volgende Dictionaries over:
"ACAD_GROUP", "ACAD_LAYOUT", "ACAD_MLINESTYLE", "ACAD_PLOTSETTINGS" en
"ACAD_PLOTSTYLENAME".
Na verwijdering van ACAD_TABLESTYLE kun je niet een Copy Paste uitvoeren,
en bij het commando TABLESTYLE loopt AutoCAD dan vast.
Met vriendelijke groet, HofCAD CSI.
PS Zie http://www.cadsite.be/smf/index.php?PHPSESSID=6fd0093f91c9aba6218935341889d8b7&topic=4806.0
PS Zie http://www.cadsite.be/smf/index.php?topic=4806.msg25429#msg25429
Beste HofCad,
Ik heb de lisp juist getest en dit is wat ik zocht. :lol:
Nogmaals dank voor de hulp en de nuttige informatie. :vreegoe:
Met vriendelijke groeten,
Rudy
Citaat van: Rudy op di 05 04 2011, 09:05:24
Beste HofCad,
Ik heb de lisp juist getest en dit is wat ik zocht. :lol:
Ik ben toch nog een probleempje tegen gekomen bij het uitvoeren van de lisp RudyPurge&Save (zie boven)
Namelijk het volgende:
; error: bad argument type: lselsetp nil
Dit komt voor wanneer ik een tekening purge zonder layouts met een viewport. Is dit mogelijk de reden?
Is er hier een oplossing voor ?
Het zou zo moeten zijn dat wanneer er geen layouts met viewport ontdekt worden, dat de routine dan gewoon afgewerkt wordt.