C# - PLplot - 출력 모음(Family File Output)
PLplot은 "begin of page"와 "end of page" 사이에 drawing을 하게 됩니다.
{
pl.bop();
// ... drawing
pl.eop();
}
그런데 bop, eop를 연속으로 호출하면,
{
pl.bop();
// ... drawing
pl.eop();
}
{
pl.bop();
// ... drawing
pl.eop();
}
다음과 같은 식의 오류가 발생합니다.
*** PLPLOT WARNING ***
All pages after the first skipped because family file output not specified.
즉, PLplot은 page를 하나의 canvas로 다루는데 기본적으로는 Page가 하나밖에 주어지지 않으므로 두 번째의 bop 호출에서 실패하는 것입니다. 그렇다면 다중 페이지를 어떻게 제공할 수 있을까요? 이에 대해서는 PLplot 문서에 찾아볼 수 있습니다.
Chapter 3. Advanced Use of PLplot - Family File Output
; http://www.ccp4.ac.uk/dist/checkout/plplot-5.11.0/doc/docbook/src/output-devices.html#familying
그러니까, 페이지 제공 개념이 그냥 단순히 파일 출력에 대한 번호를 설정하는 식입니다. 코드로 보면, 파일 명에 번호가 출력할 수 있는 여지를 주고,
using (var pl = new PLStream())
{
pl.sdev("png");
pl.sfnam("image%n.png");
}
제공할 페이지 수를 지정하는데, 반드시 init 호출 이전에 해야 합니다.
using (var pl = new PLStream())
{
pl.sdev("png");
pl.sfnam("image%n.png");
pl.sfam(1, 1, 2); // 첫 번째 인자 - family output enable
// 두 번째 인자 - 첫 번째 페이지의 번호
// 세 번째 인자 - 마지막 페이지의 번호
pl.init();
}
이후, bop/eop를 두 번 하게 되면 각각의 페이지 출력에 대해 image1.png, image2.png가 됩니다. 대충 감이 오시죠? ^^
(
이 글의 예제 코드는 github - PLplotGridmap에서 제공합니다.)
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]