Програмата sketchps

Предназначение

Програмата sketchps служи за достъпно, непосредствено и качествено създаване на прости геометрични чертежи по зададени данни – координати и др. на съдържащите се в тях обекти. Описанието на чертежа, във вид на текстов файл, се подава на sketchps, която по него създава файл във формат PostScript. Предвижда се входният файл да се създава чрез програма, но описания на прости чертежи лесно могат да се правят и „на ръка“.

Създаването на чертеж чрез sketchps е достъпно, защото не зависи от език за програмиране, графична библиотека, операционна система, допълнителни програми и други елементи на работната среда. Нужно е само по един или друг начин (ръчно или програмно) да се подготви текстов файл с описание на чертежа. За възпроизвеждане на получения резултат е необходима програма-визуализатор на PostScript, каквито има различни свободно разпространяеми за всички операционни системи.

Създаването на чертеж е и непосредствено, в смисъл, че описанието му е прост текст, непосредствено представящ съответните, свързани с геометрични построения и с избор на работни параметри действия. Овладяването на използвания от програмата и описан по-долу език за описание на чертежи не изисква никакви допълнителни знания и е постижимо за броени минути.

Накрая, получаваният резултат е качествен, благодарение на използването на езика PostScript, а също и поради възможността геометричните размери в чертежа-резултат да се изменят, докато тези, свързани с представянето – дебелини на линии и размери на обозначения на точки — остават фиксирани.

Изходният за sketchps формат EPS (Encapsulated PostScript) е подходящ не само за показване на резултата върху екран, но и за вграждане като илюстрация в печатни документи. Евентуално мащабиране не нарушава качеството на изобразяване – няма пикселизиране или загуба на детайли – важна отлика от растерните образи. От друга страна, чрез превеждане в растерен вид (напр. PNG или GIF) резултатът може да се използва и за илюстрации в Web.

Sketchps може да се използва за онагледяване на данни за и на резултати от програми, боравещи с геометрични обекти – точки, отсечки и окръжности. Програмата дава възможност обекти от трите вида, вкл. съставни – начупени линии и многоъгълници, да се рисуват всеки с избран цвят и други атрибути. Други фигури могат да се представят чрез посочените. Координатната система, спрямо която се описват геометричните фигури и точки, може да се премества, завърта и мащабира.

Основна подбуждаща причина за създаването на sketchps беше желанието ми да предоставя на студентите от водения от мен курс по алгоритмична (изчислителна) геометрия във ФМИ на СУ „Кл. Охридски“, както и на учениците от съботната школа по информатика при Софийската математическа гимназия удобен инструмент за онагледяване на геометрична информация. Алтернативите на подобно средство – ръчно чертане, използване на графични програмни библиотеки (напр. OpenGL при студентите) и др. под. – по ред много основателни причини бяха и са неприемливи.


Начин на използване

Програмата чете текст с описания на геометрични обекти от стандартния вход и образува текст-резултат на стандартния изход, представляващ програма на езика PostScript, чието изпълнение поражда рисунка на обектите.

Пример: ако е налице файл one.sps с описания (за съдържанието на такъв файл вж. следващия раздел), можем да напишем следното на командния ред:

sketchps <one.sps >one.eps

(знаковете < и > са за пренасочване на стандартните вход и изход съответно от клавиатурата към посочения входен файл и от монитора към посочения файл-резултат). Получаваме изходен файл one.eps, който може да бъде подаден на програма като gs, gv, ggv, ghostview или друга подобна, така че да видим рисунката.

Името на входния файл може да бъде произволно избрано. По начало същото важи и за изходния, но е за препоръчване неговото име да завършва с .eps, което е стандартно за файлове във формат EPS.

В получавания файл-резултат, освен собствено рисунката, се съхранява и информация за границите ѝ – (невидима) правоъгълна рамка в чертожното пространство. Тази информация sketchps извлича и записва въз основа на всички координати, разстояния и дебелини на линии в рисунката. Тя се използва от разнообразни програми, които вмъкват рисунката в един или друг вид документ за правилното ѝ разполагане и евентуално мащабиране.

Разбира се, нищо не пречи входът на sketchps да постъпва не от файл, а от клавиатурата или по канал (pipe) от друга програма, а изходът да попада по канал в още някоя програма. Посоченият в примера начин на използване обаче е типичният.

