Playout: concept print en layout beheer
Playout wordt geactiveerd om een nieuwe viewport in een nieuwe layout te maken in AutoCAD.
{{{ Je zou een layout kunnen vergelijken met een een te printen blad papier en een viewport is vergelijkbaar met een vlak op dat blad geplaatste LCD-TV, verbonden aan een camera die op de een of andere manier op het (2D of 3D) CAD-model gericht staat. AutoCAD maakt gebruik van speciale printers die afgeleid zijn van systeemprinters. Dit is nodig omdat systeemprinters door beperkingen van de Windowsdrivers bijvoorbeeld geen lijndikten ondersteunen. De afgeleide printer drivers kunnen aangemaakt worden met de plottermanager waarna de printers als *.pc3 bestand worden weggeschreven naar de harde schijf. Van een systeemprinter kunnen varianten gemaakt worden, bijv. een variant voor liggend, een voor staand, een voor liggend zwart-wit, een voor staand kleur, een voor A3 kleur, enzovoorts. Playout koppelt zo'n printer aan een nieuwe layout en zorgt ervoor dat de marges optimaal ingesteld kunnen worden. Playout raadpleegt bestand CadchupConf in de map C:\cadchup_custom voor beschikbare printers. }}}
Ontwikkeling
Globaal wat er gebeuren moet, wat het globale principe is:
playout1.py moet het volgende doen:
- Alle log files (.log) in de tmp-map deleten.
Na starten een popup met een genummerde listing van de printers uit CadchupConf (zit in zoekpad van acad en wordt gevonden als het gestart wordt vanuit acad, zie voorbeeld van bestand hieronder)
Gebruikers kiest een volgnummer, laten we zeggen 2, dat levert de volgende string op: Plotter "HP Business InkJet 2200" DJ2200.pc3 "A4 (210 x 297 mm)" "A4" M L N L 1:1 0.0,0.0 Y . Y N N N N Y N 0.0 10.0 3.0 0.0
- Gebruiker geeft naam op voor layout zonder spaties (of py moet spaties omzetten naar _): "Enter new layout name:"
- playout1.py gaat aan de slag en schrijft resultaten weg naar playout1.scr in tmp map
- playout1.py stopt en
acad kan verder met verwerken van playout1.scr en genereert op basis daarvan enkele waarden die als input voor playout2.py dienen
playout2.py moet het volgende doen:
- Enkele waarden moeten uit een logbestand gelezen worden.
- Op basis daarvan moeten er niewe waarden berekend worden
- Dit moet verwerkt worden tot een scriptfile
acad voert ook dit bestand playout2.scr uit
Wat moet playout1.py inlezen?
Opmerking: de tweede routine, playout2.py, gebruikt deze waarden ook.
Uit CadchupConf:
vpmarg (waarde viewport_margin)
titlehg (title_height)
psizeloc (size_location)
frlay (frame_layer)
frcol (frame_color)
vplay (viewport_layer)
vpcol (viewport_color)
vpplot (viewport_printable)
tmp (locatie waar playout.scr weggeschreven moet worden)
dello (delete_layout)
Na het kiezen van een plotter, bijv. Plotter "HP Business InkJet 2200" DJ2200.pc3 "A4 (210 x 297 mm)" "A4" M L N L 1:1 0.0,0.0 Y . Y N N N N Y N 0.0 10.0 3.0 0.0 moet de string ontleed worden en variabelen als volgt toegekend worden:
pldes HP Business InkJet 2200
pldev DJ2200.pc3
plset A4 (210 x 297 mm)
plform A4
plunits M
plorien L
plupside N
plarea L
plscale 1:1
ploffset 0.0,0.0
plstyle Y
plsttab .
plweight Y
plscweight N
plpsfirst N
plpshide N
plfile N
plsave Y
plproceed N
margle 0.0
margri 10.0
margto 3.0
margbo 0.0
en tot slot:
loname toekennen aan de gekozen layoutnaam
Output playout1.py, inhoud van playout1.scr
Opmerking: acad ziet in een script een spatie en einde regel als [enter]. Om die spaties zichtbaar te maken zijn ze hier vervangen door ; maar in de output moeten dit dus spaties of einde regels zijn. playout1.scr wordt:
regenmode;1
cmddia;0
filedia;0
insunits;0
cmdecho;1
layout;n;loname;layout;s;loname
-plot;yes;loname;pldev;plset;plunits;plorien;plupside;plarea;plscale;ploffset;plstyle;plsttab;plweight;plscweight;plpsfirst;plpshide;plfile;plsave;plproceed -layout;d; limmin limmax
AutoCAD heeft op basis van vorige script twee coordinaten naar de betreffende *.log file in {{{ blablabla... Command: -layout Enter layout option [Copy/Delete/New/Template/Rename/SAveas/Set/?] <set>: ? Active Layouts: Layout: loname Block name: *Paper_Space. Layout: nieuwe_layout Block name: *Paper_Space1. Layout: Page 1 Block name: *Paper_Space0. Command: limmin LIMMIN = -17.7938,-5.7937 (read only) Cannot set LIMMIN when paper margins or background are displayed. Command: limmax LIMMAX = 261.6062,210.1062 (read only) Cannot set LIMMAX when paper margins or background are displayed. }}} Allereerst moet Python slim de juiste log-file achterhalen. Met NTFS is dit niet zo moeilijk, maar bij FAT(32) verandert de tijd niet (atime, ctime en mtime). Daarom is het een goed idee alle overtollige log-bestanden te verwijderen voordat playout gestart wordt. Er blijven dan zoveel logfiles over als dat er tekeningen open staan. Die logfiles moeten ge-tail-d worden en de juiste - als de onderste string klopt - als uitgangsbasis genomen worden voor info-input. LIMMIN en LIMMAX zijn de hoekcoordinaten van de nieuwe layout. Python moet van onder starten met zoeken naar een regel die begint met LIMMIN en LIMMAX en de x- en y-waarden van de coordinaten toewijzen aan variabelen: sheetlimits Wat moet playout2.py inlezen?
limbx (bottom x-waarde limmin)
limby (bottom y-waarde limmin)
limux (upper x-waarde limmax)
limuy (upper y-waarde limmax)
verder: margins
margx = absolute waarde limbx
margy = absolute waarde limby
frame
frambx = margle
framby = margbo
framux = (- limux margx margri)
framuy = (- limuy margy margto)
papersize
psizex = (+ framux X-waarde_psizeloc)
psizey = (+ framuy Y-waarde_psizeloc)
viewport
vpbx = (+ frambx vpmarg)
vpby = (+ framby vpmarg titlehg)
vpux = (- framux vpmarg)
vpuy = (- framuy vpmarg)
Output playout2.py, inhoud van playout2.scr
- attdia;1
-layer;m;frlay;c;frcol;;
insert;title;framux,framby;1;1;0
insert;plform;psizex,psizey;1;1;0 regenmode;1
zoom;w;limbx,limby;limux,limuy
pline;framux,framby;framux,framuy;frambx,framuy;frambx,framby;c
-layer;m;vplay;c;vpcol;;p;vpplot;vplay;
mview;vpux,vpby;vpbx,vpuy
layout;d;dello