- Ограничение сверху (снизу) : предельные значения параметров по высоте элементов с верхней и нижней стороны платы (если высота элемента больше этих параметров, то элемент будет выделен красным цветом).
- Толщина платы : параметр, определяющий толщину платы (т.к. в PCAD нет понятия о толщине платы, то этот параметр определяется пользователем, по умолчанию = 0).
- Имя pdf - файла : в этом пункте пользователь может ввести название pdf- файла PCAD-а, который он хочет обработать с указанием пути к нему. Если при запуске программы был указано имя файла pdf, в виде ключа, то оно автоматически попадает в этот пункт. При наборе имени файла программа проверяет существование такого файла по указанному пути и, если он не существует, то пользователь не имеет возможности выйти из окна АТРИБУТЫ до тех пор, пока не введет правильное имя файла иначе остается возможность выхода по esc ,без сохранения всех изменений, сделанных в этом окне.
-КОМПОНОВКА - данный пункт не активен при выборе, до тех пор, пока не будет указанно правильное имя анализируемого pdf- файла в окне АТРИБУТЫ (о чем свидетельствует горящее посреди экрана сообщение “Не вижу pdf-файла”). Если pdf- файл доступен, то при выборе этого пункта меню начинается его анализ : за скоростью этого процесса пользователь может следить по процентной линии, отображаемой на экране.
Внизу экрана отображается общее количество найденных на плате элементов а так же сообщение о результате поиска контура платы на слое KONTUR.
После завершения анализа платы программа выбирает габариты элементов из файла gabarits.dbf по их названию, а если не находит нужного, то выполняет поиск pdf-файла элемента (для prt, обработанного pdifout.exe) в подкаталоге PDF (который должен находиться в том же каталоге что и программа). При успешном поиске она анализирует этот файл, находит в нем габариты элемента и заносит их в базу gabarits.dbf. Т.е. если на анализируемой плате есть элементы со стандартным названием, но не стандартными (обновленными) габаритами, то необходимо удалить gabarits.dbf, а в подкаталог PDF скопировать все .pdf-файлы элементов платы, и тогда габариты всех элементов платы просканируются и файл подготовится заново. (В существующей версии каждый элемент по размерам округляется до параллелограмма, т.е. шар например станет кубом. Для точной графической передачи элементов в трехмерном виде требуется создание специальной графической библиотеки в формате T-FLEX, чему будет посвящена следующая версия программы.) Габариты элемента помещаются в базу gabaritrs.dbf. Т.е. если элемент встречался хотя-бы раз в какой-либо плате, то во всех последующих платах данные на него будут браться из базы без повторной обработки его PRT-файла.
Если контур платы был обнаружен, то при создании файлов для T-FLEX в них передадутся габаритные размеры платы, со слоя KONTUR, округленные по форме до прямоугольника (существующая версия не обрабатывает сложные контуры). Если-же контур найден не был то программой создается собственный прямоугольный контур платы по условию: расстояние от края платы до граничных элементов равно 10 мм.
После этого предлагается меню компоновки:
- Выход (или ESC) — выход в предыдущее (главное) меню, если этот пункт выбирается первым, то при выходе происходит отказ от создания файлов платы в формате T-FLEX;
- Трехмерная компоновка — при выборе этого пункта начинается процесс создания файлов изображения платы в трехмерном виде в формат T-FLEX. На экране отображается количество элементов, созданных в файлах T-FLEX , соответственно на нижний и верхней стороне платы. При этом создаются 3-и файла в формате T-FLEX: *****top.frg-файл элементов верхней стороны платы, *****bot.frg-файл элементов нижней стороны платы, *****plt.frg-файл контура платы (символом ***** обозначаются пять первых символов каждого файла, они общие для всех трех файлов, которые пользователь редактирует по своему усмотрению в пункте Имя файла). После завершения автоматически предлагается меню компоновки и пользователь, по желанию, может либо создать какой-либо другой вид платы, либо выйти в главное меню;
- Имя файла — при выборе этого пункта курсор переходит в окно с именем файла и позволяет изменить его по своему усмотрению;
- Описание — при выборе этого пункта создается стандартный dbf- файл, содержащий перечень всех элементов анализируемой платы.
- Двумерная компоновка — при выборе этого пункта предлагается меню с различными двумерными видами платы : спереди (F), сзади (A), слева (L), справа (R). Под каждым пунктом нарисована плата и стрелкой показано направление взгляда на неё.
При выборе нужного пункта происходит создание файлов двумерного изображения, соответствующего вида, в формате T-FLEX (создается файл *****2d#.frg , где ***** - имя задаваемое пользователем при выборе пункта “имя”, а # - символ признак вида : F, A, L, R).
После этого вновь предлагается меню компоновки.
Алгоритм и описание программы.
Программа разработана и написана в СУБД CLIPPER 5.2 с использованием стандартных форматов файлов баз данных.
Учитывая объем программы и сложность алгоритма, использовались методы структурированного программирования и текст программы разбит на несколько файлов, в которых выделены основные функции, таким образом, чтобы их легко было редактировать во время отладки.
1.Основная программа содержится в файле dbfill.prg, которая в своей работе использует процедуры и функции, описанные во вспомогательных программных файлах.
На первом шаге выполнения программа считывает имя pdf-файла, заданного в командной строке, делает текущим каталог в котором она находится, создает переменные, необходимые в работе как её, так и другим подпрограммам:
PARAMETERS fname //считать параметры командной строки
PUBLIC higt,higtd,pnow:=0,filelen,exit:='',attr:='',desc,bufer:=SPACE(65000), ; compon[0,9],nomcomp:=0
PUBLIC koef:=0.1,str,stolb,parts,znak,kontur[0],verkont:=0,parametr
PUBLIC errfile[0] // массив сообщений об ошибках
PRIVATE razm,filend,not,L,p1,str2,colo
PUBLIC tlplat:=7 //толщина платы
set cursor off
cls
colo:=setcolor('g+/b')
tmppat:=dirname() //делает текущим каталог в котором наход.
pat:=LOWER(exename()) //исполняемый файл
c1:=RAT('tel',pat)
pat:=LEFT(pat,c1-2)
DIRCHANGE (pat)
Далее вызывается функция, активизирующая главное меню программы, которая, в зависимости от выбранного пункта, передает управление той или иной процедуре:
IF fname<>NIL
cls
setboxgrow(3)
wbox(0)
set date format 'dd:mm:yyyy'
//открытие основного окна
ZAGOL('ОБРАБОТКА PDF-ФАЙЛА '+DTOC(DATE()))
SETCOLOR('N/G')
wmenu:=wind(1,2,maxrow()-3,maxcol()-3,'Главное меню',5)
perv:=1
SHOWTIME(0,72,'G/G')
attrtmp:='DEMO '
higttmp:=30.00
higtdtmp:=30.00
exittmp:=' out'
GL() //выов фкнкции главного меню
WINCLOSE()
SETCOLOR(colo)
cls
ELSE
SETCOLOR(colo)
cls
@ 3,0 SAY 'Не введено имя pdf файла!'
ENDIF
SETCOLOR(colo)
DIRCHANGE (tmppat) //возвращает сохраненный текущий каталог
SETCOLOR('g/n')
@ MAXROW()-1,15 SAY 'Shurasoft 1997 Mihail & Alexandr Company'
SETCOLOR(colo) //возвращение текущего цвета при выходе
?' '
RETURN
//*****************************************************************
FUNCTION GL() //главное меню
CLEAR GETS
cglold:=setcolor('n/rg')
@ 11,5 CLEAR TO maxrow()-2,maxcol()-6
@ 11,5 TO maxrow()-2,maxcol()-6 DOUBLE
set cursor off
set scoreboard off
readexit(.F.)
set cursor on
set date format to 'dd.mm.yyyy'
setpos(12,(maxcol()/2)-4)
dispout(' АТРИБУТЫ ','g+/b')
@ 13,7 say "Имя комплекта................................" color ('W+/rg') get attrtmp color('rg+/rg,n/w')
@ 14,7 say "Ограничение по высоте сверху в mm............" color ('W+/rg') get higttmp picture '@B 999.99' color('gr+/rg,n/w')
@ 15,7 say "Ограничение по высоте снизу в mm............." color ('W+/rg') get higtdtmp picture '@B 999.99' color('gr+/rg,n/w')
setcolor(cglold)
set cursor off
mas:={{'Атрибуты', 'Компоновка', 'Выход'},{"Редактирование атрибутов файла", "Скомпоновать файл в формате T-FLEX", "Выход в DOS"}}
str:=MENU (mas,14,perv)
perv=str
str1:=10
IF str=1 //если выбран пункт АТРИБУТЫ- запустить меню , //позволяющее изменить атрибуты
set cursor on
read
set cursor off
ELSEIF str=2 //если выбран пункт КОМПОНОВКА- запустить //процедуру анализа pdf- файла
WSELECT(0)
SETCOLOR('n/bg')
PUBLIC pnow:=0,filelen,desc,bufer:=SPACE(65000),compon[0,9],nomcomp:=0
PUBLIC kontur[0],verkont:=0,parametr
PUBLIC errfile[0] // массив сообщений об ошибках
CREATDB()
wzapis:=wind(2,3,maxrow()-7,maxcol()-6,"Компоновка",5)
higt:=higttmp
higtd:=higtdtmp
attr:=alltrim(attrtmp)
CONT()
winclose()
wselect(wmenu)
ELSEIF str=0 //если не выбран не один пункт
perv=4
ENDIF
IF str<>3
wselect(wmenu)
GL()
ENDIF
RETURN
//*****************************************************************
FUNCTION CONT() //функция анализу\ирующая pdf- файл
PUBLIC kolkomp,koltop:=0,kolbot:=0,dx,dy //выделенме параметров эле-//ментов
//dx,dy -поправка на 0
desc:=FOPEN(fname)
filelen:=FSEEK(desc,0,2)
prflen:=filelen
FSEEK(desc,0,0)
CLS
?'ИДЕТ ПОИСК КОМПОНЕНТ...'
not:=SEARCHCOMP(@koef) //вызов функции которая выполняет всю работу по анализу текста pdf- айла , находит имена, обозначения, габариты всех элементов, находящихся на плате и упаковывает их в виде файла базы данных
kolkomp:=0
IF len(not)>0
kolkomp:=not[1]
koltop:=not[2]
kolbot:=not[3]
ENDIF
FCLOSE(desc) //закрытие pdf файла
//*****ОБРАБОТКА ПАРАМЕТРОВ У НАЙДЕННЫХ ЭЛЕМЕНТОВ****
IF kolkomp>0
AUTOKONTUR(kolkomp) //выделение контура платы по максимальным габаритам элементов на ней
ENDIF
//*******ВЫБОР ВИДА ПЛАТЫ******************************
exit:=alltrim(exittmp)
CLEAR GETS
st:=1
cls
DO WHILE (st<>4) //Предлагается меню, где можно выбрать направление взгляда на плату
cglold:=setcolor('n/rg')
@ 9,12 CLEAR TO 11,maxcol()-13
@ 9,12 TO 11,maxcol()-13 DOUBLE
set cursor off
set scoreboard off
readexit(.F.)
set cursor on
@ 10,14 say "Имя получаемоемого файла......" color ('w+/rg') get exittmp picture 'NNNNN' color('gr+/gr,n/w')
setpos(10,50)
dispout('.frg','w+/gr')
setcolor(cglold)
mas:={{'Двумерная','Трехмерная ','Имя файла','Выход'},{"Создание файла вида сбоку(двумерное изображение)","Создание файла вида со стороны(трехмерное изображение)",'Изменить имя получаемоемого файла','Выход в главное меню'}}