Най-често входният текст за sketchps се образува като изход от някоя програма, но може да бъде написан и на ръка, с кой да е текстов редактор.

Когато sketchps установи грешка в подадения ѝ входен текст, тя изписва съобщение за това на т. нар. стандартен изход за грешки (stderr).

Програмата sketchps може да се използва и с параметри, което дава възможност получаваната в резултат на описанието рисунка да бъде преместена, уголемена/смалена или и едното и другото. Параметрите са един, два или четири и се тълкуват както следва.

x  y
Двете числа задават координати на точка в абсолютната КС (вж. следващия раздел). Рисунката се премества така, че центъра на рамката ѝ да съвпада с тази точка.
x1  y1  x2  y2
Четирите числа задават две двойки координати на точки: краища на диагонал на правоъгълник в абсолютната КС. Рисунката се премества и мащабира така, че центърът на рамката ѝ да съвпадне с този на зададения правоъгълник и рамката да се вписва възможно най-плътно в правоъгълника (но без да се изменя отношението на ширината и височината ѝ).
0
Подобно на предишния случай, като за целеви правоъгълник се взема лист с формат A4, „орязан“ с по малко от всяка страна.

Когато рисунката се подлага на някое от описаните преобразования, получаваният резултат може да се разминава със зададените в описанието ѝ координати и размери. В този случай за справка на потребителя даденото преобразование се записва в края на образувания изходен файл (във вид на коментарен ред на PostScript).

Посоченият начин за външно, независимо от описанието ѝ изменяне на рисунката може да е от полза, когато нейното местоположение или размер, каквито тя има по начало, я правят неудобна за използване. Например с параметрично повикване можем да осигурим подходящо голям размер и удобно разполагане на рисунката за разглеждане на съдържанието ѝ, като самата рисунка (нейното описание) запазва избраните при създаването ѝ размери и разположение.


Рисуване на геометрични обекти и формат на входния файл

Входният текст за sketchps представлява последователност от редове, всеки съдържащ команда или (числови) данни за някакво построение. Празните редове са без значение.

Командите биват два вида. Едни служат за построяване на геометрични фигури и точки, а други – за избор на чертожни параметри. Съвкупността от последните задава графичния контекст за геометричните построения. Всяка команда се разполага на отделен ред.

Всяка команда се съпровожда от съответните, нужни за изпълнението ѝ данни. Данните на построителна команда я следват на отделни редове. Понеже с една команда може да се задават произволен брой обекти, броят на редовете с данни варира и се избира съответно. При контекстните команди данните имат фиксиран обем и се записват на същия ред след командата.

За елементите на графичния контекст са в сила следните подразбирания:

Всяко от изброените може да се променя с подходяща команда.

Подразбиращата се координатна система наричаме абсолютна, тъй като тя има и следния смисъл. Посочването на ново начало, мащаб или завъртане при избор на нова текуща КС става чрез отнасяне на съответния параметър към абсолютната КС (вж. по-долу командите move, unit и rotate в това отношение). И така, абсолютната координатна система е и текуща по подразбиране, а всяка друга текуща КС се задава спрямо абсолютната.

Следва описание на командите, заедно с необходимите за всяка от тях данни.

