Разработка программного обеспеченияРефераты >> Программирование и компьютеры >> Разработка программного обеспечения
стороны
ENDIF
NEXT
tkont2:=kontur[2]
tkont4:=kontur[4]
kontur[2]=-10
kontur[4]=kontur[2]
//*******СОЗДАНИЕ ФАЙЛОВ-ФРАГМЕНТОВ************
IF kolkomp>0
SETPOS(MAXROW()-1,0)
?'Идет создание файла элементов на нижней стороне:'
dlin:=ALLTRIM(STR(kontur[3]-kontur[1]))
nn:=FILECR2D(kolkomp,'top',dlin)
??nn
ENDIF
kontur[2]=tkont2
kontur[4]=tkont4
FOR L:=1 TO st0 //обратный пересчет координат для приведения
массива габаритов в исходный вид
IF compon[L,2]='bot'
compon[L,5]=compon[L,5]+compon[L,3]+tlplat //для эл. Нижней
стороны
ENDIF
compon[l,4]=-compon[l,4]+kontur[3]-kontur[1]+compon[l,7]
compon[l,4]=compon[l,4]-dx
NEXT
RETURN
//***************************************************************
FUNCTION kwad(argum) //функция возведения в квадрат
newarg:=argum*argum
RETURN newarg
//****************************************************
//подключение файлов с вспомогательными программами
#include 'CH\ssear.ch'
#include 'CH\swind.ch'
#include 'CH\smenu.ch'
#include 'CH\sfilcr3d.ch'
#include 'CH\sfilcr2d.ch'
2. Файл swind.prg содержит в себе текст подпрограммы, организующей оконный интерфейс:
FUNCTION WIND(top,left,bot,rigt,zag,speed,centr) //создание окна
setboxgrow(speed) //переменные:верх,лево,низ,право,
wsetshadow(-1) //текст заголовка,скорость распахивания,центрирование
n:=wopen(top,left,bot,rigt,.F.)
wbox(0)
wsetshadow('N+/N') //текст заголовка,скорость распахивания,центрирование
n:=wopen(top,left,bot,rigt,.F.)
setboxgrow(0) //переменные:верх,лево,низ,право,
wbox(0)
IF centr<>nil
IF centr='centr'
WCENTER(.T.)
ENDIF
ENDIF
ZAGOL(zag)
RETURN n
FUNCTION WINCLOSE() //функция закрывающая окно
wclose()
wclose()
RETURN
FUNCTION RUSSLOW(st)
FOR k:=1 to len(russl)
st:=strtran(st,russl[k],russs[k])
NEXT
RETURN st
FUNCTION ZAGOL(L1) //делает надпись окна
l2:=len(L1)
l3:=maxcol()
l4:=(l3-l2)/2
@ -1,l4 SAY ' '+l1+' '
RETURN
3. Файл smenu.prg содержит в себе текст подпрограммы для организации на экране меню:
FUNCTION MENU(k,razm,res)
olcurs:=setcursor(0)
set wrap on //к-2-массив пунктов и подсказок,razm-длина 1-го пункта
olrow:=ROW() //res-начальный пункт
olcol:=COL()
ol:=setcolor('GR+/B,gr+/R')
dl:=len(k[1])
zmes:=0
FOR nom:=1 to dl
IF len(k[1,nom])/2=INT(len(k[1,nom])/2) .AND. razm/2=INT(razm/2)
k[1,nom]=center(k[1,nom],razm,' ',.T.)
ELSEIF len(k[1,nom])/2<>INT(len(k[1,nom])/2) .AND. razm/2<>INT(razm/2)
k[1,nom]=center(k[1,nom],razm,' ',.T.)
ELSE
k[1,nom]=center(k[1,nom],razm-1,' ',.T.)
ENDIF
zmes:=zmes+len(k[1,nom])
NEXT
ots:=maxcol()-zmes
ots:=ots/(dl+1)
col:=ots
ten:=''
tc:=ntocolor(screenattr(2,0),.T.)
tc:=substr(tc,at('/',tc)+1,7)
tc:=left(tc,len(tc)-1)
tn:=''
FOR nom:=1 to dl
ten:=padright(tn,len(k[1,nom]),chr(223))
k[2,nom]=center(k[2,nom],maxcol()+1,' ',.T.)
@ 1,col PROMPT k[1,nom] MESSAGE k[2,nom]
trow:=row()
tcol:=col()
dispout(chr(220),'n/'+tc) //г78_---
setpos(2,col()-len(k[1,nom]))
dispout(ten,'n/'+tc)
setpos(trow,tcol)
col:=col+len(k[1,nom])+ots
NEXT
SET MESSAGE TO maxrow() CENTER
MENU TO res
IF res<>0 //эффект нажатия кнопки
razm:=len(k[1,res])
dol:=0
FOR o:=1 to res
dol:=dol+len(k[1,o])
NEXT
dol:=dol-razm
setpos(2,1+ots+dol+(ots)*(res-1))
dispout(space(razm+1),tc+'/'+tc)
setpos(1,ots+dol+(ots)*(res-1))
dispout(' ',tc+'/'+tc)
dispout(k[1,res],'GR+/R')
inkey(0.1)
setpos(1,1+ots+dol+(ots)*(res-1))
dispout(space(razm+1),tc+'/'+tc)
setpos(1,ots+dol+(ots)*(res-1))
dispout(k[1,res],'GR+/R')
dispout(chr(220),'n/'+tc) //г78_---
setpos(2,col()-razm)
ten:=padright(tn,len(k[1,res]),chr(223))
dispout(ten,'n/'+tc)
inkey(0.1)
ENDIF
setcolor(ol)
setpos(olrow,olcol)
setcursor(olcurs)
RETURN res
4. Файл ssear.prg содержит в себе текст подпрограммы, которая выполняет весь анализ pdf файла, находит имена, габариты, и координаты всех элементов, содержащихся в этом pdf файле, а так-же ищет для всех вновь встреченных элементов их преобразовнные prt- файлы, берет оттуда габариты и помещает их в базу данных габаритов элементов (файл gabarits.dbf):
FUNCTION SEARCHCOMP(koef)
lastseek:=0
olsear:=setcolor('n/gb')
set cursor off
//******** Выделение элементов из pdf-файла и занесение их в массив compon[0,9] *****
// compon[n,1]-название элемента(строка)
// compon[n,2]-сторона установки('top' или 'bot')
// compon[n,3]-высота элемента(число)
// compon[n,4]-координата х-точки привязки(число)
// compon[n,5]-координата у-точки привязки(цифра)
// compon[n,6]-поворот элемента(число от 0 до 3)
// compon[n,7]-ширина элем.(число)
// compon[n,8]-длина элем.(число)
// compon[n,9]-обозначение элемента(строка)
tmz1:=SEAR()
setcolor(olsear)
RETURN tmz1
FUNCTION INSERTCOMP() //выделение параметров элементов из строки текста
USE 'gabarits.dbf' //открытие базы данных с размерами элементов
FOR L=1 TO LEN(compon) //выделение координат точки привязки
элемента
IF compon[L,1]=NIL
L=LEN(compon)
kolkomp:=L-1
ELSE
kolkomp:=len(compon)
str2=ALLTRIM(compon[l,4])
IF compon[l,2]<>'bot'
koltop=koltop+1
ELSEIF compon[l,2]='bot'
kolbot=kolbot+1
ENDIF
p1=At(' ',str2)
compon[l,4]=VAL(SUBSTR(str2,0,p1-1))*koef //выделение х точки привязки
str2=LTRIM(SUBSTR(str2,p1,30))
p1=At(' ',str2)
IF p1=0
p1=AT('}',str2)
ENDIF
compon[l,5]=VAL(SUBSTR(str2,0,p1-1))*koef //выделение у точки привязки
SCROLL(10,0,MAXROW(),MAXCOL(),1)
st0:=compon[l,1]+compon[l,2]+' X='+STR(compon[l,4])+' Y='+STR(compon[l,5])+' Ro='+str(compon[l,6])
gab:=GABARIT(compon[L,1],L) //вызов данных о размерах элемента
ENDIF
NEXT
USE //закрытие базы данных с размерами элементов
RETURN {kolkomp,koltop,kolbot}
//****************************************************
FUNCTION GABARIT(st0,nn) // определение габаритов элемента по его имени
PRIVATE naiden:=0,gabar:={0,0,0} //по заданному имени элемента
возвращает массив из 3 чисел /ширина/длина/высота/
WHILE naiden=0
LOCATE FOR name=st0+SPACE(10-LEN(st0))
IF FOUND()=.T.
gabar[1]:=SHIR*koef
gabar[2]:=DLIN*koef
IF compon[nn,3]=0
compon[nn,3]=Vis*koef
IF Vis=0
compon[nn,3]=90*koef
ENDIF