points
Построяване на точки. Координатите на точките се разполагат на следващите редове, по една точка на ред
polyline
Построяване на начупена линия. Координатите на върховете на начупената линия се разполагат на следващите редове, по един връх на ред
polygon
Построяване на многоъгълник. Данните за тази команда са както за polyline, но се построява затворена линия
polygon*
Подобно на polygon, но построява запълнен многоъгълник. Дебелината на линия (width) е без значение
lines
Построяване на отсечки. На всеки ред с данни се задава по една отсечка, т. е. две двойки координати на крайните точки
circles
Построяване на окръжности. На всеки ред с данни се задава по една окръжност: координати на центъра и радиус
circles*
Подобно на circles, но построява кръгове (запълнени фигури). Дебелината на линия (width) е без значение
move
Преместване на координатната система. Избира се нова КС чрез преместване на текущата успоредно на координатните ѝ оси. (Посоката на осите и мащабът не се променят.) Параметри на командата са двойка числа, задаващи точка, която става начало на новата координатна система. Самата точка се смята зададена в абсолютната КС. Всички координати в следващите построителни команди се тълкуват спрямо новата координатна система
unit
Избор на мерна единица – задаване на мащаб. (Разположението на КС – началото и посоката на координатните оси – не се променя.) Като параметър на командата се задава число в мм. Всички координати и дължини в по-сетнешните построителни команди се тълкуват спрямо новата мерна единица. Това не се отнася за дебелината на линиите, която се задава винаги в абсолютен смисъл, независимо от мерната единица – вж. width по-долу
rotate
Завъртане на координатната система. Избира се нова координатна система чрез завъртане на текущата на зададен ъгъл около началото ѝ. Ъгълът се задава в градуси и е мярка на ъгловото отместване на абсцисата спрямо положението ѝ в абсолютната КС. Положителни стойности отговарят на въртене в противоположна на часовниковата стрелка посока. Всички координати в следващите построителни команди се тълкуват спрямо новата координатна система
colour
Избор на цвят. Като параметър на командата могат да се посочат едно или три числа, всяко в интервала [0,1]. Ако е едно, тълкува се като степен на сивото, от 0 за черно до 1 за бяло. Ако са три, те по подобен начин задават степени на участие на основните цветове червен, зелен и син в получавания цвят.
Цветът може да се зададе и чрез име; допуска се кое да е от имената, както следва:
black silver gray white
maroon red purple fuchsia
green lime olive yellow
navy blue teal aqua
Всички точки, отсечки и т. н., зададени оттук насетне, се рисуват в избрания цвят
width
Избор на дебелина на линията, с която да се чертаят впоследствие описаните геометрични фигури. Като параметър на командата се задава число в мм.

Данните за командите биват цели числа или десетични дроби. Във втория случай за начало на дробната част може да се използва както точка, така и запетая.

Ако на някой ред се среща, в началото или на края на реда или с поне по един интервал от двете му страни, знакът (минус), той и всичко до края на реда се пропускат при четене от sketchps. Това дава възможност при нужда да се записват пояснителни бележки (вж. примерите тук). Пропуска се и остатъкът от съдържанието на реда след прочетена команда или данни, така че там също може да се помества такъв текст.


Допълнителни бележки

Рисуването на точки става по фиксирано избран в програмата начин: малък бял кръг на фона на по-голям концентричен кръг. Цветът на последния се влияе, както и при останалите обекти, от избора на цвят с colour, но вътрешният кръг винаги е бял. Също така, размерът на двата кръга е фиксиран – не зависи от избора на мащаб – макар че местоположението на точката (нейните координати) се влияе от него.

За точките е предвидена и следната особеност: всички те, независимо къде сред другите обекти са описани, се поставят на чертежа така, че да припокриват каквото евентуално се намира на същото място, дори (части от) по-късно срещаните във входния текст обекти. Всички останали геометрични обекти се припокриват според реда на описването им – по-късно описаните се рисуват върху предишните.

Въпреки че точките се поставят накрая, те се рисуват според цветовия и мащабен контекст от мястото на описването им.

Използването на програмата с параметри може, както видяхме, да изменя мащаба на рисунката, но и това, както изричното сменяне на мащаба в графичния контекст с командата unit, не влияе нито на дебелините на линии, нито на размера, в който се изобразяват точки. Първите се задават изключително с командата width, а второто има отнапред избрана, неизменна стойност.

Ако пояснителните бележки във входния файл използват знакове извън множеството ascii (а кирилицата не е ascii!), този файл трябва да се съхранява с използване на кодиране UTF-8. Ако използвате само латиница, няма значение с какво кодиране записвате. Добре развитите текстови редактори позволяват да се направи избор на вида кодиране при записване на текст – най-добре използвайте някой такъв.


… и самата програма

Оттук може да вземете изпълними форми на програмата за GNU/Linux и за MS Windows

Всички команди, както и споменатите особености във връзка с поставянето на точки в чертежа, са илюстрирани в примерите, дадени тук.

За тези, които се интересуват от реализацията на програмата: тя е написана на езика D и текстът ѝ може да бъде взет оттук. С тази бележка давам право на всеки да го ползва за каквото намери за добре. Ако видоизменяте програмата по някакъв начин, моля уведомете ме и разпространявайте вашия вариант под различно от sketchps име.


Бойко Банчев